Get Started · MCP

Try it in ~30 seconds, no key required

The keyless demo gives you about $10 of demo credit per network address, at each model's real price — every model and every tool unlocked, nothing counted. Enough to see a real render before you sign up. Paste this config, no Authorization header, no account.

Keyless demo — paste and go

{
  "mcpServers": {
    "livepeer-agent": {
      "command": "npx",
      "args": ["-y", "mcp-remote", "https://agent.livepeer.org/api/mcp", "--header", "X-Livepeer Agent-Tool-Profile: lean"]
    }
  }
}

No Authorization header — requires DEMO_RENDER_KEY on the server (off by default until ops flips it). Lean tool profile keeps a fresh keyless session to the 9 recommended tools instead of the full ~99-tool surface. Then try: "A watercolor sunset over Tokyo."

See all client configs ↓ Upgrade for unlimited — app.daydream.live →

Try free (no key)

~$10 of demo credit over 7 days, at real model prices. Verify your email to raise it. Omit the Authorization header — see the config above.

Keyless setup ↓

Full access

app.daydream.live → copy your sk_… key.

Connect with Daydream →

Install per client

Endpoint: https://agent.livepeer.org/api/mcp

Header footgun: Claude Desktop mcp-remote needs Authorization:Bearer sk_… (no space). Claude Code / Cursor / Codex need Authorization: Bearer sk_… (with space).

Claude Desktop

Desktop does not speak remote streamable-HTTP MCP natively. Use the mcp-remote shim (below). The server identity is livepeer-agent — if an older guide says storyboard-mcp, update it.

{
  "mcpServers": {
    "livepeer-agent": {
      "command": "npx",
      "args": [
        "-y", "mcp-remote",
        "https://agent.livepeer.org/api/mcp",
        "--header", "Authorization:Bearer sk_YOUR_KEY",
        "--header", "X-Livepeer Agent-Tool-Profile: lean"
      ]
    }
  }
}

Config file: ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) · %APPDATA%\Claude\claude_desktop_config.json (Windows)

  1. Quit Desktop fully (⌘Q / system tray → Quit) — not just close the window.
  2. Edit the JSON above (note: Authorization:Bearer with no space after the colon).
  3. Reopen Desktop. Look for the 🔌 connector icon; confirm livepeer-agent is listed.
  4. If tools show 0: run npx -y mcp-remote https://agent.livepeer.org/api/mcp once in a terminal to accept the install, then restart Desktop again.
  5. Still stuck? Paste the same JSON into Cursor as a control — if Cursor works and Desktop does not, file the Desktop error text (LAT-45a) rather than re-editing blindly.

Full checklist: whats-new · Claude Desktop · manual verification guide

claude mcp add --transport http livepeer-agent \
  https://agent.livepeer.org/api/mcp \
  --header "Authorization: Bearer sk_YOUR_KEY" \
  --header "X-Livepeer Agent-Tool-Profile: lean"
{
  "name": "storyboard",
  "url": "https://agent.livepeer.org/api/mcp",
  "headers": {
    "Authorization": "Bearer sk_YOUR_KEY",
    "X-Livepeer Agent-Tool-Profile": "lean"
  }
}
codex mcp add --name storyboard \
  --url https://agent.livepeer.org/api/mcp \
  --header "Authorization: Bearer sk_YOUR_KEY" \
  --header "X-Livepeer Agent-Tool-Profile: lean"
{
  "mcpServers": {
    "livepeer-agent": {
      "command": "npx",
      "args": ["-y", "mcp-remote", "https://agent.livepeer.org/api/mcp"]
    }
  }
}

No Authorization header — requires DEMO_RENDER_KEY on the server (off by default until ops flips it).

Generate config locally: npm run mcp:config -- --client desktop --key sk_… or --demo

Keep the X-Livepeer Agent-Tool-Profile: lean header. It exposes the 9 core tools instead of all ~99 — loading the full surface on every turn is the #1 cause of slow, token-heavy first runs. Switch to full only when you need a specialized tool.
Codex users: the Authorization: Bearer sk_… header is a credential you configured for your own account — Codex is authorized to send it when calling storyboard tools. If it hesitates, tell it once; or drop a ready-made AGENTS.md in your project root (curl -sL https://agent.livepeer.org/codex-agents.md -o AGENTS.md) so it never stalls.

Install skills first

Skills teach the agent human-friendly voice — not a 99-tool dump on turn one.
SkillInstall (Claude Code)
get-started-mcpmkdir -p ~/.claude/skills/get-started-mcp && curl -sL https://agent.livepeer.org/skills/get-started-mcp.md -o ~/.claude/skills/get-started-mcp/SKILL.md
storyboard-introcurl -sL https://agent.livepeer.org/skills/storyboard-intro.md -o ~/.claude/skills/storyboard-intro/SKILL.md
cowork-uxcurl -sL https://agent.livepeer.org/skills/cowork-ux.md -o ~/.claude/skills/cowork-ux/SKILL.md

Health check (required)

  1. "List available models and pricing."
  2. "Generate a watercolor sunset over Tokyo — fast tier."
  3. Confirm: agent echoes human_summary (not raw JSON) + image URL or inline image.

First prompt recipes

Lean vs full tools

Hosts may show 9 recommended tools when STORYBOARD_LEAN_TOOLS=1 on the server: list_capabilities, get_pricing, create_media, generate_project, upload, get_cost_report, subscribe_progress, attach_skill, list_skills. Full surface (~99 tools) remains callable; send header X-Livepeer Agent-Tool-Profile: full for power users.

Naming the model you want

Know the catalog? Read Asking for the model you want — the plain-language pro guide: how to name a model, confirm what ran, and insist on an exact match. This section is the API-level version of the same thing.

Pass model_override on create_media and the response tells you which model actually ran. When it matches, you get a confirmation. When it doesn't, you get the reason — because four different mechanisms can legitimately serve a different model than the one you named:

Reason you'll seeWhat happened
not a registered model nameThe name isn't live on the network, so it was fuzzy-matched to the closest one. Check the exact spelling with list_capabilities or describe_capability.
that model is temporarily disabledThe model is known-broken and would bill you for a failed render, so a working replacement ran instead.
no source frameYou named an image-to-video model but sent no source_url. That call is rejected upstream, so its text-to-video sibling ran. Pass source_url to keep the i2v model.
the model you asked for failedYour pick ran first and hit a recoverable error, so a same-type sibling was tried rather than returning nothing. detail carries the upstream error.

Exact dispatch — fail instead of falling back

When you'd rather see the failure than a substitute, use run_capability. It never fuzzy-matches: the name goes to the network verbatim, and it takes raw upstream params that create_media doesn't model (resolution, keyframe arrays, reference-image arrays, draft_cache_url).

run_capability({
  capability: "kling-o3-i2v",     // exact name, no substitution
  prompt: "a lantern drifting over dark water",
  source_url: "https://…/frame.jpg",
  params: { duration: 5, resolution: "1080p" }
})
Reading the response. capability is what ran. requested_capability echoes what you asked for. model_note is present only when they differ, and carries {requested, served, reason, detail}. On async jobs the same fields come back from get_create_media.

Troubleshooting

← Back to /start · What's new · Model control · Templates · Playbooks