Search Documentation
Search across all documentation pages
Connect Claude (MCP)

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/mcp

There 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 whenWhat you hand over
Authorize in the browserYou 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 keyHeadless: 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/mcp

Run /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/mcp

Approve 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:

URLResolves to
https://mcp.transcodely.com/mcpYour organization’s default app. Use this if you have one organization and one app — most people do.
https://mcp.transcodely.com/mcp/app_k1l2m3n4o5That 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.

ToolWhat it doesEffect
create_jobTranscode a source from gs://, s3://, or https:// into one or more renditions, written to a storage origin you own.Creates · billable
create_video_from_urlIngest a publicly reachable https:// video and host it — adaptive ladder, CDN, player.Creates · billable
generate_captionsTranscribe a hosted video into a WebVTT subtitle track. Idempotent per video and language.Creates · billable
get_videoRead a hosted video: status, visibility, duration, poster, every encoded rendition, and a playback block once it is ready.Read‑only
get_job_statusCompact progress snapshot for one job — status, per-output status, and any error.Read‑only
list_jobsRecent jobs newest first, optionally filtered by status, with cursor paging.Read‑only
get_usageEncoding 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’s mcp.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.mp4

Claude 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:

  1. “Transcode and host this video and give me a link: https://www.transcodely.com/videos/bbb-30s.mp4”create_video_from_url, then get_video until it is ready.
  2. “Generate English captions for that video.”generate_captions.
  3. “What’s the status of my last job?”list_jobs, then get_job_status.
  4. “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.