Generating video from Claude and Cursor with one API key (MCP + agent skills) A developer at Revana published a guide and public repo (Aribk7/revana-skills) showing how to give Claude Code, Claude Desktop, Cursor, VS Code and Codex CLI access to paid video-generation models such as Seedance 2.5, Veo 3.1 and Kling through a single API key, via a remote MCP server over streamable HTTP or a shell-based Agent Skill. The design separates a free `get_quote` tool from the paid `generate_video` call, which is capped by `max_cost_usd` and uses idempotency keys so retries return the same job instead of starting a second paid one, while `get_video` long-polls up to 40 seconds to keep agents from filling context with status messages. Disclosure: I work on Revana https://revana.si/?utm source=devto&utm medium=article&utm campaign=crosspost-2 . The examples use its MCP server and REST API because that's what I know end to end. The patterns quote first, cap the cost, idempotent retries, wait without polling apply to any paid generation API you give an agent. Coding agents are now good at the glue work around media: writing a storyboard, generating a start frame, rendering a clip, trimming it with ffmpeg, and committing the result to a repo. What they lack out of the box is a safe way to spend money on generation. An agent that can call a video model in a retry loop can also burn $50 in a minute. This post covers two ways to give Claude Claude Code, Claude Desktop and Cursor access to video models such as Seedance 2.5, Veo 3.1 and Kling, through a single key: get quote and generate video . curl , following a short set of rules you write once. You can use either or both. MCP is less work. The skill gives you more control and works in any agent that can run a shell. Everything below is also in a public repo, Aribk7/revana-skills https://github.com/Aribk7/revana-skills : ready-made Agent Skills for Claude Code, Codex and Cursor, runnable examples, and two n8n workflows. Revana runs a remote MCP server over streamable HTTP at: https://revana.si/api/mcp claude mcp add --transport http revana https://revana.si/api/mcp Then type /mcp inside Claude Code and choose revana to sign in. The OAuth flow creates a separate API key for this connection. You can revoke it from the dashboard without touching your other keys. Add it as a custom connector with the same URL, then click Connect and approve it on revana.si. Add the server to ~/.cursor/mcp.json global or .cursor/mcp.json per project . With OAuth, Cursor asks you to sign in the first time a tool is used: { "mcpServers": { "revana": { "url": "https://revana.si/api/mcp" } } } If your client doesn't support OAuth, pass an API key from the dashboard as a header. Keep this file out of git: the key spends real credits. { "mcpServers": { "revana": { "type": "http", "url": "https://revana.si/api/mcp", "headers": { "Authorization": "Bearer sr live YOUR KEY" } } } } VS Code and Codex CLI one-liners, for completeness: code --add-mcp '{"name":"revana","type":"http","url":"https://revana.si/api/mcp"}' codex mcp add revana --url https://revana.si/api/mcp && codex mcp login revana | Tool | What it does | Costs money | |---|---|---| | list models | Every video/image model with options and price | no | | get quote | Exact price for a request, before anything runs | no | | get balance | What the credits can spend now, what's held by running jobs | no | | upload file | Turn a local image/clip/sound into an https link for references 14 days | no | | generate video | Start the generation, capped by max cost usd | yes | | get video | Wait for a job long-poll up to 40 s per call | no | | get video link | A download link for the result valid one hour | no | The design choice that matters is that quoting is a separate, free tool and the server instructions tell the model to quote first and ask before calling generate video . In practice, this prompt: Make a 5-second 720p video of a paper boat in the rain with Seedance 2.5. Tell me the price first. produces a get quote call, a message like "That's $1.05 5 s x $0.21/s at 720p, price as of 2026-11-05 . Go ahead?", and only after you answer yes, a generate video call with max cost usd: 1.25 and an idempotency key the agent makes up. If the agent retries after a network error, it reuses that key, and the server returns the same job instead of starting a second paid one. The other detail is get video with wait seconds . Without it, agents tend to poll in a tight loop and fill their own context with status messages. A long-poll lets one tool call wait up to 40 seconds. MCP is convenient, but sometimes you want the agent to drive the HTTP API directly: in CI, in a sandbox without MCP, or when you want the generated files written straight into the repo. In that case, give the agent a short rules file and a key in the environment. The key goes in the environment, set by you, never pasted into the chat: export REVANA API KEY=sr live ... in your shell profile or a .env the agent can't print Then add a skill. For Claude Code that's .claude/skills/video/SKILL.md . For Cursor, put the same text in .cursor/rules/video.mdc . If you'd rather not write it yourself, the revana-skills https://github.com/Aribk7/revana-skills repo has finished skills for video, images, UGC ads, music and picking the cheapest model. Copy a folder from its skills/ https://github.com/Aribk7/revana-skills/tree/main/skills directory into ~/.claude/skills/ or your agent's skills directory . The minimal version looks like this: --- name: video description: Generate a video or image with the Revana API Seedance 2.5, Veo 3.1, Kling, Wan, Nano Banana Pro . Use when the user asks to make, render or animate a video or image. --- Rules 1. The key is in $REVANA API KEY. Never print, echo or write it to a file. 2. Quote first from the live price list no key needed and wait for a "yes": curl -s https://api.revana.si/v1/models | jq '.data | select .id=="seedance-2.5" | .price' Cost = price.usd resolution or "