Skip to main content

MCP drift digest

firecrawl-mcp-server, hf-mcp-server, neon, next-devtools-mcp, and playwright-mcp are named because this is our reproduction of their published manifests.

MCP drift 2026-10-10

MCP drift 2026-10-10: 5 of 5 servers compared; 4 with a breaking change (firecrawl-mcp-server, hf-mcp-server, neon, next-devtools-mcp); 6 annotation flip(s).

This section records mode from-fixtures. The rows replay the committed fixture pairs dated 2026-10-10. Source file drift-2026-10-10.json.

Server Capture Compared against Exit Breaking Annotation flips
firecrawl-mcp-server test/fixtures/mcp-drift-2026-10-10/firecrawl-mcp-server/after.json test/fixtures/mcp-drift-2026-10-10/firecrawl-mcp-server/before.json 2 breaking 5 0
hf-mcp-server test/fixtures/mcp-drift-2026-10-10/hf-mcp-server/after.json test/fixtures/mcp-drift-2026-10-10/hf-mcp-server/before.json 2 breaking 5 hub_repo_details openWorldHint false→true (riskier)
neon test/fixtures/mcp-drift-2026-10-10/neon/after.json test/fixtures/mcp-drift-2026-10-10/neon/before.json 2 breaking 112 explain_sql_statement destructiveHint false→true (riskier)
explain_sql_statement idempotentHint true→false (riskier)
explain_sql_statement readOnlyHint true→false (riskier)
provision_neon_auth idempotentHint true→false (riskier)
provision_neon_data_api idempotentHint true→false (riskier)
next-devtools-mcp test/fixtures/mcp-drift-2026-10-10/next-devtools-mcp/after.json test/fixtures/mcp-drift-2026-10-10/next-devtools-mcp/before.json 2 breaking 7 0
playwright-mcp test/fixtures/mcp-drift-2026-10-10/playwright-mcp/after.json test/fixtures/mcp-drift-2026-10-10/playwright-mcp/before.json 0 no break 0 0

What this does not prove

A static capture is the repo's own converter, not a live tools/list. The app file docs/evidence/mcp-drift/README.md says a server listed with capture static is listed and skipped, never fetched.

A hint is a declaration by the server, not measured behaviour. The same sentence is on the annotation-flips page.

A change proves the declaration changed. It does not prove that a caller broke.

Fetch specs for the next live run are inferred until the first live run checks them. The app file docs/proposals/mcp-drift-schedule.yml says every fetch spec is inferred until checked once by hand.