xyzzylabs avatar

tc39-mcp

xyzzylabs/tc39-mcp

Gives Claude and other MCP clients structured JSON access to the ECMA-262 and ECMA-402 specs instead of forcing them to parse megabytes of HTML. You get 19 tools spanning clause lookup, cross-reference traversal (both directions, including 262↔402 hops), edition diffs back to ES2016, git history via pickaxe, test262 search by esid, and proposal tracking. Ships offline-first via stdio so every query hits local snapshots with zero network calls, or use the hosted Cloudflare Worker for shared HTTP access. Every response is SHA-pinned to a specific upstream commit. Reach for this when you need an agent to reason about spec semantics, track prose changes across releases, or verify test coverage without hallucinating step numbers.

GitHub stars
2
tools
17
transport
STDIO, HTTP
last updated
Nov 7, 2026

Install

From registry metadata
$ npx add-mcp https://mcp.xyzzylabs.ai/tc39/mcp --name tc39-mcp

Run in your terminal. add-mcp asks which agents to add it to (Claude Code, Codex, Cursor and more). Add -g to install it for every project.

Review the command, arguments and environment values before installing. MCP servers run with your local permissions.

Other ways

Claude Code

$ claude mcp add --transport http tc39-mcp https://mcp.xyzzylabs.ai/tc39/mcp

Run in your terminal. Add --scope user to make it available in every project.

Tools

Verified live · 17 tools

Verified live against the running server on Nov 6, 2026.

spec.aboutSelf-description of this MCP server: package name + version, per-snapshot pin metadata (sha, fetched_at, biblio_commit, clause_count) for every supported (spec, edition), plus test262 + proposals index headers when present.

Self-description of this MCP server: package name + version, per-snapshot pin metadata (sha, fetched_at, biblio_commit, clause_count) for every supported (spec, edition), plus test262 + proposals index headers when present.

No parameters. Call it with no arguments.

clause.getFetch a parsed TC39 clause as structured JSON. `spec` selects '262' (default) or '402'. `edition` defaults to 'latest'. `at: '<sha>'` pins to a historical main snapshot (only valid for edition='main'); omit to query the live snapshot.4 params

Fetch a parsed TC39 clause as structured JSON. `spec` selects '262' (default) or '402'. `edition` defaults to 'latest'. `at: '<sha>'` pins to a historical main snapshot (only valid for edition='main'); omit to query the live snapshot.

Parameters* required
atstring
Optional historical SHA pin (hex, 4-40 chars). Only valid when edition='main'; released editions have no per-SHA history to address.
editionstring
id*string
specstring
one of 262 · 402
clause.listList parsed spec clauses with optional filters (kind, section prefix, has_algorithm). `spec` selects '262' or '402'. `at: '<sha>'` queries a historical main snapshot.7 params

List parsed spec clauses with optional filters (kind, section prefix, has_algorithm). `spec` selects '262' or '402'. `at: '<sha>'` queries a historical main snapshot.

Parameters* required
atstring
editionstring
has_algorithmboolean
kindstring
limitnumber
sectionstring
specstring
one of 262 · 402
spec.searchSearch the parsed spec by clause id / aoid / title (+ step text with `search_steps`). Aoid-exact ranks first. `at: '<sha>'` searches a historical main snapshot.6 params

Search the parsed spec by clause id / aoid / title (+ step text with `search_steps`). Aoid-exact ranks first. `at: '<sha>'` searches a historical main snapshot.

Parameters* required
atstring
editionstring
limitnumber
query*string
search_stepsboolean
specstring
one of 262 · 402
proposal.listList TC39 proposals from the static index (tc39/proposals). Filter by spec ('262'|'402'), stage ('0'|'1'|'2'|'2.7'|'3'|'finished'|'inactive'|'active'), champion (substring), or contains (name/slug substring).5 params

List TC39 proposals from the static index (tc39/proposals). Filter by spec ('262'|'402'), stage ('0'|'1'|'2'|'2.7'|'3'|'finished'|'inactive'|'active'), champion (substring), or contains (name/slug substring).

Parameters* required
championstring
containsstring
limitnumber
specstring
one of 262 · 402
stagestring
proposal.getFetch one TC39 proposal by slug (exact) or name (case-insensitive).1 params

