start_recording
Start Recording
Start a background screen recording. Returns a session id; finalize it with stop_recording. Never auto-starts.
fpskeysaudiocursoreventsoutputtarget必填webcambackendencoderqualityoverwrite另有 3 個
io.github.TMHSDigital由 GitHub 帳號 TMHSDigital 發布v0.48.0更新於 Nov 1, 2026
Let AI agents record the Windows screen, watch it as frames, and edit it with ffmpeg
Windows 螢幕錄影 MCP 伺服器,讓助理錄製桌面、以影格檢視錄影內容,並用 ffmpeg 在本機剪輯。
Desktop only,透過 STDIO。 STDIO 服務會啟動本機處理程序,因此需要 SourceWeft 桌面主機。
參照 儲存庫 中的啟動說明。
An MCP server that lets an agent record the screen, watch the footage, and make minimal ffmpeg edits — over stdio, on Windows.
Capture the desktop, a monitor, a window, or a region; sample a recording into frames the agent can actually look at; trim, crop, redact, annotate, zoom toward clicks, and export for GitHub or social. No cloud service, no telemetry: ffmpeg and ffprobe behind 58 typed tools.
For developers who want their coding agent to see and prove UI changes on Windows: bug repros, UI verification, and demo clips the agent records, checks, and edits itself. Capture is Windows-only; the watch and edit tools work on any OS with ffmpeg. Free for non-commercial use (CC BY-NC-ND 4.0); why not OBS, Playwright, or a screenshot MCP?
[npm] [MCP Registry] [CI] [License: CC BY-NC-ND 4.0] [Last commit]
[TypeScript] [Node.js] [Model Context Protocol] [ffmpeg] [Capture]
Made with the tool: start_recording with events: true, one click, then zoom { highlightClicks: true } and export_gif. How it was made · more workflows
Quick start · Tools · Configuration · More docs · Privacy
The fastest path: npx -y @tmhs/screencast-mcp setup checks FFmpeg 8, OCR, and speech, offers winget install Gyan.FFmpeg when FFmpeg is missing, and adds the server to Claude Desktop, Claude Code, Cursor, and VS Code (backing up each config). --dry-run shows the changes first; --test records a 3-second GIF to prove it works. Or set it up by hand:
You need Windows 10 or 11, Node.js 22+, and FFmpeg 8 or newer on PATH (winget install Gyan.FFmpeg, the full build). Older builds run most tools, but transcribe (the whisper filter) and backend: "wgc" (gfxcapture) need FFmpeg 8, and essentials or distro builds can lack them (Ubuntu LTS apt install ffmpeg gives 6.x). Capture is Windows-only; the watch, edit, and produce tools work anywhere ffmpeg runs. After connecting, ask the agent to run doctor: it reports the ffmpeg version, the filters and devices it has, OCR, and anything missing.
Add it to your client:
Then ask your agent:
Record my VS Code window for five seconds while I reproduce the bug, then show me the frames where something changed.
More in the workflows: a bug-repro GIF for a PR, a README demo, a UI verification loop, a social clip, a cheap review of a long recording, zoom toward clicks, and the whole edit in one call.
The core is the watch loop: the agent records, samples the footage into frames it can see, and checks what actually happened on screen. Capture only ever happens on an explicit tool call, and output lands under SCREENCAST_HOME, never in your checkout.
58 tools in 6 toolsets, generated from the server's own schemas by npm run docs (do not edit between the markers). Each name links to its reference page with every parameter, an example call, and what it returns; mcp-tools.json is the same list as JSON, and llms-full.txt all of it in one file.
Always loaded, whatever SCREENCAST_TOOLSETS selects.
Record or screenshot the desktop, a monitor, a window, or a region. Every capture is an explicit tool call: nothing records on its own.
Turn footage into something a model can read: frames, contact sheets, diffs, OCR, and a searchable text timeline.
Cut, convert, compress, and redact. A tool that writes a file refuses to replace an existing output unless overwrite: true; default output paths are always unique.
Annotate, frame, and assemble a finished piece. Tools that combine clips normalize each input to a common resolution, fps, and audio rate first.
Extract, clean up, level, transcribe, and score the soundtrack.
[!IMPORTANT]
redact_regioncovers only the rectangles you declare; it is not automatic secret detection (usefind_textwithredact: trueto locate them). Prefer the defaultboxstyle for real secrets: it is a solid, irreversible fill, whileblurandpixelatecan be partially recovered.
Every capture tool takes one target string: full, monitor:<index>, window:<title>, window:exe=<app.exe>, window:hwnd=<handle>, or region:<x>,<y>,<w>,<h>; list_targets returns ready-made ones. See start_recording and the Windows notes for how windows, monitors, and backend: "wgc" are captured.
ffmpeg and ffprobe must be on PATH, or set FFMPEG_PATH / FFPROBE_PATH. All settings are optional environment variables; doctor reports the ones in effect.
Usage: workflows walk through real tool calls and outputs: a bug-repro clip, a README demo, a UI verification loop, a social clip, a long-recording review, zoom toward clicks, and the whole edit in one pipeline call. Each tool's parameters and results are on its reference page.
Command line and CI: the same package is a headless CLI (npx -y @tmhs/screencast-mcp record -- npm run test:e2e, ... call doctor), and a GitHub Action records your test run on windows-latest and uploads the evidence on failure (being published to GitHub Marketplace). See the CI page:
Prompts and resources: the server also ships MCP prompts that clients show as slash commands (bug-repro-clip, file-bug-report, document-steps, demo-gif, verify-ui-change, review-recording) and screencast://sessions resources for attaching recordings without a filesystem tool.
Threat model and Windows notes: what capture can expose, and how window, monitor, WGC, and system-audio capture behave, are on the docs home page.
find_text) and speech (narrate) use the engines built into Windows.SCREENCAST_HOME (recordings/, screenshots/, frames/, edits/, sessions.json) unless a call names another path. find_text, wait_for_change, and screen_diff delete their captures after the call by default.start_recording events: true (or cursor: "events"), and only while that recording runs: clicks, scrolls, and cursor positions system-wide, and typing as bursts on a 0.5 s grid with no key names (keys: "shortcuts" also names Ctrl/Alt/Win chords). There is no microphone capture; system audio only with audio.source = system.SCREENCAST_HOME, or set SCREENCAST_RETENTION_DAYS; recordings and edits are never deleted automatically.Issues and pull requests are welcome — see CONTRIBUTING.md (development setup and project structure) and the Code of Conduct. Security reports go through SECURITY.md.
Released under the CC-BY-NC-ND-4.0 license: free to use and share for non-commercial purposes, with attribution and without modification. For other uses, open an issue.
Can I use it at work? Only for non-commercial purposes under this license. If your use is commercial (inside a paid product or service, or work done mainly for commercial advantage), or you are not sure, open an issue to ask about a commercial license. The licensing model is described in the TMHSDigital licensing standard.
來源:README.md,提交 880b43e
Start Recording
Start a background screen recording. Returns a session id; finalize it with stop_recording. Never auto-starts.
fpskeysaudiocursoreventsoutputtarget必填webcambackendencoderqualityoverwrite另有 3 個Stop Recording
Stop a recording gracefully so the file is finalized; returns the path and duration.
savesessionId必填Pause Recording
Pause a recording; until resume_recording nothing is captured, and the gap is left out of the file, events, and markers.
sessionId必填Resume Recording
Resume a paused recording (same target and settings).
sessionId必填Save Replay
Save the last N seconds of a replay buffer (start_recording replayBufferSec) to an mp4; the buffer keeps running.
outputlastSecreencodeoverwritesessionId必填List Sessions
List all recording sessions (active and finished) with their status, target, output path, and whether the process is still alive.
無需輸入參數。
Get Session
Inspect a single recording session by id, including live status and whether its output file exists on disk.
sessionId必填Read Input Events
Read the input events (clicks, scroll, cursor, shortcuts, typing bursts) of a recording made with events: true, in video seconds and pixels; e.g. types: ['down'], then sample_frames there.
tofrominputlimittypessessionIdinFrameOnlyAdd Marker
Mark a labelled moment on a recording, live or at a second. Kept in the session and a sidecar; chapters and pipeline turn markers into chapters.
atinputlabel必填sessionIdReview Recording
Open a recording for a person to review: in MCP Apps clients an inline player to scrub, trim, and redact, then export; elsewhere just the video's details.
inputsessionIdTake Screenshot
Capture one PNG of the screen, a monitor, a window, or a region, returned inline and by path.
outputtarget必填backendoverwriteexactTitlereturnImagemaxImageWidthSample Frames
Sample PNG frames from a video (by fps, timestamps, or scene changes) and return the first few inline so the model can see what happened.
fpsmodeinput必填dedupemaxFramesoutputDirtimestampsreturnImagesmaxImageWidthsceneThresholdmaxInlineImagesContact Sheet
Tile timestamped frames of a video into one image to see a whole recording at a glance (the cheapest first look).
modecountinput必填outputpostercolumnsoverwritetileWidthreturnImagemaxImageWidthsceneThresholdScreen Diff
Compare two screenshots or frames: SSIM score, changed share, and changed boxes in b's pixels, to check a UI change happened only where expected.
a必填b必填returnImagepixelThresholdWait for Screen Change
Wait until part of the screen changes or settles, instead of guessing a sleep. Returns the elapsed time, changed regions (screenshot pixels; add `origin` for desktop), and the final state.
keepmodetarget必填settleSecexactTitleintervalMstimeoutSecreturnImagepixelThresholdFind Text (OCR)
OCR (built into Windows) on the screen, an image, or video frames, with line and match boxes in image pixels (add `origin` for desktop coordinates). Locate UI text or secrets (e.g. regex 'sk-|ghp_|api.?key') to redact. Best-effort: review results.
keepinputqueryregexredacttargetbackendmaxFramestimestampexactTitlereturnImagescanEverySecIndex Recording
Build a recording's text timeline (<video>.index.json: OCR per scene, events, markers, transcript) for search_recording.
forceinputmaxFramessessionIdtranscriptsceneThresholdSearch Recording
Search an index_recording timeline (screen text, events, markers, transcript): timecoded hits, best first, secrets masked. No frames unless asked.
inputlimitquery必填regeximagessessionIdGet Media Info
Probe a media file with ffprobe and return duration, resolution, frame rate, codecs, container format, and size.
input必填Trim Video
Cut a video down to one sub-clip by start + (end or duration). For several segments use clip; to combine with other edits use pipeline.
endexactinput必填start必填outputdurationoverwriteConcatenate Videos
Join videos end to end with hard cuts: stream copy when they match, else a re-encode (`mode` says which). For transitions use xfade_transition or assemble_highlights.
inputs必填outputoverwriteConvert Format
Convert media to mp4, webm, or gif. For a size-bounded GIF/WebP prefer export_gif; for a smaller mp4, compress or export_preset.
fpsinput必填widthformat必填outputoverwriteExport GIF or WebP
Export an animated GIF or WebP that fits a size budget (for PRs, issues, READMEs), stepping fps, width, and quality down until it fits.
fpsinput必填startwidthformatoutputdurationmaxBytesoverwriteCrop Video
Crop a video to a pixel rectangle; one running off the frame is rejected.
x必填y必填input必填width必填height必填outputoverwriteScale Video
Resize a video to a target width and/or height and re-encode. Provide one side to keep the aspect ratio, or both to set an exact size.
input必填widthheightoutputoverwriteChange Speed
Change playback speed by a factor (>1 faster, <1 slower) and re-encode. Audio is retempo'd to match when the source has an audio track.
input必填factor必填outputoverwriteOverlay Image or Video
Composite an image or video (logo, watermark, picture-in-picture) onto a video at a pixel position, optionally scaled and time-limited; keeps the base's audio and length.
x必填y必填endinput必填shapestartwidthheightoutputoverlay必填overwriteAdd Callouts
Annotate a video with timed boxes, text labels, and arrows. Fallback fonts used are listed in fallbackFonts; characters no font covers are reported in warnings.
input必填items必填outputfontFileoverwriteKeystroke Overlay
Burn keycast-style badges for shortcuts, clicks, and typing from the recording's input event log (start_recording events: true). Never shows typed text: the log has none.
keyssizecolorinput必填clicksdryRuneventsoutputtypingfontFilepositionlingerSec另有 1 個Re-rendered Cursor
Draw a smoothed, scaled cursor that hides when idle from the event log of a start_recording cursor: "events" recording (no OS cursor in the video), with click ripples and an optional spotlight.
sizeinput必填clicksdryRuneventsoutputoverwritesmoothingspotlighthideAfterSecAdd Backdrop
Frame a video or screenshot on a gradient, color, or wallpaper with padding, rounded corners, and a drop shadow, optionally on a 16:9/1:1/9:16/4:5 canvas.
imageinput必填aspectcolorsoutputpresetradiusshadowpaddingoverwriteshadowOpacityCompress Video
Re-encode a video smaller (H.264 CRF ladder, optional width cap). For a platform target use export_preset.
input必填leveloutputmaxWidthoverwriteExtract Audio
Extract the audio track of a media file to its own file (mp3, aac, wav, or copy). Returns the output path.
input必填format必填outputoverwriteNormalize Loudness
Normalize loudness to a delivery target (two-pass EBU R128 loudnorm); video is copied. Reports loudness before and after.
input必填outputtargetoverwriteDenoise Audio
Reduce steady background noise (fan, hum, hiss) in a recording's audio with an adaptive FFT denoiser. Video is copied untouched. Returns the output path.
input必填outputstrengthoverwriteTranscribe Speech
Transcribe a recording's speech to an SRT subtitle file, locally, with FFmpeg 8's whisper filter (needs a whisper.cpp model file). Returns the SRT path and the text. Pair with burn_subtitles to caption the video.
input必填modelwordsoutputlanguageoverwriteBurn In Subtitles
Burn SRT/ASS subtitles (e.g. from transcribe) into a video in the bundled font.
input必填styleoutputoverwritesubtitles必填Chapters
Write chapters (markers, scene changes, transcript, or a list) into an mp4/mkv/mov copy without re-encoding; returns YouTube chapter text. Can mux an SRT as soft subtitles.
frominputoutputchapterstextOnlyoverwritesessionIdsubtitlestranscriptminChapterSecsubtitleLanguageExtract Clips
Extract several frame-exact segments, each to its own file. For one segment, trim does the same.
input必填outputsegments必填overwriteCut Idle Stretches
Remove dead air: cut stretches where the screen is frozen (and silent), keeping a short pad. Returns the time saved.
input必填dryRunoutputkeepSecuseAudiooverwriteminIdleSecCut By Transcript
Edit a video by its transcript: cut quoted text, cue numbers, or fillers. Also writes the re-timed .srt.
srt必填input必填dryRunoutputremovefillersoverwriteRedact Regions
Cover given rectangles in a video (e.g. secrets on screen). Not automatic detection: find them with find_text redact: true. Off-frame regions are rejected.
padcolorinput必填styleoutputregions必填overwriteList Audio Devices
List DirectShow audio devices and flag a likely loopback (Stereo Mix or a virtual-audio driver), for start_recording's audio.device.
無需輸入參數。
List Video Devices
List DirectShow cameras for start_recording's webcam.device.
無需輸入參數。
List Capture Targets
List the desktop, monitors, and visible windows (topmost first, with capturability per backend). Each entry has a `target` string to pass as-is to capture tools; use it instead of guessing a title.
exetitleContainscapturableOnlyCheck Setup
Check the setup: ffmpeg/ffprobe (FFmpeg 8+?), optional filters, capture devices, Windows OCR, settings, and enabled toolsets; `problems` says what is missing and how to fix it. Call on first use or when a tool reports a missing feature.
無需輸入參數。
Crossfade Transition
Join two videos with an xfade transition (audio crossfaded); they need not match in size, fps, or audio. For more clips use assemble_highlights.
inputA必填inputB必填outputdurationoverwritetransitionAssemble Highlights
Stitch clips (including title cards) into one video with cuts or xfade transitions; they need not match in size, fps, or audio.
fpsclips必填widthheightoutputdurationoverwritetransitionTitle Card
Generate a title card clip (centered text on a solid background, silent audio track) to stitch in with assemble_highlights. Uncoverable characters are reported in warnings.
bgfpsboldtext必填widthheightoutputdurationfontFilefontSizefontColoroverwriteAdd Music Bed
Lay music under a video: looped or trimmed to length, faded, leveled, and mixed with any existing audio. Video is stream-copied.
duckmusic必填video必填fadeInoutputfadeOutoverwritemusicVolumeNarrate
Offline voiceover with the built-in Windows voices: speaks each line at its time or marker over the audio, plus an SRT.
duckratelines必填video必填voiceoutputoverwriteReframe Aspect Ratio
Re-aspect a video to 16:9, 9:16, 1:1, or 4:5 by padding or cropping.
fitinput必填aspect必填outputoverwriteZoom and Pan
Smooth animated zoom-and-pan into the action and back out, from keyframes or planned from logged clicks or screen changes.
input必填dryRuneventsfollowoutputholdSecmaxZoomkeyframesoverwritetransitionSechighlightColorhighlightClicksEdit Pipeline
Run several edits (trim, crop, scale, speed, cut_idle, redact, callout, keystroke_overlay, cursor, reframe, zoom, backdrop, audio, burn_subtitles, then optionally export_preset or export_gif) in one ffmpeg pass: one re-encode, no intermediate files. Prefer it over chaining edit tools; a recipe does the usual polish in one call.
input必填stepsdryRunoutputrecipequalitychaptersoverwriteExport for Platform
Encode a platform-ready H.264 file (aspect, fps, bitrate, faststart) for a named platform.
fitinput必填outputplatform必填overwriteBug Report Package
Package a recording as a paste-ready repro folder: secret-scanned, redacted clip and GIF, contact sheet, steps from the event log, OCR'd errors, environment, report.md for gh issue create --body-file.
endgifinputstarttitleactualredactclipSecregionsexpectedmaxBytesmaxFrames另有 6 個Step-by-Step Guide
Turn a recording's event log into a numbered how-to: a ringed screenshot and caption per step, marker headings; Markdown and/or one HTML file. Never includes typed text.
ocrinputtitleformatoutputDiroverwritesessionId已滿足適用檢查項的 80%
該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。
請在註冊中心條目中宣告憑證請求標頭,或保持端點能夠回應探測,以便判定其認證方式。
請在儲存庫或註冊中心條目中宣告授權條款。
{ "mcpServers": { "screencast": { "command": "npx", "args": ["-y", "@tmhs/screencast-mcp"] } } }- uses: TMHSDigital/screencast-mcp@v0 with: command: npm run test:e2e