Skip to content
verify mcp Beta VerifyMCP is currently in beta. If you notice any issues, get in touch and we’ll put it right.

Screencast MCP

NPM · @TMHS/SCREENCAST-MCP

Let AI agents record the Windows screen, watch it as frames, and edit it with ffmpeg

+29 this week 83 Trust /100

Last scanned (23 hours ago)

Scores higher than 76% of npm servers

Category Design and Media

Trust breakdown (7 categories)

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. How we score → Why this is hard to score →

Supply Chain Security98
  • No malware found by supply-chain analysis.Pass
  • No known CVEs affecting this package version or its production dependencies.Pass
  • No install/post-install scripts declared.Pass
  • 30 of 92 dependencies flagged as unhealthy. View diagnostics → Partial
Provenance & Transparency87
  • Source repository is publicly reachable at the declared URL. View diagnostics → Pass
  • Cryptographically verified build provenance (signed, bound to TMHSDigital/screencast-mcp). View diagnostics → Pass
  • License check failed: the license (CC-BY-NC-ND-4.0) isn't a recognized OSI-approved license. See how to fix → Fail
  • Actively maintained (last published 3 days ago).Pass
  • Publishes a security disclosure policy (SECURITY.md).Pass
Schema Quality & AI Usability76
  • 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).Pass
  • AI-judged instruction clarity (good).Pass
  • Context-footprint check failed: tool/resource definitions use about 10072 tokens (~170/item across 59 items; 57 tools + 2 resources), over budget; trim descriptions and params. See how to fix → Fail
  • Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management31
  • Stability check failed: the tool surface changed between 0.35.0 and 0.48.0: 1 tool removals, 0 breaking changes, 17 additions. See how to fix → Fail
Tool Coverage100
  • 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
  • 99% of tool parameters carry a description.Partial
  • Structured output schemas are declared (98% of tools); any adoption earns full credit.Pass
Tool Safety100
  • No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
  • All 1 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation.Pass
  • An AI judge read all 59 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
  • Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
  • Supports UI / widget rendering.Pass
Changelog

Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.

  • 4 Nov 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 28 to 31.

  • 2 Nov 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 21 to 24.

  • 1 Nov 26 0
    • Stability: fail → unverified ▼ security
    • Tool safety: pass → unverified ▼ security
    • Capabilities: pass → unverified ▼ functional
    • Tool coverage: 100 → unverified ▼ functional
    • Schema quality: 100 → unverified ▼ functional
    • Package version: 0.47.0 → 0.48.0 functional
  • 31 Oct 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 14 to 18.

  • 29 Oct 26 +26
    • Malware scan: unverified → pass ▲ security
    • Known CVEs: unverified → pass ▲ security
    • Dependency health: unverified → 0.86 ▲ functional
  • 28 Oct 26 −9
    • Known CVEs: pass → unverified ▼ security
    • Stability: 0.07 → fail ▼ security
    • Dependency health: 0.85 → unverified ▼ functional
    • Schema quality: 197 → 170 ▲ functional
    • Schema quality: 197 → 174 ▲ functional
    • First check of Tool coverage: 98 functional
    • Schema quality: excellent → good functional
    • Destructive annotations: All 1 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation. functional
    • Package version: 0.39.0 → 0.47.0 functional
    • Package version: 0.39.0 → 0.46.0 functional
  • 27 Oct 26 0
    • Package version: 0.38.0 → 0.39.0 functional
  • 26 Oct 26 −14
    • Malware scan: pass → unverified ▼ security
    • Stability: 0.00 → unverified ▼ security
    • Known CVEs: pass → unverified ▼ security
    • Tool safety: pass → unverified ▼ security
    • Capabilities: pass → unverified ▼ functional
    • Dependency health: 0.85 → unverified ▼ functional
    • Tool coverage: 100 → unverified ▼ functional
    • Schema quality: 100 → unverified ▼ functional
    • Package version: 0.35.0 → 0.38.0 functional
    • Package version: 0.35.0 → 0.37.0 functional
    • Package version: 0.35.0 → 0.36.0 functional
Diagnostics

Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.

Captured 4 Nov 2026 · Analysed npm/@tmhs/screencast-mcp@0.48.0

Provenance Verified

A signed build attestation was found and verified, binding this exact artifact to the source repository it claims to come from.