Fetch one TC39 proposal by slug (exact) or name (case-insensitive).

Parameters* required
name*string
spec.grammarQuery grammar productions captured from the spec's `<emu-grammar>` blocks. `{ nonterminal }` returns every production for that non-terminal (exact match); `{ contains }` filters by RHS / name substring; neither lists all non-terminals + their production counts. `include_sdo` f...6 params

Query grammar productions captured from the spec's `<emu-grammar>` blocks. `{ nonterminal }` returns every production for that non-terminal (exact match); `{ contains }` filters by RHS / name substring; neither lists all non-terminals + their production counts. `include_sdo` f...

Parameters* required
containsstring
editionstring
include_sdoboolean
limitnumber
nonterminalstring
specstring
one of 262 · 402
spec.tablesList or fetch parsed `<emu-table>` content. `{ id }` returns exactly that table (full columns + rows); otherwise list table summaries, optionally narrowed by a `filter` substring over the caption or id.5 params

List or fetch parsed `<emu-table>` content. `{ id }` returns exactly that table (full columns + rows); otherwise list table summaries, optionally narrowed by a `filter` substring over the caption or id.

Parameters* required
editionstring
filterstring
idstring
limitnumber
specstring
one of 262 · 402
spec.sdo_indexIndex Syntax-Directed Operations by the grammar production they're defined on. `by: 'production'` (default) groups SDOs under each production; `by: 'sdo'` groups productions under each SDO title. `filter` narrows to keys containing a substring (case-insensitive).5 params

Index Syntax-Directed Operations by the grammar production they're defined on. `by: 'production'` (default) groups SDOs under each production; `by: 'sdo'` groups productions under each SDO title. `filter` narrows to keys containing a substring (case-insensitive).

Parameters* required
bystring
one of production · sdo
editionstring
filterstring
limitnumber
specstring
one of 262 · 402
clause.outlineReturn the section tree (table of contents) for a parsed (spec, edition). `depth` caps how deep the tree descends (1 = top-level only); `under` limits the tree to descendants of one clause id.4 params

Return the section tree (table of contents) for a parsed (spec, edition). `depth` caps how deep the tree descends (1 = top-level only); `under` limits the tree to descendants of one clause id.

Parameters* required
depthnumber
editionstring
specstring
one of 262 · 402
understring
spec.global_searchRun spec.search across both ECMA-262 and ECMA-402 in one call and interleave hits by score. Each hit is tagged with the spec it came from. Use it when you don't know which spec defines a symbol. `search_steps` also matches algorithm step text.3 params

Run spec.search across both ECMA-262 and ECMA-402 in one call and interleave hits by score. Each hit is tagged with the spec it came from. Use it when you don't know which spec defines a symbol. `search_steps` also matches algorithm step text.

Parameters* required
limitnumber
query*string
search_stepsboolean
spec.snapshotsList the live (spec, edition, sha, fetched_at) snapshots the hosted Worker is serving from R2. Filter by `spec` ('262'|'402') or `edition` (e.g. 'main', 'es2026'). Historical SHA-pinned copies are reachable via `at:` on clause.get / spec.search but aren't enumerated here.2 params

List the live (spec, edition, sha, fetched_at) snapshots the hosted Worker is serving from R2. Filter by `spec` ('262'|'402') or `edition` (e.g. 'main', 'es2026'). Historical SHA-pinned copies are reachable via `at:` on clause.get / spec.search but aren't enumerated here.

Parameters* required
editionstring
specstring
one of 262 · 402
spec.symbol_resolveResolve spec notation like `[[Prototype]]` (internal slot), `%Object.prototype%` (well-known intrinsic), or `~number~` (sigil enum): return clauses that mention or define it, ranked by occurrence with a bump for definition-y sections.4 params

Resolve spec notation like `[[Prototype]]` (internal slot), `%Object.prototype%` (well-known intrinsic), or `~number~` (sigil enum): return clauses that mention or define it, ranked by occurrence with a bump for definition-y sections.

