Endpoints: 28,729MCP servers: 18,413Payout addresses: 2,070Paid calls: 1,521Letters: 13Defects: 1,322counted 3 min ago
teppi

Server definition

Hash
sha256:1dfd7b297a8ae354f5ad4337a58960ecece220d6bc7d2000c694f731e83dec00
What it is
What a remote MCP server returned when asked what it offers: 42 tools

The blob, as servednamed by its sha256

{ "instructions": "All 42 tools are discoverable. 7 read tools work anonymously (models, prices and quotes, guides, ad formats and creators). Sign in through OAuth, or add an API key header (Authorization: Bearer acd_live_…), to generate and to read the account.", "tools": [ { "description": "Place a saved competitor ad on a board as a media card (its video or image, the advertiser as title, the hook as caption) with its decoded brief attached when it has one. Costs no credits. Returns the whole board and the new card. SIGN-IN REQUIRED: connect this server with OAuth (the host prompts for it), or add an API key header \"Authorization: Bearer acd_live_…\" created at https://aicontentdrop.com/settings/integrations.", "inputSchema": { "properties": { "ad_id": { "description": "A saved ad's id, from list_saved_ads or save_competitor_ad.", "type": "string" }, "canvas_id": { "description": "The board id, from list_canvases or create_canvas.", "type": "string" }, "revision": { "description": "The board revision this change is based on. Optional: when omitted the tool reads the current one first.", "type": "number" } }, "required": [ "ad_id", "canvas_id" ], "type": "object" }, "name": "ad_to_canvas_card", "outputSchema": { "properties": { "ad": { "properties": { "decoded": { "description": "True when the card carries the decoded brief.", "type": "boolean" }, "id": { "type": "string" }, "title": { "type": "string" } }, "required": [ "id", "title", "decoded" ], "type": "object" }, "canvas": { "properties": { "card_count": { "type": "number" }, "cards": { "items": { "properties": { "data": { "description": "For the placed ad: { url, kind, title, caption?, source: { kind: \"ad\", id }, brief? }." }, "height": { "type": "number" }, "id": { "type": "string" }, "position": { "properties": { "x": { "type": "number" }, "y": { "type": "number" } }, "required": [ "x", "y" ], "type": "object" }, "type": { "enum": [ "text", "media", "generation", "frame", "task", "legacy" ], "type": "string" }, "width": { "type": "number" } }, "required": [ "id", "type", "position", "data" ], "type": "object" }, "type": "array" }, "edges": { "items": { "type": "object" }, "type": "array" }, "id": { "type": "string" }, "link": { "description": "The board's page on AI Content Drop.", "type": "string" }, "name": { "type": "string" }, "revision": { "description": "The board's version; every write bumps it.", "type": "number" }, "updated_at": { "type": [ "string", "null" ] } }, "required": [ "id", "name", "revision", "card_count", "updated_at", "link", "cards", "edges" ], "type": "object" }, "card": { "properties": { "data": { "description": "For the placed ad: { url, kind, title, caption?, source: { kind: \"ad\", id }, brief? }." }, "height": { "type": "number" }, "id": { "type": "string" }, "position": { "properties": { "x": { "type": "number" }, "y": { "type": "number" } }, "required": [ "x", "y" ], "type": "object" }, "type": { "enum": [ "text", "media", "generation", "frame", "task", "legacy" ], "type": "string" }, "width": { "type": "number" } }, "required": [ "id", "type", "position", "data" ], "type": [ "object", "null" ] }, "next_step": { "type": "string" } }, "required": [ "canvas", "card", "ad", "next_step" ], "type": "object" } }, { "description": "Add a labelled frame (a region such as Week 1 or Hooks) to a board. To wrap existing cards in a frame use group_cards instead. Costs no credits. SIGN-IN REQUIRED: connect this server with OAuth (the host prompts for it), or add an API key header \"Authorization: Bearer acd_live_…\" created at https://aicontentdrop.com/settings/integrations.", "inputSchema": { "properties": { "canvas_id": { "description": "The board id, from list_canvases or create_canvas.", "type": "string" }, "height": { "description": "Optional height in pixels; defaults to 360.", "type": "number" }, "label": { "description": "The frame's label, up to 200 characters.", "type": "string" }, "position": { "description": "Optional { x, y } in board pixels. When omitted the server places the card in the first free grid cell.", "properties": { "x": { "type": "number" }, "y": { "type": "number" } }, "required": [ "x", "y" ], "type": "object" }, "revision": { "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.", "type": "number" }, "width": { "description": "Optional width in pixels; defaults to 480.", "type": "number" } }, "required": [ "canvas_id", "label" ], "type": "object" }, "name": "add_frame", "outputSchema": { "properties": { "canvas": { "properties": { "card_count": { "type": "number" }, "cards": { "items": { "properties": { "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 }." }, "height": { "type": "number" }, "id": { "type": "string" }, "position": { "properties": { "x": { "type": "number" }, "y": { "type": "number" } }, "required": [ "x", "y" ], "type": "object" }, "type": { "enum": [ "text", "media", "generation", "frame", "task", "legacy" ], "type": "string" }, "width": { "type": "number" } }, "required": [ "id", "type", "position", "data" ], "type": "object" }, "type": "array" }, "edges": { "items": { "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.", "properties": { "id": { "type": "string" }, "label": { "description": "Text drawn on the line, when it has one." }, "source": { "description": "The card the connection starts from.", "type": "string" }, "target": { "description": "The card it leads to.", "type": "string" } }, "type": "object" }, "type": "array" }, "id": { "type": "string" }, "link": { "description": "The board's page on AI Content Drop.", "type": "string" }, "name": { "type": "string" }, "revision": { "description": "The board's version; every write bumps it.", "type": "number" }, "updated_at": { "type": [ "string", "null" ] } }, "required": [ "id", "name", "revision", "card_count", "updated_at", "link", "cards", "edges" ], "type": "object" }, "card": { "properties": { "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 }." }, "height": { "type": "number" }, "id": { "type": "string" }, "position": { "properties": { "x": { "type": "number" }, "y": { "type": "number" } }, "required": [ "x", "y" ], "type": "object" }, "type": { "enum": [ "text", "media", "generation", "frame", "task", "legacy" ], "type": "string" }, "width": { "type": "number" } }, "required": [ "id", "type", "position", "data" ], "type": [ "object", "null" ] }, "next_step": { "type": "string" } }, "required": [ "canvas", "card", "next_step" ], "type": "object" } }, { "description": "Add a draft generation card to a board: a prompt and a model (an id from list_models) that can be rendered later with run_generation_card. Adding it costs nothing; nothing renders until it is run with a quote. Set duration and resolution on the card for a per-second model: the quote for run_generation_card must be taken with them. For a step that builds on an earlier card (a still that becomes a video), pass from_card_id: the new card is connected to that card on the board and, unless it has its own image_url, starts from that card's finished image. SIGN-IN REQUIRED: connect this server with OAuth (the host prompts for it), or add an API key header \"Authorization: Bearer acd_live_…\" created at https://aicontentdrop.com/settings/integrations.", "inputSchema": { "properties": { "aspect_ratio": { "description": "Optional, e.g. 9:16, 16:9, 1:1.", "type": "string" }, "canvas_id": { "description": "The board id, from list_canvases or create_canvas.", "type": "string" }, "duration": { "description": "Optional clip length in seconds, for video models that price by duration.", "type": "number" }, "from_card_id": { "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": "string" }, "height": { "description": "Optional card height in pixels.", "type": "number" }, "image_url": { "description": "Optional public https reference image for image-to-video or image-to-image.", "type": "string" }, "kind": { "description": "Defaults to video.", "enum": [ "video", "image" ], "type": "string" }, "model": { "description": "A model id from list_models.", "type": "string" }, "position": { "description": "Optional { x, y } in board pixels. When omitted the server places the card in the first free grid cell.", "properties": { "x": { "type": "number" }, "y": { "type": "number" } }, "required": [ "x", "y" ], "type": "object" }, "prompt": { "description": "The generation prompt, up to 4000 characters.", "type": "string" }, "resolution": { "description": "Optional, e.g. 720p, 1080p.", "type": "string" }, "revision": { "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.", "type": "number" }, "width": { "description": "Optional card width in pixels.", "type": "number" } }, "required": [ "canvas_id" ], "type": "object" }, "name": "add_generation_card", "outputSchema": { "properties": { "canvas": { "properties": { "card_count": { "type": "number" }, "cards": { "items": { "properties": { "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 }." }, "height": { "type": "number" }, "id": { "type": "string" }, "position": { "properties": { "x": { "type": "number" }, "y": { "type": "number" } }, "required": [ "x", "y" ], "type": "object" }, "type": { "enum": [ "text", "media", "generation", "frame", "task", "legacy" ], "type": "string" }, "width": { "type": "number" } }, "required": [ "id", "type", "position", "data" ], "type": "object" }, "type": "array" }, "edges": { "items": { "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.", "properties": { "id": { "type": "string" }, "label": { "description": "Text drawn on the line, when it has one." }, "source": { "description": "The card the connection starts from.", "type": "string" }, "target": { "description": "The card it leads to.", "type": "string" } }, "type": "object" }, "type": "array" }, "id": { "type": "string" }, "link": { "description": "The board's page on AI Content Drop.", "type": "string" }, "name": { "type": "string" }, "revision": { "description": "The board's version; every write bumps it.", "type": "number" }, "updated_at": { "type": [ "string", "null" ] } }, "required": [ "id", "name", "revision", "card_count", "updated_at", "link", "cards", "edges" ], "type": "object" }, "card": { "properties": { "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 }." }, "height": { "type": "number" }, "id": { "type": "string" }, "position": { "properties": { "x": { "type": "number" }, "y": { "type": "number" } }, "required": [ "x", "y" ], "type": "object" }, "type": { "enum": [ "text", "media", "generation", "frame", "task", "legacy" ], "type": "string" }, "width": { "type": "number" } }, "required": [ "id", "type", "position", "data" ], "type": [ "object", "null" ] }, "edge": { "description": "The connection from from_card_id, when one was given.", "properties": { "id": { "type": "string" }, "label": { "description": "Text drawn on the line, when it has one." }, "source": { "description": "The card the connection starts from.", "type": "string" }, "target": { "description": "The card it leads to.", "type": "string" } }, "type": [ "object", "null" ] }, "next_step": { "type": "string" } }, "required": [ "canvas", "card", "next_step" ], "type": "object" } }, { "description": "Add an image or video card to a board from a public https URL (an import_asset result, a finished generation's video_url, or an ad's video_url). Costs no credits. Returns the whole board and the new card. SIGN-IN REQUIRED: connect this server with OAuth (the host prompts for it), or add an API key header \"Authorization: Bearer acd_live_…\" created at https://aicontentdrop.com/settings/integrations.", "inputSchema": { "properties": { "canvas_id": { "description": "The board id, from list_canvases or create_canvas.", "type": "string" }, "caption": { "description": "Optional caption, up to 2000 characters.", "type": "string" }, "height": { "description": "Optional card height in pixels.", "type": "number" }, "kind": { "enum": [ "image", "video" ], "type": "string" }, "position": { "description": "Optional { x, y } in board pixels. When omitted the server places the card in the first free grid cell.", "properties": { "x": { "type": "number" }, "y": { "type": "number" } }, "required": [ "x", "y" ], "type": "object" }, "revision": { "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.", "type": "number" }, "source": { "description": "Optional provenance: where the media came from.", "properties": { "id": { "type": "string" }, "kind": { "enum": [ "upload", "generation", "ad", "studio" ], "type": "string" } }, "required": [ "kind" ], "type": "object" }, "title": { "description": "Optional title, up to 200 characters.", "type": "string" }, "url": { "description": "Public https URL of the image or video.", "type": "string" }, "width": { "description": "Optional card width in pixels.", "type": "number" } }, "required": [ "canvas_id", "url", "kind" ], "type": "object" }, "name": "add_media_card", "outputSchema": { "properties": { "canvas": { "properties": { "card_count": { "type": "number" }, "cards": { "items": { "properties": { "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 }." }, "height": { "type": "number" }, "id": { "type": "string" }, "position": { "properties": { "x": { "type": "number" }, "y": { "type": "number" } }, "required": [ "x", "y" ], "type": "object" }, "type": { "enum": [ "text", "media", "generation", "frame", "task", "legacy" ], "type": "string" }, "width": { "type": "number" } }, "required": [ "id", "type", "position", "data" ], "type": "object" }, "type": "array" }, "edges": { "items": { "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.", "properties": { "id": { "type": "string" }, "label": { "description": "Text drawn on the line, when it has one." }, "source": { "description": "The card the connection starts from.", "type": "string" }, "target": { "description": "The card it leads to.", "type": "string" } }, "type": "object" }, "type": "array" }, "id": { "type": "string" }, "link": { "description": "The board's page on AI Content Drop.", "type": "string" }, "name": { "type": "string" }, "revision": { "description": "The board's version; every write bumps it.", "type": "number" }, "updated_at": { "type": [ "string", "null" ] } }, "required": [ "id", "name", "revision", "card_count", "updated_at", "link", "cards", "edges" ], "type": "object" }, "card": { "properties": { "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 }." }, "height": { "type": "number" }, "id": { "type": "string" }, "position": { "properties": { "x": { "type": "number" }, "y": { "type": "number" } }, "required": [ "x", "y" ], "type": "object" }, "type": { "enum": [ "text", "media", "generation", "frame", "task", "legacy" ], "type": "string" }, "width": { "type": "number" } }, "required": [ "id", "type", "position", "data" ], "type": [ "object", "null" ] }, "next_step": { "type": "string" } }, "required": [ "canvas", "card", "next_step" ], "type": "object" } }, { "description": "Add a text card (a note, an idea, a script line) to a board. The server places it on a grid unless a position is given. Costs no credits. Returns the whole board and the new card. SIGN-IN REQUIRED: connect this server with OAuth (the host prompts for it), or add an API key header \"Authorization: Bearer acd_live_…\" created at https://aicontentdrop.com/settings/integrations.", "inputSchema": { "properties": { "canvas_id": { "description": "The board id, from list_canvases or create_canvas.", "type": "string" }, "color": { "description": "Optional colour name or hex the website uses for the card.", "type": "string" }, "height": { "description": "Optional card height in pixels.", "type": "number" }, "position": { "description": "Optional { x, y } in board pixels. When omitted the server places the card in the first free grid cell.", "properties": { "x": { "type": "number" }, "y": { "type": "number" } }, "required": [ "x", "y" ], "type": "object" }, "revision": { "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.", "type": "number" }, "text": { "description": "The card's text, up to 4000 characters.", "type": "string" }, "title": { "description": "Optional title, up to 200 characters.", "type": "string" }, "width": { "description": "Optional card width in pixels.", "type": "number" } }, "required": [ "canvas_id", "text" ], "type": "object" }, "name": "add_text_card", "outputSchema": { "properties": { "canvas": { "properties": { "card_count": { "type": "number" }, "cards": { "items": { "properties": { "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 }." }, "height": { "type": "number" }, "id": { "type": "string" }, "position": { "properties": { "x": { "type": "number" }, "y": { "type": "number" } }, "required": [ "x", "y" ], "type": "object" }, "type": { "enum": [ "text", "media", "generation", "frame", "task", "legacy" ], "type": "string" }, "width": { "type": "number" } }, "required": [ "id", "type", "position", "data" ], "type": "object" }, "type": "array" }, "edges": { "items": { "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.", "properties": { "id": { "type": "string" }, "label": { "description": "Text drawn on the line, when it has one." }, "source": { "description": "The card the connection starts from.", "type": "string" }, "target": { "description": "The card it leads to.", "type": "string" } }, "type": "object" }, "type": "array" }, "id": { "type": "string" }, "link": { "description": "The board's page on AI Content Drop.", "type": "string" }, "name": { "type": "string" }, "revision": { "description": "The board's version; every write bumps it.", "type": "number" }, "updated_at": { "type": [ "string", "null" ] } }, "required": [ "id", "name", "revision", "card_count", "updated_at", "link", "cards", "edges" ], "type": "object" }, "card": { "properties": { "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 }." }, "height": { "type": "number" }, "id": { "type": "string" }, "position": { "properties": { "x": { "type": "number" }, "y": { "type": "number" } }, "required": [ "x", "y" ], "type": "object" }, "type": { "enum": [ "text", "media", "generation", "frame", "task", "legacy" ], "type": "string" }, "width": { "type": "number" } }, "required": [ "id", "type", "position", "data" ], "type": [ "object", "null" ] }, "next_step": { "type": "string" } }, "required": [ "canvas", "card", "next_step" ], "type": "object" } }, { "description": "Lay chosen cards (or the whole board) out as a grid, a row or a column. Costs no credits. SIGN-IN REQUIRED: connect this server with OAuth (the host prompts for it), or add an API key header \"Authorization: Bearer acd_live_…\" created at https://aicontentdrop.com/settings/integrations.", "inputSchema": { "properties": { "canvas_id": { "description": "The board id, from list_canvases or create_canvas.", "type": "string" }, "gap": { "description": "Optional spacing in pixels; defaults to 24.", "type": "number" }, "ids": { "description": "Card ids to arrange; omitted means every card.", "items": { "type": "string" }, "type": "array" }, "layout": { "enum": [ "grid", "row", "column" ], "type": "string" }, "revision": { "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.", "type": "number" } }, "required": [ "canvas_id", "layout" ], "type": "object" }, "name": "arrange_cards", "outputSchema": { "properties": { "canvas": { "properties": { "card_count": { "type": "number" }, "cards": { "items": { "properties": { "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 }." }, "height": { "type": "number" }, "id": { "type": "string" }, "position": { "properties": { "x": { "type": "number" }, "y": { "type": "number" } }, "required": [ "x", "y" ], "type": "object" }, "type": { "enum": [ "text", "media", "generation", "frame", "task", "legacy" ], "type": "string" }, "width": { "type": "number" } }, "required": [ "id", "type", "position", "data" ], "type": "object" }, "type": "array" }, "edges": { "items": { "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.", "properties": { "id": { "type": "string" }, "label": { "description": "Text drawn on the line, when it has one." }, "source": { "description": "The card the connection starts from.", "type": "string" }, "target": { "description": "The card it leads to.", "type": "string" } }, "type": "object" }, "type": "array" }, "id": { "type": "string" }, "link": { "description": "The board's page on AI Content Drop.", "type": "string" }, "name": { "type": "string" }, "revision": { "description": "The board's version; every write bumps it.", "type": "number" }, "updated_at": { "type": [ "string", "null" ] } }, "required": [ "id", "name", "revision", "card_count", "updated_at", "link", "cards", "edges" ], "type": "object" }, "next_step": { "type": "string" } }, "required": [ "canvas", "next_step" ], "type": "object" } }, { "description": "Connect two cards on a board with a line from one to the next, so the board reads as a flow: a script card to the card that renders it, an idea to each of its variations. Costs no credits. Refuses a card connected to itself, a frame, and a connection that is already there. To make an image card's result the start frame of a new card, add that card with add_generation_card and from_card_id instead. SIGN-IN REQUIRED: connect this server with OAuth (the host prompts for it), or add an API key header \"Authorization: Bearer acd_live_…\" created at https://aicontentdrop.com/settings/integrations.", "inputSchema": { "properties": { "canvas_id": { "description": "The board id, from list_canvases or create_canvas.", "type": "string" }, "from_card_id": { "description": "The card the line starts from, from cards[] on the board.", "type": "string" }, "label": { "description": "Optional short label drawn on the line, up to 200 characters.", "type": "string" }, "revision": { "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.", "type": "number" }, "to_card_id": { "description": "The card it leads to.", "type": "string" } }, "required": [ "canvas_id", "from_card_id", "to_card_id" ], "type": "object" }, "name": "connect_cards", "outputSchema": { "properties": { "canvas": { "properties": { "card_count": { "type": "number" }, "cards": { "items": { "properties": { "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 }." }, "height": { "type": "number" }, "id": { "type": "string" }, "position": { "properties": { "x": { "type": "number" }, "y": { "type": "number" } }, "required": [ "x", "y" ], "type": "object" }, "type": { "enum": [ "text", "media", "generation", "frame", "task", "legacy" ], "type": "string" }, "width": { "type": "number" } }, "required": [ "id", "type", "position", "data" ], "type": "object" }, "type": "array" }, "edges": { "items": { "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.", "properties": { "id": { "type": "string" }, "label": { "description": "Text drawn on the line, when it has one." }, "source": { "description": "The card the connection starts from.", "type": "string" }, "target": { "description": "The card it leads to.", "type": "string" } }, "type": "object" }, "type": "array" }, "id": { "type": "string" }, "link": { "description": "The board's page on AI Content Drop.", "type": "string" }, "name": { "type": "string" }, "revision": { "description": "The board's version; every write bumps it.", "type": "number" }, "updated_at": { "type": [ "string", "null" ] } }, "required": [ "id", "name", "revision", "card_count", "updated_at", "link", "cards", "edges" ], "type": "object" }, "edge": { "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.", "properties": { "id": { "type": "string" }, "label": { "description": "Text drawn on the line, when it has one." }, "source": { "description": "The card the connection starts from.", "type": "string" }, "target": { "description": "The card it leads to.", "type": "string" } }, "type": [ "object", "null" ] }, "next_step": { "type": "string" } }, "required": [ "canvas", "edge", "next_step" ], "type": "object" } }, { "description": "Create a new, empty board and return it. Costs no credits. Use one board per plan or campaign; cards are added with the add_* tools. SIGN-IN REQUIRED: connect this server with OAuth (the host prompts for it), or add an API key header \"Authorization: Bearer acd_live_…\" created at https://aicontentdrop.com/settings/integrations.", "inputSchema": { "properties": { "name": { "description": "Board name, up to 100 characters. Defaults to Untitled Canvas.", "type": "string" } }, "required": [], "type": "object" }, "name": "create_canvas", "outputSchema": { "properties": { "canvas": { "properties": { "card_count": { "type": "number" }, "cards": { "items": { "properties": { "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 }." }, "height": { "type": "number" }, "id": { "type": "string" }, "position": { "properties": { "x": { "type": "number" }, "y": { "type": "number" } }, "required": [ "x", "y" ], "type": "object" }, "type": { "enum": [ "text", "media", "generation", "frame", "task", "legacy" ], "type": "string" }, "width": { "type": "number" } }, "required": [ "id", "type", "position", "data" ], "type": "object" }, "type": "array" }, "edges": { "items": { "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.", "properties": { "id": { "type": "string" }, "label": { "description": "Text drawn on the line, when it has one." }, "source": { "description": "The card the connection starts from.", "type": "string" }, "target": { "description": "The card it leads to.", "type": "string" } }, "type": "object" }, "type": "array" }, "id": { "type": "string" }, "link": { "description": "The board's page on AI Content Drop.", "type": "string" }, "name": { "type": "string" }, "revision": { "description": "The board's version; every write bumps it.", "type": "number" }, "updated_at": { "type": [ "string", "null" ] } }, "required": [ "id", "name", "revision", "card_count", "updated_at", "link", "cards", "edges" ], "type": "object" }, "next_step": { "type": "string" } }, "required": [ "canvas", "next_step" ], "type": "object" } }, { "description": "Decode a saved competitor ad into a reusable formula: hook, script, scenes, audio, call to action and style, plus a generation-ready recreation prompt. Requires a quote_id from estimate_ad_cost with kind \"decode\" (a flat price). Credits are charged only when the analysis succeeds; an ad decoded before returns its stored decode and charges nothing. SIGN-IN REQUIRED: connect this server with OAuth (the host prompts for it), or add an API key header \"Authorization: Bearer acd_live_…\" created at https://aicontentdrop.com/settings/integrations.", "inputSchema": { "properties": { "ad_id": { "description": "A saved ad's id, from list_saved_ads or save_competitor_ad.", "type": "string" }, "quote_id": { "description": "The quote_id from estimate_ad_cost with kind \"decode\". Required.", "type": "string" } }, "required": [ "ad_id", "quote_id" ], "type": "object" }, "name": "decode_ad", "outputSchema": { "properties": { "ad_id": { "type": "string" }, "cached": { "description": "True when a stored decode was returned; nothing was charged.", "type": "boolean" }, "credits_quoted": { "description": "The price fixed by the quote.", "type": "number" }, "credits_used": { "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.", "type": [ "number", "null" ] }, "decode": { "description": "The ad's formula, layer by layer, plus a generation-ready prompt.", "properties": { "confidence": { "description": "0-1.", "type": "number" }, "decodedAt": { "type": "string" }, "layers": { "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 }.", "type": "object" }, "recreationPrompt": { "description": "A 150-300 word prompt that recreates the ad's structure with a different product.", "type": "string" } }, "required": [ "layers", "recreationPrompt", "confidence", "decodedAt" ], "type": "object" }, "next_step": { "type": "string" }, "note": { "description": "Present only when the charge could not be applied to the account.", "type": "string" }, "replayed": { "description": "True when this quote_id had already been submitted and the original result was returned.", "type": "boolean" } }, "required": [ "ad_id", "decode", "cached", "credits_quoted", "credits_used", "replayed", "next_step" ], "type": "object" } }, { "description": "Price a studio job before making it: a finished ad from a brief or storyboard (kind \"ad\"), a UGC creator video (kind \"ugc\"), a generated avatar (kind \"avatar\") or a competitor-ad decode (kind \"decode\"). Returns the credit lines, the total and a quote_id that generate_ad, generate_ugc_video, generate_avatar and decode_ad require. No account needed. For an ad, quote exactly the fields you will submit.", "inputSchema": { "properties": { "brief": { "description": "The ad brief: brandName, brandOneLiner, valueProps (1-8 strings), cta, intent, format (an id from list_ad_formats), shotCount (1-5), totalDurationSec (5-20), aspect (9:16 | 16:9 | 1:1), language, quality (fast | premium), modelTier (standard | cinematic), garmentImageUrl for the try-on formats.", "type": "object" }, "kind": { "description": "Defaults to ad.", "enum": [ "ad", "ugc", "avatar", "decode" ], "type": "string" }, "model_tier": { "description": "cinematic renders on Seedance with director-grade camera work and costs more per shot; needs the brief.", "enum": [ "standard", "cinematic" ], "type": "string" }, "needs_avatar_gen": { "description": "True when the avatar still has to be generated (billed as a line).", "type": "boolean" }, "needs_product_gen": { "description": "True when the product still has to be generated (billed as a line).", "type": "boolean" }, "persona_mode": { "description": "synthetic lets the studio substitute one consistent generated creator for the avatar; exact-avatar (default) keeps the avatar as given.", "enum": [ "exact-avatar", "synthetic" ], "type": "string" }, "quality": { "description": "Lip-sync tier. premium costs more per talking shot. Defaults to the brief's quality, else fast.", "enum": [ "fast", "premium" ], "type": "string" }, "storyboard": { "description": "The storyboard returned by write_ad_storyboard, as is or edited. When present it is what renders; the brief is optional alongside it.", "type": "object" } }, "required": [], "type": "object" }, "name": "estimate_ad_cost", "outputSchema": { "properties": { "basis": { "enum": [ "estimate_upper_bound", "flat" ], "type": "string" }, "credits_total": { "description": "For an ad, the most it can cost; the charge on success is never higher.", "type": "number" }, "expires_at": { "description": "ISO time after which the quote is refused.", "type": "string" }, "expires_in_seconds": { "type": "number" }, "kind": { "enum": [ "ad", "ugc", "avatar", "decode" ], "type": "string" }, "lines": { "items": { "properties": { "credits": { "type": "number" }, "label": { "type": "string" } }, "required": [ "label", "credits" ], "type": "object" }, "type": "array" }, "next_step": { "type": "string" }, "quote_id": { "description": "Signed quote. Pass it to the matching generate_* tool; it fixes the price and makes a retry safe.", "type": "string" } }, "required": [ "kind", "credits_total", "lines", "basis", "quote_id", "expires_at", "expires_in_seconds", "next_step" ], "type": "object" } }, { "description": "Price a video or image before making it. Returns the exact credit cost and a quote_id that generate_video and generate_image require. No account needed. Pass the duration and resolution you intend to use; some video models bill per second.", "inputSchema": { "properties": { "duration": { "description": "Video length in seconds you intend to generate. Affects the price of per-second models.", "type": "number" }, "model_id": { "description": "Model ID, e.g. \"kling_3_0\" or \"veo_3_fast\".", "type": "string" }, "quantity": { "description": "How many generations to price. Defaults to 1. Only a quote for exactly 1 can be spent; larger quantities are for planning.", "type": "number" }, "reference_video_seconds": { "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": "number" }, "resolution": { "description": "Video resolution you intend to generate, e.g. \"720p\" or \"1080p\". Affects the price of per-second models.", "type": "string" } }, "required": [ "model_id" ], "type": "object" }, "name": "estimate_credit_cost", "outputSchema": { "properties": { "basis": { "enum": [ "flat", "per_second" ], "type": "string" }, "credits_each": { "type": "number" }, "credits_total": { "type": "number" }, "duration_seconds": { "description": "The duration actually priced, for per-second models.", "type": "number" }, "model_id": { "description": "Normalized to underscores.", "type": "string" }, "name": { "type": "string" }, "next_step": { "type": "string" }, "quantity": { "type": "number" }, "quote_expires_at": { "description": "ISO time after which the quote is refused.", "type": "string" }, "quote_id": { "description": "Signed quote. Pass it to generate_video or generate_image; it fixes the price and makes a retry safe.", "type": "string" }, "reference_video_seconds": { "description": "Reference-video seconds priced as input, when a reference was quoted.", "type": "number" }, "resolution": { "description": "The resolution actually priced, for per-second models.", "type": "string" }, "type": { "enum": [ "video", "image" ], "type": "string" } }, "required": [ "model_id", "name", "credits_each", "quantity", "credits_total", "type", "basis", "quote_id", "quote_expires_at", "next_step" ], "type": "object" } }, { "description": "Make a finished video ad — multi-shot, with a speaking creator, product shots, captions and an optional music bed — from a brief or a storyboard plus an avatar image and a product image. Requires a quote_id from estimate_ad_cost for exactly these fields; returns a job_id to poll with get_ad_job. Credits are charged only when the ad succeeds, and never more than the quote. SIGN-IN REQUIRED: connect this server with OAuth (the host prompts for it), or add an API key header \"Authorization: Bearer acd_live_…\" created at https://aicontentdrop.com/settings/integrations.", "inputSchema": { "properties": { "avatar_description": { "description": "Optional one-line identity note for the creator (20-500 characters).", "type": "string" }, "avatar_url": { "description": "Public https URL of the creator's reference image (a catalogue portrait, a generate_avatar result, or an import_asset URL).", "type": "string" }, "brief": { "description": "The ad brief: brandName, brandOneLiner, valueProps (1-8 strings), cta, intent, format (an id from list_ad_formats), shotCount (1-5), totalDurationSec (5-20), aspect (9:16 | 16:9 | 1:1), language, quality (fast | premium), modelTier (standard | cinematic), garmentImageUrl for the try-on formats.", "type": "object" }, "canvas_id": { "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.", "type": "string" }, "model_tier": { "description": "cinematic renders on Seedance with director-grade camera work and costs more per shot; needs the brief.", "enum": [ "standard", "cinematic" ], "type": "string" }, "music": { "description": "Optional music bed.", "properties": { "gain_db": { "description": "-30 to 0.", "type": "number" }, "tone": { "description": "e.g. upbeat, calm, cinematic.", "type": "string" } }, "required": [ "tone" ], "type": "object" }, "needs_avatar_gen": { "description": "True when the avatar still has to be generated (billed as a line).", "type": "boolean" }, "needs_product_gen": { "description": "True when the product still has to be generated (billed as a line).", "type": "boolean" }, "persona_mode": { "description": "synthetic lets the studio substitute one consistent generated creator for the avatar; exact-avatar (default) keeps the avatar as given.", "enum": [ "exact-avatar", "synthetic" ], "type": "string" }, "product_description": { "description": "Optional one-line product note (10-500 characters).", "type": "string" }, "product_image_url": { "description": "Public https URL of the product image.", "type": "string" }, "project_id": { "description": "Optional studio project (uuid) to file the run under.", "type": "string" }, "quality": { "description": "Lip-sync tier. premium costs more per talking shot. Defaults to the brief's quality, else fast.", "enum": [ "fast", "premium" ], "type": "string" }, "quote_id": { "description": "The quote_id from estimate_ad_cost for these exact fields (kind ad). Required.", "type": "string" }, "storyboard": { "description": "The storyboard returned by write_ad_storyboard, as is or edited. When present it is what renders; the brief is optional alongside it.", "type": "object" } }, "required": [ "quote_id", "avatar_url", "product_image_url" ], "type": "object" }, "name": "generate_ad", "outputSchema": { "properties": { "credits_quoted": { "description": "The ceiling fixed by the quote.", "type": "number" }, "job_id": { "description": "Poll this with get_ad_job.", "type": "string" }, "next_step": { "type": "string" }, "poll_after_seconds": { "type": "number" }, "replayed": { "description": "True when this quote_id had already been submitted and the original job was returned.", "type": "boolean" }, "run_id": { "type": [ "string", "null" ] }, "status": { "enum": [ "queued" ], "type": "string" } }, "required": [ "job_id", "status", "credits_quoted", "replayed", "poll_after_seconds", "next_step" ], "type": "object" } }, { "description": "Generate a creator portrait (Nano Banana) to use as the avatar in generate_ad, checked for hands, face and background defects. Requires a quote_id from estimate_ad_cost with kind \"avatar\". Finishes within the call; credits are charged only when a portrait comes back. SIGN-IN REQUIRED: connect this server with OAuth (the host prompts for it), or add an API key header \"Authorization: Bearer acd_live_…\" created at https://aicontentdrop.com/settings/integrations.", "inputSchema": { "properties": { "aspect_ratio": { "description": "Defaults to 9:16.", "enum": [ "1:1", "9:16", "16:9" ], "type": "string" }, "prompt": { "description": "Who the creator is: age, look, clothing, setting, mood (20-800 characters).", "type": "string" }, "quote_id": { "description": "The quote_id from estimate_ad_cost with kind \"avatar\". Required.", "type": "string" }, "save_as": { "description": "Optional name; saves the portrait on a brand profile for reuse.", "type": "string" } }, "required": [ "quote_id", "prompt" ], "type": "object" }, "name": "generate_avatar", "outputSchema": { "properties": { "avatar_url": { "description": "Pass as avatar_url to generate_ad.", "type": [ "string", "null" ] }, "brand_profile_id": { "type": [ "string", "null" ] }, "credits_quoted": { "type": "number" }, "credits_used": { "description": "The charge that landed; 0 when no portrait came back or the charge could not be applied (then note says so).", "type": "number" }, "next_step": { "type": "string" }, "note": { "description": "Present only when the charge could not be applied to the account.", "type": "string" }, "qa_notes": { "items": { "type": "string" }, "type": "array" }, "qa_passed": { "type": "boolean" }, "replayed": { "type": "boolean" } }, "required": [ "avatar_url", "qa_passed", "qa_notes", "credits_quoted", "credits_used", "replayed", "next_step" ], "type": "object" } }, { "description": "Make an AI image: a product still, a thumbnail, a poster, concept art, or a reference frame to animate later. Requires a quote_id from estimate_credit_cost so the price is agreed first; then returns a job id to poll with get_generation (kind \"image\"). Credits are charged only when the image succeeds. SIGN-IN REQUIRED: connect this server with OAuth (the host prompts for it), or add an API key header \"Authorization: Bearer acd_live_…\" created at https://aicontentdrop.com/settings/integrations.", "inputSchema": { "properties": { "image_url": { "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": "string" }, "model": { "description": "Image model ID from list_models with type \"image\". Must match the quoted model; omitted means the quoted model.", "type": "string" }, "prompt": { "description": "What the image should show.", "type": "string" }, "quote_id": { "description": "The quote_id from estimate_credit_cost for this exact image model. Required.", "type": "string" } }, "required": [ "prompt", "quote_id" ], "type": "object" }, "name": "generate_image", "outputSchema": { "properties": { "credits_quoted": { "description": "The price fixed by the quote.", "type": "number" }, "credits_used": { "description": "0 until the render succeeds; billing is post-deduct.", "type": "number" }, "id": { "description": "Poll this with get_generation.", "type": "string" }, "image_url": { "description": "Null until the render finishes.", "type": [ "string", "null" ] }, "kind": { "enum": [ "video", "image" ], "type": "string" }, "model": { "type": [ "string", "null" ] }, "next_step": { "description": "What to do next, in words, so a model need not infer it.", "type": "string" }, "replayed": { "description": "True when this quote_id had already been submitted and the original job was returned.", "type": "boolean" }, "status": { "type": "string" }, "unlimited": { "type": "boolean" }, "video_url": { "description": "Null until the render finishes.", "type": [ "string", "null" ] } }, "required": [ "id", "kind", "status", "credits_quoted", "credits_used", "replayed", "next_step" ], "type": "object" } }, { "description": "Make a UGC-style creator video: a catalogue creator (template from list_ugc_avatars) or a person's own photo (image_url) speaks the script with lip-sync, optional voice choice and ambience. Requires a quote_id from estimate_ad_cost with kind \"ugc\", and image_rights_consent: true given by the person. Returns an id to poll with get_generation. Credits are charged only on success. SIGN-IN REQUIRED: connect this server with OAuth (the host prompts for it), or add an API key header \"Authorization: Bearer acd_live_…\" created at https://aicontentdrop.com/settings/integrations.", "inputSchema": { "properties": { "ambience": { "description": "Optional background sound, e.g. cafe, street, none.", "type": "string" }, "image_rights_consent": { "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": "boolean" }, "image_url": { "description": "Public https URL of the person's photo. Alternative to template.", "type": "string" }, "language": { "description": "Optional language code, e.g. en.", "type": "string" }, "quote_id": { "description": "The quote_id from estimate_ad_cost with kind \"ugc\". Required.", "type": "string" }, "script": { "description": "What the creator says, up to 1000 characters.", "type": "string" }, "template": { "description": "A creator id from list_ugc_avatars. Alternative to image_url.", "enum": [ "general", "selfie", "selling", "testimonial", "tutorial", "storytelling" ], "type": "string" }, "voice": { "description": "Optional voice id or name.", "type": "string" } }, "required": [ "quote_id", "script", "image_rights_consent" ], "type": "object" }, "name": "generate_ugc_video", "outputSchema": { "properties": { "credits_quoted": { "type": "number" }, "credits_used": { "description": "0 until the render succeeds; billing is post-deduct.", "type": "number" }, "id": { "description": "Poll this with get_generation.", "type": "string" }, "kind": { "enum": [ "video" ], "type": "string" }, "next_step": { "type": "string" }, "replayed": { "type": "boolean" }, "status": { "type": "string" } }, "required": [ "id", "kind", "status", "credits_quoted", "credits_used", "replayed", "next_step" ], "type": "object" } }, { "description": "Make an AI video: a product ad, a vertical clip for social, a cinematic shot, or animate a photo into video (image-to-video). Requires a quote_id from estimate_credit_cost so the price is agreed first; then returns a job id to poll with get_generation. Credits are charged only when the video succeeds. SIGN-IN REQUIRED: connect this server with OAuth (the host prompts for it), or add an API key header \"Authorization: Bearer acd_live_…\" created at https://aicontentdrop.com/settings/integrations.", "inputSchema": { "properties": { "aspect_ratio": { "description": "Defaults to 16:9. Use 9:16 for vertical social clips.", "enum": [ "16:9", "9:16", "1:1" ], "type": "string" }, "duration": { "description": "Length in seconds. Must match the quoted duration for per-second models.", "type": "number" }, "image_url": { "description": "Optional public image URL to animate (image-to-video).", "type": "string" }, "model": { "description": "Model ID from list_models, e.g. \"kling_3_0\". Must match the quoted model; omitted means the quoted model.", "type": "string" }, "prompt": { "description": "What the video should show. Detailed prompts produce better results.", "type": "string" }, "quote_id": { "description": "The quote_id from estimate_credit_cost for this exact model, duration and resolution. Required.", "type": "string" }, "reference_video_url": { "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": "string" }, "resolution": { "description": "e.g. \"720p\" or \"1080p\". Must match the quoted resolution for per-second models.", "type": "string" } }, "required": [ "prompt", "quote_id" ], "type": "object" }, "name": "generate_video", "outputSchema": { "properties": { "credits_quoted": { "description": "The price fixed by the quote.", "type": "number" }, "credits_used": { "description": "0 until the render succeeds; billing is post-deduct.", "type": "number" }, "id": { "description": "Poll this with get_generation.", "type": "string" }, "image_url": { "description": "Null until the render finishes.", "type": [ "string", "null" ] }, "kind": { "enum": [ "video", "image" ], "type": "string" }, "model": { "type": [ "string", "null" ] }, "next_step": { "description": "What to do next, in words, so a model need not infer it.", "type": "string" }, "replayed": { "description": "True when this quote_id had already been submitted and the original job was returned.", "type": "boolean" }, "status": { "type": "string" }, "unlimited": { "type": "boolean" }, "video_url": { "description": "Null until the render finishes.", "type": [ "string", "null" ] } }, "required": [ "id", "kind", "status", "credits_quoted", "credits_used", "replayed", "next_step" ], "type": "object" } }, { "description": "Check the signed-in account's remaining credits and current plan name before generating, and get the informational page about plans and entitlement. SIGN-IN REQUIRED: connect this server with OAuth (the host prompts for it), or add an API key header \"Authorization: Bearer acd_live_…\" created at https://aicontentdrop.com/settings/integrations.", "inputSchema": { "properties": {}, "required": [], "type": "object" }, "name": "get_account", "outputSchema": { "properties": { "can_generate": { "type": "boolean" }, "credits_remaining": { "type": "number" }, "info_url": { "description": "Informational page describing plans and entitlement options.", "type": "string" }, "note": { "type": "string" }, "plan": { "description": "free | starter | professional | ultra | enterprise_max", "type": "string" }, "username": { "type": [ "string", "null" ] } }, "required": [ "plan", "credits_remaining", "can_generate", "info_url" ], "type": "object" } }, { "description": "Check an ad job: stage and percent while it renders, then the finished video URL, the storyboard sheet, duration, size and the credits charged. Poll every 15 seconds after generate_ad; stop after 15 minutes. SIGN-IN REQUIRED: connect this server with OAuth (the host prompts for it), or add an API key header \"Authorization: Bearer acd_live_…\" created at https://aicontentdrop.com/settings/integrations.", "inputSchema": { "properties": { "job_id": { "description": "The job_id returned by generate_ad.", "type": "string" } }, "required": [ "job_id" ], "type": "object" }, "name": "get_ad_job", "outputSchema": { "properties": { "credits_used": { "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).", "type": [ "number", "null" ] }, "duration_seconds": { "type": "number" }, "error": { "type": "string" }, "job_id": { "type": "string" }, "next_step": { "type": "string" }, "note": { "description": "Present only when a succeeded job's charge could not be applied to the account.", "type": "string" }, "percent": { "type": "number" }, "retry_after_seconds": { "description": "Present while the job is not terminal.", "type": "number" }, "run_id": { "type": "string" }, "size_bytes": { "type": "number" }, "stage": { "description": "storyboard | rendering | done, while known.", "type": "string" }, "status": { "enum": [ "queued", "running", "succeeded", "failed" ], "type": "string" }, "storyboard_sheet_url": { "description": "The storyboard sheet image, when the run produced one.", "type": "string" }, "video_url": { "description": "The finished ad with burnt-in captions. Present only when succeeded.", "type": "string" } }, "required": [ "job_id", "status", "credits_used", "next_step" ], "type": "object" } }, { "description": "Fetch the full text of one published article as markdown, by slug.", "inputSchema": { "properties": { "slug": { "description": "Article slug, e.g. \"kling-vs-sora-comparison\".", "type": "string" } }, "required": [ "slug" ], "type": "object" }, "name": "get_article", "outputSchema": { "properties": { "markdown": { "description": "Full article body.", "type": "string" }, "published": { "type": "string" }, "slug": { "type": "string" }, "title": { "type": "string" }, "url": { "type": "string" } }, "required": [ "slug", "title", "url", "markdown" ], "type": "object" } }, { "description": "Read one board in full: every card with its type, position, size and data, the edges, and the revision. Generation cards that are still rendering are checked against their jobs on every read. Costs no credits. SIGN-IN REQUIRED: connect this server with OAuth (the host prompts for it), or add an API key header \"Authorization: Bearer acd_live_…\" created at https://aicontentdrop.com/settings/integrations.", "inputSchema": { "properties": { "canvas_id": { "description": "The board id, from list_canvases or create_canvas.", "type": "string" } }, "required": [ "canvas_id" ], "type": "object" }, "name": "get_canvas", "outputSchema": { "properties": { "canvas": { "properties": { "card_count": { "type": "number" }, "cards": { "items": { "properties": { "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 }." }, "height": { "type": "number" }, "id": { "type": "string" }, "position": { "properties": { "x": { "type": "number" }, "y": { "type": "number" } }, "required": [ "x", "y" ], "type": "object" }, "type": { "enum": [ "text", "media", "generation", "frame", "task", "legacy" ], "type": "string" }, "width": { "type": "number" } }, "required": [ "id", "type", "position", "data" ], "type": "object" }, "type": "array" }, "edges": { "items": { "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.", "properties": { "id": { "type": "string" }, "label": { "description": "Text drawn on the line, when it has one." }, "source": { "description": "The card the connection starts from.", "type": "string" }, "target": { "description": "The card it leads to.", "type": "string" } }, "type": "object" }, "type": "array" }, "id": { "type": "string" }, "link": { "description": "The board's page on AI Content Drop.", "type": "string" }, "name": { "type": "string" }, "revision": { "description": "The board's version; every write bumps it.", "type": "number" }, "updated_at": { "type": [ "string", "null" ] } }, "required": [ "id", "name", "revision", "card_count", "updated_at", "link", "cards", "edges" ], "type": "object" }, "next_step": { "type": "string" } }, "required": [ "canvas", "next_step" ], "type": "object" } }, { "description": "Get the link to a board's page on AI Content Drop so the person can open it in a browser or the host's embedded browser panel. Costs no credits. SIGN-IN REQUIRED: connect this server with OAuth (the host prompts for it), or add an API key header \"Authorization: Bearer acd_live_…\" created at https://aicontentdrop.com/settings/integrations.", "inputSchema": { "properties": { "canvas_id": { "description": "The board id, from list_canvases or create_canvas.", "type": "string" } }, "required": [ "canvas_id" ], "type": "object" }, "name": "get_canvas_link", "outputSchema": { "properties": { "canvas_id": { "type": "string" }, "link": { "type": "string" }, "name": { "type": "string" }, "next_step": { "type": "string" } }, "required": [ "canvas_id", "name", "link", "next_step" ], "type": "object" } }, { "description": "Check whether a video or image is finished and get its URL. Poll this after generate_video or generate_image; pass kind \"image\" for an image job. Reports status, the finished file URL, and the credits charged. SIGN-IN REQUIRED: connect this server with OAuth (the host prompts for it), or add an API key header \"Authorization: Bearer acd_live_…\" created at https://aicontentdrop.com/settings/integrations.", "inputSchema": { "properties": { "id": { "description": "The id returned by generate_video or generate_image.", "type": "string" }, "kind": { "description": "Which job type the id belongs to. Defaults to video.", "enum": [ "video", "image" ], "type": "string" } }, "required": [ "id" ], "type": "object" }, "name": "get_generation", "outputSchema": { "properties": { "created_at": { "type": [ "string", "null" ] }, "credits_used": { "description": "Charged only on success — a failed generation is 0.", "type": "number" }, "error_message": { "type": [ "string", "null" ] }, "id": { "description": "Poll this with get_generation.", "type": "string" }, "image_url": { "type": [ "string", "null" ] }, "kind": { "enum": [ "video", "image" ], "type": "string" }, "model": { "description": "Model ID, underscored.", "type": [ "string", "null" ] }, "status": { "description": "generating | processing | completed | failed | timeout", "type": "string" }, "thumbnail_url": { "type": [ "string", "null" ] }, "title": { "type": [ "string", "null" ] }, "video_url": { "type": [ "string", "null" ] } }, "required": [ "id", "status", "credits_used" ], "type": "object" } }, { "description": "Read one saved competitor ad in full, with its stored decode (the ad's formula and a recreation prompt) when it has one. Costs no credits; never runs a decode. SIGN-IN REQUIRED: connect this server with OAuth (the host prompts for it), or add an API key header \"Authorization: Bearer acd_live_…\" created at https://aicontentdrop.com/settings/integrations.", "inputSchema": { "properties": { "ad_id": { "description": "A saved ad's id, from list_saved_ads or save_competitor_ad.", "type": "string" } }, "required": [ "ad_id" ], "type": "object" }, "name": "get_saved_ad", "outputSchema": { "properties": { "ad": { "properties": { "ad_copy": { "description": "The ad's primary text.", "type": [ "string", "null" ] }, "ad_ref": { "description": "Opaque reference to the ad's source listing; copy it back unchanged when saving. Null when the source gave none.", "type": [ "string", "null" ] }, "ad_url": { "description": "The public listing or post, when known.", "type": [ "string", "null" ] }, "advertiser_name": { "type": [ "string", "null" ] }, "cta_text": { "type": [ "string", "null" ] }, "decoded": { "description": "True when a decode is stored; get_saved_ad returns it.", "type": "boolean" }, "demo": { "description": "True for a sample row: not a real ad. Never present a sample as live data.", "type": "boolean" }, "engagement_score": { "type": [ "number", "null" ] }, "estimated_spend": { "description": "As reported by the source, e.g. a monthly range; absent for most platforms.", "type": [ "string", "null" ] }, "hook_text": { "description": "The headline or opening line.", "type": [ "string", "null" ] }, "id": { "description": "The saved ad's id; pass it as ad_id.", "type": "string" }, "media_type": { "enum": [ "video", "image", "carousel", null ], "type": [ "string", "null" ] }, "media_url": { "description": "The creative (video or image), when the source exposes one.", "type": [ "string", "null" ] }, "platform": { "enum": [ "meta", "tiktok" ], "type": "string" }, "running_days": { "description": "Days the ad has been running, when known.", "type": [ "number", "null" ] }, "saved_at": { "type": [ "string", "null" ] } }, "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" ], "type": "object" }, "decode": { "description": "The ad's formula, layer by layer, plus a generation-ready prompt.", "properties": { "confidence": { "description": "0-1.", "type": "number" }, "decodedAt": { "type": "string" }, "layers": { "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 }.", "type": "object" }, "recreationPrompt": { "description": "A 150-300 word prompt that recreates the ad's structure with a different product.", "type": "string" } }, "required": [ "layers", "recreationPrompt", "confidence", "decodedAt" ], "type": [ "object", "null" ] }, "next_step": { "type": "string" } }, "required": [ "ad", "decode", "next_step" ], "type": "object" } }, { "description": "Wrap chosen cards in a labelled frame that encloses them. Returns the board and the new frame. Costs no credits. SIGN-IN REQUIRED: connect this server with OAuth (the host prompts for it), or add an API key header \"Authorization: Bearer acd_live_…\" created at https://aicontentdrop.com/settings/integrations.", "inputSchema": { "properties": { "canvas_id": { "description": "The board id, from list_canvases or create_canvas.", "type": "string" }, "ids": { "description": "The card ids to enclose.", "items": { "type": "string" }, "minItems": 1, "type": "array" }, "label": { "description": "The frame's label, up to 200 characters.", "type": "string" }, "revision": { "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.", "type": "number" } }, "required": [ "canvas_id", "ids", "label" ], "type": "object" }, "name": "group_cards", "outputSchema": { "properties": { "canvas": { "properties": { "card_count": { "type": "number" }, "cards": { "items": { "properties": { "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 }." }, "height": { "type": "number" }, "id": { "type": "string" }, "position": { "properties": { "x": { "type": "number" }, "y": { "type": "number" } }, "required": [ "x", "y" ], "type": "object" }, "type": { "enum": [ "text", "media", "generation", "frame", "task", "legacy" ], "type": "string" }, "width": { "type": "number" } }, "required": [ "id", "type", "position", "data" ], "type": "object" }, "type": "array" }, "edges": { "items": { "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.", "properties": { "id": { "type": "string" }, "label": { "description": "Text drawn on the line, when it has one." }, "source": { "description": "The card the connection starts from.", "type": "string" }, "target": { "description": "The card it leads to.", "type": "string" } }, "type": "object" }, "type": "array" }, "id": { "type": "string" }, "link": { "description": "The board's page on AI Content Drop.", "type": "string" }, "name": { "type": "string" }, "revision": { "description": "The board's version; every write bumps it.", "type": "number" }, "updated_at": { "type": [ "string", "null" ] } }, "required": [ "id", "name", "revision", "card_count", "updated_at", "link", "cards", "edges" ], "type": "object" }, "card": { "properties": { "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 }." }, "height": { "type": "number" }, "id": { "type": "string" }, "position": { "properties": { "x": { "type": "number" }, "y": { "type": "number" } }, "required": [ "x", "y" ], "type": "object" }, "type": { "enum": [ "text", "media", "generation", "frame", "task", "legacy" ], "type": "string" }, "width": { "type": "number" } }, "required": [ "id", "type", "position", "data" ], "type": [ "object", "null" ] }, "next_step": { "type": "string" } }, "required": [ "canvas", "card", "next_step" ], "type": "object" } }, { "description": "Copy a public image (JPEG, PNG or WebP, at most 10 MB) onto AI Content Drop so it can be used as an avatar, product or photo reference. Returns the hosted URL. Costs no credits. SIGN-IN REQUIRED: connect this server with OAuth (the host prompts for it), or add an API key header \"Authorization: Bearer acd_live_…\" created at https://aicontentdrop.com/settings/integrations.", "inputSchema": { "properties": { "url": { "description": "Public https URL of the image.", "type": "string" } }, "required": [ "url" ], "type": "object" }, "name": "import_asset", "outputSchema": { "properties": { "bytes": { "type": "number" }, "content_type": { "type": "string" }, "height": { "type": "number" }, "next_step": { "type": "string" }, "url": { "description": "The hosted copy.", "type": "string" }, "width": { "type": "number" } }, "required": [ "url", "content_type", "bytes", "next_step" ], "type": "object" } }, { "description": "Read a brand's website and save a brand profile from it: name, value props, CTA, tone and product images. Costs no credits. Low-confidence reads are returned for confirmation instead of being saved. SIGN-IN REQUIRED: connect this server with OAuth (the host prompts for it), or add an API key header \"Authorization: Bearer acd_live_…\" created at https://aicontentdrop.com/settings/integrations.", "inputSchema": { "properties": { "mode": { "description": "What kind of page it is. Defaults to product.", "enum": [ "product", "app" ], "type": "string" }, "persist": { "description": "Save when the read is confident. Defaults to true.", "type": "boolean" }, "url": { "description": "The brand's product page or app page.", "type": "string" } }, "required": [ "url" ], "type": "object" }, "name": "import_brand_profile", "outputSchema": { "properties": { "extraction": { "description": "What was read from the page.", "type": [ "object", "null" ] }, "next_step": { "type": "string" }, "profile": { "description": "The saved profile, or null when not saved.", "type": [ "object", "null" ] }, "warnings": { "items": { "type": "string" }, "type": "array" } }, "required": [ "profile", "warnings", "next_step" ], "type": "object" } }, { "description": "See the ad formats the studio can produce — UGC, talking head, unboxing, tutorial, TV spot, product hero, hyper-motion, try-on and more — with a one-line description, the default aspect and the allowed shot count and duration. No account needed. Pick one before writing a brief.", "inputSchema": { "properties": {}, "required": [], "type": "object" }, "name": "list_ad_formats", "outputSchema": { "properties": { "count": { "type": "number" }, "formats": { "items": { "properties": { "aspect_ratio": { "description": "The format's default aspect.", "enum": [ "9:16", "16:9", "1:1" ], "type": "string" }, "default_duration_seconds": { "type": "number" }, "description": { "type": "string" }, "duration_range_seconds": { "description": "[min, max] for brief.totalDurationSec.", "items": { "type": "number" }, "maxItems": 2, "minItems": 2, "type": "array" }, "id": { "description": "Pass this as brief.format.", "type": "string" }, "name": { "type": "string" }, "shot_range": { "description": "[min, max] for brief.shotCount.", "items": { "type": "number" }, "maxItems": 2, "minItems": 2, "type": "array" } }, "required": [ "id", "name", "description", "duration_range_seconds", "shot_range" ], "type": "object" }, "type": "array" }, "note": { "type": "string" } }, "required": [ "count", "formats" ], "type": "object" } }, { "description": "List the account's saved brand profiles — name, site, value props, CTA, tone, product images — so ads for the same brand reuse the same facts. SIGN-IN REQUIRED: connect this server with OAuth (the host prompts for it), or add an API key header \"Authorization: Bearer acd_live_…\" created at https://aicontentdrop.com/settings/integrations.", "inputSchema": { "properties": {}, "required": [], "type": "object" }, "name": "list_brand_profiles", "outputSchema": { "properties": { "count": { "type": "number" }, "next_step": { "type": "string" }, "profiles": { "items": { "type": "object" }, "type": "array" } }, "required": [ "count", "profiles", "next_step" ], "type": "object" } }, { "description": "List the account's boards (visual canvases), newest first: id, name, revision, card count and the board's page link. Costs no credits. Start here to pick a board or to see that none exists yet. SIGN-IN REQUIRED: connect this server with OAuth (the host prompts for it), or add an API key header \"Authorization: Bearer acd_live_…\" created at https://aicontentdrop.com/settings/integrations.", "inputSchema": { "properties": {}, "required": [], "type": "object" }, "name": "list_canvases", "outputSchema": { "properties": { "canvases": { "items": { "properties": { "card_count": { "type": "number" }, "id": { "type": "string" }, "link": { "description": "The board's page on AI Content Drop.", "type": "string" }, "name": { "type": "string" }, "revision": { "description": "The board's version; every write bumps it.", "type": "number" }, "updated_at": { "type": [ "string", "null" ] } }, "required": [ "id", "name", "revision", "card_count", "updated_at", "link" ], "type": "object" }, "type": "array" }, "count": { "type": "number" }, "next_step": { "type": "string" } }, "required": [ "count", "canvases", "next_step" ], "type": "object" } }, { "description": "List the account's recent video generations, newest first, with their status and URLs. SIGN-IN REQUIRED: connect this server with OAuth (the host prompts for it), or add an API key header \"Authorization: Bearer acd_live_…\" created at https://aicontentdrop.com/settings/integrations.", "inputSchema": { "properties": { "limit": { "description": "How many to return (1-50). Defaults to 10.", "type": "number" } }, "required": [], "type": "object" }, "name": "list_generations", "outputSchema": { "properties": { "count": { "type": "number" }, "generations": { "items": { "properties": { "created_at": { "type": [ "string", "null" ] }, "credits_used": { "description": "Charged only on success — a failed generation is 0.", "type": "number" }, "error_message": { "type": [ "string", "null" ] }, "id": { "description": "Poll this with get_generation.", "type": "string" }, "image_url": { "type": [ "string", "null" ] }, "kind": { "enum": [ "video", "image" ], "type": "string" }, "model": { "description": "Model ID, underscored.", "type": [ "string", "null" ] }, "status": { "description": "generating | processing | completed | failed | timeout", "type": "string" }, "thumbnail_url": { "type": [ "string", "null" ] }, "title": { "type": [ "string", "null" ] }, "video_url": { "type": [ "string", "null" ] } }, "required": [ "id", "status", "credits_used" ], "type": "object" }, "type": "array" } }, "required": [ "count", "generations" ], "type": "object" } }, { "description": "See which AI video or image models can make a video ad, animate a photo, produce a product clip or generate an image, with the credit cost of one generation. No account needed. The list is live; `count` is the number of models currently offered.", "inputSchema": { "properties": { "max_credits": { "description": "Only return models costing this many credits or fewer.", "type": "number" }, "type": { "description": "Model family to list. Defaults to video.", "enum": [ "video", "image" ], "type": "string" } }, "required": [], "type": "object" }, "name": "list_models", "outputSchema": { "properties": { "count": { "description": "Models returned after filtering.", "type": "number" }, "models": { "items": { "properties": { "credits": { "description": "Flat cost per generation.", "type": "number" }, "id": { "description": "Pass this as model_id or model.", "type": "string" }, "name": { "type": "string" } }, "required": [ "id", "name", "credits" ], "type": "object" }, "type": "array" }, "note": { "type": "string" }, "type": { "enum": [ "video", "image" ], "type": "string" } }, "required": [ "type", "count", "models" ], "type": "object" } }, { "description": "List the competitor ads saved on the account, newest first: id, advertiser, hook, media and whether a decode is stored. Costs no credits. Start here to pick an ad to decode or place on a board. SIGN-IN REQUIRED: connect this server with OAuth (the host prompts for it), or add an API key header \"Authorization: Bearer acd_live_…\" created at https://aicontentdrop.com/settings/integrations.", "inputSchema": { "properties": {}, "required": [], "type": "object" }, "name": "list_saved_ads", "outputSchema": { "properties": { "ads": { "items": { "properties": { "ad_copy": { "description": "The ad's primary text.", "type": [ "string", "null" ] }, "ad_ref": { "description": "Opaque reference to the ad's source listing; copy it back unchanged when saving. Null when the source gave none.", "type": [ "string", "null" ] }, "ad_url": { "description": "The public listing or post, when known.", "type": [ "string", "null" ] }, "advertiser_name": { "type": [ "string", "null" ] }, "cta_text": { "type": [ "string", "null" ] }, "decoded": { "description": "True when a decode is stored; get_saved_ad returns it.", "type": "boolean" }, "demo": { "description": "True for a sample row: not a real ad. Never present a sample as live data.", "type": "boolean" }, "engagement_score": { "type": [ "number", "null" ] }, "estimated_spend": { "description": "As reported by the source, e.g. a monthly range; absent for most platforms.", "type": [ "string", "null" ] }, "hook_text": { "description": "The headline or opening line.", "type": [ "string", "null" ] }, "id": { "description": "The saved ad's id; pass it as ad_id.", "type": "string" }, "media_type": { "enum": [ "video", "image", "carousel", null ], "type": [ "string", "null" ] }, "media_url": { "description": "The creative (video or image), when the source exposes one.", "type": [ "string", "null" ] }, "platform": { "enum": [ "meta", "tiktok" ], "type": "string" }, "running_days": { "description": "Days the ad has been running, when known.", "type": [ "number", "null" ] }, "saved_at": { "type": [ "string", "null" ] } }, "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" ], "type": "object" }, "type": "array" }, "count": { "type": "number" }, "next_step": { "type": "string" } }, "required": [ "count", "ads", "next_step" ], "type": "object" } }, { "description": "See the catalogue creators available for a UGC video — name, style and a portrait URL — and the fields generate_ugc_video accepts. No account needed. A person's own photo can be used instead, with their consent.", "inputSchema": { "properties": {}, "required": [], "type": "object" }, "name": "list_ugc_avatars", "outputSchema": { "properties": { "avatars": { "items": { "properties": { "description": { "type": "string" }, "id": { "description": "Pass this as template to generate_ugc_video.", "type": "string" }, "name": { "type": "string" }, "portrait_url": { "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": "string" } }, "required": [ "id", "name", "description", "portrait_url" ], "type": "object" }, "type": "array" }, "count": { "type": "number" }, "note": { "type": "string" } }, "required": [ "count", "avatars" ], "type": "object" } }, { "description": "Move one or more cards to new positions on a board. The server places new cards itself; this is for the board view's drag. Costs no credits. SIGN-IN REQUIRED: connect this server with OAuth (the host prompts for it), or add an API key header \"Authorization: Bearer acd_live_…\" created at https://aicontentdrop.com/settings/integrations.", "inputSchema": { "properties": { "canvas_id": { "description": "The board id, from list_canvases or create_canvas.", "type": "string" }, "moves": { "description": "Cards and their new positions.", "items": { "properties": { "id": { "type": "string" }, "position": { "description": "Optional { x, y } in board pixels. When omitted the server places the card in the first free grid cell.", "properties": { "x": { "type": "number" }, "y": { "type": "number" } }, "required": [ "x", "y" ], "type": "object" } }, "required": [ "id", "position" ], "type": "object" }, "minItems": 1, "type": "array" }, "revision": { "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.", "type": "number" } }, "required": [ "canvas_id", "moves" ], "type": "object" }, "name": "move_cards", "outputSchema": { "properties": { "canvas": { "properties": { "card_count": { "type": "number" }, "cards": { "items": { "properties": { "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 }." }, "height": { "type": "number" }, "id": { "type": "string" }, "position": { "properties": { "x": { "type": "number" }, "y": { "type": "number" } }, "required": [ "x", "y" ], "type": "object" }, "type": { "enum": [ "text", "media", "generation", "frame", "task", "legacy" ], "type": "string" }, "width": { "type": "number" } }, "required": [ "id", "type", "position", "data" ], "type": "object" }, "type": "array" }, "edges": { "items": { "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.", "properties": { "id": { "type": "string" }, "label": { "description": "Text drawn on the line, when it has one." }, "source": { "description": "The card the connection starts from.", "type": "string" }, "target": { "description": "The card it leads to.", "type": "string" } }, "type": "object" }, "type": "array" }, "id": { "type": "string" }, "link": { "description": "The board's page on AI Content Drop.", "type": "string" }, "name": { "type": "string" }, "revision": { "description": "The board's version; every write bumps it.", "type": "number" }, "updated_at": { "type": [ "string", "null" ] } }, "required": [ "id", "name", "revision", "card_count", "updated_at", "link", "cards", "edges" ], "type": "object" }, "next_step": { "type": "string" } }, "required": [ "canvas", "next_step" ], "type": "object" } }, { "description": "Re-read a board (same answer as get_canvas). Call it every 10 seconds while a generation card is rendering; a finished render sets the card's status to done and its media_url. Costs no credits. SIGN-IN REQUIRED: connect this server with OAuth (the host prompts for it), or add an API key header \"Authorization: Bearer acd_live_…\" created at https://aicontentdrop.com/settings/integrations.", "inputSchema": { "properties": { "canvas_id": { "description": "The board id, from list_canvases or create_canvas.", "type": "string" } }, "required": [ "canvas_id" ], "type": "object" }, "name": "refresh_canvas", "outputSchema": { "properties": { "canvas": { "properties": { "card_count": { "type": "number" }, "cards": { "items": { "properties": { "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 }." }, "height": { "type": "number" }, "id": { "type": "string" }, "position": { "properties": { "x": { "type": "number" }, "y": { "type": "number" } }, "required": [ "x", "y" ], "type": "object" }, "type": { "enum": [ "text", "media", "generation", "frame", "task", "legacy" ], "type": "string" }, "width": { "type": "number" } }, "required": [ "id", "type", "position", "data" ], "type": "object" }, "type": "array" }, "edges": { "items": { "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.", "properties": { "id": { "type": "string" }, "label": { "description": "Text drawn on the line, when it has one." }, "source": { "description": "The card the connection starts from.", "type": "string" }, "target": { "description": "The card it leads to.", "type": "string" } }, "type": "object" }, "type": "array" }, "id": { "type": "string" }, "link": { "description": "The board's page on AI Content Drop.", "type": "string" }, "name": { "type": "string" }, "revision": { "description": "The board's version; every write bumps it.", "type": "number" }, "updated_at": { "type": [ "string", "null" ] } }, "required": [ "id", "name", "revision", "card_count", "updated_at", "link", "cards", "edges" ], "type": "object" }, "next_step": { "type": "string" } }, "required": [ "canvas", "next_step" ], "type": "object" } }, { "description": "Rename a board. Costs no credits. SIGN-IN REQUIRED: connect this server with OAuth (the host prompts for it), or add an API key header \"Authorization: Bearer acd_live_…\" created at https://aicontentdrop.com/settings/integrations.", "inputSchema": { "properties": { "canvas_id": { "description": "The board id, from list_canvases or create_canvas.", "type": "string" }, "name": { "description": "The new name, 1-100 characters.", "type": "string" }, "revision": { "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.", "type": "number" } }, "required": [ "canvas_id", "name" ], "type": "object" }, "name": "rename_canvas", "outputSchema": { "properties": { "canvas": { "properties": { "card_count": { "type": "number" }, "cards": { "items": { "properties": { "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 }." }, "height": { "type": "number" }, "id": { "type": "string" }, "position": { "properties": { "x": { "type": "number" }, "y": { "type": "number" } }, "required": [ "x", "y" ], "type": "object" }, "type": { "enum": [ "text", "media", "generation", "frame", "task", "legacy" ], "type": "string" }, "width": { "type": "number" } }, "required": [ "id", "type", "position", "data" ], "type": "object" }, "type": "array" }, "edges": { "items": { "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.", "properties": { "id": { "type": "string" }, "label": { "description": "Text drawn on the line, when it has one." }, "source": { "description": "The card the connection starts from.", "type": "string" }, "target": { "description": "The card it leads to.", "type": "string" } }, "type": "object" }, "type": "array" }, "id": { "type": "string" }, "link": { "description": "The board's page on AI Content Drop.", "type": "string" }, "name": { "type": "string" }, "revision": { "description": "The board's version; every write bumps it.", "type": "number" }, "updated_at": { "type": [ "string", "null" ] } }, "required": [ "id", "name", "revision", "card_count", "updated_at", "link", "cards", "edges" ], "type": "object" }, "next_step": { "type": "string" } }, "required": [ "canvas", "next_step" ], "type": "object" } }, { "description": "Render a generation card: its prompt and model become a video or image job whose result lands in the card. Requires a quote_id from estimate_credit_cost for the card's model and kind (quantity 1), taken with the card's duration and resolution when it has them: per-second models are priced from those, and the quote is verified against the card. A card added with from_card_id and no image_url starts from its source card's finished image; until that card is done the run is refused with nothing charged. Credits are charged only on success; a retry with the same quote_id returns the same job. SIGN-IN REQUIRED: connect this server with OAuth (the host prompts for it), or add an API key header \"Authorization: Bearer acd_live_…\" created at https://aicontentdrop.com/settings/integrations.", "inputSchema": { "properties": { "canvas_id": { "description": "The board id, from list_canvases or create_canvas.", "type": "string" }, "card_id": { "description": "A generation card with a model and a prompt.", "type": "string" }, "quote_id": { "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.", "type": "string" }, "revision": { "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.", "type": "number" } }, "required": [ "canvas_id", "card_id", "quote_id" ], "type": "object" }, "name": "run_generation_card", "outputSchema": { "properties": { "canvas": { "properties": { "card_count": { "type": "number" }, "cards": { "items": { "properties": { "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 }." }, "height": { "type": "number" }, "id": { "type": "string" }, "position": { "properties": { "x": { "type": "number" }, "y": { "type": "number" } }, "required": [ "x", "y" ], "type": "object" }, "type": { "enum": [ "text", "media", "generation", "frame", "task", "legacy" ], "type": "string" }, "width": { "type": "number" } }, "required": [ "id", "type", "position", "data" ], "type": "object" }, "type": "array" }, "edges": { "items": { "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.", "properties": { "id": { "type": "string" }, "label": { "description": "Text drawn on the line, when it has one." }, "source": { "description": "The card the connection starts from.", "type": "string" }, "target": { "description": "The card it leads to.", "type": "string" } }, "type": "object" }, "type": "array" }, "id": { "type": "string" }, "link": { "description": "The board's page on AI Content Drop.", "type": "string" }, "name": { "type": "string" }, "revision": { "description": "The board's version; every write bumps it.", "type": "number" }, "updated_at": { "type": [ "string", "null" ] } }, "required": [ "id", "name", "revision", "card_count", "updated_at", "link", "cards", "edges" ], "type": "object" }, "card": { "properties": { "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 }." }, "height": { "type": "number" }, "id": { "type": "string" }, "position": { "properties": { "x": { "type": "number" }, "y": { "type": "number" } }, "required": [ "x", "y" ], "type": "object" }, "type": { "enum": [ "text", "media", "generation", "frame", "task", "legacy" ], "type": "string" }, "width": { "type": "number" } }, "required": [ "id", "type", "position", "data" ], "type": [ "object", "null" ] }, "credits_quoted": { "description": "The ceiling fixed by the quote.", "type": [ "number", "null" ] }, "job": { "properties": { "id": { "description": "Poll with get_generation if needed; refresh_canvas shows it on the card.", "type": "string" }, "kind": { "enum": [ "video", "image" ], "type": "string" } }, "required": [ "id", "kind" ], "type": "object" }, "next_step": { "type": "string" } }, "required": [ "canvas", "card", "job", "credits_quoted", "next_step" ], "type": "object" } }, { "description": "Keep one ad from search_competitor_ads on the account so it can be decoded and placed on a board. Pass the row exactly as returned. Costs no credits. Saving the same ad twice returns the existing saved ad. SIGN-IN REQUIRED: connect this server with OAuth (the host prompts for it), or add an API key header \"Authorization: Bearer acd_live_…\" created at https://aicontentdrop.com/settings/integrations.", "inputSchema": { "properties": { "ad": { "description": "One row from search_competitor_ads results[], copied as is.", "properties": { "ad_copy": { "description": "The ad's primary text.", "type": [ "string", "null" ] }, "ad_ref": { "description": "Opaque reference to the ad's source listing; copy it back unchanged when saving. Null when the source gave none.", "type": [ "string", "null" ] }, "ad_url": { "description": "The public listing or post, when known.", "type": [ "string", "null" ] }, "advertiser_name": { "type": [ "string", "null" ] }, "cta_text": { "type": [ "string", "null" ] }, "demo": { "description": "True for a sample row: not a real ad. Never present a sample as live data.", "type": "boolean" }, "engagement_score": { "type": [ "number", "null" ] }, "estimated_spend": { "description": "As reported by the source, e.g. a monthly range; absent for most platforms.", "type": [ "string", "null" ] }, "hook_text": { "description": "The headline or opening line.", "type": [ "string", "null" ] }, "media_type": { "enum": [ "video", "image", "carousel", null ], "type": [ "string", "null" ] }, "media_url": { "description": "The creative (video or image), when the source exposes one.", "type": [ "string", "null" ] }, "platform": { "enum": [ "meta", "tiktok" ], "type": "string" }, "running_days": { "description": "Days the ad has been running, when known.", "type": [ "number", "null" ] } }, "required": [ "platform" ], "type": "object" } }, "required": [ "ad" ], "type": "object" }, "name": "save_competitor_ad", "outputSchema": { "properties": { "ad": { "properties": { "ad_copy": { "description": "The ad's primary text.", "type": [ "string", "null" ] }, "ad_ref": { "description": "Opaque reference to the ad's source listing; copy it back unchanged when saving. Null when the source gave none.", "type": [ "string", "null" ] }, "ad_url": { "description": "The public listing or post, when known.", "type": [ "string", "null" ] }, "advertiser_name": { "type": [ "string", "null" ] }, "cta_text": { "type": [ "string", "null" ] }, "decoded": { "description": "True when a decode is stored; get_saved_ad returns it.", "type": "boolean" }, "demo": { "description": "True for a sample row: not a real ad. Never present a sample as live data.", "type": "boolean" }, "engagement_score": { "type": [ "number", "null" ] }, "estimated_spend": { "description": "As reported by the source, e.g. a monthly range; absent for most platforms.", "type": [ "string", "null" ] }, "hook_text": { "description": "The headline or opening line.", "type": [ "string", "null" ] }, "id": { "description": "The saved ad's id; pass it as ad_id.", "type": "string" }, "media_type": { "enum": [ "video", "image", "carousel", null ], "type": [ "string", "null" ] }, "media_url": { "description": "The creative (video or image), when the source exposes one.", "type": [ "string", "null" ] }, "platform": { "enum": [ "meta", "tiktok" ], "type": "string" }, "running_days": { "description": "Days the ad has been running, when known.", "type": [ "number", "null" ] }, "saved_at": { "type": [ "string", "null" ] } }, "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" ], "type": "object" }, "next_step": { "type": "string" } }, "required": [ "ad", "next_step" ], "type": "object" } }, { "description": "Search AI Content Drop's published guides and model comparisons about AI video generation, prompting, and ad creative.", "inputSchema": { "properties": { "limit": { "description": "Maximum results (1-25). Defaults to 10.", "type": "number" }, "query": { "description": "Keywords, e.g. 'kling vs sora' or 'ugc hooks'.", "type": "string" } }, "required": [ "query" ], "type": "object" }, "name": "search_articles", "outputSchema": { "properties": { "count": { "type": "number" }, "query": { "type": "string" }, "results": { "items": { "properties": { "category": { "type": "string" }, "description": { "type": "string" }, "markdown_url": { "type": "string" }, "published": { "type": "string" }, "reading_time_minutes": { "type": "number" }, "slug": { "description": "Pass this to get_article.", "type": "string" }, "tags": { "items": { "type": "string" }, "type": "array" }, "title": { "type": "string" }, "url": { "type": "string" } }, "required": [ "slug", "title", "url" ], "type": "object" }, "type": "array" } }, "required": [ "query", "count", "results" ], "type": "object" } }, { "description": "Search live competitor ads by keyword on Meta or TikTok: advertiser, copy, hook, call to action, media and run time per ad. Costs no credits. When live data is not available the rows are samples, marked demo: true with a note; never present those as real ads. SIGN-IN REQUIRED: connect this server with OAuth (the host prompts for it), or add an API key header \"Authorization: Bearer acd_live_…\" created at https://aicontentdrop.com/settings/integrations.", "inputSchema": { "properties": { "keyword": { "description": "What to search for: a product, a category or a competitor, 1-200 characters.", "type": "string" }, "limit": { "description": "Rows to return, 1-20; defaults to 10.", "type": "number" }, "platform": { "description": "Defaults to meta.", "enum": [ "meta", "tiktok" ], "type": "string" }, "sort": { "description": "impressions (default) ranks by reach; recent by start date.", "enum": [ "impressions", "recent" ], "type": "string" } }, "required": [ "keyword" ], "type": "object" }, "name": "search_competitor_ads", "outputSchema": { "properties": { "count": { "description": "Rows returned.", "type": "number" }, "demo": { "description": "True when results are sample rows because live data was not available.", "type": "boolean" }, "keyword": { "type": "string" }, "next_step": { "type": "string" }, "note": { "description": "Present only when demo is true: why, and what the rows are.", "type": "string" }, "platform": { "enum": [ "meta", "tiktok" ], "type": "string" }, "results": { "items": { "properties": { "ad_copy": { "description": "The ad's primary text.", "type": [ "string", "null" ] }, "ad_ref": { "description": "Opaque reference to the ad's source listing; copy it back unchanged when saving. Null when the source gave none.", "type": [ "string", "null" ] }, "ad_url": { "description": "The public listing or post, when known.", "type": [ "string", "null" ] }, "advertiser_name": { "type": [ "string", "null" ] }, "cta_text": { "type": [ "string", "null" ] }, "demo": { "description": "True for a sample row: not a real ad. Never present a sample as live data.", "type": "boolean" }, "engagement_score": { "type": [ "number", "null" ] }, "estimated_spend": { "description": "As reported by the source, e.g. a monthly range; absent for most platforms.", "type": [ "string", "null" ] }, "hook_text": { "description": "The headline or opening line.", "type": [ "string", "null" ] }, "media_type": { "enum": [ "video", "image", "carousel", null ], "type": [ "string", "null" ] }, "media_url": { "description": "The creative (video or image), when the source exposes one.", "type": [ "string", "null" ] }, "platform": { "enum": [ "meta", "tiktok" ], "type": "string" }, "running_days": { "description": "Days the ad has been running, when known.", "type": [ "number", "null" ] } }, "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" ], "type": "object" }, "type": "array" }, "sort": { "enum": [ "impressions", "recent" ], "type": "string" }, "total_found": { "description": "Rows the search produced before limit.", "type": "number" } }, "required": [ "keyword", "platform", "sort", "count", "total_found", "demo", "results", "next_step" ], "type": "object" } }, { "description": "Change a card: merge fields into its data (text or title on a text card; prompt, model, kind, aspect_ratio, duration, resolution or image_url on a generation card; title or caption on a media card; label on a frame), or move and resize it. Costs no credits. status, job_id, job_kind, quote_id, media_url, thumbnail_url, credits_used and error are set by the server when a card runs and are refused here. A per-second model is priced from the card's duration and resolution, so set them before quoting. SIGN-IN REQUIRED: connect this server with OAuth (the host prompts for it), or add an API key header \"Authorization: Bearer acd_live_…\" created at https://aicontentdrop.com/settings/integrations.", "inputSchema": { "properties": { "canvas_id": { "description": "The board id, from list_canvases or create_canvas.", "type": "string" }, "card_id": { "description": "The card id, from cards[] on the board.", "type": "string" }, "data": { "description": "Fields to merge into the card's data; fields not named are kept.", "type": "object" }, "height": { "description": "Optional card height in pixels.", "type": "number" }, "position": { "description": "Optional { x, y } in board pixels. When omitted the server places the card in the first free grid cell.", "properties": { "x": { "type": "number" }, "y": { "type": "number" } }, "required": [ "x", "y" ], "type": "object" }, "revision": { "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.", "type": "number" }, "width": { "description": "Optional card width in pixels.", "type": "number" } }, "required": [ "canvas_id", "card_id" ], "type": "object" }, "name": "update_card", "outputSchema": { "properties": { "canvas": { "properties": { "card_count": { "type": "number" }, "cards": { "items": { "properties": { "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 }." }, "height": { "type": "number" }, "id": { "type": "string" }, "position": { "properties": { "x": { "type": "number" }, "y": { "type": "number" } }, "required": [ "x", "y" ], "type": "object" }, "type": { "enum": [ "text", "media", "generation", "frame", "task", "legacy" ], "type": "string" }, "width": { "type": "number" } }, "required": [ "id", "type", "position", "data" ], "type": "object" }, "type": "array" }, "edges": { "items": { "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.", "properties": { "id": { "type": "string" }, "label": { "description": "Text drawn on the line, when it has one." }, "source": { "description": "The card the connection starts from.", "type": "string" }, "target": { "description": "The card it leads to.", "type": "string" } }, "type": "object" }, "type": "array" }, "id": { "type": "string" }, "link": { "description": "The board's page on AI Content Drop.", "type": "string" }, "name": { "type": "string" }, "revision": { "description": "The board's version; every write bumps it.", "type": "number" }, "updated_at": { "type": [ "string", "null" ] } }, "required": [ "id", "name", "revision", "card_count", "updated_at", "link", "cards", "edges" ], "type": "object" }, "card": { "properties": { "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 }." }, "height": { "type": "number" }, "id": { "type": "string" }, "position": { "properties": { "x": { "type": "number" }, "y": { "type": "number" } }, "required": [ "x", "y" ], "type": "object" }, "type": { "enum": [ "text", "media", "generation", "frame", "task", "legacy" ], "type": "string" }, "width": { "type": "number" } }, "required": [ "id", "type", "position", "data" ], "type": [ "object", "null" ] }, "next_step": { "type": "string" } }, "required": [ "canvas", "card", "next_step" ], "type": "object" } }, { "description": "Turn an ad brief into a storyboard: 1-5 shots with framing, the spoken line, the caption and the duration of each. Costs no credits. Show it to the person, edit it if needed, then price it with estimate_ad_cost and submit it with generate_ad. SIGN-IN REQUIRED: connect this server with OAuth (the host prompts for it), or add an API key header \"Authorization: Bearer acd_live_…\" created at https://aicontentdrop.com/settings/integrations.", "inputSchema": { "properties": { "brief": { "description": "The ad brief: brandName, brandOneLiner, valueProps (1-8 strings), cta, intent, format (an id from list_ad_formats), shotCount (1-5), totalDurationSec (5-20), aspect (9:16 | 16:9 | 1:1), language, quality (fast | premium), modelTier (standard | cinematic), garmentImageUrl for the try-on formats.", "type": "object" } }, "required": [ "brief" ], "type": "object" }, "name": "write_ad_storyboard", "outputSchema": { "properties": { "format": { "type": "string" }, "next_step": { "type": "string" }, "storyboard": { "description": "ad { aspect, totalDurationSec, voiceLanguage } and shots[].", "type": [ "object", "null" ] } }, "required": [ "storyboard", "next_step" ], "type": "object" } } ] }
Verify it yourselfcurl -s https://api.teppi.xyz/v1/evidence/sha256:1dfd7b297a8ae354f5ad4337a58960ecece220d6bc7d2000c694f731e83dec00 | sha256sum