Result Verified
Ecosystem npm
Reason Verified
Discovered via Registry attestation endpoint
Source repo TMHSDigital/screencast-mcp
Certificate issuer https://token.actions.githubusercontent.com
Certificate SAN https://github.com/TMHSDigital/screencast-mcp/.github/workflows/publish.yml@refs/tags/v0.48.0
Rekor log index 3617872362
Predicate type SLSA build provenance https://slsa.dev/provenance/v1
Subject digest sha512:6dcf4949d551aa0804285875a89a447a1a407f53c701ca7690dfa8b4d8e98808c61889b4c24bba9a930cc09eb4307b199b2ac1131544bb6809f5f73c8

Background: How many MCP packages publish verified provenance →

Dependencies 92 packages
Packages resolved 92
Stale 30
Tree resolution Complete

Background: SBOMs and build attestations, explained →

MCP tools · 57 exposed · ~9,455 tokens

The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →

Tool Tokens
add_marker ~100

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.

NameTypeReqDescription
atnumber–Video second (default: now, while recording).
inputstring–Or a video path (needs at).
labelstringyese.g. "bug appears".
sessionIdstring–Recording to mark (a stopped one needs at).
NameTypeReqDescription
countintegeryes–
markersPathstringyes–

No examples provided.

assemble_highlights ~171

Stitch clips (including title cards) into one video with cuts or xfade transitions; they need not match in size, fps, or audio.

NameTypeReqDescription
clipsarrayyesClip paths, in order.
durationnumber–Transition seconds (default 1).
fpsinteger–Common output fps (default 30).
heightinteger–Common output height (default 1080).
outputstring–Optional output path. Defaults under SCREENCAST_HOME/edits.
overwriteboolean–Allow replacing an existing file at the output path (default false).
transitionstring–cut (default) or an xfade name (fade, wipeleft, slideup, ...).
widthinteger–Common output width (default 1920).
NameTypeReqDescription
outputPathstringyesPath of the file written.

No examples provided.

backdrop ~281

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.

NameTypeReqDescription
aspectstring–Output on this aspect's canvas (1920x1080, ...), content scaled to fit.
colorsarray–Instead: 1 color = solid, 2-4 = diagonal gradient.
imagestring–Instead: a wallpaper image, scaled to cover.
inputstringyesPath to the source video or image (png/jpg).
outputstring–Optional output path. Defaults under SCREENCAST_HOME/edits (screenshots for an image).
overwriteboolean–Allow replacing an existing file at the output path (default false).
paddinginteger–px around the content (default 6% of the longer side).
presetstring–Gradient: desktop (default, dark slate), rec (red), amber, light.
radiusinteger–Corner radius px (default ~1.2% of the longer side; 0 = square).
shadowinteger–Shadow blur px (default ~2.5%; 0 = none).
shadowOpacitynumber–Default 0.5.
NameTypeReqDescription
heightintegeryes–
outputPathstringyes–
widthintegeryes–

No examples provided.

bug_report ~332

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.

NameTypeReqDescription
actualstring–What happened.
clipSecnumber–Clip length without start (default 30).
endnumber–Clip end s (default: recording end).
errorPatternstring–Error-line regex.
expectedstring–What should happen.
gifboolean–Also export a GIF (default true).
inputstring–Recording path (uses its .events.jsonl).
maxBytesinteger–GIF size budget (default 10000000).
maxFramesinteger–Scan frame cap (default 30).
outputDirstring–Package folder (default: a new one in SCREENCAST_HOME/edits).
overwriteboolean–Replace a report already in outputDir.
redactboolean–Box out OCR-found secrets in every output (default true; needs Windows OCR).
regionsarray–Extra boxes (video px; start/end on the clip clock).
scanEverySecnumber–OCR every N s (default 1).
secretPatternstring–Secret regex (default: API keys, tokens, password: values).
sessionIdstring–Or a stopped session's id.
startnumber–Clip start s (default: end - clipSec).
titlestring–Issue title.
NameTypeReqDescription
clipPathstringyes–
jsonPathstringyes–
outputDirstringyes–
reportPathstringyes–

No examples provided.

burn_subtitles ~143

Burn SRT/ASS subtitles (e.g. from transcribe) into a video in the bundled font.

NameTypeReqDescription
inputstringyesPath to the source video.
outputstring–Optional output path. Defaults under SCREENCAST_HOME/edits.
overwriteboolean–Allow replacing an existing file at the output path (default false).
stylestring–clean (default for .srt): outlined line. social: big bold text on a dark box. .ass keeps its own styling unless set.
subtitlesstringyesPath to an .srt (e.g. from transcribe) or .ass subtitle file.
NameTypeReqDescription
outputPathstringyesPath of the file written.

