Skip to content

tc39-mcpStructured MCP for the TC39 specs

Structural ECMA-262 + ECMA-402 lookup for any MCP-speaking AI agent โ€” SHA-pinned clauses, AOID-aware search, cross-spec references, edition diffs, git history. Offline-first via stdio; HTTP via the hosted Cloudflare Worker.

Install + run โ€‹

sh
# Wire into Claude Code via .mcp.json:
{
  "mcpServers": {
    "tc39": { "command": "npx", "args": ["tc39-mcp"] }
  }
}
sh
npm i -g tc39-mcp
tc39-mcp                     # reads stdio
sh
# .mcp.json:
{
  "mcpServers": {
    "tc39": {
      "type": "http",
      "url": "https://tc39-mcp.<account>.workers.dev/mcp"
    }
  }
}

What it's for โ€‹

  • Agents and tooling that need to consult the JS spec โ€” clause.get + spec.search instead of grepping spec.html.
  • Reading the spec offline / in a tool โ€” full structured access without scraping or hitting a 4 MB HTML file.
  • Cross-version analysis โ€” spec.diff between any two editions back to ES2016; spec.history walks the upstream git log.
  • Cross-spec analysis โ€” spec.crossrefs { include_cross_spec: true } resolves references that point from ECMA-262 into ECMA-402 (or vice versa). Useful for queries like "every 262 op that calls into Intl."
  • AOID โ†’ clause-id lookup โ€” spec.search ranks aoid-exact matches first.

Scope โ€‹

Deliberately narrow:

  • Read-only. No tool mutates anything. Every response is a deterministic function of pinned spec data.
  • No execution. No spec semantics evaluated; no JS run. Pure parsed-JSON lookup.
  • No auth. Read-only + no execution = safe to host publicly.
  • No corpus vendoring. test262 search works against an index built from a local checkout (~13 MB JSON).

These constraints are the design โ€” they're what make the server small, fast, and trivially deployable behind a Cloudflare Worker without sandboxing concerns.

Released under the MIT License.