mcp-spec-watch
Live tracker for MCP (Model Context Protocol) specification revisions and SDK breaking changes — see what shipped, what's coming, and which client/server SDKs are about to break.
The MCP ecosystem grew past 12,000 public servers and a dozen SDKs, but the protocol underneath keeps moving:
- Python SDK v1 → v2 is mid-migration (
FastMcpis gone in v2, replaced byMcpServer). - Spec revision
2025-06-18introduced structured tool outputs, removed JSON-RPC batching (a feature that landed only three months earlier), and tightened OAuth resource-server rules. @ai-sdk/mcpv2.0.0-beta triggered a downstream ecosystem disruption in March 2026.- The new SEP (Specification Enhancement Proposal) process means breaking changes are now announced — but only if you watch the right repo.
mcp-spec-watch is the single dashboard that surfaces all of that, refreshed automatically from public GitHub APIs and the official MCP registry. No auth, no mocks, no shoehorned LLM calls.
---
Live URL
https://holyai.me/mcp-spec-watch/
Mounted under BASE_PATH=/mcp-spec-watch so it can sit behind the same nginx fan-out as every other Holy AI gallery product.
---
Data sources (every datapoint is fetched at runtime)
| Source | URL | Auth | Refresh interval |
|---|---|---|---|
| GitHub Releases | https://api.github.com/repos/modelcontextprotocol/{repo}/releases?per_page=50 | none (anonymous OK; optional GITHUB_TOKEN lifts the 60-req/h ceiling to 5000/h) | every 30 minutes |
| GitHub Tags fallback | https://api.github.com/repos/modelcontextprotocol/{repo}/tags?per_page=50 | none | every 30 minutes (only when releases is empty) |
| GitHub Commits (spec) | https://api.github.com/repos/modelcontextprotocol/modelcontextprotocol/commits?path=docs/specification&per_page=50 | none | every 60 minutes |
| Raw versioning index | https://raw.githubusercontent.com/modelcontextprotocol/modelcontextprotocol/main/docs/specification/versioning.md (plus three alternate paths) | none | every 60 minutes |
| Official MCP Registry | https://registry.modelcontextprotocol.io/v0/servers?limit=100 (paginated) | none | every 6 hours |
| SEP folder listing | https://api.github.com/repos/modelcontextprotocol/modelcontextprotocol/contents/SEP (plus fallbacks: seps, docs/seps, proposals) | none | every 6 hours |
| Raw SEP markdown | https://raw.githubusercontent.com/modelcontextprotocol/modelcontextprotocol/main/{path} | none | every 6 hours |
If a source is down we log the failure to the fetch_log table, keep serving the cached SQLite rows, and degrade gracefully.
Repos tracked
python-sdk, typescript-sdk, java-sdk, kotlin-sdk, csharp-sdk, ruby-sdk, swift-sdk, go-sdk, rust-sdk, specification, inspector, registry, servers — all under the modelcontextprotocol GitHub org.
Breaking-change detection (deterministic, no LLM)
For every release we parse the body markdown for these signals:
- A
# Breaking/## Breaking changesheading. - Bullets starting with
BREAKING:or[breaking]. - Phrases:
removed,no longer supported,migrate to,replaced by,is gone in,backwards-incompatible,renamed to. - Major semver bump (e.g.
v1.0.0,v2.0.0) on a non-prerelease tag.
The matched excerpt is stored verbatim alongside the release row, so the dashboard can show the receipt rather than a confidence score.
---
Running locally
cp .env.example .env # GITHUB_TOKEN is optional
npm install
npm start # listens on :4799
Then open http://localhost:4799/mcp-spec-watch/.
Health check: curl http://localhost:4799/mcp-spec-watch/health — always 200 if the process is up, even before the first fetch lands.
---
HTTP API
All endpoints are mounted under /mcp-spec-watch and return JSON. No authentication.
| Method | Path | Description |
|---|---|---|
| GET | /mcp-spec-watch/health | Liveness + counters. |
| GET | /mcp-spec-watch/api/overview | KPI snapshot used by the SPA homepage. |
| GET | /mcp-spec-watch/api/sdks | All tracked SDK repos with latest tag, breaking flag, release count. |
| GET | /mcp-spec-watch/api/sdks/:repo/releases?limit=50 | Per-repo release history. |
| GET | /mcp-spec-watch/api/breaking?limit=50&days=90 | Releases flagged as breaking, newest first. |
| GET | /mcp-spec-watch/api/spec/revisions | Canonical spec revisions (dates + status). |
| GET | /mcp-spec-watch/api/spec/commits?limit=50 | Recent commits under docs/specification. |
| GET | /mcp-spec-watch/api/seps?status=all | SEP proposals grouped by status. |
| GET | /mcp-spec-watch/api/registry/trend?days=30 | Registry server-count snapshots over the window. |
| GET | /mcp-spec-watch/api/fetch-log?limit=50 | Recent fetcher activity (for transparency). |
---
Stack
- Node.js 20+, Express 5
- better-sqlite3 (WAL mode) for persistence
- node-cron for scheduling
- helmet + compression for hardening
- Vanilla JS SPA — no React, no bundler, dark theme
---
Why this matters
If you ship an MCP server you care about three things: (1) does the spec version you target still validate, (2) did the SDK you depend on ship a major bump that breaks your stdio handlers, and (3) did a SEP just promote a breaking proposal to Final Comment Period. Today the only way to know is to subscribe to half a dozen GitHub repos and read changelogs by hand. This dashboard reads them for you.
---
License
MIT.