No examples provided.

callout ~199

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.

NameTypeReqDescription
fontFilestring–Font: a .ttf/.otf/.ttc path or a C:\Windows\Fonts file name. Default: bundled Inter, with a covering system font for scripts it lacks (CJK, emoji, Arabic, ...).
inputstringyesPath to the source video.
itemsarrayyesBoxes, text labels, and arrows, drawn in order (later on top), in video pixels. Each shows from..to seconds (default: whole video); color is a name, #RRGGBB, or name@alpha.
outputstring–Optional output path. Defaults under SCREENCAST_HOME/edits.
overwriteboolean–Allow replacing an existing file at the output path (default false).
NameTypeReqDescription
outputPathstringyesPath of the file written.

No examples provided.

chapters ~260

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.

NameTypeReqDescription
chaptersarray–Or explicit { start, title } chapters.
fromstring–markers (default; add_marker, else the file's chapters), scenes (screen changes), or transcript (SRT sections).
inputstring–Path to the video.
minChapterSecnumber–Shortest chapter (default 1; scenes 10, transcript 30).
outputstring–Optional .mp4/.mkv/.mov path. Defaults under SCREENCAST_HOME/edits.
overwriteboolean–Allow replacing an existing output file.
sessionIdstring–Or a stopped recording's id.
subtitleLanguagestring–ISO 639-2, e.g. "eng".
subtitlesstring–Also mux this .srt/.vtt/.ass as a soft subtitle track.
textOnlyboolean–Return chapters and YouTube text only; write no file.
transcriptstring–The .srt for from: transcript.
NameTypeReqDescription
chaptersarrayyes–
youtubestringyes–

No examples provided.

clip ~111

Extract several frame-exact segments, each to its own file. For one segment, trim does the same.

NameTypeReqDescription
inputstringyesPath to the source video.
outputstring–Optional output path. Only honored for a single segment; multi-segment output lands under SCREENCAST_HOME/edits.
overwriteboolean–Allow replacing an existing file at the output path (default false).
segmentsarrayyes{start, end} segments in seconds; each becomes its own file.
NameTypeReqDescription
countintegeryes–
outputsarrayyes–

No examples provided.

compress ~121

Re-encode a video smaller (H.264 CRF ladder, optional width cap). For a platform target use export_preset.

NameTypeReqDescription
inputstringyesPath to the source video.
levelstring–CRF 23 / 28 / 32 (default medium).
maxWidthinteger–Width cap in px (only downscales).
outputstring–Optional output path. Defaults under SCREENCAST_HOME/edits.
overwriteboolean–Allow replacing an existing file at the output path (default false).
NameTypeReqDescription
outputPathstringyesPath of the file written.

No examples provided.

concat ~96

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.

NameTypeReqDescription
inputsarrayyesVideo paths to join, in order.
outputstring–Optional output path. Defaults under SCREENCAST_HOME/edits.
overwriteboolean–Allow replacing an existing file at the output path (default false).
NameTypeReqDescription
outputPathstringyesPath of the file written.

No examples provided.

contact_sheet ~224

Tile timestamped frames of a video into one image to see a whole recording at a glance (the cheapest first look).

NameTypeReqDescription
columnsinteger–Tiles per row (default: roughly square).
countinteger–Frames to tile (default 12).
inputstringyesPath to the source video.
maxImageWidthinteger–Max inline image width (default 1280).
modestring–even (default) or scenes (strongest changes; static stretches take no tiles).
outputstring–Optional output .png path. Defaults under SCREENCAST_HOME/frames.
overwriteboolean–Allow replacing an existing file at the output path (default false).
posterboolean–Write one representative poster frame instead of a sheet.
returnImageboolean–Return the sheet inline (default true).
sceneThresholdnumber–Mode scenes: change needed, 0-1 (default 0.1).
tileWidthinteger–Tile width in px (default 320).
NameTypeReqDescription
inlineImagesintegeryes–
outputPathstringyes–

No examples provided.

convert ~150

Convert media to mp4, webm, or gif. For a size-bounded GIF/WebP prefer export_gif; for a smaller mp4, compress or export_preset.

NameTypeReqDescription
formatstringyesmp4 (H.264), webm (VP9), or gif (palette).
fpsnumber–gif only: fps (default 12).
inputstringyesPath to the source media.
outputstring–Optional output path. Defaults under SCREENCAST_HOME/edits.
overwriteboolean–Allow replacing an existing file at the output path (default false).
widthnumber–gif only: width in px (default 720).
NameTypeReqDescription
outputPathstringyesPath of the file written.

No examples provided.

crop ~101

Crop a video to a pixel rectangle; one running off the frame is rejected.

NameTypeReqDescription
heightintegeryes–
inputstringyesPath to the source video.
outputstring–Optional output path. Defaults under SCREENCAST_HOME/edits.
overwriteboolean–Allow replacing an existing file at the output path (default false).
widthintegeryes–
xintegeryes–
yintegeryes–
NameTypeReqDescription
outputPathstringyesPath of the file written.

No examples provided.

cursor ~228

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.

NameTypeReqDescription
clicksboolean–Ripple on clicks (default true).
dryRunboolean–Return the plan; write nothing.
eventsstring–Event log (default: the input's .events.jsonl).
hideAfterSecnumber–Hide when the mouse rests this long; 0 = never (default 2).
inputstringyesPath to the recording.
outputstring–Optional output path. Defaults under SCREENCAST_HOME/edits.
overwriteboolean–Allow replacing an existing file at the output path (default false).
sizenumber–Times a typical cursor's size (default 1.5).
smoothingnumber–0 = as logged, 1 = floaty (default 0.5).
spotlightboolean–Dim all but the area around the cursor.
NameTypeReqDescription
segmentsintegeryes–

No examples provided.

cut_by_transcript ~167

Edit a video by its transcript: cut quoted text, cue numbers, or fillers. Also writes the re-timed .srt.

NameTypeReqDescription
dryRunboolean–Only report the cuts.
fillersboolean–Also cut fillers (um, uh...) that have their own cue.
inputstringyesPath to the source video.
outputstring–Optional output path. Defaults under SCREENCAST_HOME/edits.
overwriteboolean–Allow replacing an existing file at the output path (default false).
removearray–Cue numbers as the .srt numbers them, or transcript text quoted exactly (must occur once).
srtstringyesIts .srt (transcribe; words: true for word timing).
NameTypeReqDescription
cutsarrayyes–
removedSecnumberyes–

No examples provided.

cut_idle ~159

Remove dead air: cut stretches where the screen is frozen (and silent), keeping a short pad. Returns the time saved.

NameTypeReqDescription
dryRunboolean–Only report what would be cut.
inputstringyesPath to the source video.
keepSecnumber–Seconds kept at each edge of a cut (default 0.4).
minIdleSecnumber–Only cut still stretches at least this long (default 2).
outputstring–Optional output path. Defaults under SCREENCAST_HOME/edits.
overwriteboolean–Allow replacing an existing file at the output path (default false).
useAudioboolean–Require silent audio too (default true when there is audio).

No output schema declared.

No examples provided.

denoise ~127

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.

NameTypeReqDescription
inputstringyesPath to the source video or audio file.
outputstring–Optional output path. Defaults under SCREENCAST_HOME/edits.
overwriteboolean–Allow replacing an existing file at the output path (default false).
strengthstring–How hard to reduce noise: light (6 dB), medium (12 dB, default), strong (20 dB).
NameTypeReqDescription
outputPathstringyesPath of the file written.

No examples provided.

doctor ~66

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.

Input schema present but exposes no named parameters.

NameTypeReqDescription
devicesobjectyes–
envobjectyes–
ffmpegobjectyes–
ffprobeobjectyes–
filtersobjectyes–
ocrobjectyes–
okbooleanyes–
problemsarrayyes–
serverobjectyes–
storageobjectyes–
wgcobjectyes–

No examples provided.

export_gif ~194

Export an animated GIF or WebP that fits a size budget (for PRs, issues, READMEs), stepping fps, width, and quality down until it fits.

NameTypeReqDescription
durationnumber–Seconds to export (default: to the end).
formatstring–gif (default) or webp (usually much smaller).
fpsnumber–Starting frame rate (default 12).
inputstringyesPath to the source video.
maxBytesinteger–Size budget in bytes (default 10000000, under GitHub's 10 MB image limit).
outputstring–Optional output path. Defaults under SCREENCAST_HOME/edits.
overwriteboolean–Allow replacing an existing file at the output path (default false).
startnumber–Start second.
widthinteger–Starting width in px (default 960).
NameTypeReqDescription
outputPathstringyesPath of the file written.

No examples provided.

export_preset ~163

Encode a platform-ready H.264 file (aspect, fps, bitrate, faststart) for a named platform.

NameTypeReqDescription
fitstring–Fit to the platform aspect: pad (default) or crop.
inputstringyesPath to the source video.
outputstring–Optional output path. Defaults under SCREENCAST_HOME/edits.
overwriteboolean–Allow replacing an existing file at the output path (default false).
platformstringyesSets aspect, size, fps, bitrate. steam_trailer: 1080p 5.5 Mbps CBR, -14 LUFS. vertical_reel: 1080x1920 over a blurred copy of itself, -14 LUFS (ignores fit).
NameTypeReqDescription
outputPathstringyesPath of the file written.

No examples provided.

extract_audio ~107

Extract the audio track of a media file to its own file (mp3, aac, wav, or copy). Returns the output path.

NameTypeReqDescription
formatstringyesAudio output codec. copy keeps the source codec without re-encoding.
inputstringyesPath to the source media.
outputstring–Optional output path. Defaults under SCREENCAST_HOME/edits.
overwriteboolean–Allow replacing an existing file at the output path (default false).
NameTypeReqDescription
outputPathstringyesPath of the file written.

No examples provided.

find_text ~374

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.

NameTypeReqDescription
backendstring–Live target: gdigrab (default) = what is visible; wgc (window:, FFmpeg 8+) = the window even if covered.
exactTitleboolean–window: targets match the whole title only (default false).
inputstring–Image or video file to read instead of a live target.
keepboolean–Live target: keep the capture and return its path (default false: deleted after reading).
maxFramesinteger–scanEverySec frame cap (default 30; ~1 s each).
querystring–Text to find (case-insensitive, tolerates OCR misreads like I/l, O/0, _/-). Omit to return all text.
redactboolean–Also return padded match rectangles ready for redact_region's regions.
regexboolean–Treat query as a regular expression (case-insensitive).
returnImageboolean–Return the image with matches outlined (default: true with a query).
scanEverySecnumber–Video input: scan a frame every N s across the clip (e.g. for secrets before sharing); matches and redactRegions get times. Widens to stay within maxFrames.
targetstring–Live screen target (full | monitor:<i> | window:... | region:...), or pass input.
timestampnumber–Video input: second to read (default 0).
NameTypeReqDescription
imageSizeobjectyes–

No examples provided.

get_media_info ~47

Probe a media file with ffprobe and return duration, resolution, frame rate, codecs, container format, and size.

NameTypeReqDescription
inputstringyesPath to the media file to probe.
NameTypeReqDescription
audioCodecstring|nullyes–
durationSecnumber|nullyes–
fpsnumber|nullyes–
heightnumber|nullyes–
inputstringyes–
videoCodecstring|nullyes–
widthnumber|nullyes–

No examples provided.

get_session ~43

Inspect a single recording session by id, including live status and whether its output file exists on disk.

NameTypeReqDescription
sessionIdstringyesSession id returned by start_recording.
NameTypeReqDescription
alivebooleanyes–
fileExistsbooleanyes–
idstringyes–
outputPathstringyes–
statusstringyes–

No examples provided.

index_recording ~137

Build a recording's text timeline (<video>.index.json: OCR per scene, events, markers, transcript) for search_recording.

NameTypeReqDescription
forceboolean–Re-OCR despite a matching cached index.
inputstring–Recording path.
maxFramesinteger–Keyframes to OCR (default 120).
sceneThresholdnumber–Change starting a segment (default 0.03).
sessionIdstring–Or a stopped session id.
transcriptstring–An .srt, or 'whisper' to transcribe. Default: <video>.srt if any.
NameTypeReqDescription
indexPathstringyes–
segmentsnumberyes–

No examples provided.

keystroke_overlay ~301

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.

NameTypeReqDescription
clicksboolean–Show clicks (default true).
colorstring–Text color (default white).
dryRunboolean–Return the planned badges; write nothing.
eventsstring–Event log (default: the input's .events.jsonl).
fontFilestring–Font: a .ttf/.otf/.ttc path or a C:\Windows\Fonts file name. Default: bundled Inter, with a covering system font for scripts it lacks (CJK, emoji, Arabic, ...).
inputstringyesPath to the recording.
keysstring–shortcuts (default): the chord (Ctrl + S); masked: modifiers only (Ctrl + …).
lingerSecnumber–Seconds a badge stays up (default 1.2).
outputstring–Optional output path. Defaults under SCREENCAST_HOME/edits.
overwriteboolean–Allow replacing an existing file at the output path (default false).
positionstring–Default bottom (centred).
sizenumber–Font px (default 4.5% of the frame height).
typingboolean–Show typing as "Typing…" (default true).
NameTypeReqDescription
badgesintegeryes–

No examples provided.

list_audio_devices ~38

List DirectShow audio devices and flag a likely loopback (Stereo Mix or a virtual-audio driver), for start_recording's audio.device.

Input schema present but exposes no named parameters.

NameTypeReqDescription
devicesarrayyes–
loopbackDevicestring|nullyes–
notestringyes–

No examples provided.

list_sessions ~34

List all recording sessions (active and finished) with their status, target, output path, and whether the process is still alive.

Input schema present but exposes no named parameters.

NameTypeReqDescription
countintegeryes–
sessionsarrayyes–

No examples provided.

list_targets ~122

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.

NameTypeReqDescription
capturableOnlyboolean–Leave out windows neither backend can capture (minimized, off screen). Default false.
exestring–Only list windows of this executable, e.g. 'Code.exe' or 'code'.
titleContainsstring–Only list windows whose title contains this text (case-insensitive).
NameTypeReqDescription
fullobjectyes–
monitorsarrayyes–
notestringyes–
wgcAvailablebooleanyes–
windowsarrayyes–

No examples provided.

list_video_devices ~21

List DirectShow cameras for start_recording's webcam.device.

Input schema present but exposes no named parameters.

NameTypeReqDescription
devicesarrayyes–

No examples provided.

music_bed ~174

Lay music under a video: looped or trimmed to length, faded, leveled, and mixed with any existing audio. Video is stream-copied.

NameTypeReqDescription
duckboolean–Duck the music under the original audio (default false).
fadeInnumber–Fade-in seconds (default 1).
fadeOutnumber–Fade-out seconds (default 2).
musicstringyesMusic audio file.
musicVolumenumber–0..1 (default 0.25 over existing audio, 0.8 alone).
outputstring–Optional output path. Defaults under SCREENCAST_HOME/edits.
overwriteboolean–Allow replacing an existing file at the output path (default false).
videostringyesPath to the video.
NameTypeReqDescription
outputPathstringyesPath of the file written.

No examples provided.

narrate ~130

Offline voiceover with the built-in Windows voices: speaks each line at its time or marker over the audio, plus an SRT.

NameTypeReqDescription
duckboolean–Duck the original audio (default true).
linesarrayyes–
outputstring–Optional output path. Defaults under SCREENCAST_HOME/edits.
overwriteboolean–Allow replacing an existing file at the output path (default false).
ratenumber–Default 1.
videostringyesPath to the video.
voicestring–Voice name or part (doctor lists them).
NameTypeReqDescription
outputPathstringyesPath of the file written.

No examples provided.

normalize_audio ~115

Normalize loudness to a delivery target (two-pass EBU R128 loudnorm); video is copied. Reports loudness before and after.

NameTypeReqDescription
inputstringyesPath to the source video or audio file.
outputstring–Optional output path. Defaults under SCREENCAST_HOME/edits.
overwriteboolean–Allow replacing an existing file at the output path (default false).
target––youtube (-14 LUFS, default), podcast (-16), broadcast (-23), or a LUFS number.
NameTypeReqDescription
outputPathstringyesPath of the file written.

No examples provided.

overlay ~191

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.

NameTypeReqDescription
endnumber–Hide after this second.
heightinteger–Scale to this height.
inputstringyesPath to the base video.
outputstring–Optional output path. Defaults under SCREENCAST_HOME/edits.
overlaystringyesOverlay image or video path.
overwriteboolean–Allow replacing an existing file at the output path (default false).
shapestring–circle: centre square masked round (webcam).
startnumber–Show from this second.
widthinteger–Scale to this width (other side keeps aspect).
xintegeryesLeft, px.
yintegeryesTop, px.
NameTypeReqDescription
outputPathstringyesPath of the file written.

No examples provided.

pause_recording ~48

Pause a recording; until resume_recording nothing is captured, and the gap is left out of the file, events, and markers.

NameTypeReqDescription
sessionIdstringyesFrom start_recording.
NameTypeReqDescription
recordedSecnumberyes–
sessionIdstringyes–
statusstringyes–

No examples provided.

pipeline ~354

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.

NameTypeReqDescription
chaptersboolean–Keep the input's markers as chapters, re-timed through trims and speed.
dryRunboolean–Return the plan (ffmpeg command, output size) without running it.
inputstringyesPath to the source video.
outputstring–Optional output path. Defaults under SCREENCAST_HOME/edits.
overwriteboolean–Allow replacing an existing file at the output path (default false).
qualitystring–Encoder preset for an mp4 result (default standard).
recipestring–Polish preset expanded to steps (see dryRun): pr_demo = cut_idle, click zoom, GIF <=10 MB; tutorial = + audio, captions, 1080p mp4; social_reel = 9:16, big captions. Given steps replace its same-op s…
stepsarray–Edits in order, each { op, ...its tool's options }; export_preset/export_gif only last. Times and pixels are relative to the video as it is at that step (after earlier trims, speed, crops). zoom foll…
NameTypeReqDescription
processesintegeryes–
stepsarrayyes–

No examples provided.

read_events ~182

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.

NameTypeReqDescription
fromnumber–Earliest video second.
inFrameOnlyboolean–Drop events whose cursor was outside the recorded area.
inputstring–Or a recording path, or its .events.jsonl.
limitinteger–Most events to return (default 200).
sessionIdstring–Session id of a recording started with events: true.
tonumber–Latest video second.
typesarray–down/up (mouse buttons; clicks are down), move (sampled cursor), wheel, key (shortcut), typing (burst), gap (events may be missing).
NameTypeReqDescription
eventsPathstringyes–
matchedintegeryes–
returnedintegeryes–
summaryobjectyes–
totalintegeryes–

No examples provided.

redact_region ~170

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.

NameTypeReqDescription
colorstring–Box fill color (default black).
inputstringyesPath to the source video.
outputstring–Optional output path. Defaults under SCREENCAST_HOME/edits.
overwriteboolean–Allow replacing an existing file at the output path (default false).
padinteger–Grow each region by this many px (default 0).
regionsarrayyesPixel rectangles (x, y, width, height), each optionally limited to start..end seconds.
stylestring–box (default): irreversible fill; blur/pixelate are partially recoverable.
NameTypeReqDescription
outputPathstringyesPath of the file written.

No examples provided.

reframe ~123

Re-aspect a video to 16:9, 9:16, 1:1, or 4:5 by padding or cropping.

NameTypeReqDescription
aspectstringyesTarget aspect ratio.
fitstring–pad (default): letterbox, nothing lost. crop: fill and center-crop.
inputstringyesPath to the source video.
outputstring–Optional output path. Defaults under SCREENCAST_HOME/edits.
overwriteboolean–Allow replacing an existing file at the output path (default false).
NameTypeReqDescription
outputPathstringyesPath of the file written.

No examples provided.

resume_recording ~31

Resume a paused recording (same target and settings).

NameTypeReqDescription
sessionIdstringyesFrom start_recording.
NameTypeReqDescription
recordedSecnumberyes–
sessionIdstringyes–
statusstringyes–

No examples provided.

review_recording ~69

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.

NameTypeReqDescription
inputstring–Path to the video.
sessionIdstring–Or the session id of a stopped recording.
NameTypeReqDescription
durationSecnumber|nullyes–
fpsnumber|nullyes–
hasAudiobooleanyes–
heightnumber|nullyes–
inputstringyes–
widthnumber|nullyes–

No examples provided.

sample_frames ~278

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.

NameTypeReqDescription
dedupeboolean–Mode fps: drop near-duplicate frames (default false).
fpsnumber–Frames per second (mode fps).
inputstringyesPath to the source video file.
maxFramesinteger–Frame cap (default 100); fps is lowered to fit while still spanning the video.
maxImageWidthinteger–Max inline image width (default 1280).
maxInlineImagesinteger–Frames to embed inline (default 8); all are listed by path.
modestring–scenes: only frames where the screen changed (strongest first), usually the cheapest review. Default: fps or timestamps, whichever is given.
outputDirstring–Optional folder for the frames (a relative path resolves under SCREENCAST_HOME/frames). Defaults to SCREENCAST_HOME/frames/<id>.
returnImagesboolean–Return the first maxInlineImages frames inline (default true).
sceneThresholdnumber–Mode scenes: change needed to count, 0-1 (default 0.1).
timestampsarray–Seconds to grab a frame at (mode timestamps).
NameTypeReqDescription
frameCountintegeryes–
frameDirstringyes–
framesarrayyes–
modestringyes–

No examples provided.

save_replay ~141

Save the last N seconds of a replay buffer (start_recording replayBufferSec) to an mp4; the buffer keeps running.

NameTypeReqDescription
lastSecnumber–Seconds back from now (default and max: the buffer length).
outputstring–Output .mp4 path (default under SCREENCAST_HOME/recordings).
overwriteboolean–Allow replacing an existing file at the output path (default false).
reencodeboolean–Frame-exact re-encode. Default: instant stream copy that may hide up to 2 s of earlier frames.
sessionIdstringyesSession id of a replay buffer.
NameTypeReqDescription
durationSecnumberyes–
outputPathstringyes–
sessionIdstringyes–

No examples provided.

scale ~133

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.

NameTypeReqDescription
heightinteger–Target height in px. Omit to derive from width (keeps aspect).
inputstringyesPath to the source video.
outputstring–Optional output path. Defaults under SCREENCAST_HOME/edits.
overwriteboolean–Allow replacing an existing file at the output path (default false).
widthinteger–Target width in px. Omit to derive from height (keeps aspect).
NameTypeReqDescription
outputPathstringyesPath of the file written.

No examples provided.

screen_diff ~118

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.

NameTypeReqDescription
astringyesBefore image (or video: first frame).
bstringyesAfter image (or video); scaled to a's size.
pixelThresholdnumber–Mean 0-255 difference for a ~32x32 cell to count as changed (default 12).
returnImageboolean–Return b inline with changes outlined (default true).
NameTypeReqDescription
changedFractionnumberyes–
identicalbooleanyes–
meanDiffnumberyes–
regionsarrayyes–
ssimnumber|nullyes–

No examples provided.

screenshot ~246

Capture one PNG of the screen, a monitor, a window, or a region, returned inline and by path.

NameTypeReqDescription
backendstring–gdigrab (default, ~0.2 s): what is visible. wgc (window:, FFmpeg 8+, ~1-2 s): the window even if covered.
exactTitleboolean–window: targets match the whole title only, never a substring (default false).
maxImageWidthinteger–Max inline image width (default 1280).
outputstring–Optional output .png path. Defaults to a file under SCREENCAST_HOME/screenshots.
overwriteboolean–Allow replacing an existing file at the output path (default false).
returnImageboolean–Return the image inline (default true; the PNG on disk stays full size).
targetstringyesfull | monitor:<i> (0 = primary) | window:<title> (or window:exe=<app.exe> / window:hwnd=<n>) | region:<x>,<y>,<w>,<h>. Titles match exactly, else as a substring; topmost wins.
NameTypeReqDescription
backendstringyes–
inlineImagesintegeryes–
outputPathstringyes–
targetstringyes–

No examples provided.

Install

How do I install the Screencast MCP server?

Screencast MCP runs locally as an npm package, launched with npx -y @tmhs/screencast-mcp. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

npm · @tmhs/screencast-mcp

# add to Claude Code
claude mcp add tmhsdigital-screencast-mcp -- npx -y @tmhs/screencast-mcp
Common questions

What is the Screencast MCP server?

Screencast MCP is listed in the public MCP registry as io.github.TMHSDigital/screencast-mcp. Let AI agents record the Windows screen, watch it as frames, and edit it with ffmpeg. This page covers its npm package (@tmhs/screencast-mcp).

Is the Screencast MCP server safe to use?

Screencast MCP scores 83 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 4 November 2026. It declares no install or post-install scripts. Its build provenance is signed and verified. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

What tools does the Screencast MCP server expose?

Screencast MCP exposes 57 tools: start_recording, stop_recording, pause_recording, resume_recording, save_replay, and 52 more. Their descriptions and schemas cost roughly 9,455 tokens of context every time the server is loaded.

Is the Screencast MCP server still maintained?

Screencast MCP is still listed as active in the MCP registry. We last reached this channel on 4 November 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.

What licence is the Screencast MCP server under?

Screencast MCP declares the CC-BY-NC-ND-4.0 licence, which is not on the OSI-approved list. Read the terms before using it at work, and note this covers the source only, not the cost of any service it calls.