2026-09-27 · 6 min read

An MCP server that captions videos: word-timed captions from Claude, Cursor, or any agent

MCP (Model Context Protocol) is how AI agents call real tools. Instead of copy-pasting between a chat and a product, the agent gets native tools it can call on its own. caption.sh runs a hosted MCP server, so anything your agent can do with video now includes putting captions on it: Claude Code, Cursor, or any MCP client can caption a clip in one natural-language request.

The five tools

  • caption_video: burns word-timed captions into a new MP4 and returns a job id. Any ask for captions, subtitles, or text on screen starts here.
  • get_caption_job: waits on the render and returns the MP4 link. Call it right after caption_video.
  • list_caption_styles: every font, recipe, and what each one looks like, so the agent can pick by name instead of tuning JSON.
  • list_caption_jobs: recent renders and their states.
  • get_caption_balance: prepaid credits left, so the agent can warn before a batch runs dry.

What a session looks like

> caption hook.mp4 for tiktok, brand green

  list_caption_styles
  picked short-form-punch

  caption_video
    font: "luckiest-guy"
    max_words: 1
    position: "center"
    highlight_color: "#22C55E"

  get_caption_job  done - 31s - 6c

hook-captioned.mp4 is ready.

The style recipes matter more than they look. Word timing, karaoke highlight, stroke, and backdrop are solved per recipe, so the agent never hand-tunes rendering math. Nine recipes cover the common looks, and list_caption_styles shows previews before the agent commits to one.

Setup

claude mcp add --transport http caption https://mcp.caption.sh/mcp \
  --header "Authorization: Bearer $CAPTION_API_KEY"

One line to connect. The key is the same API key the REST API uses, from the caption.sh dashboard. The server speaks streamable HTTP, so any current MCP client works, not just Claude.

When this beats an editor, and when it beats the REST API

An editor makes sense when a person polishes one video at a time. The REST API makes sense when your pipeline is a script with a known shape. The MCP server wins when the caller is an agent: clips land in a drive, a cron, or a chat, and the agent decides what to caption, picks the style, renders, and hands back links. No integration code at all.

Try it

Judge the output in the playground on caption.sh first - drop a clip, flip through the style recipes. Then connect the MCP server with the line above, or read the full reference at caption.sh/docs.

Back to all articles