CLAUDE LABEN
MCP — 2026-07-28 仕様への対応が Claude 製品群で広がっています。双方向ステートフルなプロトコルからリクエスト・レスポンス型へ移り、MCP サーバーをサーバーレスやエッジに置けるようになりましたEXTENSIONS — 公式拡張が3種そろいました。サーバー側で UI を描く MCP Apps、非同期の長時間処理を扱う Tasks、IdP 経由で組織単位に払い出す Enterprise Managed Auth ですADOPTION — MCP の月間 SDK ダウンロードが4億を超え、年内で約4倍になりました。エージェントとアプリケーションを繋ぐ標準としての位置づけが固まりつつありますQUOTA — Claude Code 契約者向けの週次利用枠 50% 上乗せは本日8月19日が最終日です。長時間のエージェント実行を回すなら今日が最後の機会になりますPRICING — Claude Sonnet 5 の導入価格 100万トークンあたり入力2ドル・出力10ドルは8月31日で終了し、9月1日から入力3ドル・出力15ドルへ移ります。残り12日ですFIX — タイムアウトが固定されたサーバーに対し MCP v2 接続がサブスクリプションを際限なく張り直す不具合が修正され、ユーザー帰属のための forward_user_identity 設定も追加されましたMCP — 2026-07-28 仕様への対応が Claude 製品群で広がっています。双方向ステートフルなプロトコルからリクエスト・レスポンス型へ移り、MCP サーバーをサーバーレスやエッジに置けるようになりましたEXTENSIONS — 公式拡張が3種そろいました。サーバー側で UI を描く MCP Apps、非同期の長時間処理を扱う Tasks、IdP 経由で組織単位に払い出す Enterprise Managed Auth ですADOPTION — MCP の月間 SDK ダウンロードが4億を超え、年内で約4倍になりました。エージェントとアプリケーションを繋ぐ標準としての位置づけが固まりつつありますQUOTA — Claude Code 契約者向けの週次利用枠 50% 上乗せは本日8月19日が最終日です。長時間のエージェント実行を回すなら今日が最後の機会になりますPRICING — Claude Sonnet 5 の導入価格 100万トークンあたり入力2ドル・出力10ドルは8月31日で終了し、9月1日から入力3ドル・出力15ドルへ移ります。残り12日ですFIX — タイムアウトが固定されたサーバーに対し MCP v2 接続がサブスクリプションを際限なく張り直す不具合が修正され、ユーザー帰属のための forward_user_identity 設定も追加されました
記事一覧/API & SDK
API & SDK/2026-05-20上級

Claude Agent SDK で複数 MCP サーバを束ねるときのツール名衝突 — 名前空間と動的調停の設計

GitHub MCP と Linear MCP の create_issue が同居したとき、Sonnet 4.6 はどちらを呼ぶか分かりません。複数 MCP を束ねる Claude Agent SDK アプリで踏むツール名衝突の構造、TypeScript で書ける Reconciler の実装、そして本記事に最初に載せた schemaHash が5種類のスキーマ変更を全て見逃していた実測と訂正までをまとめます。

Claude Agent SDK13MCP51TypeScript24本番運用36名前空間2

プレミアム記事

GitHub MCP と Linear MCP を同じ Claude Agent SDK アプリに束ねた日、Sonnet 4.6 が「Linear のチケットを起票してください」というユーザー指示を受けて、迷わず GitHub Issues 側にチケットを作りました。両方の MCP サーバが create_issue という同じ名前のツールを公開しており、後から登録された GitHub MCP のスキーマで上書きされていたためです。原因が分かったのは、SDK のデバッグログにツール一覧をダンプしてからでした。

REST API を自前で束ねていた頃は、エンドポイントの URL が違えば呼び分けは自動的に決まっていました。MCP ではその手がかりが消え、モデルに渡るのはツール名と説明文だけになります。同じ意味の動詞が別々のサーバで重なる頻度は、体感でかなり上がりました。

今回は、その衝突を防ぐ名前空間の設計と、TypeScript で書ける動的調停(Reconciler)の実装を整理します。あわせて、この記事に最初に載せた schemaHash の実装が壊れていたことに後から気づいたので、サンドボックスでの実測とともに訂正します。

ツール名衝突が起きる構造を分解する

Claude Agent SDK は MCP サーバから取得したツール一覧をそのまま tools 配列に渡すだけで、衝突検出を呼び出し側に委ねています。Anthropic Messages API のスキーマでは、tools 配列の name フィールドは「英数字とアンダースコア、ハイフン」しか許されておらず、同名のエントリが 2 つあったときに後勝ちになるか先勝ちになるかは実装次第です。SDK のソースを読むと、Map に詰め直す箇所で後勝ちになる実装が多く、結果として「先に登録したサーバのツールが静かに消える」という挙動になります。

モデル側から見れば、ツールは「name」「description」「input_schema」の 3 点でしか区別できません。同じ name の 2 つのツールが渡されていても、API リクエストの段階で 1 つに畳まれてしまうため、モデルには差異が伝わりません。description だけ違って name が同じ場合、モデルは「片方の description しか見ていない」状態でツールを選びます。これが先ほど GitHub に Linear のチケットが作られた事故の根本原因でした。

衝突の典型例は次のような並びです。

動詞候補となる MCP サーバ
create_issueGitHub MCP / Linear MCP / Jira MCP
searchNotion MCP / Slack MCP / Web Search MCP
uploadS3 MCP / Cloudflare R2 MCP / Stripe Files MCP
send_messageSlack MCP / Discord MCP / SendGrid MCP

私の手元でも、これらのうち 3 種類以上が同居するセッションは日常的に発生します。AdMob レポートを Slack に通知しつつ、GitHub に修正 PR を立て、Linear のチケットを閉じる。この程度の素朴なシナリオが、すでにツール衝突の温床です。

名前空間の付け方を 3 つの方式で比較する

衝突を解く方法はいくつかありますが、私が試したうえで本番に残したのは「サーバ識別子をプレフィックスとして付ける」アプローチです。検討した 3 案を比較します。

第 1 案は ドット表記 です。github.create_issue のようにドットで区切ると人間には読みやすい一方、Anthropic Messages API の name フィールドはドットを許容しないため、そのままでは 400 を返します。エスケープや代替文字へ変換する処理を挟むことになり、bidirectional に元の名前へ戻すマッピングが必要になります。

第 2 案は スラッシュ表記 ですが、これも name フィールドの制約で使えません。第 1 案と同じ問題に行き着きます。

第 3 案が 二重アンダースコア区切り です。github__create_issue / linear__create_issue のように、サーバ識別子と元のツール名を __ で繋ぎます。仕様で許される文字だけで構成され、モデルから見たときも「github 側の create_issue」「linear 側の create_issue」と読み下せます。私が Sonnet 4.6 と Haiku 4.5 で同じプロンプトを 50 回ずつ動かして比較したところ、二重アンダースコア方式が最も誤呼び出し率が低く、gh_ のような短縮プレフィックスより 7% ほど安定しました。短いプレフィックスは「gh」と「ghp」など別の意味と取り違えるリスクがあり、説明文に頼ることになるため、推奨しません。

実運用では、サーバ識別子をプレフィックスに使う際に次のルールを敷きました。

  1. プレフィックスは英小文字のみ。3〜10 文字に収めまする
  2. 元のツール名は変更しません。プレフィックスを足すだけにします
  3. 衝突がなければプレフィックスを付けません。衝突したときだけ、そのツール名を持つ全エントリにプレフィックスを足します

3 番目が重要で、無条件にすべてのツール名を書き換えるとモデルが学習している慣用名(web_search 等)を変えてしまい、ツール選択精度が落ちます。衝突したサーバ群だけをスコープにプレフィックスを付けるのが、最もモデルに優しい設計です。

実は計測のセットアップ自体にも一工夫が必要でした。プロンプトを 50 回流すだけでは温度設定でゆらぐ結果が混ざるので、temperature: 0.0 で固定し、同じシステムプロンプトと同じユーザー指示を 50 回投げて誤呼び出し率を見ました。さらに、AdMob 関連の MCP 4 つ・GitHub 系 2 つ・Slack 系 1 つの計 7 サーバを束ねた状態で計測しないと、本番に近い「ツール 60 個前後」の負荷で何が起きるか見えません。本番の数字は手元の小規模実験よりも常に悪化方向にずれるので、計測条件は本番にできるだけ寄せておくのが結局のところ役に立ちます。

ここまでお読みいただきありがとうございます。

この記事の続きを読む

この先には、実装コードやベンチマーク結果など、実務でお役に立てる内容をご用意しています。このサイトは広告を掲載しておらず、サーバーや開発にかかる費用はメンバーの皆様のご支援で成り立っています。もしお役に立てていましたら、ご支援いただけますと大変ありがたいです。

この記事で得られること
GitHub MCP と Linear MCP の create_issue が衝突したときに Sonnet 4.6 が誤呼び出しを起こす実例と、原因が name か description のどちらに偏るかの観測結果
ツール名を二重アンダースコアで前置する Reconciler の TypeScript 実装と、双方向 alias map で元の MCP に呼び出しを逆引きするコード
本記事に最初に載せた schemaHash が JSON.stringify の replacer を誤用しており、型変更・プロパティ追加・改名など5種類のスキーマ差分を5件中5件見逃していた実測と、再帰的な正規化による修正版の実装
Stripe による安全な決済 · いつでもキャンセル可能

この記事を購入する

この先の内容をすべてお読みいただけます。一度のご購入で、いつでも何度でもアクセスできます。このサイトは広告を掲載しておらず、皆さまのご支援がサーバー費用などの運営を支えています。

または
メンバーシップなら全記事が読み放題 →
シェア

お読みいただきありがとうございます

Claude Lab は広告なしで運営しており、サーバー費用などの運営コストはメンバーシップのご支援で賄っています。実装コード・ベンチマーク・本番設計パターンなど、実務でお役立ていただける記事を毎日更新しています。もし読んでよかったと感じていただけましたら、ぜひご覧ください。

  • コピー&ペーストで使える実装コード付き
  • 毎日新しい上級ガイドを追加
  • ¥580/月 または ¥1,480 の永久アクセス
メンバーシップを見る →

関連記事

API & SDK2026-07-08
MCP コネクタを申請・無人運用に回す前に、各ツールを契約テストで確かめる
手元で動いた MCP コネクタをそのまま無人ジョブに繋ぐと、応答形状の誤読や書き込みの二重発火で静かに壊れます。ツール記述・応答契約・冪等性・レイテンシを機械検証する小さなハーネスの作り方を、実測値とともにまとめました。
API & SDK2026-07-01
Claude API のドキュメント抽出が「自信満々に間違える」とき — 沈黙する誤りを不変条件で捕まえる運用メモ
請求書や契約書の構造化抽出で一番怖いのは、クラッシュではなく「スキーマも通り信頼度も高いのに値だけ間違っている」沈黙の誤りです。不変条件・二段抽出・フィールド単位の誤り率で運用する実装メモを共有します。
API & SDK2026-06-25
前の実行が終わらないうちに次が走り出すとき — リースとフェンシングトークンで定期エージェントの多重起動を抑える
毎朝の定期実行が前回の処理を追い越して二重に走り出す問題を、リースとフェンシングトークンで抑える設計を解説します。素朴なロックが破れる瞬間の分析から、任意ストア上の最小リース実装、副作用直前のトークン検証、上限付きキャッチアップまで、運用で固めた既定値とともに実装コード付きで整理しました。
📚RECOMMENDED BOOKS
大規模言語モデル入門
山田育矢
LLM開発
生成AIプロンプトエンジニアリング入門
我妻幸長
プロンプト
Claude CodeによるAI駆動開発入門
平川知秀
AI駆動開発
※ アフィリエイトリンクを含みます
もっと見る →