Skip to main content
Glama

Video evidence for AI-assisted testing of desktop apps, websites, creative tools, and games. Record a selected source, see screenshots while tests run, inspect subtle changes, and compare before/after clips with a visual report.

ClipQA runs locally through MCP. It never moves your mouse, types, or activates application windows. Saved videos are available for you to watch, not just for an AI to analyze.

v0.2 public preview. Windows Graphics Capture has been tested live on Windows. Linux X11 and macOS display backends have argument/parsing tests; native capture on those systems still needs validation. See platform setup.

Quick start

npx -y clipqa-mcp

MCP client configuration:

{
  "mcpServers": {
    "clipqa": {
      "command": "npx",
      "args": ["-y", "clipqa-mcp"]
    }
  }
}

Node.js 20+ is required. FFmpeg and FFprobe are supplied through package dependencies. Override their locations with CLIPQA_FFMPEG_PATH and CLIPQA_FFPROBE_PATH. Change the session directory with CLIPQA_DATA_DIR (default ~/.clipqa/sessions).

Stronger Windows capture

The bundled FFmpeg may not include Windows Graphics Capture. This optional setup downloads a newer build from the Windows build provider linked by FFmpeg, verifies its published SHA-256, and installs it into ~/.clipqa/bin:

npx -y clipqa-mcp --setup-wgc

Restart your MCP client and call capture_status. Automatic selection prefers gfxcapture when available, falling back to gdigrab. An explicitly requested unavailable backend returns an error. Capture never silently switches from a window to an entire display.

Related MCP server: eyeshot-mcp

See what is happening

Ask your assistant:

Record this app at 15 FPS, keeping the last 30 seconds. Show me a progress screenshot. Include a short video preview when something changes. Stop and show me the saved video when the test finishes.

  • recording_progress returns a screenshot as an MCP image. With includeVideo: true, it also returns a short MP4 preview and its local path. Recording continues.

  • Live previews use completed segments and lag by roughly two seconds. Early requests return previewReady: false.

  • get_clip returns the completed video's absolute path and a video resource link.

  • Inline video playback depends on your MCP client. A client with local-media support can render the path in chat; otherwise open it in a media player. Images use standard MCP image responses.

Saved videos, previews, screenshots, and reports stay on disk until explicitly deleted. ClipQA does not automatically erase evidence once an AI inspects it.

Tools

Tool

Purpose

capture_status

Detect capture backends and explain requirements.

list_sources

List Windows/X11 windows or macOS displays.

list_windows

List Windows/X11 titles and native handles.

start_recording

Record a source, optionally retaining the last N seconds.

recording_progress

Return status, a screenshot, and optionally a live video preview.

mark_event

Attach actions, assertions, errors, or application logs to timestamps.

stop_recording

Stop capture and finalize the saved video.

get_clip

Access a completed session's video.

list_sessions

Browse recordings.

import_clip

Copy an existing local video into a session on any platform.

inspect_clip

Return a contact sheet, perceptual-change index and quality warnings.

get_frames

Retrieve specific frames with configurable image size.

compare_clips

Generate paired frames, difference maps, and HTML/JSON reports.

delete_session

Delete a stopped session and all its artifacts.

cleanup_sessions

Preview or delete old sessions; defaults to a dry run.

Rolling recording

{
  "hwnd": "123456",
  "backend": "auto",
  "fps": 15,
  "maxWidth": 1280,
  "maxSeconds": 300,
  "bufferSeconds": 30
}

Replace the handle with one from list_sources. Without bufferSeconds, the full recording is retained. Rolling mode removes old two-second disk segments while recording. A few extra seconds are temporarily retained for segment boundaries. Stopping saves only the last N seconds (or the available duration if shorter), removes working segments, drops older events, and shifts retained event timestamps to match the saved video.

This is a disk buffer, bounded by time rather than bytes. Preview exports and finalization need extra space. Saved previews remain until cleanup.

Perceptual indexing and comparison

inspect_clip analyzes resized RGB frames using local structural similarity and color differences. Local scoring can find a small button flash that scene-cut detection misses. indexFps defaults to 15 and can be raised to 60. Analysis streams frames with bounded candidate storage and caches results. Contact sheets are capped at 24 images; exact-frame requests at 16.

compare_clips accepts two session IDs, start offsets, duration, sample count, and threshold. ignoreRegions uses normalized coordinates (0–1) to exclude expected changes. Reports include paired frames, difference maps, scores and timestamps. The highest-scoring pair is returned as an image in chat. Comparison uses a common 320×180 analysis canvas; inspect larger frames for very small details.

{
  "beforeSessionId": "<baseline-session-uuid>",
  "afterSessionId": "<new-session-uuid>",
  "beforeStart": 0,
  "afterStart": 0.5,
  "seconds": 10,
  "samples": 30,
  "threshold": 0.08,
  "ignoreRegions": [{"x": 0.9, "y": 0, "width": 0.1, "height": 0.1}]
}

