Spec Driven Development
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
作者による説明(英語の原文)
Turn a screen recording into agent-readable annotated keyframes. MCP server + CLI on ffmpeg.
この3つを1つのスコアにまとめることはしません。意見、測定、人気はそれぞれ別のものだからです。
このサーバーのやさしい解説はまだ書いていません。以下はレジストリから読み取った事実です。
使っているAIアプリを選んで、設定をコピーしてください。
必要なもの
どのアプリを使っていますか?
上でアプリを選んでください。選んだアプリを覚えておくので、次からはボタンに「…にインストール」と表示されます。
Claude Desktop → Settings → Developer → Edit Config を開き、claude_desktop_config.json にこれを貼り付けます
{
"mcpServers": {
"vidin": {
"command": "npx",
"args": [
"-y",
"@teunlao/vidin",
"mcp"
]
}
}
}ターミナルでこれを実行します
claude mcp add vidin -- npx -y @teunlao/vidin mcpプロジェクトの .cursor/mcp.json、または ~/.cursor/mcp.json に貼り付けます
{
"mcpServers": {
"vidin": {
"command": "npx",
"args": [
"-y",
"@teunlao/vidin",
"mcp"
]
}
}
}ブラウザがアプリを開いてよいか確認し、そのあとアプリが設定を表示して確認を求めます。キーの値は空欄のままなので、自分で入力してください。
プロジェクトの .vscode/mcp.json に貼り付けます
{
"servers": {
"vidin": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"@teunlao/vidin",
"mcp"
]
}
}
}ブラウザがアプリを開いてよいか確認し、そのあとアプリが設定を表示して確認を求めます。キーの値は空欄のままなので、自分で入力してください。
これはパソコンで動くサーバーですが、ChatGPTがつなげるのはインターネット上のサーバーだけです。ほかのアプリを選んでください。
選んだアプリは、この端末のCookieに保存されます。アカウントは不要です。
この設定は、作者のレジストリ登録情報から作成しています。READMEと違う場合は、READMEに従ってください。
パソコンで動くサーバーです。インストールすると、ツール一覧がAIアプリに表示されます。
誰でも見られる情報をチェックしており、コードは読んでいません。当てはまらない項目は数に入れていません。 · 2026年11月7日にチェック
レジストリ名は、リポジトリを所有するGitHubアカウント teunlao で確認済みです
このリポジトリはまだGitHubから読み取っていません
このリポジトリはまだGitHubから読み取っていません
これはパソコンで動くため、インターネット上のエンドポイントはありません
パソコンで動き、代わりにローカルの設定を使います
パソコンで動くサーバーです。ツール一覧を読み取れるのは、インターネット上のエンドポイントがある場合だけです
レジストリでこのカテゴリにある有効なすべてのサーバーと比較しています。スターは、公開者がリポジトリの所有者である場合だけ数えます。
当てはまる基本チェック1項目のうち1項目に合格しました。コードは読んでいません。キーやトークンを追加する前に、サーバーがどんなアクセスを求めているかを確認し、必要な権限だけを持つキーを使ってください。
レジストリには必須のキーは載っていません。ただし、最初に使うときにサインインを求めるサーバーもあります。
あなたのパソコンで動きます。必要なときにAIアプリが起動し、データは作者のサーバーを通りません(サーバー自体がオンラインサービスを呼び出す場合を除きます)。
GitHubリポジトリの最終更新は–、最新バージョン(0.1.0)がレジストリに届いたのは3 か月前です。
Claude Desktop、Claude Code、Cursor、VS CodeなどのMCP対応アプリで使えます。パソコンにNode.jsも必要です。
同じカテゴリには:Spec Driven Development, Remote Desktop Commander, Master CSS
同じカテゴリで、ほかの作者が作ったサーバー。スターの多い順。
カードの見方:★ GitHubスターi3つの柱:レビュー · チェック · 利用状況i更新=最新バージョンをレジストリに公開した日i
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
Remote Desktop Commander: use files, terminal and processes on your own computers from any AI app.
Inspect Master CSS classes, generated CSS, and project stylesheets from your AI client.
作者のリポジトリから書かれたとおりにコピーしたものです。PopNx MCPは内容を確認・推奨していません。HTML、画像、スクリプトは取り除いています。リンクはこのサイトの外へ移動します。
Turn a video into something a coding agent can actually read.
Claude Code, Codex and friends accept images, not video. So when a bug report arrives as a screen recording, the video is dead weight — someone has to watch it and retype what happened. vidin watches it instead: it converts the recording into a small set of annotated keyframes plus a written timeline, and serves them to agents over MCP.
*A 20-second recording in, six frames out: the refund panel, the 500 dialog, the retry toast, the recovery — each boxed and timestamped. (The clip is vidin's synthetic test fixture.)*
npx @teunlao/vidin — all it asks of the machine is ffmpeg; no sharp, no headless browser, no native image library.brew install ffmpeg # + yt-dlp, only if you'll pass URLs
Hook it into Claude Code:
claude mcp add vidin -- npx -y @teunlao/vidin mcp
Or in .mcp.json / ~/.codex/config.toml equivalents:
{
"mcpServers": { "vidin": { "command": "npx", "args": ["-y", "@teunlao/vidin", "mcp"] } } }
Or straight from the shell:
npx @teunlao/vidin ~/Desktop/bug.mov # → ./.vidin/bug/
npm i -g @teunlao/vidin # or put vidin on PATH for good vidin https://example.com/screencast.mp4 # downloaded with yt-dlp vidin zoom bug.mov --from 00:41 --to 00:45 --fps 6 vidin probe bug.mov
out/
REPORT.md the entry point: timeline table, what changed where, what to open manifest.json the same, machine readable sheets/ the whole video as labelled 3x3 grids (~1.3k tokens each) frames/ full-detail annotated frames
Each frame carries a red dashed box around the regions that changed since the previous kept frame, and a bottom bar with the frame number, the timestamp in the original video, the gap since the previous frame, why the frame was kept, and how much of the screen changed.
Four tools, shaped so an agent spends context in the right order:
| tool | what it does |
|---|---|
analyze_video | video → frames on disk; returns the report text and one contact sheet image |
get_frames | full-detail frames by number or time range, capped so a call can't flood the context |
zoom_clip | re-extract a narrow window at a higher frame rate — for the moment two frames don't explain |
probe_video | duration / resolution / fps / audio, cheap |
The intended loop: analyse → look at the sheet → read the timeline → open two or three frames → zoom in if the moment between them is still unclear. Opening everything up front would burn the context before knowing which second matters.
| profile | for |
|---|---|
bug-report | default — someone recorded a screen, narrated a bug, stopped |
dense | short clips where every twitch matters (24 fps analysis, up to 80 frames) |
walkthrough | long recordings; fewer frames, wider anchors |
cheap | smallest footprint, for when the context really is tight (12 frames at 1092px) |
Tuning without leaving the profile: --max-frames, --sensitivity (percent of the screen that counts as an event, lower = more frames), --fps, --width, --quality, --no-annotate, --no-sheets.
One screenshot per second turns three minutes into 180 frames of which ~90% are identical, because the person was reading, thinking or moving the mouse. Those duplicates don't cost much — they *bury* the handful of frames where something actually happened, and an agent has to look at all of them to find out which. Frame selection is a signal-to-noise problem wearing a cost problem's clothes.
vidin is event driven instead. It walks the video at 12 fps in downscaled RGB and keeps a frame only when something actually happened:
Two invariants hold whatever path a frame took:
ffmpeg ─raw RGB @12fps, 400px─ selector ──timestamps+regions── ffmpeg ──annotated WebP
one decode pass, event state machine drawbox/drawtext streamed in plain TypeScript per frame
Decoding streams two frames at a time; the selector additionally keeps the downscaled buffers of the frames it has kept so it can recompute their deltas after pruning. That is bounded by the frame budget, not by video length: ~32 MB at the defaults. All drawing is done by ffmpeg filters, which is why there is no image library in package.json.
Development runs on Bun; the runtime code itself sticks to node: APIs, which is what lets the published package run anywhere npx does.
git clone https://github.com/teunlao/vidin && cd vidin && bun install
bun test
The fixture is a synthetic screen recording with a scripted timeline — a panel, an error dialog, a toast, a recovery, and two stretches of pointer-only motion. The suite asserts that each staged event yields exactly one settled frame and that pointer motion alone yields none. test/regressions.test.ts builds its own clips and pins every failure a review has found, so a fixed bug stays fixed.
whisper.cpp or mlx-whisper) → a transcript.md aligned to the frame timeline.--sensitivity 0.2 or --profile dense catches them, at the cost of more frames.