A video pipeline your agent can use — and cannot break
Submit encodes, host videos, add captions and read back status and cost from Claude, Claude Code or Cursor. No delete, no cancel, no keys.
No card needed · 30-second test encodes free · pay per output minute after
server · https://mcp.transcodely.com/mcp
How do I connect Claude to video transcoding?
Three steps, and the only thing you type is a URL. The usual MCP setup — install a package, run it locally, paste an API key into a config file — is exactly what this isn’t.
- 01
Point your client at the server
One URL. There is no package to install, no gateway to run, and no local process to keep alive — the server is hosted and speaks MCP (Model Context Protocol) over streamable HTTP.
- 02
Authorize
Your client opens a browser window; you approve; it closes. No API key is created, copied, or pasted into a config file. If you do not have a Transcodely account yet, you can make one right there.
- 03
Ask for a video
The tools show up in your client. Describe what you want in plain language and the agent picks the tool, runs it against your app, and reports back.
- 1 Open Settings → Connectors → Add custom connector.
- 2 Paste the server URL: https://mcp.transcodely.com/mcp
- 3 Click Connect and approve the authorize screen.
https://mcp.transcodely.com/mcpThe same connector works in the Claude desktop and mobile apps.
- 1 Register the server from your terminal.
- 2 Run /mcp inside Claude Code and pick Authenticate.
- 3 Approve the authorize screen in your browser.
claude mcp add --transport http transcodely https://mcp.transcodely.com/mcp- 1 Click the install button — Cursor opens with the server prefilled.
- 2 Confirm the install.
- 3 Approve the authorize screen the first time a tool runs.
{
"mcpServers": {
"transcodely": {
"type": "http",
"url": "https://mcp.transcodely.com/mcp"
}
}
}Or add it by hand to ~/.cursor/mcp.json.
Running headless, in CI, or on a server with no browser? Attach a Transcodely API key as a bearer token instead — the connect guide covers both paths.
See an exchange
The protocol log behind “transcode and host this video”: what the agent sends, and what comes back.
- Tool call create_video_from_url tools/call
{ "url": "https://www.transcodely.com/videos/bbb-30s.mp4", "title": "Big Buck Bunny (30s)" } - Result from create_video_from_url
{ "id": "vid_a1b2c3d4e5f6g7", "object": "video", "status": "processing", "visibility": "unlisted", "renditions": [] }
- Tool call get_video tools/call
{ "id": "vid_a1b2c3d4e5f6g7" } - Result from get_video
{ "id": "vid_a1b2c3d4e5f6g7", "object": "video", "status": "ready", "visibility": "unlisted", "duration_seconds": 30.0, "renditions": [ { "resolution": "1080p", "codec": "h264" }, { "resolution": "720p", "codec": "h264" }, { "resolution": "480p", "codec": "h264" } ], "playback": { "player_url": "https://play.transcodely.com/v/vid_a1b2c3d4e5f6g7", "hls_url": "https://….b-cdn.net/…/hls/master.m3u8", "expires_at": "2026-08-18T18:00:00Z" } }
What can an agent actually do?
Exactly 15 things. 9 of them only read. 4 create something, and 3 of those bill you. Two — set_spend_limit and update_preset — replace a setting, free of charge, and reach only the work you create afterwards.
| Tool | What it does | Effect |
|---|---|---|
| create_job | Transcode a source from gs://, s3://, or https:// into one or more renditions, written to a storage origin you own. | creates · billable |
| create_preset | Save a named bundle of encoding settings that later jobs can call up by slug. Jobs that already exist are untouched. | creates · free |
| create_video_from_url | Ingest a publicly reachable https:// video and host it — adaptive ladder, CDN, player. Private and internal addresses are rejected. | creates · billable |
| generate_captions | Transcribe a hosted video into a WebVTT subtitle track. Idempotent per video and language, so a retry never bills twice. | creates · billable |
| get_ingest_rule | One ingest rule in full: the origin it watches, its filters, and how many events and jobs it has produced. | read-only |
| get_job_status | A compact progress snapshot for one job — overall status, per-output status, and any error code. Built for polling. | read-only |
| get_output_report | What the encoder actually produced, measured from the written file: codec, profile, pixel format, colour, every audio stream — and each property that differs from what you asked for. | read-only |
| get_usage | Encoding minutes, average storage, egress, and cost in EUR for a billing month, with a per-day breakdown. | read-only |
| get_video | Read a hosted video: status, duration, every encoded rendition, and — once it is ready — the link to play it. | read-only |
| list_ingest_events | What became of every delivery your rules received — matched, created, skipped or failed, and the reason. The answer to "I uploaded a file and no job appeared". | read-only |
| list_ingest_rules | The standing rules that turn an object landing in your bucket into a job, and whether each one is enabled. No secret material is returned. | read-only |
| list_jobs | Recent jobs newest first, optionally filtered by status, with cursor paging up to 100 rows per page. | read-only |
| list_presets | Every preset this app can use — the ones we ship and your own — with full settings and an estimated cost per source minute. | read-only |
| set_spend_limit | Set or clear this app's monthly EUR cap. Owners and admins only, signed in through the browser — an API key cannot move it. | replaces a setting |
| update_preset | Change a custom preset's settings. Queued and running jobs are unaffected: a job resolves its preset when it is created. | replaces a setting |
What keeps it safe?
- Every call is scoped to one app
- A tool call resolves to a single Transcodely app and sees only that app’s jobs and videos. Point separate connections at separate apps — a per-app URL each — to keep environments apart.
- Every call is audited
- Each tool call writes an audit row with the tool name and scrubbed arguments — the same audit trail your REST calls land in.
What it can’t do
A short surface is the point. Here is where it ends.
Nothing on this surface deletes or cancels
There is no delete, cancel, or remove tool. An agent connected to Transcodely can create new work and read what exists — it cannot remove a video or kill a running job. Two — set_spend_limit and update_preset — replace a setting, and only work created after the change sees it.
No file uploads over MCP
create_video_from_urlfetches a publicly reachable http(s) URL; private and internal addresses are rejected. To push bytes from your machine, use the dashboard or the upload API.No admin, billing, or team surface
Keys, members, plans, invoices, and origins are not exposed.
get_usagereports what a month cost; it cannot change what anything costs.The encoder is not a model
Transcoding is deterministic ffmpeg work — the same pipeline, the same output, whether an agent or a cron job starts it.
generate_captionsis the one genuinely AI feature here: speech transcribed into a WebVTT track.
Frequently asked questions
Give your agent a video pipeline
Free to connect. You pay only for the encoding and hosting your agent actually starts — the same rates as the API.
No card needed · 30-second test encodes free · pay per output minute after