mcp-evidence
Drives a real Chromium browser via Playwright to capture evidence (screenshots, video, trace) of feature verification sessions.
README
mcp-evidence
An MCP server that drives a real Chromium browser (via Playwright) and packages the run into evidence — screenshots, a video, and a Playwright trace — proving a feature works. Meant for an agent to call after implementing something, as a verification step.
Generic and reusable: no assumptions about any particular app's routes or
auth. You pass a baseUrl per session, and evidence is written into the
consuming project's working directory at
.evidence/<featureName>/<timestamp>/.
Install
Browsers aren't bundled — install Chromium once per machine:
npx playwright install chromium
Register with Claude Code
Per-user (available in every project):
claude mcp add --scope user evidence -- npx -y github:meovan07/mcp-evidence
Or per-project, add to .mcp.json:
{
"mcpServers": {
"evidence": {
"command": "npx",
"args": ["-y", "github:meovan07/mcp-evidence"]
}
}
}
This repo is public, so no GitHub credentials are needed on the machine
running npx.
Consuming projects should add .evidence/ to their own .gitignore.
Tools
| Tool | Purpose |
|---|---|
start_evidence_session({ featureName, baseUrl? }) |
Launches a Chromium context with video + trace recording on. Returns sessionId. |
navigate({ sessionId, url }) |
Goes to url (resolved against baseUrl if relative). |
click({ sessionId, selector? , role?, name?, timeout? }) |
Clicks an element, located by CSS/text selector or ARIA role/name. |
fill({ sessionId, selector, value, timeout? }) |
Fills a form field. |
wait_for({ sessionId, selector?, text?, state?, timeout? }) |
Waits for an element to reach a state (default visible). |
screenshot({ sessionId, name, fullPage? }) |
Saves a PNG immediately into the evidence dir. Survives even if the session later errors. |
finish_evidence_session({ sessionId, summary? }) |
Closes the context, finalizes video.webm, stops tracing (trace.zip), writes manifest.json, returns counts of console/page/network errors seen. |
A session left open for 10 minutes with no tool calls is auto-finished. The
server also flushes any open sessions on SIGINT/SIGTERM so evidence isn't
lost if the process is killed mid-run.
Every session also passively records, into manifest.json, anything a
screenshot or video wouldn't show: browser console errors, uncaught page
exceptions, and failed or non-2xx network requests. finish_evidence_session
reports the counts directly so a silent failure (a broken API call behind a
UI that "looks fine") doesn't slip through unnoticed.
Example
start_evidence_session({ featureName: "checkout flow", baseUrl: "http://localhost:3000" })
-> sessionId, evidenceDir
navigate({ sessionId, url: "/cart" })
click({ sessionId, role: "button", name: "Checkout" })
fill({ sessionId, selector: "#email", value: "test@example.com" })
wait_for({ sessionId, selector: "#confirmation", state: "visible" })
screenshot({ sessionId, name: "confirmation" })
finish_evidence_session({ sessionId, summary: "Checkout completes and shows confirmation" })
Resulting evidence directory:
.evidence/checkout-flow/2026-07-08T07-52-21-042Z/
0-confirmation.png
video.webm
trace.zip
manifest.json
View the trace with npx playwright show-trace trace.zip.
Known limitations
- If the process is killed within roughly a second of a session starting or
navigating (tracing/video still warming up), the video or trace for that
session may be incomplete or missing. Screenshots and
manifest.jsonare written eagerly and always survive. This doesn't affect the normal flow of callingfinish_evidence_sessionat the end of a run. - One Chromium process per session. Idle sessions are reaped after 10 minutes to avoid orphaned processes.
Development
npm install
npm run build # tsc -> dist/
npm run dev # tsc --watch
npm start # node dist/index.js
Recommended Servers
playwright-mcp
A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.
Magic Component Platform (MCP)
An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.
Audiense Insights MCP Server
Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.
VeyraX MCP
Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.
graphlit-mcp-server
The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.
Kagi MCP Server
An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.
E2B
Using MCP to run code via e2b.
Neon Database
MCP server for interacting with Neon Management API and databases
Exa Search
A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.
Qdrant Server
This repository is an example of how to create a MCP server for Qdrant, a vector search engine.