New: the storyboard. Redraw or revoice one scene without redoing the video.

See how it works
Doodaro
AI Connect · v1 beta

Connect an AI agent to Doodaro

Two ways to let an agent make videos for you. Copy for AI pastes instructions and a key into the chat. Doodaro MCP adds the API as tools the agent can call. Both use the same API and the same keys.

Which one to use

Copy for AIDoodaro MCP
What it isGenerated text with a key and the agent guideAn MCP endpoint at https://app.doodaro.com/api/mcp
Works withClaude Code, Codex, Cursor and other agents that can run HTTP requestsMCP clients that can send a header today: Claude Code, Codex, Cursor
SetupOne click, one pasteOne command or config entry
How the agent calls DoodaroIt writes HTTP requests to /api/v1It calls tools such as create_project
Best forA one-off task in a single sessionAn agent you use again and again

Find both in your dashboard: open AI Connect, in the Connect AI group of the sidebar below Your designs → My Templates.

Copy for AI

Copy for AI is text, not a server. It hands a coding agent everything it needs to call the API: who it is working for, the base URL, a key and the instructions.

  1. Open AI Connect in your dashboard and click Copy for AI.
  2. The dashboard creates a new API key named AI agent · <date>.
  3. It fetches the public agent guide from https://app.doodaro.com/api/v1/agent-guide.
  4. It puts a header with the base URL and the key on top of the guide, copies the text to your clipboard and shows it once, with a warning that it contains a secret.
  5. Paste it into Claude Code, Codex, Cursor or another coding agent, then ask for a video. For example: "Make a 60-second portrait explainer about how planes fly in a chalkboard style."

What the text contains

The top of the text carries the base URL and the key. The rest is the agent guide, generated from the same operation list as the API, so it is always current. The shape looks like this:

Copy for AI (shape)
# Doodaro API access
Base URL: https://app.doodaro.com/api/v1
API key: ddr_live_...   (secret, revoke it in Developer)

# Doodaro API guide for AI agents
...the agent guide from /api/v1/agent-guide follows...

The guide tells the agent:

  • Who it is working for, the base URL and how to authenticate.
  • The standard flow: list styles and voices → create a project with scenes → generate assets → poll → render → poll → return videoUrl and dashboardUrl.
  • Every operation with method, path and body.
  • The error format and polling advice (every 3 to 5 seconds).
  • Rules: confirm with you before large generations or renders, never print the key back, never invent style or voice ids.

You can read the guide without a key at app.doodaro.com/api/v1/agent-guide. It contains no secret.

Security and revoking

  • The copied text contains a live key. Treat it like a password. Do not paste it into shared docs, tickets or public chats.
  • Every click creates a separate key, so you can revoke one agent session without breaking anything else.
  • To revoke: open Developer in your dashboard, find the key named AI agent · <date> and click Revoke. The next request with it returns 401 unauthorized.
  • Revoke the key when the task is done. You can always copy a fresh one.
  • Coding agents may keep conversation history. If a session log could be shared, revoke the key it used.

Doodaro MCP

Doodaro MCP exposes the API as tools. Add the URL and your key header to your MCP client and the agent can call list_styles, create_project, render_video and the rest directly.

URLhttps://app.doodaro.com/api/mcp
Auth headerAuthorization: Bearer ddr_live_...
Local studiohttp://127.0.0.1:4318/api/mcp

First create a key in Developer and export it in the shell your client starts from:

shell
export DOODARO_API_KEY="ddr_live_..."

Client config syntax changes over time. If a format below has changed, check your client's MCP docs.

Claude Code

terminal
claude mcp add --transport http doodaro https://app.doodaro.com/api/mcp \
  --header "Authorization: Bearer $DOODARO_API_KEY"

Then run /mcp inside Claude Code to confirm doodaro is connected.

Codex

~/.codex/config.toml
# ~/.codex/config.toml
[mcp_servers.doodaro]
url = "https://app.doodaro.com/api/mcp"
bearer_token_env_var = "DOODARO_API_KEY"

Codex reads the key from the DOODARO_API_KEY environment variable, so the secret never sits in the config file.

Cursor

