Model Context Protocol server
Let your agent watch the video.
Language models cannot open a video file. Playhead turns any TikTok, YouTube, X or local clip into contact sheets with the timestamp burned onto every frame — so the answer comes back anchored to a second, not a guess.
Side by side
The same request, put to the agent twice.
New reel is up: tiktok.com/@northlight/video/7411… The interior reveal is the hook. Does it land fast enough, or do I cut into it later?
I can't see the reel — the link gives me a player page, not frames. From the caption (“white drop-top, orange inside”) I'd guess it's a walkaround. The general rule: put the reveal inside the first second and don't hold a shot past four. If you tell me roughly what happens when, I'll suggest cut points from your description.
0 frames seen · advice that fits any video
New reel is up: tiktok.com/@northlight/video/7411… The interior reveal is the hook. Does it land fast enough, or do I cut into it later?
The hook is the opening two seconds, so I'll look at those closely.

One continuous push, no cut in that window. The door is still swinging at 00:00.90 and the frame is mostly white paint until 00:01.10. The orange only reads at 00:01.30, and the cockpit is fully open at 00:02.10. So the payoff sits 1.2 s in — on a muted autoplay feed that's the whole hook spent on a door. Start the clip at 00:01.10 and the reveal lands inside the first second. 00:02.10 is the framing worth holding.
1 call · detail · 1 credit · four timecodes you can type into the timeline
A replay, not a live call — the frames, the timestamps and the credit figures are what the engine returned.
Three jobs out of an edit suite, replayed as they run. On the left an agent with a browser and no eyes. On the right the same agent with Playhead connected. Nothing else about the two is different.
How it works
A video becomes a grid the model can read.
Frames
Every frame is placed and labeled
Frames are extracted at a fixed rate and laid out in reading order. The timestamp is burned into the pixels, so the model cannot lose track of when something happened.
Coverage
Nothing is quietly left out
Ask without a window and you get the complete video. Every response states what it covered, where the gaps are, and the exact call that would fill them.
Budget
Detail costs tiles, not pixels
Looking closer means fewer frames per sheet, never a bigger image — models downscale anything past 1568 px. That keeps a close-up legible instead of just expensive.
Six levels
From surveying an hour to reading a single frame of animation.
The agent picks the level from the question. Higher levels cost more context, so the server limits how long a window may be — and when a request is too long, it answers with the call that would work instead.
| Level | Rate | Per sheet | Max window | Answers |
|---|---|---|---|---|
| overview | 0.5–2 fps | 30 frames | no limit | What is this video, start to end |
| standard | 5 fps | 30 frames | no limit | What happens when — cuts, overlays, entrances |
| detail | 5 fps | 6 frames | 30 s | Objects and text blocks, tiles four times larger |
| fine | 10 fps | 2 frames | 10 s | Type, logos, subtle transitions |
| motion | 30 fps | 2 frames | 3 s | Animation, easing, dropped frames |
| single | one frame | 1 frame | a moment | Reading text at full resolution |
Motion
Two frames, 33 milliseconds apart.
At 30 fps the sheet holds two frames, so easing, bounce and dropped frames are visible as difference rather than description. This is the level that answers “why does that transition feel wrong”.
Billed per second, not per minute — it extracts six times the frames.

Install
Connect it to the agent you already use.
One click for Claude, Cursor, VS Code and LM Studio. One line for Claude Code and Codex. You sign in with your account instead of pasting a key, so nothing here is a secret and the same connection works on every machine you use.
Claude CodeOne command in the terminal, then /mcp to sign in.
claude mcp add --transport http playhead https://mcp.playhead.dev/mcpNo deeplink exists for the terminal, so this is the install.
- ChatGPTNeeds Developer mode under Settings → Connectors → Advanced first.
CodexAdd the server to Codex's config file.
[mcp_servers.playhead] url = "https://mcp.playhead.dev/mcp" auth = "oauth"Append to ~/.codex/config.toml — the CLI, IDE extension and desktop app share it.
- CursorAdds the server to Cursor's MCP settings.
- VS CodeOpens VS Code and adds the server to your MCP configuration.
- LM StudioAdds the server to LM Studio's MCP list.
Server URL
https://mcp.playhead.dev/mcp
If a link above does nothing, that app is not installed — paste this URL into its MCP settings instead.
Questions
What people ask before they connect it.
- Can an AI agent watch a video?
- Not on its own — a language model cannot decode a video file, so it answers from the title, description or transcript instead. Playhead is an MCP server that turns the video into contact sheets: grids of frames with the timestamp burned into the pixels, which the model can actually look at.
- How do I let Claude watch a YouTube or TikTok video?
- Add Playhead as a custom connector in Claude — Settings, Connectors, Add custom connector, and paste https://mcp.playhead.dev/mcp. You sign in with your Playhead account rather than pasting an API key, and it then works in Claude on the web, on desktop and on your phone.
- Do I need ffmpeg or yt-dlp installed?
- No. Downloading, frame extraction and transcription all run on Playhead's servers. That is what makes it work in Claude on the web and on phones, where a local script cannot run at all.
- How closely can it look?
- Six levels, from 0.5 frames per second across a whole hour to 30 frames per second, where two consecutive frames on one sheet are 33 milliseconds apart. That last level is what makes easing, bounce and dropped frames visible as difference rather than description.
- Can it read text on screen?
- Yes. inspect_frame returns one frame at 1560 pixels wide, which is the size at which small UI text and captions stay legible to a model. watch_video finds the moment; inspect_frame reads it.
- Does it work with my own files?
- Yes. In any client with a filesystem — Claude Code, Cursor, VS Code — pass a path like ~/Movies/cut.mov. The file is uploaded once and reused for every later call, so your own edits, screen recordings and exports are analysable without publishing them anywhere.