Connect Claude to Transcodely over MCP
Transcodely runs a hosted MCP (Model Context Protocol) server that exposes a curated set of Transcodely tools to Claude and any other MCP-compatible client. It lives at:
https://mcp.transcodely.com/mcpThere is nothing to install and no gateway to run — the server speaks MCP over streamable HTTP. Point a client at the URL, authorize once in your browser, and Claude can submit jobs, ingest videos, and read back status in plain language.
MCP is an open standard, so the same URL works in Claude Code, claude.ai, Cursor, and any other client that supports remote MCP servers.
There are two ways to authenticate, and you should pick deliberately:
| Use it when | What you hand over | |
|---|---|---|
| Authorize in the browser | You are working interactively in a client that can open a browser — claude.ai, Claude Code, Cursor. | Nothing. You approve a consent screen; the client stores and refreshes the token itself. |
| API key | Headless: CI, a server-side agent, a container with no browser. | A Transcodely API key (ak_…), sent as a bearer token. |
The browser flow is the default for everything below. The API-key flow is documented under Headless and CI.
Add it to Claude Code
Register the server, then authenticate:
claude mcp add --transport http transcodely https://mcp.transcodely.com/mcpRun /mcp inside Claude Code, choose transcodely, and pick Authenticate. Your
browser opens, you approve, and the connection is live. Claude Code stores the token and
refreshes it for you.
To share the server with a repository so teammates pick it up, commit a .mcp.json at the
project root:
{
"mcpServers": {
"transcodely": {
"type": "http",
"url": "https://mcp.transcodely.com/mcp"
}
}
}Each teammate authorizes with their own account the first time they use it — the file carries no credential, so it is safe to commit.
Add it to claude.ai
Open Settings → Connectors → Add custom connector, paste the server URL, and click Connect:
https://mcp.transcodely.com/mcpApprove the authorize screen when it appears. The same connector is available in the Claude desktop and mobile apps once it is added to your account.
Add it to Cursor
Add the server to ~/.cursor/mcp.json (or your project’s .cursor/mcp.json):
{
"mcpServers": {
"transcodely": {
"type": "http",
"url": "https://mcp.transcodely.com/mcp"
}
}
}Cursor prompts you to authorize the first time a tool runs.
Choosing which app the tools act on
Transcodely scopes everything to an app — jobs, videos, origins, and usage all belong to one. The MCP server resolves your app from the URL:
| URL | Resolves to |
|---|---|
https://mcp.transcodely.com/mcp | Your organization’s default app. Use this if you have one organization and one app — most people do. |
https://mcp.transcodely.com/mcp/app_k1l2m3n4o5 | That specific app. Use this when you belong to more than one organization, or want an agent pinned to one app. |
If you belong to several organizations, the bare URL cannot pick for you and returns an error listing the per-app URLs to use instead. Copy the one you want and register that as the server URL.
You can register the same server more than once under different names — say transcodely-prod and transcodely-staging, each pointed at its own app_… URL — so the agent has to name
which one it is touching.
Tools
The server exposes seven tools. Claude picks the right one from your request; you do not call them directly.
| 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_video_from_url | Ingest a publicly reachable https:// video and host it — adaptive ladder, CDN, player. | Creates · billable |
generate_captions | Transcribe a hosted video into a WebVTT subtitle track. Idempotent per video and language. | Creates · billable |
get_video | Read a hosted video: status, visibility, duration, poster, every encoded rendition, and a playback block once it is ready. | Read‑only |
get_job_status | Compact progress snapshot for one job — status, per-output status, and any error. | Read‑only |
list_jobs | Recent jobs newest first, optionally filtered by status, with cursor paging. | Read‑only |
get_usage | Encoding minutes, storage, egress, and cost in EUR for a billing month. | Read‑only |
There is deliberately no delete, cancel, or update tool. Nothing exposed over MCP can remove or modify data that already exists. Four tools only read; the other three create work and bill for it at standard rates.
create_video_from_url fetches a public URL — private and internal addresses are rejected.
There is no file-upload tool over MCP; push bytes through the dashboard or the upload API instead.
Headless and CI
An agent with no browser cannot complete the authorize flow. Use an app-scoped API key
(ak_…) as a bearer token instead — the MCP server accepts the same keys as the REST API,
and every tool call is scoped to that key’s app.
See API Keys for how keys map to apps, and Authentication for the key format.
For Claude Code, pass the header at registration time:
claude mcp add --transport http transcodely https://mcp.transcodely.com/mcp --header "Authorization: Bearer ak_..."Or as a committed config:
{
"mcpServers": {
"transcodely": {
"type": "http",
"url": "https://mcp.transcodely.com/mcp",
"headers": {
"Authorization": "Bearer ak_..."
}
}
}
}Note: Treat a file carrying a key like any other secret. Prefer an environment reference or a per-developer key over committing a live
ak_…value. This is the reason the browser flow is the default: there is no key to leak.
A key presented at another app’s URL is rejected — an ak_… scoped to one app cannot act on …/mcp/app_someotherapp.
What the connection can do, and how to end it
An authorized connection acts as you, within the app it resolved to. It can do what the seven tools do and nothing else: it cannot reach admin, billing, team, or key-management surfaces, and it cannot escalate beyond your own membership. Every tool call is written to your audit log with the tool name and scrubbed arguments.
To end access:
- Remove the connector in the client — disconnect it in claude.ai, or
claude mcp remove transcodely, or delete the entry from Cursor’smcp.json. This is the one you reach for when a connection is simply no longer wanted. - Remove the member from the organization — an org admin does this from the dashboard. Membership is re-checked on every tool call, so access ends at that person’s next request. This is the mechanism to use when someone leaves or a connection has to be cut off rather than tidied up.
- Revoke the API key — for the headless path only. A revoked
ak_…stops working on the MCP server immediately, the same as on the REST API.
One honest caveat on the browser flow: an access token that was already issued stays valid until it expires — roughly ten minutes, worst case. The client cannot mint a new one once the connector is gone or membership is removed, so this is a short tail, not an open door. If you need access to stop at a hard instant, remove the member and treat the token lifetime as the outer bound.
Try it
Once the server is attached, ask in plain language:
Transcode and host this video and give me a link: https://www.transcodely.com/videos/bbb-30s.mp4Claude calls create_video_from_url, polls get_video until the video reports status: "ready", and hands back playback.player_url — a durable player page for public
and unlisted videos. Nothing above sets visibility, so it falls back to the app’s default
visibility, which is unlisted unless the app has been configured otherwise. The same block carries hls_url for embedding your own player, which
expires at expires_at; private videos get the signed hls_url only, never a player page.
Some prompts to try, each grounded in a tool the server ships today:
- “Transcode and host this video and give me a link: https://www.transcodely.com/videos/bbb-30s.mp4” —
create_video_from_url, thenget_videountil it is ready. - “Generate English captions for that video.” —
generate_captions. - “What’s the status of my last job?” —
list_jobs, thenget_job_status. - “How much have I spent on video this month, and which day cost the most?” —
get_usage, which answers both from its per-day breakdown.
For the product overview and per-client connect steps in one page, see the MCP server page.
Where it’s listed
The server is published as com.transcodely/mcp in the official MCP registry, listed on Smithery, and has a public home at github.com/transcodely/mcp with the connect
instructions and the registry manifest.