mcpField
C
Caption Checker

Caption Checker

Local
markstudios.comMedia & Design0Updated 1d ago

About Caption Checker

Caption Checker validates SRT and WebVTT subtitles for caption editors and video production workflows. It flags issues against Netflix English, BBC, or DCMP rules and can run as a CLI, library, or local MCP server.

Key features

  1. 01Checks SRT and WebVTT
  2. 02Supports three caption standards
  3. 03Flags speed, line, and timing issues
  4. 04CLI, JavaScript library, and MCP server
  5. 05Runs locally without uploads

Use cases

  1. 01Checking captions against guidelines before release
  2. 02Blocking noncompliant captions in CI
  3. 03Having an agent review captions during editing

MCP support

The local MCP server provides `check_captions` and `list_standards` tools to check a file path or pasted caption text and show standard limits. It requires no key or network connection.

Configuration

Local server config is the same for every client. Copy it into your client’s MCP config file.

No install method listed yet

We haven’t collected a package or remote endpoint for this server. Follow the instructions in the project README.

Repository
Packages
mcpbcaption-checker-1.1.0.mcpb

Tools

No tool list yet

Local servers expose tools only once running on your machine, and the maintainer has not provided a tool list.

Details

From the project README

caption-checker

Check SRT and WebVTT captions against a published caption standard: Netflix English, the BBC subtitle guidelines or the DCMP Captioning Key. It flags captions that read too fast, lines that are too long, too many lines, captions that stay on screen too short or too long, gaps under the minimum, overlaps and broken timestamps.

No dependencies. Node 18+. The same checker runs in the browser, with no install and no upload, at markstudios.com/tools/caption-checker.

caption-check flagging a travel vlog's SRT file: 2 of 8 captions meet Netflix English limits

$ caption-check examples/travel-vlog.srt
travel-vlog.srt: 2 of 8 captions meet Netflix English, adult programs
  #1  0:00.500 -> 0:03.000  Welcome back to the channel.
      ✗ Gap to the next caption is 0 frames at 24 fps (minimum 2)
  #3  0:06.600 -> 0:07.100  First,
      ✗ On screen 0.50 s (minimum 5/6 of a second)
  #4  0:07.200 -> 0:09.000  we packed water, snacks, a rain jacket and a spare battery for the cam
      ✗ Reading speed 41.1 characters a second (limit 20)
      ✗ Line 1 is 74 characters (limit 42)
  ...

The limits

Each limit was read on the standard's own page on 2026-10-15.

Netflix (English)BBCDCMP Captioning Key
Reading speedUp to 20 characters a second (adult), 17 (children’s)160–180 words a minuteUp to 130 / 140 / 160 words a minute (lower / middle / upper level)
Characters a line4237 on broadcast (Teletext)No character count
Lines a caption22; 3 for vertical 9:16 videoNo more than 2 preferred
Shortest time on screen5/6 of a secondAbout 0.3 s a word (advice)40 frames (1 second and 10 frames)
Longest time on screen7 secondsNo number6 seconds
Gap between captions2 frames minimum; gaps under 0.5 s closed to 2 framesIf you leave a gap, at least 1 second (advice)No rule

Sources: Netflix English (USA) Timed Text Style Guide · Netflix General Requirements · Netflix Subtitle Timing Guidelines · BBC Subtitle Guidelines · DCMP Captioning Key: Text · DCMP Captioning Key: Presentation Rate

How it counts. Characters include letters, spaces and punctuation, but not line breaks or formatting (<i> tags, {\an8} codes, WebVTT voice spans). Reading speed is characters ÷ (out-time − in-time). Words are runs of characters that hold a letter or a digit, so speaker labels and sound tags count, as DCMP asks. Gaps run from one caption's out-time to the next caption's in-time, in frames at the frame rate you give. Anything a standard words as a recommendation is reported as advice, not as a failure.

CLI

npx github:markksantos/caption-checker captions.srt
# or: git clone https://github.com/markksantos/caption-checker && node caption-checker/bin/caption-check.js captions.srt

caption-check <file.srt|file.vtt> [more files] [options]
  -s, --standard <id>   netflix | netflix-kids | bbc | dcmp-upper | dcmp-middle | dcmp-lower  (default: netflix)
  -f, --fps <rate>      frame rate for frame-gap checks (default: 24)
      --vertical        9:16 video (the BBC allows three lines)
      --json            JSON output
      --advice          also print advice-only notes
      --mcp             run as an MCP server on stdio

It exits with 1 when any caption breaks a limit, so it works as a CI check before captions ship.

Library

const { parse, check } = require('caption-checker');
const result = check(parse(fs.readFileSync('captions.vtt', 'utf8')), 'bbc', { vertical: true });
console.log(result.flagged, 'of', result.cues.length, 'captions break a limit');
for (const cue of result.cues) for (const issue of cue.issues) console.log(cue.n, issue.severity, issue.message);

check() accepts a standard id or your own standard object with the same fields as STANDARDS in index.js.

MCP server and Claude Code plugin

The same checks run as an MCP server, so Claude, Cursor, VS Code and other MCP clients can check a caption file mid-task. Two tools: check_captions (a file path or pasted SRT/VTT text, a standard, fps, vertical) and list_standards (each limit and the page it comes from). It runs locally: no key, no network.

# Claude Code plugin (MCP server + a caption QA skill)
/plugin marketplace add markksantos/caption-checker
/plugin install caption-checker@caption-checker

# or the server on its own
claude mcp add caption-checker -- npx -y github:markksantos/caption-checker --mcp

Other clients:

{ "mcpServers": { "caption-checker": { "command": "npx", "args": ["-y", "github:markksantos/caption-checker", "--mcp"] } } }

The skill in skills/caption-checker/SKILL.md tells an agent which standard to pick, how to report results and how to fix a caption without changing its words.

Study

study/ holds the code and data behind the caption reading speed study: 339,521 captions in 387 NASA videos and MIT OpenCourseWare lectures, measured with this library.

study-auto-captions/ holds the YouTube auto-caption accuracy study: automatic vs human captions on 299 videos, plus caption coverage of the most-subscribed channels.

study-dubbing/ holds the YouTube dubbing study: every audio track on 485 videos from the 97 most-subscribed channels, split into the channels' own dubs and YouTube's automatic ones.

study-video-length/ holds the YouTube video length study: durations of 2,859 latest videos and the Shorts share of 1,484 recent uploads on the most-subscribed channels.

Version history

See CHANGELOG.md and releases.

Tests

npm test

License

MIT © Mark Studios, a video editing and production studio.

Comments

Markdown supported

New to MCP?

From what the protocol is to installing your first server, these answers cover most first questions.

An open protocol that defines how AI applications connect to external tools and data in a uniform way. Clients talk to the model; MCP servers provide tools, resources and prompt templates. They exchange standard messages, so one server can be reused by many clients.