MCP.Market

tc39-mcp server

online · 100% uptime
by xyzzylabs·io.github.xyzzylabs/tc39-mcp·v0.6.4·2 stars

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

A85/100grade A
What users say
No reviews yet
Be the first
Safety scan
A85/100

full report

Adoption
Growing

2 stars566 downloads/wk

Reviews

Write one

Nobody has reviewed tc39-mcp yet.

If you have run it, two minutes of your experience saves the next person an afternoon.

tc39-mcp tools (17, 1 write)

write = sends, deletes, buys or posts
  • clause.getFree

    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.listFree

    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.outlineFree

    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.getFree

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

  • proposal.listFree

    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).

  • spec.aboutFree

    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.crossrefsFree

    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.diffFree

    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_searchwrite actionFree

    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.grammarFree

    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_indexFree

    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.searchFree

    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.snapshotsFree

    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_resolveFree

    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.tablesFree

    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_intrinsicsFree

    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.

  • test262.searchFree

    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`.

Public scan report

scanner v0.1.10 · 2026-10-15 · same rubric, same numbers if you re-run it

1 high
  • Code scan96 source files scanned25/25
  • Live reliabilityremote reachable in 620ms20/20
  • Tool poisoning17 tool descriptions checked15/15
  • Auth qualityopen endpoint exposes 1 write-action tools with no auth3/15
  • Maintenancelast push 1 days ago15/15
  • Maintainer identityregistry namespace matches repository owner7/10

Findings (1)

  • highWrite-action tools reachable without authenticationauth.open-write
Overall 85/100. Components that don't apply are left out of the denominator. Any critical finding is an F.RubricAppeal a findingJSON

How tc39-mcp compares

Against every graded Web search MCP server, from our own scans and uptime checks. Updated after each scan run.

Safety score
85/100
higher than 75% of 3,470 Web search servers
Tools
17
the typical Web search server has 5
Tools that change things
6%
typical: 0%. Fewer write tools means less an agent can break
Uptime
100%
of our recent checks; the typical remote Web search server answers 100%
Response time
58 ms
faster than 95% of 2,238 Web search servers
GitHub stars
2
more than 70% of 1,786 Web search servers
Downloads a week
566
more than 87% of 827 Web search servers with a package

What its tools let an agent do: 16 read · 1 change

Release history: 2 versions in the registry since 2026-09-08, latest 2026-10-07, typically one every 29 days.

Install tc39-mcp in Claude Code, Cursor or VS Code

claude mcp add --transport http tc39-mcp https://mcp.xyzzylabs.ai/tc39/mcp
Add to Cursor

What the publisher says

From the tc39-mcp repository's README, as published. We do not edit it. Read it on GitHub

tc39-mcp

📖 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).

Give MCP-speaking AI agents structural access to the JS spec. Any client that speaks the Model Context Protocol can call clause.get sec-tonumber and get back parsed JSON (algorithm steps as discrete arrays, cross-references as ids, signatures as typed values) instead of being handed a 4 MB spec.html to grep through. Tools cover ECMA-262 (the core language) and ECMA-402 (the Intl API): clauses, algorithm steps, cross-references both ways, edition diffs, upstream git history, test262 search, proposal lookup. Every response is SHA-pinned to a specific upstream commit so anything an agent cites stays reproducible.

Snapshots resolve through a local cache → hosted Worker → bundled fallback chain. The stdio transport (npx tc39-mcp) fetches each snapshot from the hosted Cloudflare Worker on a cold cache, writes it under ~/.cache/tc39-mcp/, and serves it from disk thereafter — revalidating only when the local copy is older than ~4 hours (a conditional If-None-Match request). The npm package also bundles the latest stable + main editions of both specs plus the test262 and proposals indexes; when the Worker is unreachable, those are served straight from the package (the offline fallback — not written to the cache). The hosted Worker is also the HTTP alternative when you want a shared network endpoint; its R2 data refreshes from upstream every ~4 hours.

Install + first call

Wire it into any MCP client — the stdio launch command is the same everywhere, only the config file differs:

{
  "mcpServers": {
    "tc39": { "command": "npx", "args": ["tc39-mcp"] }
  }
}

A global install works too — npm i -g tc39-mcp, then run tc39-mcp.

The first run downloads the npm package (latest stable + main editions plus the proposals and test262 indexes are bundled). The first call for a given snapshot fetches it from the hosted Worker and caches it locally; subsequent calls are served from disk, revalidated against the Worker only after the ~4-hour freshness window. If the Worker is unreachable, the bundled editions still answer offline. Then in your client:

use clause.get to read sec-tonumber and show me the steps

You should see structured JSON back:

{
  "meta": {
    "id": "sec-tonumber",
    "aoid": "ToNumber",
    "title": "ToNumber ( argument )",
    "number": "7.1.4",
    "kind": "op"
  },
  "signatureRaw": "ToNumber ( _argument_: an ECMAScript language value, ): either a normal completion containing a Number or a throw completion",
  "algorithms": [
    { "steps": [
        { "text": "If _argument_ is a Number, return _argument_." },
        { "text": "If _argument_ is either *undefined* or a Symbol, throw a *TypeError* exception." },
        { "text": "If _argument_ is *null*, return *+0*<sub>𝔽</sub>." },
        "..."
    ]}
  ],
  "crossrefs": ["sec-tonumber-applied-to-the-string-type", "..."]
}

Five-minute walkthrough: docs/getting-started.md.

Hosted HTTP

Shortened. The full README is on GitHub.

Nothing above is checked by us. What we check is on the safety report.

tc39-mcp: common questions

Is tc39-mcp server safe?
Yes, by our scan: it is graded A (85/100). Read the tc39-mcp safety report
How do I install tc39-mcp?
It runs remotely at mcp.xyzzylabs.ai. Add it to Claude Code, Cursor, VS Code or Claude Desktop with the snippets above, or call it through the mcp.market gateway without installing anything.
Does tc39-mcp need an API key?
Not as far as the registry entry and our scan can tell: no credentials are declared or required.
Is tc39-mcp maintained?
The last commit was 20 days ago (2026-10-15). The latest release is v0.6.4.
Is tc39-mcp up?
100% of our last 28 checks got an answer. We check remote servers about four times a day.
What can I use instead of tc39-mcp?
Servers from other publishers that do the same job: jDocmunch MCP server and all2md MCP server.
How does tc39-mcp compare with other Web search MCP servers?
safety score 85/100 (higher than 75% of 3,470 Web search servers); tools 17 (the typical Web search server has 5); tools that change things 6% (typical: 0%. Fewer write tools means less an agent can break). Full comparison.

Alternatives to tc39-mcp

Same job from other publishers: the closest match first, then the best rated.

  • jDocmunch MCP
    Section-level doc search for .md, .rst, .adoc, .ipynb, .html, .yaml, .json, and OpenAPI specs.
    A
  • all2md
    Read, convert, search, diff and outline PDF, Word, PowerPoint, HTML and 40+ formats as Markdown.
    A