mcp-evidence
This server drives a real Chromium browser to verify and document that features work, producing screenshots, video, and trace files as evidence.
Start a session (
start_evidence_session): Launch a Chromium browser context with video and trace recording enabled for a named feature, optionally scoped to a base URL. Returns asessionIdfor subsequent calls.Navigate (
navigate): Direct the browser to any URL (absolute or relative to the session's base URL).Click (
click): Interact with page elements using CSS/text selectors or ARIA role and name attributes.Fill (
fill): Type values into form inputs located by CSS selector.Wait for (
wait_for): Pause execution until an element reaches a desired state (visible,hidden,attached, ordetached).Screenshot (
screenshot): Capture and save PNG screenshots immediately into the evidence directory, with a custom label used in the filename.Finish session (
finish_evidence_session): Close the browser, finalize video and trace, write amanifest.json, and receive a report of any console errors, uncaught exceptions, or failed network requests detected during the session.Passive error monitoring: Every session automatically records browser console errors, uncaught page exceptions, and failed/non-2xx network requests into
manifest.json, ensuring silent failures aren't missed.Auto-cleanup: Sessions idle for 10 minutes are automatically finalized, and open sessions are flushed on process termination to prevent lost evidence.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@mcp-evidenceCapture evidence for checkout flow on localhost:3000"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
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 chromiumRegister with Claude Code
Per-user (available in every project):
claude mcp add --scope user evidence -- npx -y github:meovan07/mcp-evidenceOr 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.
Related MCP server: Playwright MCP
Tools
Tool | Purpose |
| Launches a Chromium context with video + trace recording on. Returns |
| Goes to |
| Clicks an element, located by CSS/text |
| Fills a form field. |
| Waits for an element to reach a state (default |
| Saves a PNG immediately into the evidence dir. Survives even if the session later errors. |
| Closes the context, finalizes |
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.jsonView 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.jsMaintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/meovan07/mcp-evidence'
If you have feedback or need assistance with the MCP directory API, please join our Discord server