.cursor/mcp.json
// .cursor/mcp.json
{"mcpServers": {"doodaro": {"url": "https://app.doodaro.com/api/mcp",
  "headers": {"Authorization": "Bearer ${env:DOODARO_API_KEY}"}}}}

${env:DOODARO_API_KEY} reads the key from your environment. Do not commit a literal key into .cursor/mcp.json.

Transport and auth

  • Transport: MCP Streamable HTTP, stateless. Each POST /api/mcp carries one JSON-RPC 2.0 message and the response is application/json. GET and DELETE return 405.
  • Auth: the same API key as the REST API, in Authorization: Bearer. A missing or bad key returns 401 with WWW-Authenticate: Bearer.
  • Methods: initialize, notifications/initialized, ping, tools/list, tools/call.

Tools

There is one tool per API operation, with the same name and the same JSON Schema input. Path parameters such as projectId become input fields. The discovery routes and get_media are not tools.

ToolWhat it does
get_accountReturns the plan, the minute counters and the key making the call. Use it to check that a key works.
list_stylesLists the 37 curated Doodaro styles and your saved templates. Style ids go into styleId.
list_voicesLists narrators from the voice library. Pass the id and name as the project voice or a scene override.
list_enginesLists the drawing engine versions a project can pin, and the default.
list_projectsLists your projects, including the ones made in the dashboard.
create_projectCreates a project from your scenes or from a script. Returns the project detail.
get_projectReturns the project detail. The server syncs finished image, voice and story jobs into the project first.
update_projectChanges project settings. Changing the style marks scene images stale.
sync_projectApplies finished jobs to the project now and returns the project detail. get_project and render_video do this for you.
update_sceneEdits one scene. Changing narration or voice marks that scene's recording stale; changing the picture description marks its image stale.
add_sceneAdds a scene, placed after afterSceneId when you give one. Returns the project detail.
delete_sceneDeletes one scene and returns the project detail.
plan_scenesQueues a story assistant job that splits the saved script into scenes with picture descriptions.
apply_planApplies a completed story plan to the project and returns the project detail.
generate_assetsQueues picture and narration generation for the project, or for chosen scenes.
render_videoSyncs the project, checks it can render, then queues a render with the project's saved engine version.
list_rendersLists the renders of a project.
get_jobReads a story, image, voice, batch or render job. Poll every 3 to 5 seconds until a terminal status.
cancel_jobCancels a job and returns it in the same shape as get_job.

A successful tools/call returns the API response twice: as a JSON string in content[0].text and as an object in structuredContent. An API error returns isError: true with the same error object the REST API sends (code and message).

Test with curl

You do not need a client to check the endpoint. List the tools:

tools/list
curl -X POST https://app.doodaro.com/api/mcp \
  -H "Authorization: Bearer $DOODARO_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json, text/event-stream" \
  -d '{"jsonrpc": "2.0", "id": 1, "method": "tools/list"}'

Call a tool:

tools/call
curl -X POST https://app.doodaro.com/api/mcp \
  -H "Authorization: Bearer $DOODARO_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json, text/event-stream" \
  -d '{"jsonrpc": "2.0", "id": 2, "method": "tools/call",
       "params": {"name": "get_project", "arguments": {"projectId": "<projectId>"}}}'
result
{
  "jsonrpc": "2.0",
  "id": 2,
  "result": {
    "content": [{"type": "text", "text": "{\"id\":\"<projectId>\",\"title\":\"How planes fly\", ...}"}],
    "structuredContent": {"id": "<projectId>", "title": "How planes fly", "...": "..."}
  }
}
error result
{
  "jsonrpc": "2.0",
  "id": 3,
  "result": {
    "isError": true,
    "content": [{"type": "text", "text": "{\"error\":{\"code\":\"not_ready\",\"message\":\"...\"}}"}]
  }
}

ChatGPT and Claude chat

Not yet. ChatGPT and Claude chat add custom connectors through a sign-in flow (OAuth), and Doodaro does not have that yet. It is phase 2.

When it ships, you will add https://app.doodaro.com/api/mcp as a custom connector and click Sign in with Doodaro instead of pasting a key. The tools will be the same. Until then, use Claude Code, Codex or Cursor with a key header, or Copy for AI.

Rather make it in the studio?

The API drives the same studio. Start with 2 free minutes, or open Developer in your dashboard to create a key.