trvrse
AI에 카메라를 부여하세요 — 모든 AI 에이전트를 생성형 미디어 스튜디오로 바꿔주는 호스팅 MCP 서버: 텍스트-이미지, 이미지-비디오, 음성 해설, 그리고 종단 간 시네마 파이프라인을 제공하며 키별 지출 상한을 지원합니다. 스트리밍 가능한 HTTP를 통해 45개의 도구를 제공합니다.
문서
trvrse cinema — MCP guide for agents
You are (or are configuring) an LLM agent connected to the trvrse cinema MCP server. It exposes a five-stage film pipeline — Script → References → Storyboards → Videos → Assembly — as 28 tools: 17 stage-by-stage tools you drive yourself, plus 3 Autopilot tools (make_film, get_run, cancel_run) that hand the whole pipeline to the server for one-call film production, plus make_long_film (multi-minute films with consistent characters, §3) and get_gate_review_link (mint a no-login human review link for a gated stage), plus 4 cast tools (save_character_to_cast, list_cast, delete_cast_member, refresh_cast_portrait) for episodic reuse of approved characters, plus refresh_character_portrait for re-minting a non-cast character's expired trusted portrait, plus set_shot_face_trust_override for per-scene face-moderation control. Separately, 7 asset tools (estimate_generation_cost, generate_image, edit_image, upload_image, list_images, generate_video, get_video_job) generate reference images and Seedance 2.5 videos without a cinema project (§4). A third surface, 6 video-plan tools (estimate_video_plan_cost, create_video_plan, get_video_plan, list_video_plans, approve_video_plan, reject_video_plan, §5), builds a full Seedance 2.x manifest — brief, refs, prompt, cost — that a human OR the agent itself approves before it dispatches. This guide is the complete playbook: connecting, the workflow loop, Autopilot, standalone assets, video plans, cost and error contracts, and a worked end-to-end transcript.
Endpoint: https://www.trvrse.com/api/mcp/mcp · Keys: minted by a human at Settings → Agent access · Raw markdown version of this page: https://www.trvrse.com/docs/agents.md
1. Quick start
Mint a key
- Sign in to the app and go to Settings → Agent access (https://www.trvrse.com/settings/agent).
- Click New key, give it a name (and, optionally, a spend cap in credits — leave blank for uncapped).
- The plaintext key is shown exactly once in a modal you must explicitly dismiss with Done. Copy it now — it is never shown again (only a
trv_+ 8-char prefix is kept for display). If you lose it, revoke the key and mint a new one.
The key looks like trv_ followed by 43 base64url characters, e.g. trv_9F2k7q....
Endpoint
https://www.trvrse.com/api/mcp/mcp
(mcp-handler 's basePath is /api/mcp; it appends the mcp transport segment itself. Streamable HTTP only — SSE is disabled.)
Claude Code
claude mcp add --transport http trvrse-cinema https://www.trvrse.com/api/mcp/mcp \
--header "Authorization: Bearer trv_YOUR_KEY_HERE"
Generic MCP client (JSON config)
Most MCP clients (Claude Desktop, other agent runtimes) accept a config block like:
{
"mcpServers": {
"trvrse-cinema": {
"url": "https://www.trvrse.com/api/mcp/mcp",
"transport": "http",
"headers": {
"Authorization": "Bearer trv_YOUR_KEY_HERE"
}
}
}
}
The exact key name/shape (url vs command, headers vs env) varies by client — anything that supports a streamable-HTTP MCP transport with a custom header works. There is no OAuth/dynamic-registration flow; the bearer token is the credential.
claude.ai and ChatGPT (custom connectors)
claude.ai and ChatGPT custom connectors support only OAuth or "no authentication" — never a custom Authorization header, so the two connect methods above don't work there. Use the keyed-URL endpoint instead (shown alongside the plaintext key when a new one is minted, on Settings → Agent access):
https://www.trvrse.com/api/mcp/k/trv_YOUR_KEY_HERE/mcp
claude.ai — Settings → Connectors → Add custom connector → paste the URL above, leave authentication as None.
ChatGPT (developer mode / custom connectors) — add a connector with the same URL, authentication None.
The key rides in the URL path; the endpoint injects it as the bearer token internally and forwards to the same authed handler above — no second server, no different tool catalog. The URL is bearer-equivalent: treat it like a password (don't paste it somewhere public), prefer a spend-capped key per connector, and revoke it any time from Settings → Agent access if it leaks.
Sanity-check the connection
Once connected, ask the agent to call list_projects (or run get_project_status against an existing project id). A working connection returns real JSON; a bad key returns an isError result naming BRIDGE_AUTH_FAILED (see the error contract below).
Install this guide as a skill (optional)
Claude Code and other skills-capable agents can carry this playbook in-context instead of re-reading it each session:
SKILLS_DIR=~/.claude
mkdir -p "$SKILLS_DIR/skills/trvrse-cinema" && \
curl -fsSL https://www.trvrse.com/docs/agents/skill.md \
-o "$SKILLS_DIR/skills/trvrse-cinema/SKILL.md"
2. The workflow loop
Every film follows the same loop per stage:
- Check state —
get_project_status: read the five stage statuses andnextActions(it names exactly the tool calls the pipeline admits next; trust it over guessing). - Quote —
get_cost_estimatefor the stage you are about to generate. - Generate — call the stage's
generate_*tool withconfirmedCostset to the quote's exacttotal. - Poll —
get_project_statusevery 15–30 seconds until the stage's entities leaveGENERATING(typically 1–3 minutes). - Review & approve — inspect results (statuses, failure reasons), regenerate anything that failed, then call the stage's
approve_*tool to unlock the next stage.
Script is the exception: generate_script and rewrite_scenes run the LLM in-request and return the full screenplay synchronously (~30–60 seconds), and script work is free — no quote needed.
3. One-call films (Autopilot)
Instead of driving the five-stage loop above yourself, make_film hands the whole pipeline to the server: submit a brief and a budget, then poll get_run until the film is done.
make_film
briefText(required) — the production brief the whole film is generated from.profile(required) —"cinematic"(16:9 default) or"short"(see below).budgetCredits(required) — a hard ceiling for the run's total spend (see "Budget is a hard ceiling" below).gates(optional, default[]= fully unattended) — which of"script","references","storyboards","videos","assembly"pause the run for human review (see "Gates" below).webhookUrl(optional,https://only) — receives run events (see "Webhooks" below).title,aspectRatio,videoModel(optional) — same shapes ascreate_project;profilesupplies defaults you can override.
Returns {runId, projectId, webhookSecret?}. webhookSecret is present only when webhookUrl was set, and is shown exactly once, here — save it immediately, it is never returned again and you need it to verify webhook deliveries.
make_long_film — multi-minute films with consistent characters
Use this instead of make_film when the user wants a long-form piece whose characters must stay recognisably the same person throughout.
It runs the same pipeline, but changes how video is generated. make_film renders one independent clip per storyboard page and concatenates them, so a 3-minute film is 20–40 separate generations — each an independent roll of the dice on character identity. make_long_film renders each page as ONE continuous multi-shot Seedance 2.5 generation and continues the previous page through native video extension, so the same film is about 6 generations. Every segment re-sends the same approved character portraits: the extension carries continuity, the portraits carry identity.
- Pinned to
seedance-2.5-reference.videoModelis not selectable. - Total runtime is capped at 180 seconds. A storyboard that plans more is refused with the exact overage — cut scenes and regenerate.
gatesdefaults to all four review points ("script","references","storyboards","videos"), because the point of this tool is that a human signs off on the cast and the plot before the expensive video leg. Pass[]only if the user explicitly asks for an unattended run.- Other arguments match
make_film:briefText,budgetCredits,title,castIds,webhookUrl,aspectRatio.