Skip to content
verify mcp Beta VerifyMCP is currently in beta. If you notice any issues, get in touch and we’ll put it right.

Tap

NPM · @TAPRUN/CLI · 3 COMPONENTS · SCANNED SEP 20

Browser MCP for logged-in tasks. Uses your Chrome — credentials stay local. Zero-token replay.

−1 this week 80 Trust /100
Trust breakdown (7 categories)

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. How we score → Why this is hard to score →

Supply Chain Security91
  • No malware found by supply-chain analysis.Pass
  • No known CVEs affecting this package version or its production dependencies.Pass
  • Runs a script at install time (postinstall) that we could not recognise. It may be perfectly ordinary, but we do not read the published tarball, so we cannot say what it does. View diagnostics → Partial
  • 5 of 5 dependencies flagged as unhealthy. View diagnostics → Partial
Provenance & Transparency48
  • Source repository is publicly reachable at the declared URL. View diagnostics → Pass
  • Provenance check failed: no build-provenance attestation is published. See how to fix → View diagnostics → Fail
  • Clear OSI-approved license (AGPL-3.0).Pass
  • Actively maintained (last published 48 days ago).Pass
  • Publishes a security disclosure policy (SECURITY.md).Pass
Schema Quality & AI Usability71
  • 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).Pass
  • AI-judged instruction clarity (excellent).Pass
  • Context-footprint check failed: tool/resource definitions use about 3689 tokens (~614/item across 6 items; 4 tools + 2 resources), over budget; trim descriptions and params. See how to fix → Fail
  • Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management93
  • Stability observed for 28 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage94
  • 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
  • 80% of tool parameters carry a description.Partial
  • Structured output schemas are declared (100% of tools); any adoption earns full credit.Pass
Tool Safety100
  • No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
  • All 1 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation.Pass
  • An AI judge read all 6 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
  • Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
Install

How do I install the Tap MCP server?

Tap runs locally as an npm package, launched with npx -y @taprun/cli. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

npm · @taprun/cli

# add to Claude Code
claude mcp add leonting1010-tap -- npx -y @taprun/cli
// .cursor/mcp.json
{
  "mcpServers": {
    "leonting1010-tap": {
      "command": "npx",
      "args": [
        "-y",
        "@taprun/cli"
      ]
    }
  }
}
// .vscode/mcp.json
{
  "servers": {
    "leonting1010-tap": {
      "command": "npx",
      "args": [
        "-y",
        "@taprun/cli"
      ]
    }
  }
}
# add to Codex CLI
codex mcp add leonting1010-tap -- npx -y @taprun/cli
// opencode.json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "leonting1010-tap": {
      "type": "local",
      "command": [
        "npx",
        "-y",
        "@taprun/cli"
      ],
      "enabled": true
    }
  }
}
# add to OpenClaw
openclaw mcp add leonting1010-tap --command npx --arg -y --arg @taprun/cli
# ~/.hermes/config.yaml
mcp_servers:
  leonting1010-tap:
    command: "npx"
    args: ["-y", "@taprun/cli"]
// ~/.netclaw/config/netclaw.json
{
  "McpServers": {
    "leonting1010-tap": {
      "Transport": "stdio",
      "Command": "npx",
      "Arguments": [
        "-y",
        "@taprun/cli"
      ]
    }
  }
}
# add to Vellum
assistant mcp add leonting1010-tap -t stdio -c npx -a -y @taprun/cli
// mcp.json
{
  "mcpServers": {
    "leonting1010-tap": {
      "command": "npx",
      "args": [
        "-y",
        "@taprun/cli"
      ]
    }
  }
}
Changelog

Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.

  • 19 Sept 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 87 to 90. That category is still filling its 30-day observation window: 26 days of observed history at the previous scan, 27 at this one. The score rises as the window fills, whether or not the server changes.

  • 17 Sept 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 80 to 83. That category is still filling its 30-day observation window: 24 days of observed history at the previous scan, 25 at this one. The score rises as the window fills, whether or not the server changes.

  • 15 Sept 26 −3
    • Stability: pass → 0.77 functional
  • 14 Sept 26 0
    • Stability: 0.97 → pass security
  • 13 Sept 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 93 to 97. That category is still filling its 30-day observation window: 28 days of observed history at the previous scan, 29 at this one. The score rises as the window fills, whether or not the server changes.

  • 11 Sept 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 87 to 90. That category is still filling its 30-day observation window: 26 days of observed history at the previous scan, 27 at this one. The score rises as the window fills, whether or not the server changes.

  • 9 Sept 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 80 to 83. That category is still filling its 30-day observation window: 24 days of observed history at the previous scan, 25 at this one. The score rises as the window fills, whether or not the server changes.

  • 8 Sept 26 −3
    • Stability: pass → 0.80 functional
Diagnostics

Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.

Captured 20 Sept 2026 · Analysed npm/@taprun/cli@0.29.2

Provenance No attestation

The registry publishes no build provenance for this version, so there is nothing to verify.

Result No attestation
Ecosystem npm

Background: How many MCP packages publish verified provenance →

Install scripts 1 script
Hook Tier Command
postinstall unreviewed node bin/postinstall.js || true

Background: Why install scripts are a supply-chain risk →

Dependencies 5 packages
Packages resolved 5
No linked repository 5
Tree resolution Complete

Background: SBOMs and build attestations, explained →

MCP tools · 4 exposed · ~2,974 tokens

The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →

Tool Tokens
capture ~1,860

Forge 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`.

NameTypeReqDescription
attachLive begin only: nav attach directive, e.g. {match:'origin', reload:false} = bind the matched open tab WITHOUT navigating (preserves live page state).
digestLive: survey the bound page in ONE call — every visible interactive element as {i, role, name, selector, inViewport, x/y/w/h, suggested_op (i = document scan order; viewport-first, capped 120). **sug…
draftbooleanLive: preview the flow freeze WOULD produce from this session's successful ops — returns {draft, freeze_call:{site,name}} with NOTHING persisted and the session still live. Inspect, then persist via…
freezeobjectLive: materialize the session's successful ops into a saved Flow {site, name, key?, description?, ops?, return?, must?, accept_candidates?, lessons?}. A post_act `must` is required when the selection…
intentstringNatural-language description of what the user wants extracted. Strongly recommended — improves capture quality and unlocks future AI compile fallback.
livebooleantrue + url: begin a LIVE session — bind a tab and return live_session for real-time single-op dispatch (every op recorded). Combine with attach to bind the user's open tab without reloading it.
live_sessionstringLive-session id from the begin call. Combine with `op` or `freeze`.
namestringRequired for save (e.g. "trending")
opobjectLive: ONE Op to dispatch now on the session's tab (~1s feedback). Same lint rules as authored flows. Result returns directly; the op is appended to the session recording. **Op is a DISCRIMINATED UNI…
opsarrayLive: a SHORT op sequence dispatched in one call — sequential, FAIL-FAST (stops at the first failure; tail not attempted). All ops lint up front. Each op is recorded individually. PREFER over per-op…
sitestringRequired for save (e.g. "github"); also enables re-capture when url is omitted
urlstringSource URL to probe
NameTypeReqDescription
detailobject
kindstringPresent when ok:false — one of the closed ERROR_KINDS.
messagestring
nextobjectPresent when ok:false and a single recovery action exists; absent ⇒ escalate to user.
okbooleanyes
valuePresent when ok:true — the verb-specific success payload (Run record, verdict, capture result, etc.).

No examples provided.

mark ~144

Declare 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.

NameTypeReqDescription
asstringyes
keystringyesintent_key (raw) or its sha256Hex form
namestringyes
sitestringyes
NameTypeReqDescription
detailobject
kindstringPresent when ok:false — one of the closed ERROR_KINDS.
messagestring
nextobjectPresent when ok:false and a single recovery action exists; absent ⇒ escalate to user.
okbooleanyes
valuePresent when ok:true — the verb-specific success payload (Run record, verdict, capture result, etc.).

No examples provided.

run ~711

Execute 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.

NameTypeReqDescription
argsobjectFlow args. Per-tap schema; fetch via resources/read before calling.
cache_modestringWhich tier cache_ttl_seconds engages. 'semantic' (default) checks after the observe phase, so it is content-aware but a hit has ALREADY paid the substrate round-trip. 'ttl' checks before observe: a h…
cache_on_expirystringttl tier only: what happens when the window has EXPIRED. 'refetch' (default) re-executes synchronously — the caller waits. 'serve_stale_and_revalidate' returns the expired committed Run immediately (…
cache_ttl_secondsnumberOpt-in per-call cache freshness in seconds (ADR 2026-05-23). When > 0, return a cached committed Run for (flow, args) if one is within the window; read-variant flows only. Default 0 = no cache.
refstringyesEither a `tap://{site}/{name}` URI (from resources/list) or `{site}/{name}` shorthand.
selectstringWhich slice of the Run to return: 'envelope' (default, the whole record incl. the RAW observe scope) | 'return' (just the flow's projection) | 'return.<field>[.<field>]'. Prefer 'return' unless you a…
NameTypeReqDescription
detailobject
kindstringPresent when ok:false — one of the closed ERROR_KINDS.
messagestring
nextobjectPresent when ok:false and a single recovery action exists; absent ⇒ escalate to user.
okbooleanyes
valuePresent when ok:true — the verb-specific success payload (Run record, verdict, capture result, etc.).

No examples provided.

verify ~259

Observe-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?".

NameTypeReqDescription
argsobjectOptional concrete args for templated flows (e.g. {"startTime": 1777593600000}). Plan-level ArgSpec defaults are layered on top.
namestringyes
sitestringyes
NameTypeReqDescription
detailobject
kindstringPresent when ok:false — one of the closed ERROR_KINDS.
messagestring
nextobjectPresent when ok:false and a single recovery action exists; absent ⇒ escalate to user.
okbooleanyes
valuePresent when ok:true — the verb-specific success payload (Run record, verdict, capture result, etc.).

No examples provided.

Common questions

What is the Tap MCP server?

Tap is an MCP server listed in the public MCP registry as io.github.LeonTing1010/tap. Browser MCP for logged-in tasks. Uses your Chrome, credentials stay local. Zero-token replay. This page covers its npm package (@taprun/cli).

Is the Tap MCP server safe to use?

Tap scores 80 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 20 September 2026. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

What tools does the Tap MCP server expose?

Tap exposes 4 tools: capture, verify, mark, run. Their descriptions and schemas cost roughly 2,974 tokens of context every time the server is loaded.

Is the Tap MCP server still maintained?

Tap is still listed as active in the MCP registry. We last reached this channel on 20 September 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.

What licence is the Tap MCP server under?

Tap declares the AGPL-3.0 licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.