Parameters* required
editionstring
limitnumber
notation*string
specstring
one of 262 · 402
spec.well_known_intrinsicsEnumerate the well-known intrinsics in a spec with their probable defining clauses. Driven from the canonical §6.1.7.4 WKI table when present (ECMA-262), else a `%X%` prose scan (e.g. ECMA-402). `filter` narrows by bare-name substring.4 params

Enumerate the well-known intrinsics in a spec with their probable defining clauses. Driven from the canonical §6.1.7.4 WKI table when present (ECMA-262), else a `%X%` prose scan (e.g. ECMA-402). `filter` narrows by bare-name substring.

Parameters* required
editionstring
filterstring
limitnumber
specstring
one of 262 · 402
spec.diffClause-level diff of one clause across two editions of a spec. Reports identical / modified / added / removed plus a field-level breakdown (title, signature, step count, reworded step indices, notes, crossrefs). `from` defaults to the latest stable release, `to` to main.4 params

Clause-level diff of one clause across two editions of a spec. Reports identical / modified / added / removed plus a field-level breakdown (title, signature, step count, reworded step indices, notes, crossrefs). `from` defaults to the latest stable release, `to` to main.

Parameters* required
fromstring
id*string
specstring
one of 262 · 402
tostring
spec.crossrefsFor a clause id, return its outgoing references (clauses it cites) and/or incoming references (clauses that cite it — the back-reference index the parse alone doesn't expose). The reverse index is AOID-densified from step text. `direction`: 'in' | 'out' | 'both' (default). Out...6 params

For a clause id, return its outgoing references (clauses it cites) and/or incoming references (clauses that cite it — the back-reference index the parse alone doesn't expose). The reverse index is AOID-densified from step text. `direction`: 'in' | 'out' | 'both' (default). Out...

Parameters* required
directionstring
one of in · out · both
editionstring
id*string
include_cross_specboolean
limitnumber
specstring
one of 262 · 402
test262.searchSearch the tc39/test262 conformance suite from its indexed front-matter. `query` AND-matches whitespace tokens (case-insensitive) across each test's description + path; `esid` prefix-matches the front-matter esid. Returns ranked hits (path, GitHub url at the indexed SHA, esid,...3 params

Search the tc39/test262 conformance suite from its indexed front-matter. `query` AND-matches whitespace tokens (case-insensitive) across each test's description + path; `esid` prefix-matches the front-matter esid. Returns ranked hits (path, GitHub url at the indexed SHA, esid,...

Parameters* required
esidstring
limitnumber
querystring

Sponsors

Readme

tc39-mcp

Test npm version License: MIT

📖 Docs: mcp.xyzzylabs.ai/tc39 — Get started · Tools · Cookbook · Editions · Architecture · Hosting

Independent project — not an official Ecma International or TC39 publication. Reads the publicly published ECMAScript specs (ECMA-262 + ECMA-402).


View the full README on GitHub

Details

Repository
github.com/xyzzylabs/tc39-mcp
Website
mcp.xyzzylabs.ai/tc39
Category
Search & Web Crawling
Package
tc39-mcp
Transport
STDIO, HTTP
Registry
MCP registry, active
Prompts
7
Tools verified
Nov 6, 2026

More from xyzzylabs

Related Search & Web Crawling MCP servers

View all
1xyzzylabs avatarwasm-mcpxyzzylabs/wasm-mcpRead-only MCP server for the WebAssembly spec: instructions, types, sections, search, proposals.2stars
2aegisgovdao avatarAegis Gov Contractsaegisgovdao/aegisgov-contracts-mcpSAM.gov federal contracts: search, details, AI bid analysis. 33k+ live opportunities.1stars
3ahmeedgamil avatarsemhoodahmeedgamil/semhoodAST-based semantic code search; results ship with their call graph (calls + callers).1stars
4alexmi64 avatarWikivibe MCPalexmi64/wikivibe-mcpSearch and read public Wikivibe articles about AI coding, agents, MCP, GEO, bots and deployment.1stars
5cloudcorprecords avatarScholardatacloudcorprecords/scholardataGoogle Scholar as JSON: scholarly search results, case-law opinions and citation formats.1stars
6illyism avatarLinkDRillyism/linkdr-mcpBacklink research, domain authority, SERP analysis, site approvals, and link building for agents.1stars