Live MCP tests

August 3, 2026 · View on GitHub

These opt-in tests hit real public MCP servers. They never run in the default gate because third-party uptime, authentication policy, tool names, and protocol support can change independently of mcporter.

pnpm build
MCP_LIVE_TESTS=1 pnpm test:live

Coverage

The suite exercises substantially more than initialization:

  • negotiation and successful tool calls for 2026-07-28, 2025-11-25, 2025-06-18, and 2025-03-26;
  • modern and legacy resource/prompt enumeration, a readable resource, and advertised-but-empty lists;
  • SpaceMolt's 200+ distinct tools and duplicate-name response (the live regression for #260);
  • Jina's standalone /sse transport fallback through a real tool call;
  • actionable, structured 401 results for Linear and Notion without starting OAuth;
  • a live keep-alive upstream exposed by mcporter serve --http 0, consumed by modern-pinned and legacy SDK clients;
  • a real modern record/replay round trip, including a recorded server/discover probe and replay against a dead URL;
  • explicit modern pins against modern and legacy-only servers (the live regression for #259); and
  • DeepWiki's ordinary Streamable HTTP output plus its deprecated endpoint's structured 410 classification.

Every live test contains a short regression-versus-vendor-drift note next to its assertions. Assertions favor MCP result structure over mutable prose. Tests may skip a tool call when a vendor renames the tool or adds auth, but a transport, pagination, decoding, bridge, record/replay, or error-classification failure remains a hard failure.

Public-server survey

Re-probed 2026-08-02; every endpoint below returned HTTP 200 and completed MCP negotiation unless noted.

RevisionEraServers observed
2026-07-28modernHugging Face, Cloudflare Docs, Cloudflare Blog, javadocs.dev, inference.sh (listing is public; calls require auth)
2025-11-25legacyContext7, DeepWiki, Exa, Firecrawl, Clerk, CoinGecko, Bun, Twilio, Vue, Jina SSE
2025-06-18legacyMicrosoft Learn, Astro, Svelte, Chakra UI, Oxylabs
2025-03-26legacyGitMCP, AWS Knowledge

Additional survey cases:

BehaviorEndpointExpected observation
OAuth requiredLinear, NotionHTTP 401 classified as auth, with an mcporter auth command
Large/duplicate tool listSpaceMolt213 advertised entries, 212 distinct names at the last probe
Modern resourcesHugging Facenon-empty resources list with readable skill:// content
Modern promptsCloudflare Docsnon-empty prompts list
Legacy resources and promptsExaat least one of each; first resource is readable
Advertised empty listsMicrosoft Learnresources and prompts are advertised but both lists may be empty

Triage a weekly failure

Start with the comment in the failing test, then rerun that one file with MCP_LIVE_TESTS=1. A wrong protocol revision, missing tool, newly empty list, 401/403, or changed HTTP status is usually vendor drift; re-probe another server in the same survey row before changing mcporter. Do not silently delete an era or capability case—substitute another listed endpoint and record the substitution here.

A failure after successful negotiation is more suspicious: duplicate-list rejection, fewer than 200 SpaceMolt tools, an SSE error replacing the SDK pin error, replay contacting the dead URL, a bridge failure for only one downstream era, or an auth response classified as offline is likely an mcporter regression. Capture the structured JSON/error, compare it with the adjacent test comment, and reproduce against the deterministic fixtures before weakening an assertion.

No surveyed public server is treated as a stable source of prose. If a vendor changes content but preserves a valid MCP result shape, adjust the narrow vendor-specific expectation rather than pinning its new wording.