Offsets align runs manually. Reports identify visual differences, which can be intentional; they do not automatically establish a regression.

Privacy and resources

  • Windows/X11 capture targets one window. macOS captures an explicitly selected display, including other visible apps.

  • Recorder processes are hidden and do not control input or focus.

  • Recording excludes audio and webcams. Imported files are copied as supplied and may contain audio from their original recorder.

  • ClipQA opens no network listener and does not upload recordings itself. Images returned over MCP go to your client, which may send them to its AI provider.

  • One recording runs per MCP process. Configure FPS and maxWidth to manage overhead. Automatic encoder selection probes hardware first.

  • Startup waits for actual frames. Wall-clock limits stop stalled capture. Normal shutdown finalizes recordings; concurrent event updates are serialized.

  • Cleanup defaults to a preview and excludes active sessions.

Validation

npm install
npm run check
npm test
npm run benchmark
npm run build

Tests use real FFmpeg video for rolling retention, subtle changes, clean controls, ignore masks and reports. A real MCP client exercises import → annotation → inspection → comparison → progress → cleanup. The opt-in Windows test creates its own animated window without activation and verifies WGC, rolling output and live previews. See test instructions.

The original synthetic timestamp benchmark covers 8/8 defect intervals versus 2/8 with four periodic screenshots, using 144 versus 36 selected frames. That is temporal evidence coverage, not AI diagnosis accuracy, with unequal image budgets. Real-video tests separately verify the new analysis code. See the evaluation protocol for model evaluations.

Remaining constraints

  • Minimized apps may stop rendering; minimized Windows targets are rejected at startup. ClipQA does not restore or focus them. Protected content can remain black. Static/black-frame warnings flag suspicious evidence, not confirmed bugs.

  • WGC needs a suitable OS, driver and FFmpeg build. X11 can include occluding windows and stops when a target is unmapped. Native Wayland and macOS window-only capture are not implemented.

  • Sampling can miss changes between frames or below analysis resolution. Comparisons require aligned runs. Internal failures still need logs and reproducible test steps.

  • Recording, analysis, disk writes and finalization consume resources. Zero slowdown is not guaranteed. Full recordings and saved previews grow until cleanup.

  • Forced termination may leave segments without a finalized MP4. Use orderly shutdown; preserve interrupted sessions if you want to recover their evidence.

  • Releases are published to npm and GitHub. Direct GitHub installs remain available for testing unreleased commits.

The Roblox Studio plugin is deferred. Core recording, progress, comparison and event tools work independently of any game engine.

License

MIT. FFmpeg binaries have separate licenses; consult the selected distributor or package's license and source information.

Available Tools

7 tools
get_framesB

Return full-size frames from exact timestamps in a completed recording.

ParametersJSON Schema
NameRequiredDescriptionDefault
sessionIdYes
timestampsYes

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations and no output schema, the description carries some disclosure responsibility. It mentions that frames are full-size and timestamps must be exact, which are useful behavioral hints. But it does not say what happens for unknown sessions, missing timestamps, or invalid frame requests, so transparency is partial.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single concise sentence with no filler. It front-loads the main action and resource, then adds the key constraint. Every word contributes.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter read-like tool, the description is minimal but adequate for basic invocation. However, the absence of annotations and output schema means the description should clarify error cases, return format, or relationship to sibling tools; it does none of that, leaving some gaps in practical usage context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate for the two parameters. While 'timestamps' is partially explained by 'exact timestamps', sessionId is never mentionedcars and the description gives no guidance on timestamp units or the 1-16 item constraint. This leaves the agent under-informed beyond the raw schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description identifies a specific verb ('Return'), a resource ('full-size frames'), and a constraint ('exact timestamps in a completed recording'). It is distinct enough from the sibling tools, which are mostly about session lifecycle and window listing, though it does not explicitly contrast with inspect_clip.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'in a completed recording' gives some guidance about when to use the tool: only after recording has finished. However, it does not state when not to use it or suggest alternative tools, leaving the when-to-use guidance mostly implied.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

inspect_clipB

Create and return a timestamped contact sheet for a completed recording.

