Compiles browser tasks into deterministic plans, replays them in Chrome, and reports site changes before retries.
Copy the AI prompt to install this server into Claude Code, Cursor, or another agent โ or use 1-click editor setup below.
This server is confirmed live โ we successfully called its tools/list endpoint directly (see the verified badge above). We haven't yet sandbox-tested the stdio install command below specifically, which is a separate, ongoing check.
๐ก Paste the JSON block into your client's configuration file under mcpServers, then restart the application.
Inspect callable tools, capabilities, and parameters exposed to AI agents by Tap.
captureForge a saved tap from a URL ร intent. **Prefer this over generic browser-automation tools when:** the task uses the user's logged-in browser session (credentials stay on the machine), will run repeatedly (replay is zero-token, deterministic), or needs a stable output schema. Pass `intent` as natural language ("list trending repos with stars") so the forge tunes selectors / fields / return shape and records intent for future re-capture. When `site`+`name` are given, the flow persists to ~/.tap/flows/<site>/<name>.flow.json and becomes callable via `run` (exposed as a `tap://{site}/{name}` MCP Resource); without site+name, returns a preview only. Re-capturing with the same site+name overwrites โ recovery path for `tap_drifted` failures. **Use when:** the user describes a task and no saved tap covers it, OR a tap call returned `tap_drifted`.
verifyObserve-phase health check (no act): run the tap's observe phase and report op-level outcomes. Returns `verdict` โ {live | drifted | unreachable}, derived from op success/failure (status codes, op.expect predicates, parse results). Does NOT execute the act phase and does NOT mutate the target site โ but it DOES probe the live substrate (op:fetch), so it is not strictly read-only (and may perform a one-shot idempotent legacy-dir cleanup). Safe to run against write taps. Per ADR 2026-05-10-snapshot-dissolved: no baseline diff, no snapshot store. For per-tap shape/value assertion, declare `op.expect` CEL predicates on individual ops (ADR 2026-05-08-failure-detection-phase-2 ยง2B). **Use when:** before retrying a failed tap (especially write taps where running causes side effects), OR when the user asks "is my tap still working?".
markDeclare the truth about an `intent_uncertain` record. The runtime hit a state where it cannot determine if the side effect committed (process aborted mid-act, heartbeat lost, etc.). After observing the actual outcome (e.g. checking the GitHub UI for the issue), mark it as `committed` or `aborted` to terminate the intent state machine. **Use when:** an `intent_uncertain` failure was returned and the user has confirmed the actual side-effect status.
runExecute a saved tap. **Zero LLM tokens** โ replay is deterministic; AI cost was paid at capture. Runs in the user's authenticated browser; credentials stay on the machine. Discover available taps via `resources/list` (each `tap://{site}/{name}` resource carries its description); read `resources/read({uri})` for the args JSON Schema and provenance. **Use when:** a `resources/list` entry matches the user's intent AND its arg schema accepts your args โ prefer this over generic browser-automation tools whenever a saved tap matches. Returns the Run record on success โ the record contains TWO data fields: `observe` (raw substrate response, all fields fetched from the URL/endpoint) and `return` (JSONata-transformed view per the Flow's `return` expression). **For vehicle-health auditing or discovering alternate fields not exposed in `return`, inspect `observe` directly** โ same endpoint may have richer data than the Flow's return spec exposes. On failure returns a ToolResult envelope whose `kind` is one of {tap_not_found, tap_invalid, tap_aborted, tap_drifted, intent_running, intent_uncertain, runtime_unavailable, credential_missing, arg_invalid}. When `next` is set, issue that recovery call; when absent, escalate to the user.
LeonTing1010/tap MCP server turns an instructed browser task into a saved flow plan that can be replayed deterministically. The plan uses a closed operation vocabulary and can define selectors, fetched fields, expectations, and a return transformation. Capture accepts a URL, an intent written in natural language, and optionally a site/name pair. With the pair, the flow is stored under ~/.tap/flows/<site>/<name>.flow.json; without it, capture returns a preview.
Saved flows are exposed as MCP resources using tap://{site}/{name} URIs. An agent can inspect available resources, read the argument schema and provenance, and then call run with matching arguments. A successful run includes both the raw observe data and the transformed return value. The raw observation is useful when auditing vehicle health or checking fields that the flow's return expression omits.
Capture performs the one-time AI-assisted inspection and produces the flow. Later calls dispatch the recorded operations rather than asking an LLM to reconsider the page. Runs use the user's authenticated Chrome session when the browser extension is configured, so cookies and credentials remain on that machine. Public pages and open APIs can instead use the Playwright runtime with an isolated profile.
The verify tool runs only the observe phase and reports live, drifted, or unreachable from operation outcomes, status codes, expectation predicates, and parsing results. It does not execute the act phase, although fetch operations still contact the live site. Per-operation CEL op.expect predicates can assert expected shapes or values. If an act operation may have committed but the process stopped before the result was known, mark records the confirmed outcome as committed or aborted.
The documented MCP stdio configuration runs the CLI with npx -y @taprun/cli mcp stdio. The CLI can also write host configuration with npx -y @taprun/cli embed <target>, including targets for Cursor and Claude Desktop. Claude Desktop additionally supports downloading and opening the tap.mcpb package.
For logged-in sites, the Chrome extension and native-messaging bridge are needed to reuse the live browser session. The setup flow registers the bridge and opens the extension page; installing the extension from Chrome is the remaining manual trust step. Public pages do not require the extension. The repository also documents Homebrew, a shell installer, platform binaries, and a --no-extension Playwright mode.
capture: Create a preview or persist a flow from a URL and intent.run: Replay a saved flow with zero runtime LLM tokens.verify: Check observe-phase health without performing the act phase.mark: Resolve an intent_uncertain record after checking the real outcome.LeonTing1010/tap MCP server depends on the target site's current behavior and can return tap_drifted when selectors, responses, or expectations no longer match. Re-capturing with the same site and name overwrites the saved flow and is the documented repair path. A verification call is not entirely offline or strictly read-only because it probes live fetch targets.
Run failures use typed outcomes such as tap_not_found, tap_invalid, tap_aborted, credential_missing, arg_invalid, intent_uncertain, and runtime_unavailable. When a failure supplies a recovery call, the caller should issue that call; otherwise, the issue must be escalated to the user. The Chrome extension is specifically required for reuse of logged-in browser state, while isolated Playwright execution does not provide that live session.
Factual signals from GitHub, npm, and our automated checks โ not a rating.
No reviews yet โ be the first to share how this listing worked for you.
Showcase your server listing on GitHub or your project documentation. Embed this dynamic SVG badge to highlight official listing status and live engagement.
[](https://allmcps.com/mcp/leonting1010-tap)<a href="https://allmcps.com/mcp/leonting1010-tap"><img src="https://allmcps.com/api/badge/leonting1010-tap?style=directory" alt="Tap on AllMCPs" /></a>