mcpbeat

tc39-mcp MCP Server

io.github.xyzzylabs/tc39-mcp
answering

tc39-mcp is answering right now. Last checked 11 min ago. 44 installs a week from npm. It exposes 17 tools. Last commit 4 Aug 2026.

Independent MCP server for the TC39 specs (ECMA-262 + ECMA-402): clauses, search, diffs, history.

Installs per day peak 198 · avg 23 · -65% w/w
a month agotoday
Uptime history 41 hours of history
41 hours agonow
100.0%
Uptime 24h
91 of 91 checks
17
Tools
read from the server
134 ms
Response time
average over 24h
44
Installs / week
npm and PyPI

Connect this server

Endpoint below is the one we actually reach during checks — not the one copied from a README. Last verified 11 min ago.

run in your terminal
claude mcp add tc39-mcp --transport http https://mcp.xyzzylabs.ai/tc39/mcp
~/Library/Application Support/Claude/claude_desktop_config.json
{
  "mcpServers": {
    "tc39-mcp": {
      "url": "https://mcp.xyzzylabs.ai/tc39/mcp"
    }
  }
}
~/.codex/config.toml
[mcp_servers.tc39-mcp]
url = "https://mcp.xyzzylabs.ai/tc39/mcp"
.cursor/mcp.json
{
  "mcpServers": {
    "tc39-mcp": {
      "url": "https://mcp.xyzzylabs.ai/tc39/mcp"
    }
  }
}
.vscode/mcp.json
{
  "mcpServers": {
    "tc39-mcp": {
      "url": "https://mcp.xyzzylabs.ai/tc39/mcp"
    }
  }
}

Available tools 17

Read directly from the server with tools/list, grouped by what they act on. If a tool disappears, we record the date.

spec
spec.about
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.
spec.crossrefs
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). Outgoing also carries an `external` category: the clause's citations to external specs (Unicode, IETF, WHATWG) as resolvable URLs. Set `include_cross_spec: true` to also resolve outgoing references from ECMA-262 → ECMA-402 (or vice versa).
spec.diff
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.
spec.global_search
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.
spec.grammar
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` folds in SDO-attached productions (off by default).
spec.sdo_index
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).
spec.search
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.
spec.snapshots
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.
spec.symbol_resolve
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.
spec.tables
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.
spec.well_known_intrinsics
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.
clause
clause.get
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.
clause.list
List parsed spec clauses with optional filters (kind, section prefix, has_algorithm). `spec` selects '262' or '402'. `at: '<sha>'` queries a historical main snapshot.
clause.outline
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.
proposal
proposal.get
Fetch one TC39 proposal by slug (exact) or name (case-insensitive).
proposal.list
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).
test262
test262.search
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, description, features, flags), capped at `limit` (default 20). Supply at least one of `query` / `esid`.

Endpoints

URLTransportStateLatencyChecked
https://mcp.xyzzylabs.ai/tc39/mcp streamable-http answering 183 ms 11 min ago

tc39-mcp — questions

Answers built from our own checks of this server.

What can tc39-mcp do?
It exposes 17 tools, read directly from the server on our last check. Among them: clause.get, clause.list, clause.outline, proposal.get, proposal.list, spec.about and 11 more. The full list with descriptions is on this page — we take it from the server itself via tools/list, not from a README. How MCP servers expose tools in the first place →
What is tc39-mcp mostly used for?
Its tools cluster around spec, clause and proposal. That is what this server is built to work with — the grouping comes from the actual tool names, not from a category we assigned.
Is tc39-mcp working right now?
We send a real MCP handshake every 15 minutes. Over the last 24 hours 91 of 91 checks got a reply (100.0%), average response time 134 ms. The bar chart above shows every period we have measured.
How do I connect tc39-mcp?
Copy the ready config from this page — we generate it for Claude Code, Claude Desktop, Codex, Cursor and VS Code, each with the file path that client actually reads. It is a remote server, so there is nothing to install — the client connects to the address.
Does tc39-mcp need an API key?
No. tc39-mcp completed a full MCP handshake with us as an anonymous client and listed its tools without asking for anything. All 17 of them are readable on this page. This is what we observed, not what the docs claim.
How fast is tc39-mcp?
It answers our handshake in 134 ms on average, which is faster than 76% of all working MCP servers we measure. That puts it in the quick quarter of the ecosystem. The comparison comes from our own checks across the whole registry, every 15 minutes.
How many people use tc39-mcp?
The npm package tc39-mcp was installed 44 times in the last week. Week over week that is -65%. We show installs rather than GitHub stars on purpose: a star is a bookmark, an install is someone actually running it.
Is tc39-mcp open source?
Yes — it is published under the MIT licence, written in TypeScript and 2 stars on GitHub. The source link is on this page, so you can read exactly what it does with your data before you connect it.