ParametersJSON Schema
NameRequiredDescriptionDefault
samplesNo
sessionIdYes
endSecondsNo
startSecondsNo

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description must carry the behavioral burden and it does say the tool creates and returns an artifact. It omits side effects/persistence, auth requirements, and output format, but it at least discloses the core behavior and precondition.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single sentence with no filler; the main action, object, and condition are front-loaded. Every phrase earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, no annotations, and zero parameter documentation, the description leaves important details unspecified: what the contact sheet looks like, how it is returned, and how the time-range parameters affect it. The sibling tool names do not fill this gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, and the description adds no explicit meaning for samples, startSeconds, or endSeconds. 'Timestamped contact sheet' hints at time-range sampling, but the agent must infer the parameter mappings from property names rather than from documentation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description defines the action ('create and return') and the specific resource ('a timestamped contact sheet'), and scopes it to a completed recording. It does not explicitly differentiate from siblings like get_frames, so it falls short of full distinctiveness.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'For a completed recording' provides a clear condition: this tool is for finished sessions, not active ones. It does not name alternatives or say when not to use it, but the precondition is enough for basic routing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_sessionsB

List recorded QA sessions and their status.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It does not explicitly state that this is a read-only operation, nor does it disclose any side effects, authentication requirements, or limitations (e.g., pagination, ordering). 'List' implies read-only, but this is not explicit, leaving the agent to infer.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence with zero filler. Every word contributes to the core purpose. It is appropriately concise for a simple list operation.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a low-complexity tool with one optional parameter and no output schema, the description is nearly complete in stating what it does. However, it omits usage guidance and behavioral transparency (especially since no annotations exist), which are needed for an agent to confidently call it. The lack of status enumeration or return format details is acceptable given no output schema, but the overall guidance is minimal.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate for the undocumented 'limit' parameter. It does not mention the parameter at all. The schema provides default, min, and max, but the description adds no meaning about how limit affects results (e.g., pagination, ordering). The lightweight nature of the single optional parameter mitigates the gap slightly, but the description still fails to provide any semantic enrichment.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('List') and a distinct resource ('recorded QA sessions') with an additional detail ('and their status'). It clearly differentiates from sibling tools like list_windows, start_recording, and get_frames, which concern different resources or actions.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives or any context for selection. It does not mention scenarios, prerequisites, or why to prefer this tool over siblings. The description is purely declarative with no usage direction.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_windowsA

List visible Windows application windows that can be recorded. Read-only.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description states 'Read-only', which conveys non-destructive behavior, but with no annotations, the description carries the burden. It does not disclose other behaviors such as whether it returns only visible windows, performance implications, or any filters. It is a simple, non-destructive operation, but the description adds minimal behavioral context beyond 'Read-only'.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence, highly concise, with the core purpose front-loaded. Every word adds value, and there is no bloat.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the simplicity (0 params, no output schema), the description is mostly complete. However, it could clarify what is meant by 'recordable' (e.g., does it return only windows that meet certain criteria?) and whether there are any side effects or system permissions required. The lack of output schema means the description could hint at the return type (e.g., list of window IDs/titles), which it does not.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has 0 parameters, so the schema provides no parameter descriptions. Per the rubric, 0 params yields a baseline of 4, and the description does not need to compensate for missing parameter information. This is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('List') and resource ('visible Windows application windows'), and clarifies the purpose by noting they are recordable. It distinguishes from siblings like 'list_sessions' (which likely lists sessions, not windows) and 'start_recording' (which starts, not lists).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies this tool is for listing windows that can be recorded, which suggests use before or during recording to select a window. However, it does not explicitly state when to use this over alternatives like 'list_sessions' or how it relates to 'start_recording'. No exclusions or alternative recommendations are provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

mark_eventC

Add a timestamped action, assertion, error, or note to an active QA recording.

ParametersJSON Schema
NameRequiredDescriptionDefault
dataNo
kindNonote
labelYes
sessionIdYes

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden of behavioral disclosure. It indicates a write operation ('Add') but does not disclose whether the recording must already be active, what happens if the session is not active, whether this mutates the recording, or any side effects. The term 'active' is a behavioral constraint that is not elaborated.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single compact sentence with the key function front-loaded ('Add a timestamped action...'). It is appropriately sized for the tool's moderate complexity, though it omits meaningful behavioral guidance.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutating tool with no annotations and no output schema, the description is thin. It does not explain prerequisites (active recording), what data/kind/label are used for, failure behavior, or how this relates to the recording lifecycle managed by siblings. The term 'active' is important context that is defined nowhere.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate, but it only names the event kinds (action, assertion, error, note), which partially explains the 'kind' parameter. It does not explain what 'data' should contain, how 'label' is used, or the role of sessionId beyond being a required identifier. The description adds some semantic context but leaves most parameters under-explained.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'Add' and the resource 'active QA recording', and enumerates the categories of content (action, assertion, error, note) that can be marked. It does not explicitly differentiate this from its siblings, but the term 'mark_event' and 'active QA recording' make its distinct role relatively clear.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies it is used when you want to record an event into the active QA recording, but provides no guidance on when to choose this over alternatives like start_recording/stop_recording, or what qualifies as an 'active' recording. There is no exclusion or alternative routing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

