ai-content-drop
このMCPでできること
Generates AI images, videos, UGC clips, avatars, and finished ads, while organizing creative assets and campaign boards.
ツール
入力スキーマ
{'type': 'object', 'required': ['canvas_id', 'label'], 'properties': {'label': {'type': 'string', 'description': "The frame's label, up to 200 characters."}, 'width': {'type': 'number', 'description': 'Optional width in pixels; defaults to 480.'}, 'height': {'type': 'number', 'description': 'Optional height in pixels; defaults to 360.'}, 'position': {'type': 'object', 'required': ['x', 'y'], 'properties': {'x': {'type': 'number'}, 'y': {'type': 'number'}}, 'description': 'Optional { x, y } in board pixels. When omitted the server places the card in the first free grid cell.'}, 'revision': {'type': 'number', 'description': 'The board revision this change is based on (from the last board you saw). Optional: when omitted the tool reads the current one first.'}, 'canvas_id': {'type': 'string', 'description': 'The board id, from list_canvases or create_canvas.'}}}
出力スキーマ
{'type': 'object', 'required': ['canvas', 'card', 'next_step'], 'properties': {'card': {'type': ['object', 'null'], 'required': ['id', 'type', 'position', 'data'], 'properties': {'id': {'type': 'string'}, 'data': {'description': 'Per type. text: { text, title?, color? }. media: { url, kind, title?, caption?, source? }. generation: { model?, prompt?, kind, status (draft | queued | generating | done | failed), job_id?, media_url?, credits_used?, error? }. frame: { label, width, height }. task: { taskId }.'}, 'type': {'enum': ['text', 'media', 'generation', 'frame', 'task', 'legacy'], 'type': 'string'}, 'width': {'type': 'number'}, 'height': {'type': 'number'}, 'position': {'type': 'object', 'required': ['x', 'y'], 'properties': {'x': {'type': 'number'}, 'y': {'type': 'number'}}}}}, 'canvas': {'type': 'object', 'required': ['id', 'name', 'revision', 'card_count', 'updated_at', 'link', 'cards', 'edges'], 'properties': {'id': {'type': 'string'}, 'link': {'type': 'string', 'description': "The board's page on AI Content Drop."}, 'name': {'type': 'string'}, 'cards': {'type': 'array', 'items': {'type': 'object', 'required': ['id', 'type', 'position', 'data'], 'properties': {'id': {'type': 'string'}, 'data': {'description': 'Per type. text: { text, title?, color? }. media: { url, kind, title?, caption?, source? }. generation: { model?, prompt?, kind, status (draft | queued | generating | done | failed), job_id?, media_url?, credits_used?, error? }. frame: { label, width, height }. task: { taskId }.'}, 'type': {'enum': ['text', 'media', 'generation', 'frame', 'task', 'legacy'], 'type': 'string'}, 'width': {'type': 'number'}, 'height': {'type': 'number'}, 'position': {'type': 'object', 'required': ['x', 'y'], 'properties': {'x': {'type': 'number'}, 'y': {'type': 'number'}}}}}}, 'edges': {'type': 'array', 'items': {'type': 'object', 'properties': {'id': {'type': 'string'}, 'label': {'description': 'Text drawn on the line, when it has one.'}, 'source': {'type': 'string', 'description': 'The card the connection starts from.'}, 'target': {'type': 'string', 'description': 'The card it leads to.'}}, 'description': "A connection drawn from one card to the next: { id, source, target, label? }. data.role start_image means the source card's finished image is the target card's start frame."}}, 'revision': {'type': 'number', 'description': "The board's version; every write bumps it."}, 'card_count': {'type': 'number'}, 'updated_at': {'type': ['string', 'null']}}}, 'next_step': {'type': 'string'}}}
入力スキーマ
{'type': 'object', 'required': ['canvas_id'], 'properties': {'kind': {'enum': ['video', 'image'], 'type': 'string', 'description': 'Defaults to video.'}, 'model': {'type': 'string', 'description': 'A model id from list_models.'}, 'width': {'type': 'number', 'description': 'Optional card width in pixels.'}, 'height': {'type': 'number', 'description': 'Optional card height in pixels.'}, 'prompt': {'type': 'string', 'description': 'The generation prompt, up to 4000 characters.'}, 'duration': {'type': 'number', 'description': 'Optional clip length in seconds, for video models that price by duration.'}, 'position': {'type': 'object', 'required': ['x', 'y'], 'properties': {'x': {'type': 'number'}, 'y': {'type': 'number'}}, 'description': 'Optional { x, y } in board pixels. When omitted the server places the card in the first free grid cell.'}, 'revision': {'type': 'number', 'description': 'The board revision this change is based on (from the last board you saw). Optional: when omitted the tool reads the current one first.'}, 'canvas_id': {'type': 'string', 'description': 'The board id, from list_canvases or create_canvas.'}, 'image_url': {'type': 'string', 'description': 'Optional public https reference image for image-to-video or image-to-image.'}, 'resolution': {'type': 'string', 'description': 'Optional, e.g. 720p, 1080p.'}, 'aspect_ratio': {'type': 'string', 'description': 'Optional, e.g. 9:16, 16:9, 1:1.'}, 'from_card_id': {'type': 'string', 'description': "Optional: an image generation card or an image media card on the same board. The new card is connected to it, and its finished image is the new card's start frame when the new card runs (run the source card first)."}}}
出力スキーマ
{'type': 'object', 'required': ['canvas', 'card', 'next_step'], 'properties': {'card': {'type': ['object', 'null'], 'required': ['id', 'type', 'position', 'data'], 'properties': {'id': {'type': 'string'}, 'data': {'description': 'Per type. text: { text, title?, color? }. media: { url, kind, title?, caption?, source? }. generation: { model?, prompt?, kind, status (draft | queued | generating | done | failed), job_id?, media_url?, credits_used?, error? }. frame: { label, width, height }. task: { taskId }.'}, 'type': {'enum': ['text', 'media', 'generation', 'frame', 'task', 'legacy'], 'type': 'string'}, 'width': {'type': 'number'}, 'height': {'type': 'number'}, 'position': {'type': 'object', 'required': ['x', 'y'], 'properties': {'x': {'type': 'number'}, 'y': {'type': 'number'}}}}}, 'edge': {'type': ['object', 'null'], 'properties': {'id': {'type': 'string'}, 'label': {'description': 'Text drawn on the line, when it has one.'}, 'source': {'type': 'string', 'description': 'The card the connection starts from.'}, 'target': {'type': 'string', 'description': 'The card it leads to.'}}, 'description': 'The connection from from_card_id, when one was given.'}, 'canvas': {'type': 'object', 'required': ['id', 'name', 'revision', 'card_count', 'updated_at', 'link', 'cards', 'edges'], 'properties': {'id': {'type': 'string'}, 'link': {'type': 'string', 'description': "The board's page on AI Content Drop."}, 'name': {'type': 'string'}, 'cards': {'type': 'array', 'items': {'type': 'object', 'required': ['id', 'type', 'position', 'data'], 'properties': {'id': {'type': 'string'}, 'data': {'description': 'Per type. text: { text, title?, color? }. media: { url, kind, title?, caption?, source? }. generation: { model?, prompt?, kind, status (draft | queued | generating | done | failed), job_id?, media_url?, credits_used?, error? }. frame: { label, width, height }. task: { taskId }.'}, 'type': {'enum': ['text', 'media', 'generation', 'frame', 'task', 'legacy'], 'type': 'string'}, 'width': {'type': 'number'}, 'height': {'type': 'number'}, 'position': {'type': 'object', 'required': ['x', 'y'], 'properties': {'x': {'type': 'number'}, 'y': {'type': 'number'}}}}}}, 'edges': {'type': 'array', 'items': {'type': 'object', 'properties': {'id': {'type': 'string'}, 'label': {'description': 'Text drawn on the line, when it has one.'}, 'source': {'type': 'string', 'description': 'The card the connection starts from.'}, 'target': {'type': 'string', 'description': 'The card it leads to.'}}, 'description': "A connection drawn from one card to the next: { id, source, target, label? }. data.role start_image means the source card's finished image is the target card's start frame."}}, 'revision': {'type': 'number', 'description': "The board's version; every write bumps it."}, 'card_count': {'type': 'number'}, 'updated_at': {'type': ['string', 'null']}}}, 'next_step': {'type': 'string'}}}
入力スキーマ
{'type': 'object', 'required': ['canvas_id', 'url', 'kind'], 'properties': {'url': {'type': 'string', 'description': 'Public https URL of the image or video.'}, 'kind': {'enum': ['image', 'video'], 'type': 'string'}, 'title': {'type': 'string', 'description': 'Optional title, up to 200 characters.'}, 'width': {'type': 'number', 'description': 'Optional card width in pixels.'}, 'height': {'type': 'number', 'description': 'Optional card height in pixels.'}, 'source': {'type': 'object', 'required': ['kind'], 'properties': {'id': {'type': 'string'}, 'kind': {'enum': ['upload', 'generation', 'ad', 'studio'], 'type': 'string'}}, 'description': 'Optional provenance: where the media came from.'}, 'caption': {'type': 'string', 'description': 'Optional caption, up to 2000 characters.'}, 'position': {'type': 'object', 'required': ['x', 'y'], 'properties': {'x': {'type': 'number'}, 'y': {'type': 'number'}}, 'description': 'Optional { x, y } in board pixels. When omitted the server places the card in the first free grid cell.'}, 'revision': {'type': 'number', 'description': 'The board revision this change is based on (from the last board you saw). Optional: when omitted the tool reads the current one first.'}, 'canvas_id': {'type': 'string', 'description': 'The board id, from list_canvases or create_canvas.'}}}
出力スキーマ
{'type': 'object', 'required': ['canvas', 'card', 'next_step'], 'properties': {'card': {'type': ['object', 'null'], 'required': ['id', 'type', 'position', 'data'], 'properties': {'id': {'type': 'string'}, 'data': {'description': 'Per type. text: { text, title?, color? }. media: { url, kind, title?, caption?, source? }. generation: { model?, prompt?, kind, status (draft | queued | generating | done | failed), job_id?, media_url?, credits_used?, error? }. frame: { label, width, height }. task: { taskId }.'}, 'type': {'enum': ['text', 'media', 'generation', 'frame', 'task', 'legacy'], 'type': 'string'}, 'width': {'type': 'number'}, 'height': {'type': 'number'}, 'position': {'type': 'object', 'required': ['x', 'y'], 'properties': {'x': {'type': 'number'}, 'y': {'type': 'number'}}}}}, 'canvas': {'type': 'object', 'required': ['id', 'name', 'revision', 'card_count', 'updated_at', 'link', 'cards', 'edges'], 'properties': {'id': {'type': 'string'}, 'link': {'type': 'string', 'description': "The board's page on AI Content Drop."}, 'name': {'type': 'string'}, 'cards': {'type': 'array', 'items': {'type': 'object', 'required': ['id', 'type', 'position', 'data'], 'properties': {'id': {'type': 'string'}, 'data': {'description': 'Per type. text: { text, title?, color? }. media: { url, kind, title?, caption?, source? }. generation: { model?, prompt?, kind, status (draft | queued | generating | done | failed), job_id?, media_url?, credits_used?, error? }. frame: { label, width, height }. task: { taskId }.'}, 'type': {'enum': ['text', 'media', 'generation', 'frame', 'task', 'legacy'], 'type': 'string'}, 'width': {'type': 'number'}, 'height': {'type': 'number'}, 'position': {'type': 'object', 'required': ['x', 'y'], 'properties': {'x': {'type': 'number'}, 'y': {'type': 'number'}}}}}}, 'edges': {'type': 'array', 'items': {'type': 'object', 'properties': {'id': {'type': 'string'}, 'label': {'description': 'Text drawn on the line, when it has one.'}, 'source': {'type': 'string', 'description': 'The card the connection starts from.'}, 'target': {'type': 'string', 'description': 'The card it leads to.'}}, 'description': "A connection drawn from one card to the next: { id, source, target, label? }. data.role start_image means the source card's finished image is the target card's start frame."}}, 'revision': {'type': 'number', 'description': "The board's version; every write bumps it."}, 'card_count': {'type': 'number'}, 'updated_at': {'type': ['string', 'null']}}}, 'next_step': {'type': 'string'}}}
入力スキーマ
{'type': 'object', 'required': ['canvas_id', 'text'], 'properties': {'text': {'type': 'string', 'description': "The card's text, up to 4000 characters."}, 'color': {'type': 'string', 'description': 'Optional colour name or hex the website uses for the card.'}, 'title': {'type': 'string', 'description': 'Optional title, up to 200 characters.'}, 'width': {'type': 'number', 'description': 'Optional card width in pixels.'}, 'height': {'type': 'number', 'description': 'Optional card height in pixels.'}, 'position': {'type': 'object', 'required': ['x', 'y'], 'properties': {'x': {'type': 'number'}, 'y': {'type': 'number'}}, 'description': 'Optional { x, y } in board pixels. When omitted the server places the card in the first free grid cell.'}, 'revision': {'type': 'number', 'description': 'The board revision this change is based on (from the last board you saw). Optional: when omitted the tool reads the current one first.'}, 'canvas_id': {'type': 'string', 'description': 'The board id, from list_canvases or create_canvas.'}}}
出力スキーマ
{'type': 'object', 'required': ['canvas', 'card', 'next_step'], 'properties': {'card': {'type': ['object', 'null'], 'required': ['id', 'type', 'position', 'data'], 'properties': {'id': {'type': 'string'}, 'data': {'description': 'Per type. text: { text, title?, color? }. media: { url, kind, title?, caption?, source? }. generation: { model?, prompt?, kind, status (draft | queued | generating | done | failed), job_id?, media_url?, credits_used?, error? }. frame: { label, width, height }. task: { taskId }.'}, 'type': {'enum': ['text', 'media', 'generation', 'frame', 'task', 'legacy'], 'type': 'string'}, 'width': {'type': 'number'}, 'height': {'type': 'number'}, 'position': {'type': 'object', 'required': ['x', 'y'], 'properties': {'x': {'type': 'number'}, 'y': {'type': 'number'}}}}}, 'canvas': {'type': 'object', 'required': ['id', 'name', 'revision', 'card_count', 'updated_at', 'link', 'cards', 'edges'], 'properties': {'id': {'type': 'string'}, 'link': {'type': 'string', 'description': "The board's page on AI Content Drop."}, 'name': {'type': 'string'}, 'cards': {'type': 'array', 'items': {'type': 'object', 'required': ['id', 'type', 'position', 'data'], 'properties': {'id': {'type': 'string'}, 'data': {'description': 'Per type. text: { text, title?, color? }. media: { url, kind, title?, caption?, source? }. generation: { model?, prompt?, kind, status (draft | queued | generating | done | failed), job_id?, media_url?, credits_used?, error? }. frame: { label, width, height }. task: { taskId }.'}, 'type': {'enum': ['text', 'media', 'generation', 'frame', 'task', 'legacy'], 'type': 'string'}, 'width': {'type': 'number'}, 'height': {'type': 'number'}, 'position': {'type': 'object', 'required': ['x', 'y'], 'properties': {'x': {'type': 'number'}, 'y': {'type': 'number'}}}}}}, 'edges': {'type': 'array', 'items': {'type': 'object', 'properties': {'id': {'type': 'string'}, 'label': {'description': 'Text drawn on the line, when it has one.'}, 'source': {'type': 'string', 'description': 'The card the connection starts from.'}, 'target': {'type': 'string', 'description': 'The card it leads to.'}}, 'description': "A connection drawn from one card to the next: { id, source, target, label? }. data.role start_image means the source card's finished image is the target card's start frame."}}, 'revision': {'type': 'number', 'description': "The board's version; every write bumps it."}, 'card_count': {'type': 'number'}, 'updated_at': {'type': ['string', 'null']}}}, 'next_step': {'type': 'string'}}}
入力スキーマ
{'type': 'object', 'required': ['ad_id', 'canvas_id'], 'properties': {'ad_id': {'type': 'string', 'description': "A saved ad's id, from list_saved_ads or save_competitor_ad."}, 'revision': {'type': 'number', 'description': 'The board revision this change is based on. Optional: when omitted the tool reads the current one first.'}, 'canvas_id': {'type': 'string', 'description': 'The board id, from list_canvases or create_canvas.'}}}
出力スキーマ
{'type': 'object', 'required': ['canvas', 'card', 'ad', 'next_step'], 'properties': {'ad': {'type': 'object', 'required': ['id', 'title', 'decoded'], 'properties': {'id': {'type': 'string'}, 'title': {'type': 'string'}, 'decoded': {'type': 'boolean', 'description': 'True when the card carries the decoded brief.'}}}, 'card': {'type': ['object', 'null'], 'required': ['id', 'type', 'position', 'data'], 'properties': {'id': {'type': 'string'}, 'data': {'description': 'For the placed ad: { url, kind, title, caption?, source: { kind: "ad", id }, brief? }.'}, 'type': {'enum': ['text', 'media', 'generation', 'frame', 'task', 'legacy'], 'type': 'string'}, 'width': {'type': 'number'}, 'height': {'type': 'number'}, 'position': {'type': 'object', 'required': ['x', 'y'], 'properties': {'x': {'type': 'number'}, 'y': {'type': 'number'}}}}}, 'canvas': {'type': 'object', 'required': ['id', 'name', 'revision', 'card_count', 'updated_at', 'link', 'cards', 'edges'], 'properties': {'id': {'type': 'string'}, 'link': {'type': 'string', 'description': "The board's page on AI Content Drop."}, 'name': {'type': 'string'}, 'cards': {'type': 'array', 'items': {'type': 'object', 'required': ['id', 'type', 'position', 'data'], 'properties': {'id': {'type': 'string'}, 'data': {'description': 'For the placed ad: { url, kind, title, caption?, source: { kind: "ad", id }, brief? }.'}, 'type': {'enum': ['text', 'media', 'generation', 'frame', 'task', 'legacy'], 'type': 'string'}, 'width': {'type': 'number'}, 'height': {'type': 'number'}, 'position': {'type': 'object', 'required': ['x', 'y'], 'properties': {'x': {'type': 'number'}, 'y': {'type': 'number'}}}}}}, 'edges': {'type': 'array', 'items': {'type': 'object'}}, 'revision': {'type': 'number', 'description': "The board's version; every write bumps it."}, 'card_count': {'type': 'number'}, 'updated_at': {'type': ['string', 'null']}}}, 'next_step': {'type': 'string'}}}
入力スキーマ
{'type': 'object', 'required': ['canvas_id', 'layout'], 'properties': {'gap': {'type': 'number', 'description': 'Optional spacing in pixels; defaults to 24.'}, 'ids': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Card ids to arrange; omitted means every card.'}, 'layout': {'enum': ['grid', 'row', 'column'], 'type': 'string'}, 'revision': {'type': 'number', 'description': 'The board revision this change is based on (from the last board you saw). Optional: when omitted the tool reads the current one first.'}, 'canvas_id': {'type': 'string', 'description': 'The board id, from list_canvases or create_canvas.'}}}
出力スキーマ
{'type': 'object', 'required': ['canvas', 'next_step'], 'properties': {'canvas': {'type': 'object', 'required': ['id', 'name', 'revision', 'card_count', 'updated_at', 'link', 'cards', 'edges'], 'properties': {'id': {'type': 'string'}, 'link': {'type': 'string', 'description': "The board's page on AI Content Drop."}, 'name': {'type': 'string'}, 'cards': {'type': 'array', 'items': {'type': 'object', 'required': ['id', 'type', 'position', 'data'], 'properties': {'id': {'type': 'string'}, 'data': {'description': 'Per type. text: { text, title?, color? }. media: { url, kind, title?, caption?, source? }. generation: { model?, prompt?, kind, status (draft | queued | generating | done | failed), job_id?, media_url?, credits_used?, error? }. frame: { label, width, height }. task: { taskId }.'}, 'type': {'enum': ['text', 'media', 'generation', 'frame', 'task', 'legacy'], 'type': 'string'}, 'width': {'type': 'number'}, 'height': {'type': 'number'}, 'position': {'type': 'object', 'required': ['x', 'y'], 'properties': {'x': {'type': 'number'}, 'y': {'type': 'number'}}}}}}, 'edges': {'type': 'array', 'items': {'type': 'object', 'properties': {'id': {'type': 'string'}, 'label': {'description': 'Text drawn on the line, when it has one.'}, 'source': {'type': 'string', 'description': 'The card the connection starts from.'}, 'target': {'type': 'string', 'description': 'The card it leads to.'}}, 'description': "A connection drawn from one card to the next: { id, source, target, label? }. data.role start_image means the source card's finished image is the target card's start frame."}}, 'revision': {'type': 'number', 'description': "The board's version; every write bumps it."}, 'card_count': {'type': 'number'}, 'updated_at': {'type': ['string', 'null']}}}, 'next_step': {'type': 'string'}}}
入力スキーマ
{'type': 'object', 'required': ['canvas_id', 'from_card_id', 'to_card_id'], 'properties': {'label': {'type': 'string', 'description': 'Optional short label drawn on the line, up to 200 characters.'}, 'revision': {'type': 'number', 'description': 'The board revision this change is based on (from the last board you saw). Optional: when omitted the tool reads the current one first.'}, 'canvas_id': {'type': 'string', 'description': 'The board id, from list_canvases or create_canvas.'}, 'to_card_id': {'type': 'string', 'description': 'The card it leads to.'}, 'from_card_id': {'type': 'string', 'description': 'The card the line starts from, from cards[] on the board.'}}}
出力スキーマ
{'type': 'object', 'required': ['canvas', 'edge', 'next_step'], 'properties': {'edge': {'type': ['object', 'null'], 'properties': {'id': {'type': 'string'}, 'label': {'description': 'Text drawn on the line, when it has one.'}, 'source': {'type': 'string', 'description': 'The card the connection starts from.'}, 'target': {'type': 'string', 'description': 'The card it leads to.'}}, 'description': "A connection drawn from one card to the next: { id, source, target, label? }. data.role start_image means the source card's finished image is the target card's start frame."}, 'canvas': {'type': 'object', 'required': ['id', 'name', 'revision', 'card_count', 'updated_at', 'link', 'cards', 'edges'], 'properties': {'id': {'type': 'string'}, 'link': {'type': 'string', 'description': "The board's page on AI Content Drop."}, 'name': {'type': 'string'}, 'cards': {'type': 'array', 'items': {'type': 'object', 'required': ['id', 'type', 'position', 'data'], 'properties': {'id': {'type': 'string'}, 'data': {'description': 'Per type. text: { text, title?, color? }. media: { url, kind, title?, caption?, source? }. generation: { model?, prompt?, kind, status (draft | queued | generating | done | failed), job_id?, media_url?, credits_used?, error? }. frame: { label, width, height }. task: { taskId }.'}, 'type': {'enum': ['text', 'media', 'generation', 'frame', 'task', 'legacy'], 'type': 'string'}, 'width': {'type': 'number'}, 'height': {'type': 'number'}, 'position': {'type': 'object', 'required': ['x', 'y'], 'properties': {'x': {'type': 'number'}, 'y': {'type': 'number'}}}}}}, 'edges': {'type': 'array', 'items': {'type': 'object', 'properties': {'id': {'type': 'string'}, 'label': {'description': 'Text drawn on the line, when it has one.'}, 'source': {'type': 'string', 'description': 'The card the connection starts from.'}, 'target': {'type': 'string', 'description': 'The card it leads to.'}}, 'description': "A connection drawn from one card to the next: { id, source, target, label? }. data.role start_image means the source card's finished image is the target card's start frame."}}, 'revision': {'type': 'number', 'description': "The board's version; every write bumps it."}, 'card_count': {'type': 'number'}, 'updated_at': {'type': ['string', 'null']}}}, 'next_step': {'type': 'string'}}}
入力スキーマ
{'type': 'object', 'required': [], 'properties': {'name': {'type': 'string', 'description': 'Board name, up to 100 characters. Defaults to Untitled Canvas.'}}}
出力スキーマ
{'type': 'object', 'required': ['canvas', 'next_step'], 'properties': {'canvas': {'type': 'object', 'required': ['id', 'name', 'revision', 'card_count', 'updated_at', 'link', 'cards', 'edges'], 'properties': {'id': {'type': 'string'}, 'link': {'type': 'string', 'description': "The board's page on AI Content Drop."}, 'name': {'type': 'string'}, 'cards': {'type': 'array', 'items': {'type': 'object', 'required': ['id', 'type', 'position', 'data'], 'properties': {'id': {'type': 'string'}, 'data': {'description': 'Per type. text: { text, title?, color? }. media: { url, kind, title?, caption?, source? }. generation: { model?, prompt?, kind, status (draft | queued | generating | done | failed), job_id?, media_url?, credits_used?, error? }. frame: { label, width, height }. task: { taskId }.'}, 'type': {'enum': ['text', 'media', 'generation', 'frame', 'task', 'legacy'], 'type': 'string'}, 'width': {'type': 'number'}, 'height': {'type': 'number'}, 'position': {'type': 'object', 'required': ['x', 'y'], 'properties': {'x': {'type': 'number'}, 'y': {'type': 'number'}}}}}}, 'edges': {'type': 'array', 'items': {'type': 'object', 'properties': {'id': {'type': 'string'}, 'label': {'description': 'Text drawn on the line, when it has one.'}, 'source': {'type': 'string', 'description': 'The card the connection starts from.'}, 'target': {'type': 'string', 'description': 'The card it leads to.'}}, 'description': "A connection drawn from one card to the next: { id, source, target, label? }. data.role start_image means the source card's finished image is the target card's start frame."}}, 'revision': {'type': 'number', 'description': "The board's version; every write bumps it."}, 'card_count': {'type': 'number'}, 'updated_at': {'type': ['string', 'null']}}}, 'next_step': {'type': 'string'}}}
入力スキーマ
{'type': 'object', 'required': ['ad_id', 'quote_id'], 'properties': {'ad_id': {'type': 'string', 'description': "A saved ad's id, from list_saved_ads or save_competitor_ad."}, 'quote_id': {'type': 'string', 'description': 'The quote_id from estimate_ad_cost with kind "decode". Required.'}}}
出力スキーマ
{'type': 'object', 'required': ['ad_id', 'decode', 'cached', 'credits_quoted', 'credits_used', 'replayed', 'next_step'], 'properties': {'note': {'type': 'string', 'description': 'Present only when the charge could not be applied to the account.'}, 'ad_id': {'type': 'string'}, 'cached': {'type': 'boolean', 'description': 'True when a stored decode was returned; nothing was charged.'}, 'decode': {'type': 'object', 'required': ['layers', 'recreationPrompt', 'confidence', 'decodedAt'], 'properties': {'layers': {'type': 'object', 'description': 'hook { pattern, first2s }, script { skeleton[], tone }, scenes { shotCount, medianCutSec, aspect, timeline[] }, audio { voStyle, pace, musicRole }, cta { pattern, placementSec?, urgencyDevice? }, style { visualElement, palette?, typography?, energy }.'}, 'decodedAt': {'type': 'string'}, 'confidence': {'type': 'number', 'description': '0-1.'}, 'recreationPrompt': {'type': 'string', 'description': "A 150-300 word prompt that recreates the ad's structure with a different product."}}, 'description': "The ad's formula, layer by layer, plus a generation-ready prompt."}, 'replayed': {'type': 'boolean', 'description': 'True when this quote_id had already been submitted and the original result was returned.'}, 'next_step': {'type': 'string'}, 'credits_used': {'type': ['number', 'null'], 'description': 'Credits charged: 0 for a stored decode or when the charge could not be applied (then note says so); null when the figure is not reported.'}, 'credits_quoted': {'type': 'number', 'description': 'The price fixed by the quote.'}}}
入力スキーマ
{'type': 'object', 'required': [], 'properties': {'kind': {'enum': ['ad', 'ugc', 'avatar', 'decode'], 'type': 'string', 'description': 'Defaults to ad.'}, 'brief': {'type': 'object', 'description': 'The ad brief: brandName, brandOneLiner, valueProps (1-8 strings), cta, intent, format (an id from list_ad_formats), shotCount (2-5), totalDurationSec (6-20), aspect (9:16 | 16:9 | 1:1), language, quality (fast | premium), modelTier (standard | cinematic), garmentImageUrl for the try-on formats.'}, 'quality': {'enum': ['fast', 'premium'], 'type': 'string', 'description': "Lip-sync tier. premium costs more per talking shot. Defaults to the brief's quality, else fast."}, 'model_tier': {'enum': ['standard', 'cinematic'], 'type': 'string', 'description': 'cinematic renders on Seedance with director-grade camera work and costs more per shot; needs the brief.'}, 'storyboard': {'type': 'object', 'description': 'The storyboard returned by write_ad_storyboard, as is or edited. When present it is what renders; the brief is optional alongside it.'}, 'persona_mode': {'enum': ['exact-avatar', 'synthetic'], 'type': 'string', 'description': 'synthetic lets the studio substitute one consistent generated creator for the avatar; exact-avatar (default) keeps the avatar as given.'}, 'needs_avatar_gen': {'type': 'boolean', 'description': 'True when the avatar still has to be generated (billed as a line).'}, 'needs_product_gen': {'type': 'boolean', 'description': 'True when the product still has to be generated (billed as a line).'}}}
出力スキーマ
{'type': 'object', 'required': ['kind', 'credits_total', 'lines', 'basis', 'quote_id', 'expires_at', 'expires_in_seconds', 'next_step'], 'properties': {'kind': {'enum': ['ad', 'ugc', 'avatar', 'decode'], 'type': 'string'}, 'basis': {'enum': ['estimate_upper_bound', 'flat'], 'type': 'string'}, 'lines': {'type': 'array', 'items': {'type': 'object', 'required': ['label', 'credits'], 'properties': {'label': {'type': 'string'}, 'credits': {'type': 'number'}}}}, 'quote_id': {'type': 'string', 'description': 'Signed quote. Pass it to the matching generate_* tool; it fixes the price and makes a retry safe.'}, 'next_step': {'type': 'string'}, 'expires_at': {'type': 'string', 'description': 'ISO time after which the quote is refused.'}, 'credits_total': {'type': 'number', 'description': 'For an ad, the most it can cost; the charge on success is never higher.'}, 'expires_in_seconds': {'type': 'number'}}}
入力スキーマ
{'type': 'object', 'required': ['model_id'], 'properties': {'duration': {'type': 'number', 'description': 'Video length in seconds you intend to generate. Affects the price of per-second models.'}, 'model_id': {'type': 'string', 'description': 'Model ID, e.g. "kling_3_0" or "veo_3_fast".'}, 'quantity': {'type': 'number', 'description': 'How many generations to price. Defaults to 1. Only a quote for exactly 1 can be spent; larger quantities are for planning.'}, 'resolution': {'type': 'string', 'description': 'Video resolution you intend to generate, e.g. "720p" or "1080p". Affects the price of per-second models.'}, 'reference_video_seconds': {'type': 'number', 'description': 'Length in seconds of the reference video you will pass as reference_video_url (seedance_2_5 up to 30 s, or seedance_2_0_fast up to 15 s at 720p). Reference seconds are billed as input, so they change the price; the server measures the file and refuses a quote whose length does not match.'}}}
出力スキーマ
{'type': 'object', 'required': ['model_id', 'name', 'credits_each', 'quantity', 'credits_total', 'type', 'basis', 'quote_id', 'quote_expires_at', 'next_step'], 'properties': {'name': {'type': 'string'}, 'type': {'enum': ['video', 'image'], 'type': 'string'}, 'basis': {'enum': ['flat', 'per_second'], 'type': 'string'}, 'model_id': {'type': 'string', 'description': 'Normalized to underscores.'}, 'quantity': {'type': 'number'}, 'quote_id': {'type': 'string', 'description': 'Signed quote. Pass it to generate_video or generate_image; it fixes the price and makes a retry safe.'}, 'next_step': {'type': 'string'}, 'resolution': {'type': 'string', 'description': 'The resolution actually priced, for per-second models.'}, 'credits_each': {'type': 'number'}, 'credits_total': {'type': 'number'}, 'duration_seconds': {'type': 'number', 'description': 'The duration actually priced, for per-second models.'}, 'quote_expires_at': {'type': 'string', 'description': 'ISO time after which the quote is refused.'}, 'reference_video_seconds': {'type': 'number', 'description': 'Reference-video seconds priced as input, when a reference was quoted.'}}}
入力スキーマ
{'type': 'object', 'required': ['quote_id', 'avatar_url', 'product_image_url'], 'properties': {'brief': {'type': 'object', 'description': 'The ad brief: brandName, brandOneLiner, valueProps (1-8 strings), cta, intent, format (an id from list_ad_formats), shotCount (2-5), totalDurationSec (6-20), aspect (9:16 | 16:9 | 1:1), language, quality (fast | premium), modelTier (standard | cinematic), garmentImageUrl for the try-on formats.'}, 'music': {'type': 'object', 'required': ['tone'], 'properties': {'tone': {'type': 'string', 'description': 'e.g. upbeat, calm, cinematic.'}, 'gain_db': {'type': 'number', 'description': '-30 to 0.'}}, 'description': 'Optional music bed.'}, 'quality': {'enum': ['fast', 'premium'], 'type': 'string', 'description': "Lip-sync tier. premium costs more per talking shot. Defaults to the brief's quality, else fast."}, 'quote_id': {'type': 'string', 'description': 'The quote_id from estimate_ad_cost for these exact fields (kind ad). Required.'}, 'canvas_id': {'type': 'string', 'description': 'Optional board id (from list_canvases or create_canvas): the ad is placed on it as a generation card that fills in when the render lands.'}, 'avatar_url': {'type': 'string', 'description': "Public https URL of the creator's reference image (a catalogue portrait, a generate_avatar result, or an import_asset URL)."}, 'model_tier': {'enum': ['standard', 'cinematic'], 'type': 'string', 'description': 'cinematic renders on Seedance with director-grade camera work and costs more per shot; needs the brief.'}, 'project_id': {'type': 'string', 'description': 'Optional studio project (uuid) to file the run under.'}, 'storyboard': {'type': 'object', 'description': 'The storyboard returned by write_ad_storyboard, as is or edited. When present it is what renders; the brief is optional alongside it.'}, 'persona_mode': {'enum': ['exact-avatar', 'synthetic'], 'type': 'string', 'description': 'synthetic lets the studio substitute one consistent generated creator for the avatar; exact-avatar (default) keeps the avatar as given.'}, 'needs_avatar_gen': {'type': 'boolean', 'description': 'True when the avatar still has to be generated (billed as a line).'}, 'needs_product_gen': {'type': 'boolean', 'description': 'True when the product still has to be generated (billed as a line).'}, 'product_image_url': {'type': 'string', 'description': 'Public https URL of the product image.'}, 'avatar_description': {'type': 'string', 'description': 'Optional one-line identity note for the creator (20-500 characters).'}, 'product_description': {'type': 'string', 'description': 'Optional one-line product note (10-500 characters).'}}}
出力スキーマ
{'type': 'object', 'required': ['job_id', 'status', 'credits_quoted', 'replayed', 'poll_after_seconds', 'next_step'], 'properties': {'job_id': {'type': 'string', 'description': 'Poll this with get_ad_job.'}, 'run_id': {'type': ['string', 'null']}, 'status': {'enum': ['queued'], 'type': 'string'}, 'replayed': {'type': 'boolean', 'description': 'True when this quote_id had already been submitted and the original job was returned.'}, 'next_step': {'type': 'string'}, 'credits_quoted': {'type': 'number', 'description': 'The ceiling fixed by the quote.'}, 'poll_after_seconds': {'type': 'number'}}}
入力スキーマ
{'type': 'object', 'required': ['quote_id', 'prompt'], 'properties': {'prompt': {'type': 'string', 'description': 'Who the creator is: age, look, clothing, setting, mood (20-800 characters).'}, 'save_as': {'type': 'string', 'description': 'Optional name; saves the portrait on a brand profile for reuse.'}, 'quote_id': {'type': 'string', 'description': 'The quote_id from estimate_ad_cost with kind "avatar". Required.'}, 'aspect_ratio': {'enum': ['1:1', '9:16', '16:9'], 'type': 'string', 'description': 'Defaults to 9:16.'}}}
出力スキーマ
{'type': 'object', 'required': ['avatar_url', 'qa_passed', 'qa_notes', 'credits_quoted', 'credits_used', 'replayed', 'next_step'], 'properties': {'note': {'type': 'string', 'description': 'Present only when the charge could not be applied to the account.'}, 'qa_notes': {'type': 'array', 'items': {'type': 'string'}}, 'replayed': {'type': 'boolean'}, 'next_step': {'type': 'string'}, 'qa_passed': {'type': 'boolean'}, 'avatar_url': {'type': ['string', 'null'], 'description': 'Pass as avatar_url to generate_ad.'}, 'credits_used': {'type': 'number', 'description': 'The charge that landed; 0 when no portrait came back or the charge could not be applied (then note says so).'}, 'credits_quoted': {'type': 'number'}, 'brand_profile_id': {'type': ['string', 'null']}}}
入力スキーマ
{'type': 'object', 'required': ['prompt', 'quote_id'], 'properties': {'model': {'type': 'string', 'description': 'Image model ID from list_models with type "image". Must match the quoted model; omitted means the quoted model.'}, 'prompt': {'type': 'string', 'description': 'What the image should show.'}, 'quote_id': {'type': 'string', 'description': 'The quote_id from estimate_credit_cost for this exact image model. Required.'}, 'image_url': {'type': 'string', 'description': 'Optional public reference image (image-to-image). Only these models accept one: gpt_image_2, gpt_image_2_edit, gpt_image_2_5_flare, gpt_image_2_5_sunburst, seedream_5_0_pro.'}}}
出力スキーマ
{'type': 'object', 'required': ['id', 'kind', 'status', 'credits_quoted', 'credits_used', 'replayed', 'next_step'], 'properties': {'id': {'type': 'string', 'description': 'Poll this with get_generation.'}, 'kind': {'enum': ['video', 'image'], 'type': 'string'}, 'model': {'type': ['string', 'null']}, 'status': {'type': 'string'}, 'replayed': {'type': 'boolean', 'description': 'True when this quote_id had already been submitted and the original job was returned.'}, 'image_url': {'type': ['string', 'null'], 'description': 'Null until the render finishes.'}, 'next_step': {'type': 'string', 'description': 'What to do next, in words, so a model need not infer it.'}, 'unlimited': {'type': 'boolean'}, 'video_url': {'type': ['string', 'null'], 'description': 'Null until the render finishes.'}, 'credits_used': {'type': 'number', 'description': '0 until the render succeeds; billing is post-deduct.'}, 'credits_quoted': {'type': 'number', 'description': 'The price fixed by the quote.'}}}
入力スキーマ
{'type': 'object', 'required': ['quote_id', 'script', 'image_rights_consent'], 'properties': {'voice': {'type': 'string', 'description': 'Optional voice id or name.'}, 'script': {'type': 'string', 'description': 'What the creator says, up to 1000 characters.'}, 'ambience': {'type': 'string', 'description': 'Optional background sound, e.g. cafe, street, none.'}, 'language': {'type': 'string', 'description': 'Optional language code, e.g. en.'}, 'quote_id': {'type': 'string', 'description': 'The quote_id from estimate_ad_cost with kind "ugc". Required.'}, 'template': {'enum': ['general', 'selfie', 'selling', 'testimonial', 'tutorial', 'storytelling'], 'type': 'string', 'description': 'A creator id from list_ugc_avatars. Alternative to image_url.'}, 'image_url': {'type': 'string', 'description': "Public https URL of the person's photo. Alternative to template."}, 'image_rights_consent': {'type': 'boolean', 'description': 'Must be true, and only after the person confirmed they hold the rights to the face and accept the acceptable-use terms. No default.'}}}
出力スキーマ
{'type': 'object', 'required': ['id', 'kind', 'status', 'credits_quoted', 'credits_used', 'replayed', 'next_step'], 'properties': {'id': {'type': 'string', 'description': 'Poll this with get_generation.'}, 'kind': {'enum': ['video'], 'type': 'string'}, 'status': {'type': 'string'}, 'replayed': {'type': 'boolean'}, 'next_step': {'type': 'string'}, 'credits_used': {'type': 'number', 'description': '0 until the render succeeds; billing is post-deduct.'}, 'credits_quoted': {'type': 'number'}}}
入力スキーマ
{'type': 'object', 'required': ['prompt', 'quote_id'], 'properties': {'model': {'type': 'string', 'description': 'Model ID from list_models, e.g. "kling_3_0". Must match the quoted model; omitted means the quoted model.'}, 'prompt': {'type': 'string', 'description': 'What the video should show. Detailed prompts produce better results.'}, 'duration': {'type': 'number', 'description': 'Length in seconds. Must match the quoted duration for per-second models.'}, 'quote_id': {'type': 'string', 'description': 'The quote_id from estimate_credit_cost for this exact model, duration and resolution. Required.'}, 'image_url': {'type': 'string', 'description': 'Optional public image URL to animate (image-to-video).'}, 'resolution': {'type': 'string', 'description': 'e.g. "720p" or "1080p". Must match the quoted resolution for per-second models.'}, 'aspect_ratio': {'enum': ['16:9', '9:16', '1:1'], 'type': 'string', 'description': 'Defaults to 16:9. Use 9:16 for vertical social clips.'}, 'reference_video_url': {'type': 'string', 'description': "Optional public https URL of a reference video (for example a 3D blockout playblast) whose camera movement, shot rhythm and subject motion the generation must follow. seedance_2_5 (30 s max) or seedance_2_0_fast (15 s max, 720p). The quote must have been priced with reference_video_seconds equal to this clip's length rounded up; the server measures the clip and refuses on mismatch."}}}
出力スキーマ
{'type': 'object', 'required': ['id', 'kind', 'status', 'credits_quoted', 'credits_used', 'replayed', 'next_step'], 'properties': {'id': {'type': 'string', 'description': 'Poll this with get_generation.'}, 'kind': {'enum': ['video', 'image'], 'type': 'string'}, 'model': {'type': ['string', 'null']}, 'status': {'type': 'string'}, 'replayed': {'type': 'boolean', 'description': 'True when this quote_id had already been submitted and the original job was returned.'}, 'image_url': {'type': ['string', 'null'], 'description': 'Null until the render finishes.'}, 'next_step': {'type': 'string', 'description': 'What to do next, in words, so a model need not infer it.'}, 'unlimited': {'type': 'boolean'}, 'video_url': {'type': ['string', 'null'], 'description': 'Null until the render finishes.'}, 'credits_used': {'type': 'number', 'description': '0 until the render succeeds; billing is post-deduct.'}, 'credits_quoted': {'type': 'number', 'description': 'The price fixed by the quote.'}}}
入力スキーマ
{'type': 'object', 'required': [], 'properties': {}}
出力スキーマ
{'type': 'object', 'required': ['plan', 'credits_remaining', 'can_generate', 'info_url'], 'properties': {'note': {'type': 'string'}, 'plan': {'type': 'string', 'description': 'free | starter | professional | ultra | enterprise_max'}, 'info_url': {'type': 'string', 'description': 'Informational page describing plans and entitlement options.'}, 'username': {'type': ['string', 'null']}, 'can_generate': {'type': 'boolean'}, 'credits_remaining': {'type': 'number'}}}
入力スキーマ
{'type': 'object', 'required': ['job_id'], 'properties': {'job_id': {'type': 'string', 'description': 'The job_id returned by generate_ad.'}}}
出力スキーマ
{'type': 'object', 'required': ['job_id', 'status', 'credits_used', 'next_step'], 'properties': {'note': {'type': 'string', 'description': "Present only when a succeeded job's charge could not be applied to the account."}, 'error': {'type': 'string'}, 'stage': {'type': 'string', 'description': 'storyboard | rendering | done, while known.'}, 'job_id': {'type': 'string'}, 'run_id': {'type': 'string'}, 'status': {'enum': ['queued', 'running', 'succeeded', 'failed'], 'type': 'string'}, 'percent': {'type': 'number'}, 'next_step': {'type': 'string'}, 'video_url': {'type': 'string', 'description': 'The finished ad with burnt-in captions. Present only when succeeded.'}, 'size_bytes': {'type': 'number'}, 'credits_used': {'type': ['number', 'null'], 'description': "Credits charged for this job when the record reports them; null when a succeeded job's record does not carry the figure (credits_quoted from generate_ad is the ceiling). 0 while running, when failed, or when the charge could not be applied (then note says so)."}, 'duration_seconds': {'type': 'number'}, 'retry_after_seconds': {'type': 'number', 'description': 'Present while the job is not terminal.'}, 'storyboard_sheet_url': {'type': 'string', 'description': 'The storyboard sheet image, when the run produced one.'}}}
入力スキーマ
{'type': 'object', 'required': ['slug'], 'properties': {'slug': {'type': 'string', 'description': 'Article slug, e.g. "kling-vs-sora-comparison".'}}}
出力スキーマ
{'type': 'object', 'required': ['slug', 'title', 'url', 'markdown'], 'properties': {'url': {'type': 'string'}, 'slug': {'type': 'string'}, 'title': {'type': 'string'}, 'markdown': {'type': 'string', 'description': 'Full article body.'}, 'published': {'type': 'string'}}}
入力スキーマ
{'type': 'object', 'required': ['canvas_id'], 'properties': {'canvas_id': {'type': 'string', 'description': 'The board id, from list_canvases or create_canvas.'}}}
出力スキーマ
{'type': 'object', 'required': ['canvas', 'next_step'], 'properties': {'canvas': {'type': 'object', 'required': ['id', 'name', 'revision', 'card_count', 'updated_at', 'link', 'cards', 'edges'], 'properties': {'id': {'type': 'string'}, 'link': {'type': 'string', 'description': "The board's page on AI Content Drop."}, 'name': {'type': 'string'}, 'cards': {'type': 'array', 'items': {'type': 'object', 'required': ['id', 'type', 'position', 'data'], 'properties': {'id': {'type': 'string'}, 'data': {'description': 'Per type. text: { text, title?, color? }. media: { url, kind, title?, caption?, source? }. generation: { model?, prompt?, kind, status (draft | queued | generating | done | failed), job_id?, media_url?, credits_used?, error? }. frame: { label, width, height }. task: { taskId }.'}, 'type': {'enum': ['text', 'media', 'generation', 'frame', 'task', 'legacy'], 'type': 'string'}, 'width': {'type': 'number'}, 'height': {'type': 'number'}, 'position': {'type': 'object', 'required': ['x', 'y'], 'properties': {'x': {'type': 'number'}, 'y': {'type': 'number'}}}}}}, 'edges': {'type': 'array', 'items': {'type': 'object', 'properties': {'id': {'type': 'string'}, 'label': {'description': 'Text drawn on the line, when it has one.'}, 'source': {'type': 'string', 'description': 'The card the connection starts from.'}, 'target': {'type': 'string', 'description': 'The card it leads to.'}}, 'description': "A connection drawn from one card to the next: { id, source, target, label? }. data.role start_image means the source card's finished image is the target card's start frame."}}, 'revision': {'type': 'number', 'description': "The board's version; every write bumps it."}, 'card_count': {'type': 'number'}, 'updated_at': {'type': ['string', 'null']}}}, 'next_step': {'type': 'string'}}}
入力スキーマ
{'type': 'object', 'required': ['canvas_id'], 'properties': {'canvas_id': {'type': 'string', 'description': 'The board id, from list_canvases or create_canvas.'}}}
出力スキーマ
{'type': 'object', 'required': ['canvas_id', 'name', 'link', 'next_step'], 'properties': {'link': {'type': 'string'}, 'name': {'type': 'string'}, 'canvas_id': {'type': 'string'}, 'next_step': {'type': 'string'}}}
入力スキーマ
{'type': 'object', 'required': ['id'], 'properties': {'id': {'type': 'string', 'description': 'The id returned by generate_video or generate_image.'}, 'kind': {'enum': ['video', 'image'], 'type': 'string', 'description': 'Which job type the id belongs to. Defaults to video.'}}}
出力スキーマ
{'type': 'object', 'required': ['id', 'status', 'credits_used'], 'properties': {'id': {'type': 'string', 'description': 'Poll this with get_generation.'}, 'kind': {'enum': ['video', 'image'], 'type': 'string'}, 'model': {'type': ['string', 'null'], 'description': 'Model ID, underscored.'}, 'title': {'type': ['string', 'null']}, 'status': {'type': 'string', 'description': 'generating | processing | completed | failed | timeout'}, 'image_url': {'type': ['string', 'null']}, 'video_url': {'type': ['string', 'null']}, 'created_at': {'type': ['string', 'null']}, 'credits_used': {'type': 'number', 'description': 'Charged only on success — a failed generation is 0.'}, 'error_message': {'type': ['string', 'null']}, 'thumbnail_url': {'type': ['string', 'null']}}}
入力スキーマ
{'type': 'object', 'required': ['ad_id'], 'properties': {'ad_id': {'type': 'string', 'description': "A saved ad's id, from list_saved_ads or save_competitor_ad."}}}
出力スキーマ
{'type': 'object', 'required': ['ad', 'decode', 'next_step'], 'properties': {'ad': {'type': 'object', 'required': ['id', 'ad_ref', 'platform', 'advertiser_name', 'ad_copy', 'media_url', 'media_type', 'estimated_spend', 'engagement_score', 'running_days', 'hook_text', 'cta_text', 'ad_url', 'demo', 'decoded', 'saved_at'], 'properties': {'id': {'type': 'string', 'description': "The saved ad's id; pass it as ad_id."}, 'demo': {'type': 'boolean', 'description': 'True for a sample row: not a real ad. Never present a sample as live data.'}, 'ad_ref': {'type': ['string', 'null'], 'description': "Opaque reference to the ad's source listing; copy it back unchanged when saving. Null when the source gave none."}, 'ad_url': {'type': ['string', 'null'], 'description': 'The public listing or post, when known.'}, 'ad_copy': {'type': ['string', 'null'], 'description': "The ad's primary text."}, 'decoded': {'type': 'boolean', 'description': 'True when a decode is stored; get_saved_ad returns it.'}, 'cta_text': {'type': ['string', 'null']}, 'platform': {'enum': ['meta', 'tiktok'], 'type': 'string'}, 'saved_at': {'type': ['string', 'null']}, 'hook_text': {'type': ['string', 'null'], 'description': 'The headline or opening line.'}, 'media_url': {'type': ['string', 'null'], 'description': 'The creative (video or image), when the source exposes one.'}, 'media_type': {'enum': ['video', 'image', 'carousel', None], 'type': ['string', 'null']}, 'running_days': {'type': ['number', 'null'], 'description': 'Days the ad has been running, when known.'}, 'advertiser_name': {'type': ['string', 'null']}, 'estimated_spend': {'type': ['string', 'null'], 'description': 'As reported by the source, e.g. a monthly range; absent for most platforms.'}, 'engagement_score': {'type': ['number', 'null']}}}, 'decode': {'type': ['object', 'null'], 'required': ['layers', 'recreationPrompt', 'confidence', 'decodedAt'], 'properties': {'layers': {'type': 'object', 'description': 'hook { pattern, first2s }, script { skeleton[], tone }, scenes { shotCount, medianCutSec, aspect, timeline[] }, audio { voStyle, pace, musicRole }, cta { pattern, placementSec?, urgencyDevice? }, style { visualElement, palette?, typography?, energy }.'}, 'decodedAt': {'type': 'string'}, 'confidence': {'type': 'number', 'description': '0-1.'}, 'recreationPrompt': {'type': 'string', 'description': "A 150-300 word prompt that recreates the ad's structure with a different product."}}, 'description': "The ad's formula, layer by layer, plus a generation-ready prompt."}, 'next_step': {'type': 'string'}}}
入力スキーマ
{'type': 'object', 'required': ['canvas_id', 'ids', 'label'], 'properties': {'ids': {'type': 'array', 'items': {'type': 'string'}, 'minItems': 1, 'description': 'The card ids to enclose.'}, 'label': {'type': 'string', 'description': "The frame's label, up to 200 characters."}, 'revision': {'type': 'number', 'description': 'The board revision this change is based on (from the last board you saw). Optional: when omitted the tool reads the current one first.'}, 'canvas_id': {'type': 'string', 'description': 'The board id, from list_canvases or create_canvas.'}}}
出力スキーマ
{'type': 'object', 'required': ['canvas', 'card', 'next_step'], 'properties': {'card': {'type': ['object', 'null'], 'required': ['id', 'type', 'position', 'data'], 'properties': {'id': {'type': 'string'}, 'data': {'description': 'Per type. text: { text, title?, color? }. media: { url, kind, title?, caption?, source? }. generation: { model?, prompt?, kind, status (draft | queued | generating | done | failed), job_id?, media_url?, credits_used?, error? }. frame: { label, width, height }. task: { taskId }.'}, 'type': {'enum': ['text', 'media', 'generation', 'frame', 'task', 'legacy'], 'type': 'string'}, 'width': {'type': 'number'}, 'height': {'type': 'number'}, 'position': {'type': 'object', 'required': ['x', 'y'], 'properties': {'x': {'type': 'number'}, 'y': {'type': 'number'}}}}}, 'canvas': {'type': 'object', 'required': ['id', 'name', 'revision', 'card_count', 'updated_at', 'link', 'cards', 'edges'], 'properties': {'id': {'type': 'string'}, 'link': {'type': 'string', 'description': "The board's page on AI Content Drop."}, 'name': {'type': 'string'}, 'cards': {'type': 'array', 'items': {'type': 'object', 'required': ['id', 'type', 'position', 'data'], 'properties': {'id': {'type': 'string'}, 'data': {'description': 'Per type. text: { text, title?, color? }. media: { url, kind, title?, caption?, source? }. generation: { model?, prompt?, kind, status (draft | queued | generating | done | failed), job_id?, media_url?, credits_used?, error? }. frame: { label, width, height }. task: { taskId }.'}, 'type': {'enum': ['text', 'media', 'generation', 'frame', 'task', 'legacy'], 'type': 'string'}, 'width': {'type': 'number'}, 'height': {'type': 'number'}, 'position': {'type': 'object', 'required': ['x', 'y'], 'properties': {'x': {'type': 'number'}, 'y': {'type': 'number'}}}}}}, 'edges': {'type': 'array', 'items': {'type': 'object', 'properties': {'id': {'type': 'string'}, 'label': {'description': 'Text drawn on the line, when it has one.'}, 'source': {'type': 'string', 'description': 'The card the connection starts from.'}, 'target': {'type': 'string', 'description': 'The card it leads to.'}}, 'description': "A connection drawn from one card to the next: { id, source, target, label? }. data.role start_image means the source card's finished image is the target card's start frame."}}, 'revision': {'type': 'number', 'description': "The board's version; every write bumps it."}, 'card_count': {'type': 'number'}, 'updated_at': {'type': ['string', 'null']}}}, 'next_step': {'type': 'string'}}}
入力スキーマ
{'type': 'object', 'required': ['url'], 'properties': {'url': {'type': 'string', 'description': 'Public https URL of the image.'}}}
出力スキーマ
{'type': 'object', 'required': ['url', 'content_type', 'bytes', 'next_step'], 'properties': {'url': {'type': 'string', 'description': 'The hosted copy.'}, 'bytes': {'type': 'number'}, 'width': {'type': 'number'}, 'height': {'type': 'number'}, 'next_step': {'type': 'string'}, 'content_type': {'type': 'string'}}}
入力スキーマ
{'type': 'object', 'required': ['url'], 'properties': {'url': {'type': 'string', 'description': "The brand's product page or app page."}, 'mode': {'enum': ['product', 'app'], 'type': 'string', 'description': 'What kind of page it is. Defaults to product.'}, 'persist': {'type': 'boolean', 'description': 'Save when the read is confident. Defaults to true.'}}}
出力スキーマ
{'type': 'object', 'required': ['profile', 'warnings', 'next_step'], 'properties': {'profile': {'type': ['object', 'null'], 'description': 'The saved profile, or null when not saved.'}, 'warnings': {'type': 'array', 'items': {'type': 'string'}}, 'next_step': {'type': 'string'}, 'extraction': {'type': ['object', 'null'], 'description': 'What was read from the page.'}}}
入力スキーマ
{'type': 'object', 'required': [], 'properties': {}}
出力スキーマ
{'type': 'object', 'required': ['count', 'formats'], 'properties': {'note': {'type': 'string'}, 'count': {'type': 'number'}, 'formats': {'type': 'array', 'items': {'type': 'object', 'required': ['id', 'name', 'description', 'duration_range_seconds', 'shot_range'], 'properties': {'id': {'type': 'string', 'description': 'Pass this as brief.format.'}, 'name': {'type': 'string'}, 'shot_range': {'type': 'array', 'items': {'type': 'number'}, 'maxItems': 2, 'minItems': 2, 'description': '[min, max] for brief.shotCount.'}, 'description': {'type': 'string'}, 'aspect_ratio': {'enum': ['9:16', '16:9', '1:1'], 'type': 'string', 'description': "The format's default aspect."}, 'duration_range_seconds': {'type': 'array', 'items': {'type': 'number'}, 'maxItems': 2, 'minItems': 2, 'description': '[min, max] for brief.totalDurationSec.'}, 'default_duration_seconds': {'type': 'number'}}}}}}
入力スキーマ
{'type': 'object', 'required': [], 'properties': {}}
出力スキーマ
{'type': 'object', 'required': ['count', 'profiles', 'next_step'], 'properties': {'count': {'type': 'number'}, 'profiles': {'type': 'array', 'items': {'type': 'object'}}, 'next_step': {'type': 'string'}}}
入力スキーマ
{'type': 'object', 'required': [], 'properties': {}}
出力スキーマ
{'type': 'object', 'required': ['count', 'canvases', 'next_step'], 'properties': {'count': {'type': 'number'}, 'canvases': {'type': 'array', 'items': {'type': 'object', 'required': ['id', 'name', 'revision', 'card_count', 'updated_at', 'link'], 'properties': {'id': {'type': 'string'}, 'link': {'type': 'string', 'description': "The board's page on AI Content Drop."}, 'name': {'type': 'string'}, 'revision': {'type': 'number', 'description': "The board's version; every write bumps it."}, 'card_count': {'type': 'number'}, 'updated_at': {'type': ['string', 'null']}}}}, 'next_step': {'type': 'string'}}}
入力スキーマ
{'type': 'object', 'required': [], 'properties': {'limit': {'type': 'number', 'description': 'How many to return (1-50). Defaults to 10.'}}}
出力スキーマ
{'type': 'object', 'required': ['count', 'generations'], 'properties': {'count': {'type': 'number'}, 'generations': {'type': 'array', 'items': {'type': 'object', 'required': ['id', 'status', 'credits_used'], 'properties': {'id': {'type': 'string', 'description': 'Poll this with get_generation.'}, 'kind': {'enum': ['video', 'image'], 'type': 'string'}, 'model': {'type': ['string', 'null'], 'description': 'Model ID, underscored.'}, 'title': {'type': ['string', 'null']}, 'status': {'type': 'string', 'description': 'generating | processing | completed | failed | timeout'}, 'image_url': {'type': ['string', 'null']}, 'video_url': {'type': ['string', 'null']}, 'created_at': {'type': ['string', 'null']}, 'credits_used': {'type': 'number', 'description': 'Charged only on success — a failed generation is 0.'}, 'error_message': {'type': ['string', 'null']}, 'thumbnail_url': {'type': ['string', 'null']}}}}}}
入力スキーマ
{'type': 'object', 'required': [], 'properties': {'type': {'enum': ['video', 'image'], 'type': 'string', 'description': 'Model family to list. Defaults to video.'}, 'max_credits': {'type': 'number', 'description': 'Only return models costing this many credits or fewer.'}}}
出力スキーマ
{'type': 'object', 'required': ['type', 'count', 'models'], 'properties': {'note': {'type': 'string'}, 'type': {'enum': ['video', 'image'], 'type': 'string'}, 'count': {'type': 'number', 'description': 'Models returned after filtering.'}, 'models': {'type': 'array', 'items': {'type': 'object', 'required': ['id', 'name', 'credits'], 'properties': {'id': {'type': 'string', 'description': 'Pass this as model_id or model.'}, 'name': {'type': 'string'}, 'credits': {'type': 'number', 'description': 'Flat cost per generation.'}}}}}}
入力スキーマ
{'type': 'object', 'required': [], 'properties': {}}
出力スキーマ
{'type': 'object', 'required': ['count', 'ads', 'next_step'], 'properties': {'ads': {'type': 'array', 'items': {'type': 'object', 'required': ['id', 'ad_ref', 'platform', 'advertiser_name', 'ad_copy', 'media_url', 'media_type', 'estimated_spend', 'engagement_score', 'running_days', 'hook_text', 'cta_text', 'ad_url', 'demo', 'decoded', 'saved_at'], 'properties': {'id': {'type': 'string', 'description': "The saved ad's id; pass it as ad_id."}, 'demo': {'type': 'boolean', 'description': 'True for a sample row: not a real ad. Never present a sample as live data.'}, 'ad_ref': {'type': ['string', 'null'], 'description': "Opaque reference to the ad's source listing; copy it back unchanged when saving. Null when the source gave none."}, 'ad_url': {'type': ['string', 'null'], 'description': 'The public listing or post, when known.'}, 'ad_copy': {'type': ['string', 'null'], 'description': "The ad's primary text."}, 'decoded': {'type': 'boolean', 'description': 'True when a decode is stored; get_saved_ad returns it.'}, 'cta_text': {'type': ['string', 'null']}, 'platform': {'enum': ['meta', 'tiktok'], 'type': 'string'}, 'saved_at': {'type': ['string', 'null']}, 'hook_text': {'type': ['string', 'null'], 'description': 'The headline or opening line.'}, 'media_url': {'type': ['string', 'null'], 'description': 'The creative (video or image), when the source exposes one.'}, 'media_type': {'enum': ['video', 'image', 'carousel', None], 'type': ['string', 'null']}, 'running_days': {'type': ['number', 'null'], 'description': 'Days the ad has been running, when known.'}, 'advertiser_name': {'type': ['string', 'null']}, 'estimated_spend': {'type': ['string', 'null'], 'description': 'As reported by the source, e.g. a monthly range; absent for most platforms.'}, 'engagement_score': {'type': ['number', 'null']}}}}, 'count': {'type': 'number'}, 'next_step': {'type': 'string'}}}
入力スキーマ
{'type': 'object', 'required': [], 'properties': {}}
出力スキーマ
{'type': 'object', 'required': ['count', 'avatars'], 'properties': {'note': {'type': 'string'}, 'count': {'type': 'number'}, 'avatars': {'type': 'array', 'items': {'type': 'object', 'required': ['id', 'name', 'description', 'portrait_url'], 'properties': {'id': {'type': 'string', 'description': 'Pass this as template to generate_ugc_video.'}, 'name': {'type': 'string'}, 'description': {'type': 'string'}, 'portrait_url': {'type': 'string', 'description': "The template portrait a generate_ugc_video job with this template renders from; the same image the studio loads as the creator's face."}}}}}}
入力スキーマ
{'type': 'object', 'required': ['canvas_id', 'moves'], 'properties': {'moves': {'type': 'array', 'items': {'type': 'object', 'required': ['id', 'position'], 'properties': {'id': {'type': 'string'}, 'position': {'type': 'object', 'required': ['x', 'y'], 'properties': {'x': {'type': 'number'}, 'y': {'type': 'number'}}, 'description': 'Optional { x, y } in board pixels. When omitted the server places the card in the first free grid cell.'}}}, 'minItems': 1, 'description': 'Cards and their new positions.'}, 'revision': {'type': 'number', 'description': 'The board revision this change is based on (from the last board you saw). Optional: when omitted the tool reads the current one first.'}, 'canvas_id': {'type': 'string', 'description': 'The board id, from list_canvases or create_canvas.'}}}
出力スキーマ
{'type': 'object', 'required': ['canvas', 'next_step'], 'properties': {'canvas': {'type': 'object', 'required': ['id', 'name', 'revision', 'card_count', 'updated_at', 'link', 'cards', 'edges'], 'properties': {'id': {'type': 'string'}, 'link': {'type': 'string', 'description': "The board's page on AI Content Drop."}, 'name': {'type': 'string'}, 'cards': {'type': 'array', 'items': {'type': 'object', 'required': ['id', 'type', 'position', 'data'], 'properties': {'id': {'type': 'string'}, 'data': {'description': 'Per type. text: { text, title?, color? }. media: { url, kind, title?, caption?, source? }. generation: { model?, prompt?, kind, status (draft | queued | generating | done | failed), job_id?, media_url?, credits_used?, error? }. frame: { label, width, height }. task: { taskId }.'}, 'type': {'enum': ['text', 'media', 'generation', 'frame', 'task', 'legacy'], 'type': 'string'}, 'width': {'type': 'number'}, 'height': {'type': 'number'}, 'position': {'type': 'object', 'required': ['x', 'y'], 'properties': {'x': {'type': 'number'}, 'y': {'type': 'number'}}}}}}, 'edges': {'type': 'array', 'items': {'type': 'object', 'properties': {'id': {'type': 'string'}, 'label': {'description': 'Text drawn on the line, when it has one.'}, 'source': {'type': 'string', 'description': 'The card the connection starts from.'}, 'target': {'type': 'string', 'description': 'The card it leads to.'}}, 'description': "A connection drawn from one card to the next: { id, source, target, label? }. data.role start_image means the source card's finished image is the target card's start frame."}}, 'revision': {'type': 'number', 'description': "The board's version; every write bumps it."}, 'card_count': {'type': 'number'}, 'updated_at': {'type': ['string', 'null']}}}, 'next_step': {'type': 'string'}}}
入力スキーマ
{'type': 'object', 'required': ['canvas_id'], 'properties': {'canvas_id': {'type': 'string', 'description': 'The board id, from list_canvases or create_canvas.'}}}
出力スキーマ
{'type': 'object', 'required': ['canvas', 'next_step'], 'properties': {'canvas': {'type': 'object', 'required': ['id', 'name', 'revision', 'card_count', 'updated_at', 'link', 'cards', 'edges'], 'properties': {'id': {'type': 'string'}, 'link': {'type': 'string', 'description': "The board's page on AI Content Drop."}, 'name': {'type': 'string'}, 'cards': {'type': 'array', 'items': {'type': 'object', 'required': ['id', 'type', 'position', 'data'], 'properties': {'id': {'type': 'string'}, 'data': {'description': 'Per type. text: { text, title?, color? }. media: { url, kind, title?, caption?, source? }. generation: { model?, prompt?, kind, status (draft | queued | generating | done | failed), job_id?, media_url?, credits_used?, error? }. frame: { label, width, height }. task: { taskId }.'}, 'type': {'enum': ['text', 'media', 'generation', 'frame', 'task', 'legacy'], 'type': 'string'}, 'width': {'type': 'number'}, 'height': {'type': 'number'}, 'position': {'type': 'object', 'required': ['x', 'y'], 'properties': {'x': {'type': 'number'}, 'y': {'type': 'number'}}}}}}, 'edges': {'type': 'array', 'items': {'type': 'object', 'properties': {'id': {'type': 'string'}, 'label': {'description': 'Text drawn on the line, when it has one.'}, 'source': {'type': 'string', 'description': 'The card the connection starts from.'}, 'target': {'type': 'string', 'description': 'The card it leads to.'}}, 'description': "A connection drawn from one card to the next: { id, source, target, label? }. data.role start_image means the source card's finished image is the target card's start frame."}}, 'revision': {'type': 'number', 'description': "The board's version; every write bumps it."}, 'card_count': {'type': 'number'}, 'updated_at': {'type': ['string', 'null']}}}, 'next_step': {'type': 'string'}}}
入力スキーマ
{'type': 'object', 'required': ['canvas_id', 'name'], 'properties': {'name': {'type': 'string', 'description': 'The new name, 1-100 characters.'}, 'revision': {'type': 'number', 'description': 'The board revision this change is based on (from the last board you saw). Optional: when omitted the tool reads the current one first.'}, 'canvas_id': {'type': 'string', 'description': 'The board id, from list_canvases or create_canvas.'}}}
出力スキーマ
{'type': 'object', 'required': ['canvas', 'next_step'], 'properties': {'canvas': {'type': 'object', 'required': ['id', 'name', 'revision', 'card_count', 'updated_at', 'link', 'cards', 'edges'], 'properties': {'id': {'type': 'string'}, 'link': {'type': 'string', 'description': "The board's page on AI Content Drop."}, 'name': {'type': 'string'}, 'cards': {'type': 'array', 'items': {'type': 'object', 'required': ['id', 'type', 'position', 'data'], 'properties': {'id': {'type': 'string'}, 'data': {'description': 'Per type. text: { text, title?, color? }. media: { url, kind, title?, caption?, source? }. generation: { model?, prompt?, kind, status (draft | queued | generating | done | failed), job_id?, media_url?, credits_used?, error? }. frame: { label, width, height }. task: { taskId }.'}, 'type': {'enum': ['text', 'media', 'generation', 'frame', 'task', 'legacy'], 'type': 'string'}, 'width': {'type': 'number'}, 'height': {'type': 'number'}, 'position': {'type': 'object', 'required': ['x', 'y'], 'properties': {'x': {'type': 'number'}, 'y': {'type': 'number'}}}}}}, 'edges': {'type': 'array', 'items': {'type': 'object', 'properties': {'id': {'type': 'string'}, 'label': {'description': 'Text drawn on the line, when it has one.'}, 'source': {'type': 'string', 'description': 'The card the connection starts from.'}, 'target': {'type': 'string', 'description': 'The card it leads to.'}}, 'description': "A connection drawn from one card to the next: { id, source, target, label? }. data.role start_image means the source card's finished image is the target card's start frame."}}, 'revision': {'type': 'number', 'description': "The board's version; every write bumps it."}, 'card_count': {'type': 'number'}, 'updated_at': {'type': ['string', 'null']}}}, 'next_step': {'type': 'string'}}}
入力スキーマ
{'type': 'object', 'required': ['canvas_id', 'card_id', 'quote_id'], 'properties': {'card_id': {'type': 'string', 'description': 'A generation card with a model and a prompt.'}, 'quote_id': {'type': 'string', 'description': "The quote_id from estimate_credit_cost for this card's model and kind, quoted with the card's duration and resolution when it has them. Required."}, 'revision': {'type': 'number', 'description': 'The board revision this change is based on (from the last board you saw). Optional: when omitted the tool reads the current one first.'}, 'canvas_id': {'type': 'string', 'description': 'The board id, from list_canvases or create_canvas.'}}}
出力スキーマ
{'type': 'object', 'required': ['canvas', 'card', 'job', 'credits_quoted', 'next_step'], 'properties': {'job': {'type': 'object', 'required': ['id', 'kind'], 'properties': {'id': {'type': 'string', 'description': 'Poll with get_generation if needed; refresh_canvas shows it on the card.'}, 'kind': {'enum': ['video', 'image'], 'type': 'string'}}}, 'card': {'type': ['object', 'null'], 'required': ['id', 'type', 'position', 'data'], 'properties': {'id': {'type': 'string'}, 'data': {'description': 'Per type. text: { text, title?, color? }. media: { url, kind, title?, caption?, source? }. generation: { model?, prompt?, kind, status (draft | queued | generating | done | failed), job_id?, media_url?, credits_used?, error? }. frame: { label, width, height }. task: { taskId }.'}, 'type': {'enum': ['text', 'media', 'generation', 'frame', 'task', 'legacy'], 'type': 'string'}, 'width': {'type': 'number'}, 'height': {'type': 'number'}, 'position': {'type': 'object', 'required': ['x', 'y'], 'properties': {'x': {'type': 'number'}, 'y': {'type': 'number'}}}}}, 'canvas': {'type': 'object', 'required': ['id', 'name', 'revision', 'card_count', 'updated_at', 'link', 'cards', 'edges'], 'properties': {'id': {'type': 'string'}, 'link': {'type': 'string', 'description': "The board's page on AI Content Drop."}, 'name': {'type': 'string'}, 'cards': {'type': 'array', 'items': {'type': 'object', 'required': ['id', 'type', 'position', 'data'], 'properties': {'id': {'type': 'string'}, 'data': {'description': 'Per type. text: { text, title?, color? }. media: { url, kind, title?, caption?, source? }. generation: { model?, prompt?, kind, status (draft | queued | generating | done | failed), job_id?, media_url?, credits_used?, error? }. frame: { label, width, height }. task: { taskId }.'}, 'type': {'enum': ['text', 'media', 'generation', 'frame', 'task', 'legacy'], 'type': 'string'}, 'width': {'type': 'number'}, 'height': {'type': 'number'}, 'position': {'type': 'object', 'required': ['x', 'y'], 'properties': {'x': {'type': 'number'}, 'y': {'type': 'number'}}}}}}, 'edges': {'type': 'array', 'items': {'type': 'object', 'properties': {'id': {'type': 'string'}, 'label': {'description': 'Text drawn on the line, when it has one.'}, 'source': {'type': 'string', 'description': 'The card the connection starts from.'}, 'target': {'type': 'string', 'description': 'The card it leads to.'}}, 'description': "A connection drawn from one card to the next: { id, source, target, label? }. data.role start_image means the source card's finished image is the target card's start frame."}}, 'revision': {'type': 'number', 'description': "The board's version; every write bumps it."}, 'card_count': {'type': 'number'}, 'updated_at': {'type': ['string', 'null']}}}, 'next_step': {'type': 'string'}, 'credits_quoted': {'type': ['number', 'null'], 'description': 'The ceiling fixed by the quote.'}}}
入力スキーマ
{'type': 'object', 'required': ['ad'], 'properties': {'ad': {'type': 'object', 'required': ['platform'], 'properties': {'demo': {'type': 'boolean', 'description': 'True for a sample row: not a real ad. Never present a sample as live data.'}, 'ad_ref': {'type': ['string', 'null'], 'description': "Opaque reference to the ad's source listing; copy it back unchanged when saving. Null when the source gave none."}, 'ad_url': {'type': ['string', 'null'], 'description': 'The public listing or post, when known.'}, 'ad_copy': {'type': ['string', 'null'], 'description': "The ad's primary text."}, 'cta_text': {'type': ['string', 'null']}, 'platform': {'enum': ['meta', 'tiktok'], 'type': 'string'}, 'hook_text': {'type': ['string', 'null'], 'description': 'The headline or opening line.'}, 'media_url': {'type': ['string', 'null'], 'description': 'The creative (video or image), when the source exposes one.'}, 'media_type': {'enum': ['video', 'image', 'carousel', None], 'type': ['string', 'null']}, 'running_days': {'type': ['number', 'null'], 'description': 'Days the ad has been running, when known.'}, 'advertiser_name': {'type': ['string', 'null']}, 'estimated_spend': {'type': ['string', 'null'], 'description': 'As reported by the source, e.g. a monthly range; absent for most platforms.'}, 'engagement_score': {'type': ['number', 'null']}}, 'description': 'One row from search_competitor_ads results[], copied as is.'}}}
出力スキーマ
{'type': 'object', 'required': ['ad', 'next_step'], 'properties': {'ad': {'type': 'object', 'required': ['id', 'ad_ref', 'platform', 'advertiser_name', 'ad_copy', 'media_url', 'media_type', 'estimated_spend', 'engagement_score', 'running_days', 'hook_text', 'cta_text', 'ad_url', 'demo', 'decoded', 'saved_at'], 'properties': {'id': {'type': 'string', 'description': "The saved ad's id; pass it as ad_id."}, 'demo': {'type': 'boolean', 'description': 'True for a sample row: not a real ad. Never present a sample as live data.'}, 'ad_ref': {'type': ['string', 'null'], 'description': "Opaque reference to the ad's source listing; copy it back unchanged when saving. Null when the source gave none."}, 'ad_url': {'type': ['string', 'null'], 'description': 'The public listing or post, when known.'}, 'ad_copy': {'type': ['string', 'null'], 'description': "The ad's primary text."}, 'decoded': {'type': 'boolean', 'description': 'True when a decode is stored; get_saved_ad returns it.'}, 'cta_text': {'type': ['string', 'null']}, 'platform': {'enum': ['meta', 'tiktok'], 'type': 'string'}, 'saved_at': {'type': ['string', 'null']}, 'hook_text': {'type': ['string', 'null'], 'description': 'The headline or opening line.'}, 'media_url': {'type': ['string', 'null'], 'description': 'The creative (video or image), when the source exposes one.'}, 'media_type': {'enum': ['video', 'image', 'carousel', None], 'type': ['string', 'null']}, 'running_days': {'type': ['number', 'null'], 'description': 'Days the ad has been running, when known.'}, 'advertiser_name': {'type': ['string', 'null']}, 'estimated_spend': {'type': ['string', 'null'], 'description': 'As reported by the source, e.g. a monthly range; absent for most platforms.'}, 'engagement_score': {'type': ['number', 'null']}}}, 'next_step': {'type': 'string'}}}
入力スキーマ
{'type': 'object', 'required': ['query'], 'properties': {'limit': {'type': 'number', 'description': 'Maximum results (1-25). Defaults to 10.'}, 'query': {'type': 'string', 'description': "Keywords, e.g. 'kling vs sora' or 'ugc hooks'."}}}
出力スキーマ
{'type': 'object', 'required': ['query', 'count', 'results'], 'properties': {'count': {'type': 'number'}, 'query': {'type': 'string'}, 'results': {'type': 'array', 'items': {'type': 'object', 'required': ['slug', 'title', 'url'], 'properties': {'url': {'type': 'string'}, 'slug': {'type': 'string', 'description': 'Pass this to get_article.'}, 'tags': {'type': 'array', 'items': {'type': 'string'}}, 'title': {'type': 'string'}, 'category': {'type': 'string'}, 'published': {'type': 'string'}, 'description': {'type': 'string'}, 'markdown_url': {'type': 'string'}, 'reading_time_minutes': {'type': 'number'}}}}}}
入力スキーマ
{'type': 'object', 'required': ['keyword'], 'properties': {'sort': {'enum': ['impressions', 'recent'], 'type': 'string', 'description': 'impressions (default) ranks by reach; recent by start date.'}, 'limit': {'type': 'number', 'description': 'Rows to return, 1-20; defaults to 10.'}, 'keyword': {'type': 'string', 'description': 'What to search for: a product, a category or a competitor, 1-200 characters.'}, 'platform': {'enum': ['meta', 'tiktok'], 'type': 'string', 'description': 'Defaults to meta.'}}}
出力スキーマ
{'type': 'object', 'required': ['keyword', 'platform', 'sort', 'count', 'total_found', 'demo', 'results', 'next_step'], 'properties': {'demo': {'type': 'boolean', 'description': 'True when results are sample rows because live data was not available.'}, 'note': {'type': 'string', 'description': 'Present only when demo is true: why, and what the rows are.'}, 'sort': {'enum': ['impressions', 'recent'], 'type': 'string'}, 'count': {'type': 'number', 'description': 'Rows returned.'}, 'keyword': {'type': 'string'}, 'results': {'type': 'array', 'items': {'type': 'object', 'required': ['ad_ref', 'platform', 'advertiser_name', 'ad_copy', 'media_url', 'media_type', 'estimated_spend', 'engagement_score', 'running_days', 'hook_text', 'cta_text', 'ad_url', 'demo'], 'properties': {'demo': {'type': 'boolean', 'description': 'True for a sample row: not a real ad. Never present a sample as live data.'}, 'ad_ref': {'type': ['string', 'null'], 'description': "Opaque reference to the ad's source listing; copy it back unchanged when saving. Null when the source gave none."}, 'ad_url': {'type': ['string', 'null'], 'description': 'The public listing or post, when known.'}, 'ad_copy': {'type': ['string', 'null'], 'description': "The ad's primary text."}, 'cta_text': {'type': ['string', 'null']}, 'platform': {'enum': ['meta', 'tiktok'], 'type': 'string'}, 'hook_text': {'type': ['string', 'null'], 'description': 'The headline or opening line.'}, 'media_url': {'type': ['string', 'null'], 'description': 'The creative (video or image), when the source exposes one.'}, 'media_type': {'enum': ['video', 'image', 'carousel', None], 'type': ['string', 'null']}, 'running_days': {'type': ['number', 'null'], 'description': 'Days the ad has been running, when known.'}, 'advertiser_name': {'type': ['string', 'null']}, 'estimated_spend': {'type': ['string', 'null'], 'description': 'As reported by the source, e.g. a monthly range; absent for most platforms.'}, 'engagement_score': {'type': ['number', 'null']}}}}, 'platform': {'enum': ['meta', 'tiktok'], 'type': 'string'}, 'next_step': {'type': 'string'}, 'total_found': {'type': 'number', 'description': 'Rows the search produced before limit.'}}}
入力スキーマ
{'type': 'object', 'required': ['canvas_id', 'card_id'], 'properties': {'data': {'type': 'object', 'description': "Fields to merge into the card's data; fields not named are kept."}, 'width': {'type': 'number', 'description': 'Optional card width in pixels.'}, 'height': {'type': 'number', 'description': 'Optional card height in pixels.'}, 'card_id': {'type': 'string', 'description': 'The card id, from cards[] on the board.'}, 'position': {'type': 'object', 'required': ['x', 'y'], 'properties': {'x': {'type': 'number'}, 'y': {'type': 'number'}}, 'description': 'Optional { x, y } in board pixels. When omitted the server places the card in the first free grid cell.'}, 'revision': {'type': 'number', 'description': 'The board revision this change is based on (from the last board you saw). Optional: when omitted the tool reads the current one first.'}, 'canvas_id': {'type': 'string', 'description': 'The board id, from list_canvases or create_canvas.'}}}
出力スキーマ
{'type': 'object', 'required': ['canvas', 'card', 'next_step'], 'properties': {'card': {'type': ['object', 'null'], 'required': ['id', 'type', 'position', 'data'], 'properties': {'id': {'type': 'string'}, 'data': {'description': 'Per type. text: { text, title?, color? }. media: { url, kind, title?, caption?, source? }. generation: { model?, prompt?, kind, status (draft | queued | generating | done | failed), job_id?, media_url?, credits_used?, error? }. frame: { label, width, height }. task: { taskId }.'}, 'type': {'enum': ['text', 'media', 'generation', 'frame', 'task', 'legacy'], 'type': 'string'}, 'width': {'type': 'number'}, 'height': {'type': 'number'}, 'position': {'type': 'object', 'required': ['x', 'y'], 'properties': {'x': {'type': 'number'}, 'y': {'type': 'number'}}}}}, 'canvas': {'type': 'object', 'required': ['id', 'name', 'revision', 'card_count', 'updated_at', 'link', 'cards', 'edges'], 'properties': {'id': {'type': 'string'}, 'link': {'type': 'string', 'description': "The board's page on AI Content Drop."}, 'name': {'type': 'string'}, 'cards': {'type': 'array', 'items': {'type': 'object', 'required': ['id', 'type', 'position', 'data'], 'properties': {'id': {'type': 'string'}, 'data': {'description': 'Per type. text: { text, title?, color? }. media: { url, kind, title?, caption?, source? }. generation: { model?, prompt?, kind, status (draft | queued | generating | done | failed), job_id?, media_url?, credits_used?, error? }. frame: { label, width, height }. task: { taskId }.'}, 'type': {'enum': ['text', 'media', 'generation', 'frame', 'task', 'legacy'], 'type': 'string'}, 'width': {'type': 'number'}, 'height': {'type': 'number'}, 'position': {'type': 'object', 'required': ['x', 'y'], 'properties': {'x': {'type': 'number'}, 'y': {'type': 'number'}}}}}}, 'edges': {'type': 'array', 'items': {'type': 'object', 'properties': {'id': {'type': 'string'}, 'label': {'description': 'Text drawn on the line, when it has one.'}, 'source': {'type': 'string', 'description': 'The card the connection starts from.'}, 'target': {'type': 'string', 'description': 'The card it leads to.'}}, 'description': "A connection drawn from one card to the next: { id, source, target, label? }. data.role start_image means the source card's finished image is the target card's start frame."}}, 'revision': {'type': 'number', 'description': "The board's version; every write bumps it."}, 'card_count': {'type': 'number'}, 'updated_at': {'type': ['string', 'null']}}}, 'next_step': {'type': 'string'}}}
入力スキーマ
{'type': 'object', 'required': ['brief'], 'properties': {'brief': {'type': 'object', 'description': 'The ad brief: brandName, brandOneLiner, valueProps (1-8 strings), cta, intent, format (an id from list_ad_formats), shotCount (2-5), totalDurationSec (6-20), aspect (9:16 | 16:9 | 1:1), language, quality (fast | premium), modelTier (standard | cinematic), garmentImageUrl for the try-on formats.'}}}
出力スキーマ
{'type': 'object', 'required': ['storyboard', 'next_step'], 'properties': {'format': {'type': 'string'}, 'next_step': {'type': 'string'}, 'storyboard': {'type': ['object', 'null'], 'description': 'ad { aspect, totalDurationSec, voiceLanguage } and shots[].'}}}
最近のツール変更
類似のMCPサーバー
Picorn
Creates and edits layered social images, videos, slideshows, vector assets, and marketing projects with persistent editable canva…
Carryo Website Publisher
Creates, previews, publishes, edits and unpublishes HTML websites, landing pages, reports and proposals, with hosted images, draf…
Orisu
Creates image, video, and advertising workflows with brand kits and shareable outputs.
lamina
Generates on-brand product photos, model try-ons, video reels, and banners from briefs and brand kits.
Meepo Studio
Enables creating designs, social carousels, videos, and marketing campaigns from an AI agent.
Bloopo — AI Ad & Creative Studio
Creates advertising assets including video ads, UGC, product images, voiceovers, brand kits, and A/B variants.
Morphed
Creates AI-generated images and videos while managing projects, credits, and campaign context.
Hermoso
Supports ad research, competitor analysis, video and static ad creation, campaign policy checks, content publishing, and performa…