Skip to main content
Glama
kta41

PoC Recorder MCP Server

by kta41

šŸŽ¬ PoC Recorder MCP Server for Python

Python MCP Playwright FFmpeg License: MIT

Python MCP server for inspecting web PoCs and recording automated, client-ready .mp4 and .gif walkthroughs of localhost or remote web services. It exposes a Model Context Protocol server over stdio powered by Headless Chromium (Playwright) and FFmpeg.

Note: All examples in this repository use placeholder URLs and paths (http://localhost:47891, /home/user/project/scenarios, acme-corp.test). Replace them with your own target URLs and output directories.


✨ Features

  • Record Web PoCs to MP4 & GIF: Capture smooth headless Chromium walkthroughs and transcode them automatically into H.264 .mp4 (yuv420p + faststart) and two-pass palette-optimized .gif (palettegen + paletteuse).

  • Visual Cursor & Click Ripples: Injects an animated virtual pointer with click ripple effects and smooth mouse trajectories (page.mouse.move), solving Playwright's native invisible-cursor limitation.

  • Step HUD Captions: Optional translucent subtitle pill at the bottom of the viewport (caption per step) to guide clients through each feature being demonstrated.

  • Zero-Leak Dummy Data Injection: Replace real telemetry or development data before frame 0 using local_storage, session_storage, mock_routes (HTTP API interception), html_replacements (on-the-fly document rewriting), or post_load_js.

  • Live DOM Selector Discovery: Inspect any localhost or remote URL with inspect-page to retrieve verified CSS selectors for tabs, buttons, inputs, and filter chips before recording.

  • Reusable Scenario Files: Store and replay repeatable *.scenario.json demo flows across builds.

  • Zero System-FFmpeg Requirement: Uses system ffmpeg when available on PATH and transparently falls back to the bundled static binary from imageio-ffmpeg.

  • Normalized Outputs: Return structured JSON results containing success, summary, artifacts, details, warnings, and timings.


Related MCP server: AIOProductOS Studio

šŸ“¦ Requirements

  • Python: 3.10 or newer

  • Package Manager: uv

  • Browser Engine: Playwright Chromium

Install the Chromium browser binary once via uv:

uv run playwright install chromium

Runtime auto-install is also available as an opt-in setting: set POC_RECORDER_MCP_AUTO_INSTALL_BROWSER=1 (or auto_install_browser = true under [recorder] in poc-recorder-mcp.toml).


šŸš€ Installation & Running

1. Installation

Install dependencies using uv:

uv sync
uv run playwright install chromium

(If your configured package index does not mirror the MCP Python SDK, point uv at PyPI for the sync: UV_DEFAULT_INDEX=https://pypi.org/simple uv sync)

2. Running the Server

You can run the server directly using uv:

uv run poc-recorder-mcp

Alternatively, run the module directly inside the uv environment: uv run python -m poc_recorder_mcp


āš™ļø Configuration

MCP Configuration

Example MCP stdio configuration from this workspace root:

{
  "mcpServers": {
    "poc-recorder": {
      "command": "uv",
      "args": ["run", "poc-recorder-mcp"]
    }
  }
}

Configuration File (poc-recorder-mcp.toml)

Default viewport settings, limits, and scenario roots can be configured in poc-recorder-mcp.toml in the current working directory, or globally in ~/.config/poc-recorder-mcp/config.toml.

See poc-recorder-mcp.example.toml for a commented template:

[workspace]
scenario_roots = [
  "/home/user/project/scenarios"
]

[recorder]
width = 1440
height = 900
fps = 15
show_cursor = true
show_hud = true
auto_install_browser = false

[limits]
run_timeout_seconds = 180
max_steps = 100
max_concurrent_runs = 2

[artifacts]
ttl_hours = 168
max_files = 50

[security]
allow_localhost = true
allowed_hosts = []

Every setting can also be set via environment variables (POC_RECORDER_MCP_WIDTH, POC_RECORDER_MCP_HEIGHT, POC_RECORDER_MCP_FPS, POC_RECORDER_MCP_SHOW_CURSOR, POC_RECORDER_MCP_SHOW_HUD, POC_RECORDER_MCP_AUTO_INSTALL_BROWSER, POC_RECORDER_MCP_RUN_TIMEOUT, POC_RECORDER_MCP_MAX_STEPS, POC_RECORDER_MCP_MAX_CONCURRENT_RUNS, POC_RECORDER_MCP_OUTPUT_DIR, POC_RECORDER_MCP_ALLOW_LOCALHOST, POC_RECORDER_MCP_ALLOWED_HOSTS, POC_RECORDER_MCP_SCENARIO_ROOTS, POC_RECORDER_MCP_LOG_LEVEL), which take precedence over the file.

Note: The installer creates ~/.config/poc-recorder-mcp/config.toml from the template. Local poc-recorder-mcp.toml files and recorded *.mp4 / *.gif / *.webm files are git-ignored so local demos and paths are never committed accidentally.


šŸ’» Local VS Code Installation

From the project root, install dependencies with uv:

UV_DEFAULT_INDEX=https://pypi.org/simple uv sync
uv run playwright install chromium

This repository includes .vscode/mcp.json, allowing VS Code to discover the local MCP server from the workspace:

{
  "servers": {
    "poc-recorder": {
      "type": "stdio",
      "command": "uv",
      "args": ["run", "poc-recorder-mcp"]
    }
  }
}

Reload the VS Code window after syncing dependencies. The poc-recorder server should now be available in the MCP servers list.

Global Installation

To install the MCP server in the VS Code user profile so it is available from any workspace:

uv run python scripts/install_vscode.py

(To also install the reusable Copilot prompt and agent globally, append --with-copilot-customizations to the command above).

To install it manually in another local VS Code workspace, change the command args to include --directory:

"args": ["--directory", "/home/user/mcp-poc-recorder", "run", "poc-recorder-mcp"]

🧰 Available Tools

šŸ” inspect-page

Opens a target web service (http://localhost:<port> or remote URL) in headless Chromium and returns the page title, headings, localStorage keys, and interactive DOM elements (button, input, select, .tab-btn, .chip, [onclick]) with verified CSS selectors.

  • url (required): Target URL to inspect.

  • wait_ms (optional): Delay after networkidle before extracting DOM metadata (default 600).

  • max_elements (optional): Maximum interactive elements to return (default 60).

šŸŽ„ record-poc

Records an automated browser walkthrough with a virtual cursor, click ripples, HUD step captions, and dummy data injection, then converts the recording to .mp4, .gif, or both.

  • url (required): Target web service URL (e.g. http://localhost:47891).

  • output_path (required): Output file path (or base path when format="both").

  • format (optional): "both" (default — emits .mp4 and .gif), "mp4", "gif", or "webm".

  • steps (optional): Ordered list of actions (goto, wait, click, type, fill, select, hover, scroll, press, eval, caption).

  • local_storage / session_storage (optional): Key-value pairs pre-loaded into browser storage before page scripts execute.

  • mock_routes (optional): Intercept matching HTTP requests and fulfill them with synthetic JSON/text payloads.

  • html_replacements (optional): Rewrite inline datasets or strings in the main HTML document before rendering.

  • post_load_js (optional): JavaScript executed right after initial navigation to hydrate dummy state before choreography steps begin.

Supported Step Actions:

  • {"action": "click", "selector": "button.tab-btn:nth-of-type(2)", "caption": "2. Network Intelligence", "ms": 1100}

  • {"action": "type", "selector": "#net-search", "text": "ACME-Corp", "delay_ms": 45, "ms": 900}

  • {"action": "hover", "selector": ".badge.b-suspicious", "ms": 800}

  • {"action": "scroll", "x": 0, "y": 420, "ms": 800}

  • {"action": "eval", "js": "openNetworkDossier('00:11:22:33:44:55')", "ms": 1200}

  • {"action": "press", "text": "Escape", "ms": 600}

  • {"action": "wait", "ms": 1500, "caption": "Executive Risk Overview"}

Example record-poc payload with dummy data:

{
  "url": "http://localhost:47891",
  "output_path": "/home/user/project/poc_demo",
  "format": "both",
  "local_storage": {
    "demo_mode": "true"
  },
  "mock_routes": [
    {
      "url_pattern": "**/api/tags",
      "status": 200,
      "body": {"networks": {"00:11:22:33:44:55": {"label": "ACME-HQ-AP01", "category": "PROPIO"}}}
    }
  ],
  "steps": [
    {"action": "wait", "ms": 1200, "caption": "1. Executive Dashboard — Synthetic Audit Dataset"},
    {"action": "click", "selector": "nav.tabs button:nth-of-type(2)", "ms": 1200, "caption": "2. Inspecting Discovered Access Points"}
  ]
}

šŸ“‹ list-scenarios & run-scenario

  • list-scenarios: Discovers reusable *.scenario.json walkthrough files under a directory or configured scenario_roots.

  • run-scenario: Executes a saved *.scenario.json file with optional url, output_path, and format overrides.

šŸ“ list-recordings

Lists generated .mp4, .gif, and .webm artifacts in the output directory with file sizes in bytes and KB.


Agent Skills & Copilot Integration

These workflows use the MCP server configured as poc-recorder; installing a skill or prompt does not install or configure the server. Configure the server in your client first using the MCP configuration above.

VS Code GitHub Copilot

The repository includes a custom agent and a slash-command prompt. From this repository root, copy them into the target workspace:

mkdir -p /path/to/workspace/.github/agents /path/to/workspace/.github/prompts
cp copilot/agents/poc-recorder.agent.md /path/to/workspace/.github/agents/
cp copilot/prompts/record-web-poc.prompt.md /path/to/workspace/.github/prompts/

Select the poc-recorder custom agent in Copilot Chat's agent picker (@poc-recorder where supported), or run /record-web-poc <url> [output_path] in Chat.

Alternatively, install both globally with:

uv run python scripts/install_vscode.py --with-copilot-customizations

Claude Code / Cursor / Windsurf

The universal PoC Recorder skill consolidates DOM inspection, zero-leak dummy data injection, cursor choreography, and dual MP4/GIF generation.

For Claude Code, copy it into the target project's skill directory:

mkdir -p /path/to/workspace/.claude/skills/poc-recorder
cp skills/poc-recorder/SKILL.md /path/to/workspace/.claude/skills/poc-recorder/SKILL.md

Or symlink the skill directory using an absolute source path:

mkdir -p /path/to/workspace/.claude/skills
ln -s /absolute/path/to/mcp-poc-recorder/skills/poc-recorder /path/to/workspace/.claude/skills/poc-recorder

For Cursor, copy or symlink the same directory to .cursor/skills/poc-recorder/; for Windsurf, use .windsurf/skills/poc-recorder/ in the target workspace.

Repository Assets

Skills and Copilot templates remain organized under skills/ and copilot/ at the repository root, separately from the Python packages discovered under src/ in pyproject.toml.

Execution results retain the server's normalized output contract:

{
  "success": true,
  "tool": "record-poc",
  "summary": {
    "url": "http://localhost:47891",
    "title": "SIGINT Wireless Intelligence Console — Wardrive ESP32-S3",
    "format": "both",
    "viewport": "1440x900",
    "fps": 15,
    "steps_total": 8,
    "steps_completed": 8,
    "artifacts_count": 2
  },
  "artifacts": [
    {
      "format": "mp4",
      "path": "/home/user/project/poc_demo.mp4",
      "size_bytes": 412890,
      "size_kb": 403.21
    },
    {
      "format": "gif",
      "path": "/home/user/project/poc_demo.gif",
      "size_bytes": 1154320,
      "size_kb": 1127.27
    }
  ],
  "details": {
    "steps": []
  },
  "warnings": [],
  "timings": {
    "started": "2026-10-20T17:20:00.000000Z",
    "completed": "2026-10-20T17:20:14.000000Z",
    "duration_ms": 14000
  }
}

🐳 Docker

The Docker image installs this Python server, FFmpeg, and Headless Chromium:

docker build -t poc-recorder-mcp-python .
docker run --rm -i --network host poc-recorder-mcp-python

šŸ› ļø Development & Project Structure

Commands:

  • Compile-check the sources: uv run python -m compileall src

  • Lint with Ruff: uv run ruff check src tests scripts

  • Type-check with Mypy: uv run mypy src/poc_recorder_mcp

  • Run the test suite: uv run pytest tests/ -q

Structure:

.
ā”œā”€ā”€ src/poc_recorder_mcp/      # MCP server, Playwright recorder, FFmpeg converter, overlays, and types
ā”œā”€ā”€ scripts/                   # VS Code installer script
ā”œā”€ā”€ copilot/                   # Reusable Copilot prompt and agent templates
ā”œā”€ā”€ skills/poc-recorder/       # Universal Agent Skill (SKILL.md)
ā”œā”€ā”€ tests/                     # Unit tests
ā”œā”€ā”€ .vscode/mcp.json           # Workspace MCP server entry
└── poc-recorder-mcp.example.toml # Commented configuration template

mcp-name: io.github.kta41/mcp-poc-recorder

šŸ“„ License

Released under the MIT License.

Available Tools

5 tools
inspect-pageInspect Web PoC PageA

Open a target web service URL (including localhost ports) in headless Chromium and return its title, headings, localStorage keys, and interactive DOM selectors (buttons, tabs, inputs, chips, links). Use this before recording to discover accurate selectors.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesTarget web service URL to inspect (e.g. `http://localhost:47891`).
wait_msNoTime in milliseconds to wait after networkidle before inspecting the DOM.
max_elementsNoMaximum number of interactive DOM elements (buttons, inputs, tabs, links) to return.

TDQS

A4.3/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and does disclose the execution environment (headless Chromium) and the exact artifacts returned (title, headings, localStorage keys, interactive selectors). It is silent on non-mutation guarantees, timeouts, and failure behavior, but the read-only nature is implied by "inspect."

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?

Two sentences, zero filler. The action and returned artifacts come first and the usage directive last, which is the right front-loading for a discovery tool.

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

Completeness5/5

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

There is no output schema, so the description must describe the return value itself, and it enumerates the fields an agent needs in order to build selectors for a subsequent recording. Nothing material is missing for a read-only inspection tool.

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 coverage is 100%, so all three parameters including defaults and bounds are already documented in the schema. The description adds only the localhost-port hint for url, which is essentially redundant with the schema example. Baseline 3 applies.

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?

States a specific verb and resource: opens a target web service URL in headless Chromium and returns a defined set of artifacts. It also enumerates the returned contents, which clearly distinguishes it from the write-oriented sibling record-poc.

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?

"Use this before recording to discover accurate selectors" gives an explicit ordering constraint that routes the agent to inspect before record-poc. It does not name the sibling directly or state exclusion conditions, so it stops short of a full 5.

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

list-recordingsList Recorded Videos & GIFsB

List generated .mp4, .gif, and .webm files in the output directory with file sizes.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of recording entries to return.
directoryNoOptional directory to scan for recorded `.mp4`, `.gif`, and `.webm` files.

TDQS

B3.4/5.0
Behavior3/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. It discloses the scanned directory, the file formats, and that file sizes are returned, but says nothing about ordering, whether results are paginated, or what happens for an empty/nonexistent directory. Adequate but with gaps for a read-only listing tool.

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 front-loaded sentence with zero filler. The resource and scope are stated immediately and nothing is redundant.

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

Completeness4/5

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

For a simple two-parameter read-only listing tool with no output schema, the description covers what is listed and hints at the return payload ('file sizes'). The omission of ordering/empty-result behavior is minor given the tool's simplicity.

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 100%, so both 'limit' and 'directory' are already fully documented in the schema. The description adds no additional meaning about these parameters, which matches the baseline 3 when the schema does the heavy lifting.

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?

States a specific verb (List) and resource (generated .mp4/.gif/.webm files in the output directory), plus the returned attribute (file sizes). This is clear and concrete, though it never names or contrasts with the sibling list-scenarios, so the agent must infer the distinction.

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?

There is no explicit guidance on when to use this tool versus alternatives, no prerequisites, and no mention of when not to use it. The only signal is the implicit 'list what was recorded' framing.

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

list-scenariosList PoC Recording ScenariosB

Discover reusable *.scenario.json recording definitions under a directory or configured roots.

ParametersJSON Schema
NameRequiredDescriptionDefault
rootNoOptional directory to search for `*.scenario.json` files.
queryNoOptional case-insensitive filter on scenario name or filename.

TDQS

B3.2/5.0
Behavior3/5

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

No annotations exist, so the description carries the full burden. It implies a read-only discovery operation and discloses the 'configured roots' fallback when no directory is given, which is useful behavioral context, but it says nothing about traversal depth, result ordering, or error behavior for invalid roots.

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?

A single front-loaded sentence with no filler; the glob and the scope qualifier are efficiently packed. It is lean but arguably under-informative rather than padded.

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?

With no output schema, the description should describe what a discovered scenario looks like (name, path, metadata), and it does not. Both parameters are covered by the schema, so the core invocation is clear, but the return shape is a real gap.

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 100%, so both root and query are already documented in the schema, establishing a baseline of 3. The 'under a directory or configured roots' phrase loosely reinforces the root parameter's default behavior, but adds no syntax or format detail, and the query filter is not mentioned at all.

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?

States a specific verb (Discover) and resource (`*.scenario.json` recording definitions), and the file glob makes the target unambiguous. It does not explicitly contrast itself with the sibling list-recordings, so an agent could still conflate scenario definitions with recordings.

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 when-to-use guidance is given, and no alternative is named. An agent is left to infer that this is the discovery step preceding run-scenario or record-poc rather than a differently-scoped listing sibling like list-recordings.

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

record-pocRecord Web PoC Video (MP4 / GIF)A

Record an automated video walkthrough of a web PoC or localhost service with an animated virtual cursor, click ripples, optional step HUD captions, and dummy data injection (localStorage, sessionStorage, HTTP route mocks, HTML replacements, or post-load JS). Outputs H.264 .mp4, palette-optimized .gif, or both.

ParametersJSON Schema
NameRequiredDescriptionDefault
fpsNoFrame rate for GIF/MP4 conversion (default 15).
urlYesTarget web service URL to record (e.g. `http://localhost:47891`).
stepsNoOrdered sequence of browser interactions to perform during the recording.
widthNoViewport and video width in pixels (default 1440).
formatNoOutput video format: `mp4` (H.264), `gif` (2-pass palette), `both` (generates .mp4 and .gif), or `webm`.both
heightNoViewport and video height in pixels (default 900).
show_hudNoShow bottom HUD banner when steps include a `caption`.
gif_widthNoTarget width in pixels for GIF output (preserves aspect ratio with Lanczos scaling).
init_scriptNoOptional JavaScript snippet injected via `context.add_init_script` before page load.
mock_routesNoOptional HTTP route mocks returning dummy JSON/text responses for matching requests.
output_pathYesDestination file path (or base path when `format='both'`). Relative paths resolve against the configured output directory or current working directory.
show_cursorNoShow animated virtual cursor and click ripples in the recording.
post_load_jsNoOptional JavaScript executed immediately after initial page load (e.g. to inject dummy datasets and re-render before choreography starts).
local_storageNoKey-value entries pre-populated into `window.localStorage` before page scripts run (values may be strings or JSON objects).
session_storageNoKey-value entries pre-populated into `window.sessionStorage` before page scripts run.
html_replacementsNoOptional HTML response replacements applied on the fly to the main document before rendering.

TDQS

A3.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, and it does disclose useful behavior: virtual cursor animation, click ripples, HUD captions, injection methods, and concrete output formats. However it omits operational traits an agent needs — a browser/runtime requirement, execution time or duration limits, and that injecting JS/eval and writing files are side effects.

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?

Two sentences, no filler: the capability list comes first and the output formats are front-loaded in the closing clause. Every phrase maps to a real behavior of the tool.

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 16-parameter, high-complexity tool with no output schema, the description covers capability and output formats but not the workflow shape (ordering of steps/injections), prerequisites, or error/failure behavior. Adequate but with clear gaps given the tool's complexity.

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?

Schema coverage is 100%, so the structured fields already define the 16 parameters and the baseline is 3. The description goes further by mapping 'dummy data injection' into its concrete mechanisms (localStorage, sessionStorage, HTTP route mocks, HTML replacements, post-load JS), giving the agent a useful conceptual index into the parameters.

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?

States a specific verb (Record) and a well-scoped resource: an automated video walkthrough of a web PoC or localhost service. The explicit mention of output artifacts (.mp4/.gif via animated cursor, HUD captions, dummy-data injection) makes it unmistakably distinct from siblings like list-recordings, inspect-page, and run-scenario.

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 explains what the tool produces but never says when to reach for it versus siblings such as run-scenario or inspect-page, nor any when-not conditions. Usage is only inferable from the mention of a 'steps' choreography.

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

run-scenarioRun PoC Recording ScenarioB

Execute a saved *.scenario.json walkthrough with optional URL, output path, or format overrides.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlNoOptional override for the target URL.
formatNoOptional override for output format (`mp4`, `gif`, `both`, `webm`).
scenarioYesPath to a `*.scenario.json` file defining `url`, `steps`, and optional dummy data overrides.
output_pathNoOptional override for the output path.

TDQS

B3.4/5.0
Behavior3/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. It hints at side effects by mentioning output path and format overrides, implying a recording artifact is produced, but it omits whether the run is destructive, how long it takes, whether browser/auth setup is needed, and what the return value is.

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?

A single front-loaded sentence with no filler or repetition. It is efficient, though it leaves the reader wanting more rather than being genuinely complete.

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?

With no annotations and no output schema, the description should do more work. It never states what a successful run returns (e.g., a recording path) or its side effects, leaving the agent to guess about the result of the operation.

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 100%, so the baseline is 3. The description restates the same three overrides (URL, output path, format) already documented in the schema and adds no format syntax, path conventions, or precedence rules beyond it.

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 gives a specific verb ('Execute') and a concrete resource ('a saved `*.scenario.json` walkthrough'), which is unambiguous. It does not, however, explicitly differentiate itself from the sibling `record-poc` or `list-scenarios`, so the agent must infer the distinction from the name and context.

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 word 'saved' implies a prerequisite (a scenario file must already exist, presumably surfaced by `list-scenarios`), but there is no explicit when-to-use statement and no exclusion against `record-poc`. Usage is only implied.

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. 5 tool updatesv0.1.0
    • First observedinspect-page
    • First observedlist-recordings
    • First observedlist-scenarios
    • First observedrecord-poc
    • First observedrun-scenario

TDQS

A3.7/5.0

Scored across 5 tools

Disambiguation4/5

Each tool targets a distinct step: inspect-page for discovery, record-poc for ad-hoc recording, list-scenarios/run-scenario for saved scenario workflow, and list-recordings for output listing. The only mild overlap is between record-poc and run-scenario, but descriptions make the boundary clear (direct recording vs. executing a saved scenario file).

Naming Consistency5/5

All five tools follow a consistent kebab-case verb_noun pattern (inspect-page, record-poc, list-scenarios, run-scenario, list-recordings). The convention is uniform and predictable across the set.

Tool Count5/5

Five tools is well-scoped for a recording/automation server, covering discovery, recording, scenario management, and output inspection without redundancy. Each tool earns its place.

Completeness4/5

The surface covers a full workflow: discover selectors, record ad-hoc, list/run saved scenarios, and list outputs. Minor gaps exist (no tool to create/edit/delete scenario files or prune recordings), but agents can work around these via the filesystem.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    C
    maintenance
    Turns your AI host into a product videographer — scripted screen recordings of your own web app with a gliding cursor, camera zooms, highlight callouts, captions, and branded transitions, plus marketing-grade screenshots. Automatic dark-frame cleanup and MP4/GIF export. Free, MIT, 100% local — no account, no API keys.
    14
    33 npm
    3
    MIT
  • A
    license
    Not graded
    quality
    A
    maintenance
    Enables AI agents to create polished product demo videos by controlling a real Chromium browser, recording actions, and rendering 1080p MP4s with narration, captions, and styled overlays.
    1
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables agents to record narrated, zoom-animated product demo videos of websites entirely on-device, including outlining pages, scripting tours, recording MP4s, reviewing frames, and extracting embedded recipes to fork or rerender demos.
    13 npm
    4
    MIT