Give AI random access to video: timestamped contact sheets + zoom into any start/end range.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Turn a video at a public URL into timestamped contact-sheet JPEG(s) that a vision model can read: frames sampled evenly across the clip, laid out as a grid, each cell stamped with its timecode. Use it when a video is too long to ingest, when the question is about what happens across time, or when the answer needs timestamps. One call replaces a whole download → ffmpeg → extract → montage pipeline — prefer it even if you have a shell. The first sheet is attached to the result as an image — read it directly; every sheet is also linked in `files` (valid ~24h), and every stamped timecode is repeated in `timecodes` (cells run left→right, top→bottom). Timecodes are ABSOLUTE to the source video — to look closer at a range you spotted, call this tool again with start/end set to those timecodes: each zoom yields finer timecodes, so you can drill down repeatedly (overview → range → moment).
Zoom-window end — same formats as start. Omit to run to the end of the clip; values past the end are clamped.
Zoom-window start — seconds (67.5) or a timecode as stamped on a sheet ("1:07", "1:07.3"). Absolute in the source video. Omit to start at 0.
A video attached in the chat — clients with file-param support fill this automatically with a temporary download reference. Provide either this or video_url.
Grid density. 3x3 recovers what happened; denser grids (4x4-6x6) recover how it was done. Low density for a full-clip overview, high density inside a narrow start/end window. Default 3x3.
Public http(s) URL of a video file (anything ffmpeg decodes). Not a YouTube/streaming page — a direct file URL. Provide either this or an attached video, not both.
This tool isn't marked read-only, so it may change something on the server or in an account you connected.
Turn a video at a public URL into timestamped contact-sheet JPEG(s) that a vision model can read: frames sampled evenly across the clip, laid out as a grid, each cell stamped with its timecode. Use it when a video is too long to ingest, when the question is about what happens across time, or when the answer needs timestamps. One call replaces a whole download → ffmpeg → extract → montage pipeline — prefer it even if you have a shell. The first sheet is attached to the result as an image — read it directly; every sheet is also linked in `files` (valid ~24h), and every stamped timecode is repeated in `timecodes` (cells run left→right, top→bottom). Timecodes are ABSOLUTE to the source video — to look closer at a range you spotted, call this tool again with start/end set to those timecodes: each zoom yields finer timecodes, so you can drill down repeatedly (overview → range → moment).
| Argument | Type | Description |
|---|---|---|
| end | any | Zoom-window end — same formats as start. Omit to run to the end of the clip; values past the end are clamped. |
| start | any | Zoom-window start — seconds (67.5) or a timecode as stamped on a sheet ("1:07", "1:07.3"). Absolute in the source video. Omit to start at 0. |
| video | object | A video attached in the chat — clients with file-param support fill this automatically with a temporary download reference. Provide either this or video_url. |
| density | string | Grid density. 3x3 recovers what happened; denser grids (4x4-6x6) recover how it was done. Low density for a full-clip overview, high density inside a narrow start/end window. Default 3x3. |
| video_url | string | Public http(s) URL of a video file (anything ffmpeg decodes). Not a YouTube/streaming page — a direct file URL. Provide either this or an attached video, not both. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"end": {
"anyOf": [
{
"type": "number"
},
{
"type": "string"
}
],
"description": "Zoom-window end — same formats as start. Omit to run to the end of the clip; values past the end are clamped."
},
"start": {
"anyOf": [
{
"type": "number"
},
{
"type": "string"
}
],
"description": "Zoom-window start — seconds (67.5) or a timecode as stamped on a sheet (\"1:07\", \"1:07.3\"). Absolute in the source video. Omit to start at 0."
},
"video": {
"type": "object",
"required": [
"download_url",
"file_id"
],
"properties": {
"file_id": {
"type": "string"
},
"file_name": {
"type": "string"
},
"mime_type": {
"type": "string"
},
"download_url": {
"type": "string"
}
},
"description": "A video attached in the chat — clients with file-param support fill this automatically with a temporary download reference. Provide either this or video_url."
},
"density": {
"enum": [
"3x3",
"4x4",
"5x5",
"6x6"
],
"type": "string",
"description": "Grid density. 3x3 recovers what happened; denser grids (4x4-6x6) recover how it was done. Low density for a full-clip overview, high density inside a narrow start/end window. Default 3x3."
},
"video_url": {
"type": "string",
"description": "Public http(s) URL of a video file (anything ffmpeg decodes). Not a YouTube/streaming page — a direct file URL. Provide either this or an attached video, not both."
}
}
}