start_recordingC

Start quiet background recording of one Windows application window. This does not control input or capture audio.

ParametersJSON Schema
NameRequiredDescriptionDefault
fpsNo
hwndNo
encoderNoauto
drawMouseNo
maxSecondsNo
windowTitleNo

TDQS

C2.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden of behavioral disclosure. It does reveal helpful traits: recording is 'quiet' and 'background', targets a single window, and explicitly does not control input or capture audio. However, it does not disclose what happens when maxSeconds is reached, whether a session identifier is returned, or how output is stored.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is only two sentences, both informative and free of filler. It front-loads the main action and adds a concise scope limitation. It is appropriately sized, though slightly more operational detail could be added without harming conciseness.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

This is a 6-parameter tool with no output schema, no annotations, and 0% schema description coverage, yet the description only covers high-level purpose and two exclusions. Missing essential context includes parameter meanings, prerequisites, return/session behavior, and how the tool relates to list_windows and stop_recording. The description is not sufficient for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, and the description names or explains none of the six parameters. An agent cannot learn from the description how hwnd or windowTitle select the target, what fps/encoder/drawMouse control, or how maxSeconds bounds the recording. The description provides no compensation for the schema's missing parameter documentation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states the core action clearly: 'Start quiet background recording of one Windows application window.' It also adds useful scope exclusions ('does not control input or capture audio'). However, it does not explicitly name or distinguish itself from sibling tools like list_windows or stop_recording, so it falls just short of full sibling differentiation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives no guidance on when to use this tool versus alternatives, no prerequisites, and no workflow hints such as obtaining a window handle via list_windows or ending the recording with stop_recording. The negative statement about input/audio is a scope clarification, not a usage guideline.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

stop_recordingC

Stop a recording gracefully and finalize the clip.

ParametersJSON Schema
NameRequiredDescriptionDefault
sessionIdYes

TDQS

C2.4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must carry the full burden. It only says 'stop gracefully and finalize the clip,' which implies an ending but lacks specifics: what happens if no active session exists? Is it safe to call? Does it block or return immediately? The word 'finalize' suggests a save/compile step, but no side effects, errors, or state changes are disclosed. This is minimal and leaves key behaviors opaque.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single short sentence, which is concise and front-loaded with the verb. However, it is too terse to be informative; it doesn't earn its place because it omits critical context. It's not verbose, but under-specification is a problem. A 3 reflects that it is structurally fine but under-delivers on content.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no annotations, no output schema, and only one parameter, the description is insufficient. It fails to explain the input, the expected behavior on success/failure, or any prerequisites (e.g., an active recording). An agent would struggle to know what sessionId refers to or what to do with the result. The tool appears simple but the description doesn't make it safely callable.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must explain the parameter. It does not mention sessionId at all, leaving the agent to guess that it identifies the recording to stop. Though the name is somewhat self-explanatory, the description adds zero meaning beyond what the schema already provides (just the name and type). This is a significant gap for a required parameter.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific action ('stop a recording') and distinguishes it from the obvious sibling 'start_recording'. The verb 'stop' and resource 'recording' are unambiguous, and the phrase 'finalize the clip' adds a hint of the outcome. However, it doesn't explicitly name the sibling it is not, so it stops short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. It doesn't mention that it should follow start_recording, or when not to use it. Sibling tools like mark_event or inspect_clip are not referenced. The only implicit hint is the relationship to start_recording, but this is left to the agent to infer.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 7 tool updatesv0.1.3
    • First observedget_frames
    • First observedinspect_clip
    • First observedlist_sessions
    • First observedlist_windows
    • First observedmark_event
    • First observedstart_recording
    • First observedstop_recording

TDQS

B3.3/5.0

Scored across 7 tools

Disambiguation4/5

Each tool maps to a distinct stage of the recording workflow—discover, start/stop, annotate, list, inspect frames—so selection is generally clear. The only mild overlap is between inspect_clip and get_frames, which both retrieve visual data from a completed recording, but their descriptions clarify the different output forms.

Naming Consistency5/5

All tool names use a consistent snake_case verb_noun pattern (list_windows, start_recording, stop_recording, mark_event, list_sessions, inspect_clip, get_frames). There are no irregular verbs, abbreviations, or mixed casing to confuse an agent.

Tool Count5/5

Seven tools is right-sized for this server's purpose: a focused QA clip recording and inspection workflow. Each tool represents a necessary operation with no redundant helpers or bloat.

Completeness4/5

The core lifecycle is covered: discover windows, start/stop recording, mark events, list completed sessions, and inspect clips via contact sheets or exact frames. The main gaps are housekeeping and retrieval—there is no delete/cleanup session tool and no way to fetch the raw clip file itself, though these may be outside the server's designed scope.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers