tc39-mcp について
tc39-mcpは、ECMAScript仕様(ECMA-262とECMA-402)を照会する独立した読み取り専用MCPサーバーです。条項やアルゴリズム手順、版の比較、関連テストを必要とするエージェント向けに、上流コミットに固定した再現可能なデータを返します。
主な機能
- 01条項と構造化されたアルゴリズム手順の取得
- 02条項検索と仕様記法の解決
- 03双方向の相互参照追跡
- 04版の比較と上流履歴の確認
- 05test262テストとTC39提案の検索
- 06ローカルキャッシュとオフライン内蔵データ
活用シーン
- 01JavaScript仕様のアルゴリズム手順の確認
- 02仕様条項間の参照関係の追跡
- 03版を比較して文面の変更を調査
- 04条項に対応するtest262テストや提案の検索
MCP 対応
クライアント向けに、ECMA-262とECMA-402の条項、検索結果、相互参照、版の差分、履歴、test262テスト、提案を照会するMCPツールを提供します。ローカルstdioサーバーとホスト型HTTPエンドポイントに対応しています。
設定
リモートサーバーはインストール不要です。クライアントを選んで設定をコピーするか、ワンクリックで導入できます。
https://mcp.xyzzylabs.ai/tc39/mcpclaude mcp add --transport http xyzzylabs-tc39 https://mcp.xyzzylabs.ai/tc39/mcp{"mcpServers":{"xyzzylabs-tc39":{"type":"http","url":"https://mcp.xyzzylabs.ai/tc39/mcp"}}}Cursor で開く{"servers":{"xyzzylabs-tc39":{"type":"http","url":"https://mcp.xyzzylabs.ai/tc39/mcp"}}}VS Code で開く{"mcpServers":{"xyzzylabs-tc39":{"type":"http","url":"https://mcp.xyzzylabs.ai/tc39/mcp"}}}{"mcpServers":{"xyzzylabs-tc39":{"serverUrl":"https://mcp.xyzzylabs.ai/tc39/mcp"}}}コマンドはターミナルで実行し、JSON は各クライアントの MCP 設定に貼り付けて再起動します。認可が必要なサーバーは初回接続時にログインを求めます。
ツール
17このツールにパラメーターはありません。
詳細
tc39-mcp
📖 ドキュメント: mcp.xyzzylabs.ai/tc39 — 始める · ツール · クックブック · エディション · アーキテクチャ · ホスティング
独立したプロジェクト — Ecma International または TC39 の公式出版物ではありません。公開済みの ECMAScript 仕様(ECMA-262 + ECMA-402)を読み込みます。
MCP に対応する AI エージェントに、JS 仕様への構造化アクセスを提供します。
Model Context Protocol に対応するクライアントなら、どれでも
clause.get sec-tonumber を呼び出して、4 MB の spec.html を渡されて検索する代わりに、解析済み JSON を取得できます(アルゴリズムの手順は個別の配列、相互参照は ID、シグネチャは型付きの値として返されます)。ツールは、ECMA-262(コア言語)と ECMA-402(Intl API)を対象としています。条項、アルゴリズムの手順、双方向の相互参照、エディション間の差分、上流の Git 履歴、test262 の検索、プロポーザルの検索が可能です。すべての応答は特定の上流コミットに SHA で固定されるため、エージェントが引用した内容の再現性を保てます。
スナップショットは、ローカルキャッシュ → ホストされた Worker → バンドル済みフォールバックの順に解決されます。stdio トランスポート(npx tc39-mcp)は、キャッシュが空の場合に、ホストされた Cloudflare Worker から各スナップショットを取得して ~/.cache/tc39-mcp/ に保存し、以降はディスクから提供します。再検証は、ローカルのコピーが約 4 時間より古い場合にのみ行われます(条件付きの If-None-Match リクエスト)。npm パッケージには、両方の仕様の最新安定版エディションと main エディションに加え、test262 とプロポーザルのインデックスもバンドルされています。Worker に接続できない場合、これらはパッケージから直接提供されます(オフライン時のフォールバックであり、キャッシュには書き込まれません)。共有ネットワークエンドポイントが必要な場合は、ホストされた Worker を HTTP の代替手段として利用できます。その R2 データは約 4 時間ごとに上流から更新されます。
インストールと最初の呼び出し
任意の MCP クライアントに接続できます。stdio の起動コマンドはどこでも同じで、設定ファイルだけが異なります。
{
"mcpServers": {
"tc39": { "command": "npx", "args": ["tc39-mcp"] }
}
}
グローバルインストールも可能です。npm i -g tc39-mcp を実行し、その後 tc39-mcp を実行してください。
初回実行時に npm パッケージがダウンロードされます(最新安定版エディションと main エディションに加え、プロポーザルと test262 のインデックスがバンドルされています)。特定のスナップショットに対する最初の呼び出しでは、ホストされた Worker から取得してローカルにキャッシュします。以降の呼び出しはディスクから提供され、約 4 時間の鮮度期間が経過した後にのみ Worker に対して再検証されます。Worker に接続できない場合でも、バンドル済みのエディションを使ってオフラインで応答できます。次に、クライアントで以下を実行します。
clause.getを使ってsec-tonumberを読み込み、手順を表示してください
構造化 JSON が返されます。
{
"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", "..."]
}
5 分でできるガイド: docs/getting-started.md。
ホストされた HTTP
ローカルのサブプロセスを実行せず、ホストされた Cloudflare Worker にクライアントを接続できます。同じ MCP プロトコルを使い、インストールは不要です。
{
"mcpServers": {
"tc39": {
"type": "http",
"url": "https://mcp.xyzzylabs.ai/tc39/mcp"
}
}
}
トラフィックは IP ごとに 30 件/分に制限されています。
得意なこと
- エージェントが幻覚を起こさずに仕様を推論できるようにします。 構造化された JSON の回答によって、実際の仕様テキストに基づいてモデルを動作させます。 ステップ番号、相互参照のリンク先、シグネチャの形式、 エディション間の差分、適合性テストなどが対象です。引用された内容はすべて、 特定の SHA における特定の条項 ID に対応するため、簡単に検証・再現できます。
- 手がかりから目的の条項を見つけます。
spec.searchは AOID の完全一致を優先して順位付けします。spec.symbol_resolveは[[Prototype]]/%Object.prototype%/~enumerate~を解決します。 - 参照を双方向にたどります。
spec.crossrefsは、 ある条項が参照する内容と、その条項を参照する側の両方を返します。AOID を高密度化しているため、<emu-xref>の href だけでなく、ステップテキスト中の単なる言及も対象になります。include_cross_specは 262 ↔ 402 の参照も解決します。 (Cookbook レシピ 1。) - エディションを比較し、文章の変化を追跡します。
spec.diffは ES2016 以降の任意の 2 つのエディションを比較します。spec.historyは ピックアックス検索で上流の git ログをたどります。 (Cookbook レシピ 2。) - 条項に対応する test262 のカバレッジを見つけます。
test262.searchは、 前方一致するesid:を使い、sec-tonumberとsec-tonumber-applied-to-the-string-typeの両方を 1 回の呼び出しで検索します。 - 提案を仕様に対応付けます。
tc39/proposalsの構造化インデックスからproposal.list/proposal.getを使って、ECMA-262 と ECMA-402(Intl)の提案を 参照できます。specで絞り込めます。仕様と同じ 4 時間ごとの間隔で更新されます。 - ローカルキャッシュ、同梱データによるフォールバック(stdio)。 スナップショットが
~/.cache/tc39-mcp/にキャッシュされると、ツールの呼び出しはディスクから処理され、 約 4 時間の鮮度期間を過ぎた後にのみ、ホストされた Worker に対して再検証されます (R2 オブジェクトキーを含み、条項 ID は決して含まない条件付きのIf-None-Matchリクエストです)。 Worker に接続できない場合でも、同梱されたエディションをオフラインで利用できます。 ホストされた Worker は、共有利用やマルチテナント利用向けの HTTP 代替手段です。
ツール(5 つの名前空間に 19 個)
| 目的 | ツール |
|---|---|
| 提供中の内容を確認する | spec.about · spec.snapshots |
| 特定の条項を読む | clause.get |
| 名前や症状から条項を見つける | spec.search · spec.global_search |
[[X]] / %X% / ~X~ 表記を解決する | spec.symbol_resolve |
| 閲覧する / 概要を確認する | clause.list · clause.outline |
| エディション / コミット履歴を比較する | spec.diff · spec.history |
| 参照をたどる(参照先と参照元) | spec.crossrefs |
| 構造化テーブルを読む | spec.tables |
| 文法を調べる | spec.grammar · spec.sdo_index |
| 既知の組み込み機能を列挙する | spec.well_known_intrinsics |
| 適合性テストを見つける | test262.search · test262.get |
| 提案を調べる | proposal.list · proposal.get |
完全なリファレンス(入力スキーマ、出力型、ツールごとの呼び出し例):
docs/tools.md — スキーマから自動生成されるため、内容が古くなることはありません。
仕様とエディション
仕様を読むすべてのツールで spec("262" または "402"、既定値は
"262")と edition(既定値は "latest")を指定できます。
- ECMA-262:
es2016~es2026、main。(ES5 / ES5.1 / ES6 には上流タグがないため、サポートされていません。) - ECMA-402:
es2016~es2026、main。(402 は各年のエディションをタグではなくesYYYYブランチとして公開します。取得ステップではブランチとタグを同じ方法で解決します。) - エイリアス:
latestは仕様を認識し、各仕様の現在の安定リリースを指します(現時点ではes2026)。draft/nextはどちらの仕様でもmainを指します。
全表と新しいリリースの追加方法については、docs/editions.md を参照してください。
スナップショットのセルフホスティング
stdio サーバーは、公開ホスト型 Worker
(キャッシュ →
Worker → バンドルされたフォールバック)から https://mcp.xyzzylabs.ai/tc39/r2/<key> にあるスナップショットを取得するため、厳格な外部通信制限のあるネットワークではバンドル版にフォールバックし、その他の版にはアクセスできません。TC39_MCP_BASE_URL でベース URL を上書きし、プライベートミラーを指定してください。厳格な外部通信制限のあるネットワーク、エアギャップ環境、セルフホスト型 Worker での実行に便利です。
TC39_MCP_BASE_URL=https://my-mirror.example.com npx tc39-mcp
エンドポイントは、同じキー構造
(spec-<spec>-<edition>.json、test262-index.json、
proposals-index.json)を提供するだけでかまいません。通常の静的ファイルサーバーで動作します。ETag を返す場合、サーバーは If-None-Match
を使って再検証します(負荷の小さい 304)。ETag がない場合は、キャッシュ済みのコピーが古くなると、オブジェクト全体を再取得します。ミラーにデータを格納するには、ローカルチェックアウトに対して
npm run parse を実行し(下記参照)、build/*.json を任意のバケットにアップロードします。
キャッシュは $XDG_CACHE_HOME/tc39-mcp に保存されます(XDG_CACHE_HOME が設定されていない場合は
~/.cache/tc39-mcp)。
ソースからビルドする(コントリビューター向け)
エンドユーザーには不要です。上記の npm パッケージとホスト型 Worker がサポート対象の利用方法です。ここではサーバー自体を開発します。
git clone https://github.com/xyzzylabs/tc39-mcp
cd tc39-mcp
npm install
npm run fetch-spec # ~2 min, ~150 MB — both specs at every supported edition
npm run parse # spec.html → build/spec-<spec>-<edition>.json
npm run fetch-test262 # optional, enables test262.* (~300 MB)
npm run build-test262-index
npm run fetch-proposals # optional, enables proposal.* (~50 MB)
npm run build-proposals-index
npm run mcp # start the stdio MCP server against your source
公開済みの bin ではなく、ローカルのソースを使うように MCP クライアントを設定します。
{
"mcpServers": {
"tc39": {
"type": "stdio",
"command": "npm",
"args": ["run", "--silent", "mcp"],
"cwd": "/abs/path/to/tc39-mcp"
}
}
}
--silentを指定すると npm のライフサイクルバナーが stdout に出力されないため、MCP クライアントはクリーンな JSON-RPC ストリームを受信できます。
ドキュメント
mcp.xyzzylabs.ai/tc39 でホストされています。検索可能でダークモードに対応しており、更新のたびに自動で再ビルドされるため、
/snapshots には常に最新の SHA が反映されます。
リポジトリ内にもあります(GitHub でも閲覧できます)。
docs/getting-started.md— インストール → 接続 → 最初の呼び出し → 検証。5 分で完了します。docs/tools.md— すべてのツール、すべてのフィールド、すべての 例。ソースから自動生成されます。docs/cookbook.md— 複数ツールを使ったレシピ: 仕様をまたいだ検索、文章のドリフト追跡、文法/SDO の 相互参照、test262 のカバレッジ、プロポーザルから条項へのマッピング。docs/editions.md— サポート対象のエディションと エイリアスの解決。docs/architecture.md— データパイプライン、 パーサー、キャッシュ、メモリモデル。docs/deployment.md— ローカル stdio、npm CLI、ホスト型 Cloudflare Worker、更新モデル、オブザーバビリティ。CONTRIBUTING.md— 取り込みやすい変更の種類と、 取り込まれない変更について。SECURITY.md— 脅威モデルと責任ある 脆弱性開示。CHANGELOG.md— バージョン履歴と自動更新の 方針。
プライバシーポリシー
tc39-mcp は読み取り専用の仕様検索サービスです。stdio トランスポート
(npx tc39-mcp)はテレメトリーを送信せず、クエリを送信することもありません。スナップショットはキャッシュが空または古い場合にホスト型 Worker から取得され、それ以外の場合はローカルディスクから提供されます。この取得で送信されるのは R2 オブジェクトキーであり、条項 ID やツール引数ではありません。ホスト型 Cloudflare Worker が収集するのは、標準的なリクエストメタデータ(レート制限用の IP、タイムスタンプ、リクエストヘッダー)のみです。リクエスト本文をログに記録せず、Cookie を設定せず、第三者とデータを共有することもありません。
ポリシー全文:mcp.xyzzylabs.ai/tc39/privacy
プライバシーに関する質問は、GitHub で
privacy ラベルを付けて Issue を作成してください。
ライセンス
MIT
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。