Agents and MCP
Eden Gen is an MCP server at https://edengen.ai/mcp (Streamable HTTP). Agents get the same prices, caps and refunds as people, and ask before expensive runs.
Tools
| Tool | Use |
|---|---|
takes_list_models | Models with price, resolutions, lengths, best use. Optional kind filter. |
takes_list_projects | Projects with remaining budget; the key's default is marked. |
takes_estimate | Exact price, remaining budget, needs_confirmation and blockers. |
takes_create | Renders and waits up to wait_seconds (default 30). Needs confirm_cost=true above the threshold. |
takes_get | Status, cost, error and file URL. Can wait for a running take. |
takes_list | Recent takes, optionally per project. |
takes_account | Balance, threshold, key limits. |
takes_finish | Re-renders an approved draft as the final on the stronger model. Asks above the threshold. |
takes_create_upload_link | A one-time upload URL for a reference file. See References and elements. |
There is also a prompt, direct_a_shot, that turns an idea into a directing prompt and a priced plan.
takes_create refuses with the price and tells the agent to ask you. Only after you agree does it call again with confirm_cost=true. Nothing is charged in between.Sign in with OAuth
Clients that support MCP authorization (claude.ai connectors, newer desktop and CLI clients) need no key. They discover Eden Gen, register themselves and send you to a consent screen where you pick the project and a monthly cap.
| Endpoint | Spec |
|---|---|
/.well-known/oauth-protected-resource/mcp | RFC 9728, linked from the 401 WWW-Authenticate header on /mcp |
/.well-known/oauth-authorization-server | RFC 8414 metadata |
/oauth/register | RFC 7591 dynamic registration, public clients only |
/oauth/authorize | Authorization code with PKCE S256, exact redirect URIs |
/oauth/token | 1 h access tokens, 30 day rotating refresh tokens; reuse revokes the connection |
/oauth/revoke | RFC 7009 |
claude.ai
Add Eden Gen as a custom connector. Claude signs you in with OAuth: no key to paste. Needs Eden Gen on a public https URL; claude.ai cannot reach localhost.
1. claude.ai → Settings → Connectors → Add custom connector
2. Name: Eden Gen
3. Remote MCP server URL: https://edengen.ai/mcp
4. Add, then Connect
5. Sign in to Eden Gen, pick the project and a monthly cap, Allow
6. In a chat: "Draft a 5 s shot of a lighthouse in a storm and show me the price first"Claude Code
One command. Then ask Claude for a shot: it lists models, estimates, asks you above your threshold, renders and returns the file.
export TAKES_API_KEY=tk_your_key
claude mcp add --transport http eden-gen https://edengen.ai/mcp --header "Authorization: Bearer $TAKES_API_KEY"claude mcp list # eden-gen should show ✓ connectedCodex
Add the server to your Codex config and export the key in the shell that starts Codex.
[mcp_servers.eden-gen]
url = "https://edengen.ai/mcp"
bearer_token_env_var = "TAKES_API_KEY"codex mcp listCursor
Project or global MCP config. Cursor reads the key from your environment.
{
"mcpServers": {
"eden-gen": {
"url": "https://edengen.ai/mcp",
"headers": { "Authorization": "Bearer ${env:TAKES_API_KEY}" }
}
}
}Claude Desktop
Desktop talks to remote servers through the mcp-remote bridge.
{
"mcpServers": {
"eden-gen": {
"command": "npx",
"args": ["-y", "mcp-remote", "https://edengen.ai/mcp", "--header", "Authorization:${AUTH}"],
"env": { "AUTH": "Bearer tk_your_key" }
}
}
}Claude Code skill (optional)
Drop this in your project so Claude follows the studio workflow without being told.
---
name: eden-gen
description: Generate images, video and audio through Eden Gen (Seedance, Kling, Veo, Nano Banana, GPT Image). Use when the user asks for a shot, still, storyboard frame, video clip or voice line.
---
# Eden Gen
Use the Eden Gen MCP tools (server https://edengen.ai/mcp). Their names start with takes_.
1. takes_list_models, pick an efficient draft model first (seedance-2.0-mini, nano-banana-2.1).
2. takes_list_projects, bill to the project the user names.
3. takes_estimate, tell the user the price. If needs_confirmation, ask before creating.
4. takes_create with a directing prompt: camera, beat, motion, light. Video ends with "no music", one shot adds "no cut".
5. takes_get until done. Failed takes are refunded; report the reason.
6. Keep the take ID in every file name.
DeepSeek and other function-calling models
No MCP client? GET /v1/tools?format=openai returns tool schemas plus the REST route for each tool. Use format=anthropic for Claude's Messages API.
import json, os, requests
from openai import OpenAI
TAKES = "https://edengen.ai"
H = {"Authorization": f"Bearer {os.environ['TAKES_API_KEY']}"}
spec = requests.get(f"{TAKES}/v1/tools?format=openai").json()
llm = OpenAI(api_key=os.environ["DEEPSEEK_API_KEY"], base_url="https://api.deepseek.com")
def call(name, args):
r = spec["routes"][name]
path = r["path"].replace("{id}", args.pop("id", ""))
res = requests.request(r["method"], TAKES + path, headers=H,
json=args if r["method"] == "POST" else None,
params=args if r["method"] == "GET" else None)
return res.text
msgs = [{"role": "user", "content": "Draft a 5 s shot of a lighthouse in a storm. Show me the price first."}]
while True:
out = llm.chat.completions.create(model="deepseek-chat", messages=msgs, tools=spec["tools"]).choices[0].message
msgs.append(out)
if not out.tool_calls:
print(out.content); break
for tc in out.tool_calls:
msgs.append({"role": "tool", "tool_call_id": tc.id,
"content": call(tc.function.name, json.loads(tc.function.arguments))})Connect your agent
Create a key in Developers, add the MCP server and let your agent price and run takes for you.