← Back to search

tc39-mcp

xyzzylabs streamable_http Scanned 9d ago

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

B
79.3 / 100

Versions

0.1.3latest
first seen Jun 5, 2026
PermissionsTool SafetyAuthAnnotationsCode QualityStabilitySpecVuln HistoryAuthorTransparencyCommunity

Tools 19

spec.about
annotations: verified low

Return 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. Lets callers verify freshness and reproducibility without loading the parses themselves.

readOnlyHint true
spec.snapshots
annotations: verified low

List every (spec, edition, sha, fetched_at) snapshot this server has parsed. Use to discover what historical SHAs you can query via `at: \"<sha>\"`, or to verify reproducibility across server versions. Optional `spec` / `edition` filters.

readOnlyHint true
clause.get
annotations: verified low

Fetch a parsed TC39 clause as structured JSON: metadata, signature, algorithm steps, notes, cross-refs, and outward citations to external specs (Unicode, IETF, WHATWG). `spec` selects '262' (default) or '402'. `edition` defaults to `latest` (current stable release on both specs — es2026 today).

readOnlyHint true
clause.list
annotations: verified low

List parsed spec clauses with optional filters (kind, section prefix, has_algorithm). Returns lightweight rows {id, aoid, title, number, kind, algorithms}; follow up with clause.get for detail. `spec` selects '262' or '402'.

readOnlyHint true
clause.outline
annotations: verified low

Return the section tree (table of contents) for a parsed (spec, edition). `depth` caps tree depth (1 = top-level only). `under` anchors at a specific clause id so you get just its descendants. Each node carries { id, number, title, kind, children }.

readOnlyHint true
spec.search
annotations: verified low

Search the parsed spec by clause id / aoid / title (and step text when search_steps is true). Returns lightweight hits ranked by match quality — the entry point when you don't know the exact clause id. `spec` selects '262' or '402'. Follow up with clause.get.

readOnlyHint true
spec.crossrefs
annotations: verified low

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

readOnlyHint true
spec.diff
annotations: verified low

Clause-level diff across any two editions of one spec. Defaults: from='latest', to='main' (working draft). Reports status (identical / modified / added / removed / missing-from-both) plus a field-level diff: title, signature, step count, per-step reworded indices, notes, crossrefs. `spec` selects '262' or '402'.

readOnlyHint true
spec.history
annotations: verified low

Recent commits in the vendored spec checkout that touched a clause's `id=\"...\"` token. Uses git pickaxe (`-S`) so it catches clause creation, deletion, and edits to the opening tag reliably; interior-text-only edits won't show. Returns SHA, date, author, subject per commit. `spec` selects '262' or '402'.

readOnlyHint true
spec.symbol_resolve
annotations: verified low

Resolve spec notation like `[[Prototype]]` (internal slot), `%Object.prototype%` (well-known intrinsic), or `~number~` (sigil enum) to the clauses that mention or define it. Hits ranked by occurrence count + section-prefix bumps for the canonical definition location. `spec` selects '262' or '402'.

readOnlyHint true
spec.sdo_index
annotations: verified low

Index Syntax-Directed Operations by the grammar production they handle. SDOs are abstract operations (Evaluation, BoundNames, etc.) with one `<emu-alg>` per production. Default by='production' returns { [production]: [{ sdo, id, title }] }; by='sdo' returns { [sdo title]: [productions] }. `filter` substring-narrows keys; `spec` selects '262' or '402'.

readOnlyHint true
spec.global_search
annotations: verified low

Run spec.search across both ECMA-262 and ECMA-402 in one call and interleave results by score. Each hit is tagged with the spec it came from. Useful when you don't know which spec defines the symbol (e.g. `Canonicalize` is 262, `CanonicalizeLocaleList` is 402).

readOnlyHint true
spec.well_known_intrinsics
annotations: verified low

Enumerate the well-known intrinsics (`%X%` notations) used in the spec, with each one's probable defining clause (chosen by a title-substring heuristic — see `matched_on` per hit). For the canonical 262 well-known intrinsics table, read `clause.get { id: 'sec-well-known-intrinsic-objects' }` directly.

readOnlyHint true
spec.tables
annotations: verified low

List or fetch parsed `<emu-table>` content. Pass `id` to get one table with full columns + rows; omit `id` to list tables (lightweight summaries) optionally filtered by caption/id substring. Authoritative source for the well-known intrinsics table (id='table-well-known-intrinsic-objects'), well-known symbols, completion record fields, etc. `spec` selects '262' or '402'.

readOnlyHint true
spec.grammar
annotations: verified low

Query standalone `<emu-grammar>` productions from the spec's lexical / syntactic grammar (§11-15 in 262). Three modes: { nonterminal: 'X' } returns every production for X; { contains: 'Y' } returns productions whose RHS or non-terminal name contains Y; neither returns a list of all non-terminals with their production counts. Set include_sdo:true to also surface SDO-attached grammar headers.

readOnlyHint true
test262.search
annotations: verified low

Search tc39/test262 for tests matching a free-text query and/or an esid (clause id, prefix-matched). test262 covers both ECMA-262 and ECMA-402. Served from a parsed test262 index sourced via the loader chain (local cache → hosted Worker → bundled fallback); the index is fetched on first use and cached locally. If no layer can produce the index the result is empty + a hint explaining the one-time local build. No auth, no subprocess.

readOnlyHint true
test262.get
annotations: verified low

Fetch one test's source + parsed front-matter by path within the vendored tc39/test262 checkout. Pairs with test262.search — the paths it returns plug in here directly. Returns { source, front_matter, test262_sha, url } or { hint } if the path can't be resolved.

readOnlyHint true
proposal.list
annotations: verified low

List TC39 proposals from a parsed proposals index sourced via the loader chain (local cache → hosted Worker → bundled fallback); the index is fetched on first use and cached locally. Filter by `stage` ('0'|'1'|'2'|'2.7'|'3'|'finished'|'inactive'|'active'), `champion` (substring), or `contains` (name/slug substring). Returns lightweight rows; follow up with `proposal.get`. No auth, no subprocess.

readOnlyHint true
proposal.get
annotations: verified low

Fetch one TC39 proposal by slug (exact) or name (case-insensitive). Returns { slug, name, stage, authors, champions, url, test262_flag, source_file }. Slug is canonical — use what proposal.list returns directly.

readOnlyHint true

Permissions 3

network medium
Server uses network capabilities via: fetch()
shell high
Server uses shell capabilities via: child_process, spawn(), spawnSync()
env_vars low
Server uses env_vars capabilities via: process.env

Scan Findings 50

info
Tool 'proposal.list' annotations are consistent annotation_checker · 80%
info
Tool 'proposal.get' annotations are consistent annotation_checker · 80%
info
Sandbox failed to start for behavioral verification behavioral_verifier · 100%
info
Tool 'spec.global_search' annotations are consistent annotation_checker · 80%
info
Tool 'spec.well_known_intrinsics' annotations are consistent annotation_checker · 80%
info
Tool 'spec.tables' annotations are consistent annotation_checker · 80%
info
Tool 'spec.grammar' annotations are consistent annotation_checker · 80%
info
Tool 'test262.search' annotations are consistent annotation_checker · 80%
info
Tool 'test262.get' annotations are consistent annotation_checker · 80%
info
Tool 'spec.about' annotations are consistent annotation_checker · 80%
info
Tool 'spec.snapshots' annotations are consistent annotation_checker · 80%
info
Tool 'clause.get' annotations are consistent annotation_checker · 80%
info
Tool 'clause.list' annotations are consistent annotation_checker · 80%
info
Tool 'clause.outline' annotations are consistent annotation_checker · 80%
info
Tool 'spec.search' annotations are consistent annotation_checker · 80%
info
Tool 'spec.crossrefs' annotations are consistent annotation_checker · 80%
info
Tool 'spec.diff' annotations are consistent annotation_checker · 80%
info
Tool 'spec.history' annotations are consistent annotation_checker · 80%
info
Tool 'spec.symbol_resolve' annotations are consistent annotation_checker · 80%
info
Tool 'spec.sdo_index' annotations are consistent annotation_checker · 80%
info
package.json metadata manifest_parser · 100%
info
Tool: spec.about manifest_parser · 85%
info
Tool: spec.snapshots manifest_parser · 85%
info
Tool: clause.get manifest_parser · 85%
info
Tool: clause.list manifest_parser · 85%
info
Tool: clause.outline manifest_parser · 85%
info
Tool: spec.search manifest_parser · 85%
info
Tool: spec.crossrefs manifest_parser · 85%
info
Tool: spec.diff manifest_parser · 85%
info
Tool: spec.history manifest_parser · 85%
info
Tool: spec.symbol_resolve manifest_parser · 85%
info
Tool: spec.sdo_index manifest_parser · 85%
info
Tool: spec.global_search manifest_parser · 85%
info
Tool: spec.well_known_intrinsics manifest_parser · 85%
info
Tool: spec.tables manifest_parser · 85%
info
Tool: spec.grammar manifest_parser · 85%
info
Tool: test262.search manifest_parser · 85%
info
Tool: test262.get manifest_parser · 85%
info
Tool: proposal.list manifest_parser · 85%
info
Tool: proposal.get manifest_parser · 85%
info
Transport: stdio manifest_parser · 90%
info
Required env vars (4) manifest_parser · 80%
info
Sandbox failed to start for output poisoning scan output_poisoning · 100%
medium
Permission: network access detected permission_analyzer · 70%
high
Permission: shell access detected permission_analyzer · 95%
low
Permission: env_vars access detected permission_analyzer · 90%
critical
Tool poisoning in 'test262.search': Cross-tool prerequisite: 'first call/use' poisoning · 85%
critical
Tool poisoning in 'proposal.list': Cross-tool prerequisite: 'first call/use' poisoning · 85%
info
SBOM generated: 471 components sbom_generator · 100%
medium
No build provenance detected (SLSA L0) slsa_assessor · 90%