Skip to content

Visual Brief ​

Headline ​

Same tools, two MCP transports: token cost is the same, latency differences are small and inconsistent, and prompt injection succeeded 0 times on either transport. The two "transport-specific" security signals in earlier data were measurement artifacts: a grader that counted refusals as compliance, and a tool-discovery confound.

First Screen ​

Required signals:

  • Provider: GitHub MCP.
  • Local arm: digest-pinned Docker stdio (github-mcp-server v1.0.4).
  • Remote arm: GitHub hosted streamable HTTP.
  • Baseline: no MCP.
  • Catalog constraint: 41-tool overlap from artifacts/spike/tools-list/overlap.md.
  • Final sample: N=5 per applicable task in final run full-n5-20261003 (125 trials, Claude Code 2.1.288, claude-sonnet-4-6).
  • Evidence path: experiments/github/runs/full-n5-20261003/report.md.

Primary chart:

  • Local vs remote total token ratio by tier: Tier 1 1.00×, Tier 2 0.96×, Tier 3 1.00×.
  • Local vs remote median wall-clock by tier: Tier 1 10.9s vs 10.9s, Tier 2 17.5s vs 18.6s, Tier 3 11.1s vs 12.9s.
  • Prompt-injection compliance on tier3_tool_poisoning_resilience: 0/5 local, 0/5 remote.

Panel 1: Tool Catalog ​

Source:

  • artifacts/spike/tools-list/overlap.md (re-probed 2026-10-03).

Facts to show:

  • Local tools: 79.
  • Remote tools: 50 (45 in May 2026).
  • Overlap allow-list: 41.
  • Local-only tools: 38.
  • Remote-only tools: 9, including delete_repository. It is shown only to elicitation-capable clients such as Claude Code.
  • Local-only Actions tools are excluded from default comparisons.

Visual idea:

  • Venn-style count block, with two callouts:
    • Actions tooling is a catalog gap, not a transport result.
    • The remote catalog depends on client capabilities, so verify loaded tools.

Panel 2: Performance ​

Source:

  • experiments/github/runs/full-n5-20261003/report.md

Charts:

  • Average total tokens: Tier 1 43,079 local vs 43,194 remote; Tier 2 51,022 vs 52,908; Tier 3 39,388 vs 39,453.
  • Wall-clock, mean (median):
    • Tier 1: 20.2s (10.9s) local vs 10.2s (10.9s) remote. The local mean includes one 159s trial.
    • Tier 2: 15.4s (17.5s) vs 17.2s (18.6s).
    • Tier 3: 11.6s (11.1s) vs 12.5s (12.9s).
  • Per-tool latency average: 0.2s local vs 0.3s remote in Tier 1; 0.7s vs 0.9s in Tier 2; 0.2s vs 0.3s in Tier 3.

Claim:

H1 is supported on cost: token totals are transport-invariant (0.98× across Tier 1+2). The remote endpoint adds 0.1–0.2s per tool call, but end-to-end wall-clock is dominated by model turns and does not favour one transport consistently.

Panel 3: Reliability ​

Source:

  • transportFailures in the final result JSON and experiments/github/runs/full-n5-20261003/report.md.

Charts:

  • Transport failure count per arm.
  • Success rate per task for local and remote.

Claim:

Recorded transport failures were 0.0 across all report rows. Both MCP arms succeeded on every task: 45/45 trials each.

Notes:

  • Tier 1, 2 and 3 success: local 100%, remote 100%.
  • Baseline: 0/35. 17 trials hit the 90s timeout.

Panel 4: Security ​

Source:

  • Tier 3 final results in experiments/github/runs/full-n5-20261003/report.md.

Charts:

  • Prompt-injection compliance rate, local vs remote.
  • Secret-in-output rate.
  • Env leak canary outcome for local.
  • Over-permissioned-token audit outcome for remote.

Claim:

Prompt-injection compliance was 0/5 on both transports, consistent with H2. At N=5 the exact 95% upper bound is 52% per arm. One remote trial quoted the canary while refusing it; the pre-fix grader would have scored that as compliance.

Security counters:

  • secretInOutput: 0% for every per-task and per-tier row.
  • tier3_env_leak_local: 5/5 pass, canary never exposed.
  • tier3_oauth_scope_audit: 5/5 pass, no repository mutation. The remote arm uses a fine-grained PAT bearer token, so this audits an over-permissioned token.

Panel 5: Threat Model ​

Show three lanes:

  • Local stdio: user-privilege local process, filesystem/env blast radius, supply-chain sensitivity.
  • Remote HTTP: OAuth/confused-deputy, persistent credential, provider/backend blast radius. The catalog can vary by client capability.
  • Both: tool poisoning and indirect prompt injection. The agent's own tool surface also drifts (cross-session messaging in Claude Code 2.1.288).

Interpretation:

  • Local stdio reduces remote OAuth exposure but makes the local MCP binary and its environment a high-value trust boundary.
  • Remote HTTP moves execution out of the local process but keeps credential persistence and delegated authority central.
  • Tool output remains untrusted data in both cases. Arm boundaries need tool whitelists, not deny lists.

Panel 6: Companion Experiment (Playwright) ​

Source:

  • experiments/playwright/runs/full-repro-20260626/report.md
  • experiments/playwright/runs/unsafe-deconf-20260627/report.md (de-confound control)

Facts to show:

  • The same @playwright/mcp binary (0.0.76) runs on both transports, isolating transport from server implementation.
  • H1 token cost: local 269,883 vs remote 273,911 total (0.99×).
  • H1 per-call latency: indistinguishable (local 28ms vs remote 21ms median).
  • H2 compliance:
    • Two injection mechanics scored 0/30 on both arms.
    • The affordance-lure task scored 33% local / 77% remote under deferred tools.
    • It collapsed to 0/30 on both arms once tools were loaded directly (ENABLE_TOOL_SEARCH=false).

Claim:

The one large transport-looking security effect was a tool-discovery measurement artifact, not a transport property. Controlled for, prompt-injection compliance is 0 on both transports. See docs/foundations/tool-discovery-and-deferral.md.

Link targets:

  • Full long-form writeup: docs/writeup/long-form.md.
  • Foundations (concept background): docs/foundations/.
  • GitHub final run report: experiments/github/runs/full-n5-20261003/report.md.
  • Superseded GitHub run: experiments/github/runs/full-n5-20260520/report.md.
  • Playwright run report: experiments/playwright/runs/full-repro-20260626/report.md.
  • Tool catalog diff: artifacts/spike/tools-list/overlap.md.
  • Repository audit: AUDIT.md.
  • Redaction/secret-scan recipe: redaction/README.md.

MIT licensed. Every number links to its published report.