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.
{
"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."
~$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 ↓Endpoint: https://agent.livepeer.org/api/mcp
mcp-remote needs Authorization:Bearer sk_… (no space). Claude Code / Cursor / Codex need Authorization: Bearer sk_… (with space).
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)
⌘Q / system tray → Quit) — not just close the window.Authorization:Bearer with no space after the colon).livepeer-agent is listed.npx -y mcp-remote https://agent.livepeer.org/api/mcp once in a terminal to accept the install, then restart Desktop again.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
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.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.| Skill | Install (Claude Code) |
|---|---|
get-started-mcp | mkdir -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-intro | curl -sL https://agent.livepeer.org/skills/storyboard-intro.md -o ~/.claude/skills/storyboard-intro/SKILL.md |
cowork-ux | curl -sL https://agent.livepeer.org/skills/cowork-ux.md -o ~/.claude/skills/cowork-ux/SKILL.md |
human_summary (not raw JSON) + image URL or inline image.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.
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 see | What happened |
|---|---|
not a registered model name | The 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 disabled | The model is known-broken and would bill you for a failed render, so a working replacement ran instead. |
no source frame | You 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 failed | Your pick ran first and hit a recoverable error, so a same-type sibling was tried rather than returning nothing. detail carries the upstream error. |
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" }
})
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.mcp-remote shim (Desktop); quit fully and reopen.livepeer-agent via GET https://agent.livepeer.org/api/mcp.upload / create_upload_url.STOCK SUBSTITUTE line; take Redo with AI.← Back to /start · What's new · Model control · Templates · Playbooks