Claude Media
MCP outputSchemaがdraft-07で拒否される原因と対処法

MCP outputSchemaがdraft-07で拒否される原因と対処法

draft-07のoutputSchemaを宣言したMCPサーバーが、Claude Codeで接続前に拒否される「unsupported dialect」エラーの原因とサーフェスごとの現状をまとめます。

outputSchemaにJSON Schema draft-07を宣言しているMCPサーバーのツールが、サーバーへ何も届かないまま「unsupported dialect」エラーで丸ごと使えなくなる不具合が報告されています。原因はサーバー側の設定ミスではなく、MCP TypeScript SDKが既定で出力するdraft-07の$schemaを、クライアント側の検証器が受け付けないことです。サーフェス(CLI・デスクトップ・Cowork)によって再現するかどうかが分かれるため、環境ごとの違いと、試しても直らない対処・今から試せる対処を切り分けます。

「unsupported dialect」エラーの正体

該当のツールを呼び出そうとすると、サーバーへのリクエストが一切送られないまま次のエラーで失敗します。

Tool 'count' has an invalid outputSchema: JSON Schema declares an unsupported dialect
("$schema": "http://json-schema.org/draft-07/schema#"). The default validator supports
JSON Schema 2020-12 only; pass a pre-configured Ajv instance to AjvJs

ポイントは「サーバーへのリクエストが送られる前に失敗する」という部分です。GitHub Issue #86142の報告によれば、サーバーのログにはtools/callの受信履歴が一切残りません。outputSchemaを宣言していない同じサーバーの他のツールは正常に動くため、犯人がoutputSchema$schema宣言であることは切り分けやすい部類のバグです。

エラーメッセージの末尾にある「pass a pre-configured Ajv instance to AjvJs」は、JSON SchemaのバリデータライブラリAjvが返す定型文です。クライアント側がdraft-07用のAjvインスタンスを持たないまま、outputSchema$schemaをチェックしている実装であることを示しています。

draft-07がなぜ既定になるのか

Issueのコメントでは、draft-07はMongoDBなど個別サーバーの選択ではなく、MCP TypeScript SDK(@modelcontextprotocol/sdk)がoutputSchemaをZodのスキーマから生成する際の既定の方言だと指摘されています。SDK内部の変換関数は、targetが明示的に渡されなければ'draft-7'にフォールバックする実装になっており、registerTool経由でこのtargetを上書きする手段は用意されていません。

そのためこの不具合は、MCP TypeScript SDK上にZod v4でoutputSchemaを実装したすべてのサーバーに及ぶ可能性があります。サーバー作者が個別にバージョンを更新しても直らないのはこのためです。実際、Issueの検証スクリプトでは、問題が起きる前のバージョンと起きた後のバージョンで、サーバーが返すスキーマの$schemaが一字一句同一であることが確認されています。クライアント側の検証ロジックが変わったのであって、サーバー側のペイロードは変わっていません。

影響が報告されているMCPサーバーの例

Issue #86142には、複数の独立した利用者から次のサーバーでの再現報告が寄せられています。

  • mongodb-mcp-server(最初の報告。1.14.0〜2.1.0のどのバージョンでも発生)
  • mssql-mcp-node(6ツールすべてが同時に使用不能に)
  • n8nのインスタンスレベルMCPサーバー(33ツール全滅の報告あり。n8nのMCPサーバー活用自体はn8nのMCP Server Triggerも参照してください)
  • Anthropic公式のリファレンス実装@modelcontextprotocol/server-filesystem
  • Perplexityの公式MCPサーバー(@perplexity-ai/mcp-server)
  • Obsidian Local REST APIのMCPサーバー
  • Cypress CloudのMCPコネクタ

いずれもサーバー自体は仕様どおりに動作しており、draft-07を明示した$schemaはMCP仕様上も有効です。サーバー作者に責任を求められる性質のバグではない、というのがIssue内の共通認識になっています。

サーフェスによって挙動が分かれる

同じエラーでも、Claude Codeのどのサーフェスで使っているかによって再現するかどうかが変わります。Issue内の複数の報告を突き合わせると、次のような傾向が見えます。

サーフェス報告されている状態
Claude Desktopのエージェントモード(MCPツール呼び出し)報告されている状態拒否される報告が多数
Cowork(remote-devicesブリッジ経由のMCP)報告されている状態拒否される報告あり
Claude Desktopのプレイン チャット報告されている状態動作するという報告あり(ツール呼び出しを介さないため)
Claude Code CLI(claude -pなど)報告されている状態動作するという報告が複数ある一方、Windows上のCLI 2.1.235で再現したという報告も1件あり、条件を完全には特定できていません

この差が生まれる理由についても、Issue内でバイナリを解析したコメントがあります。それによると、Claude CodeのビルドにはMCP_SDK_GENERATIONという内部フラグで選択される2種類のスキーマ検証パスが同居しています。既定のv1$schemaの中身を見ずにそのままコンパイルする寛容な実装で、GrowthBookのフラグで有効化されるv22020-12の2エントリだけを許可リストとして持ち、それ以外を投入前に拒否する実装だと分析されています。Desktop/Coworkの多くの利用者がv2側に乗っている一方、CLIは既定でv1側に乗りやすいというのが、この解析の説明です。

試しても直らないもの

Issueの報告者たちが実際に試して効果がなかった対処が、いくつも記録されています。同じ手間を繰り返さないために、先に確認しておく価値があります。

  • サーバーの再起動・アプリの再起動: プロセスやツール一覧の再取得だけでは$schemaの値は変わらないため効果がありません
  • MCPサーバーのバージョン更新: mongodb-mcp-serverは1.14.0でも2.1.0でも同じdraft-07を返すため、更新しても解消しません
  • 古いサーバーバージョンへのピン留め: 同じ理由で無効です。draft-07を返さない「安全なバージョン」が用意されていないサーバーも複数あります
  • 接続の種類を変える: stdio・リモートHTTPのどちらの伝送方式でも同じエラーが再現しており、伝送方式は原因ではありません

今から試せる回避策

サーバー側を直せない性質のバグである以上、現状で確実に効く回避策はありません。試す価値がある選択肢は次のとおりです。

  • 可能ならClaude Code CLIから同じサーバーを呼び出してみる: 上の表のとおり、CLIでは動作したという報告が複数あります。ただし全ての環境で再現するとは限りません
  • claude --versionで自分のビルドを確認する: Issue内の検証では、同じ2.1.229のCLIバイナリでも、Desktopに組み込まれた場合とスタンドアロンで動かした場合とで結果が分かれています。バージョン番号だけでは判定材料になりません
  • アップデート後に再確認する: 公式CHANGELOGのv2.1.233からv2.1.278までをdialectAjv2020-12draftのキーワードで確認しましたが、該当する修正エントリは見当たりませんでした。今後のリリースで直る可能性はあるため、更新のたびに再テストする価値はあります
  • 自作のMCPサーバーであればtargetの明示を試す: MCP TypeScript SDK側でtarget: 'draft-2020-12'を渡せる経路があるかはSDKのバージョンに依存します。Issueの分析ではregisterTool経由でこの値を渡す手段は無いとされているため、確実な回避策としては扱えません

他の原因でMCPサーバーに接続できないケースの切り分けはMCPサーバーに接続できないときの切り分け手順にまとめてあります。今回のエラーは「接続はできるがツール呼び出しだけ失敗する」パターンで、その4層のうち最後の「ツール表示」より後ろで起きる点が切り分けの目印です。

公式ドキュメントとのギャップ

Claude Codeの公式ドキュメントには「Tools with invalid input schemas」という節があり、Claude CodeがMCPツールのinputSchemaをどう検証するかを説明しています。そこでは「$schemaを省略したスキーマと2020-12を明示したスキーマにだけ2020-12メタスキーマ適合チェックをかけ、それ以外の方言を明示したスキーマはこのチェックをスキップする」と明記されています。つまりinputSchema側は、draft-07を明示すれば検証自体が働かない設計です。

この公式説明はinputSchemaについてのものであり、outputSchemaの検証やその対応方言については記載がありません。今回のエラーが起きているのはこのoutputSchema側の検証で、inputSchemaの寛容な扱いとは異なる、別のコード経路がドキュメント化されないまま動いていることになります。MCPのツール定義まわりのJSON Schema対応が2026-07-28版の仕様改訂でどう広がったかは、MCPのツール定義がJSON Schema 2020-12の全機能に対応で扱っています。

似た名前のエラーとして、Claude Codeのclaude -p --json-schemaフラグが2020-12のスキーマを拒否する逆方向の不具合もIssue内で言及されています。これはClaudeの応答自体を検証する別の仕組みで、今回の話とは検証対象も原因も別物です。詳しくはClaude Code --json-schemaエラーの直し方にまとめています。

まとめ

draft-07のoutputSchemaを持つMCPサーバーのツールが、Claude Codeの一部サーフェスで接続前に拒否される不具合は、サーバー個別の設定ミスではなく、MCP TypeScript SDKの既定出力とクライアント側検証器の不一致が原因です。Issue #86142は2026-08-17に一度クローズされましたが、その後も複数の利用者が同じエラーを報告しており、再オープンを求める声が続いています。

再起動やサーバーの更新・バージョン固定では直らないことが複数の報告で確認済みです。今のところ、Claude Code CLIから同じサーバーを試す、更新のたびに再テストする、といった選択肢しか手元にありません。使っているMCPサーバーと自分の環境の組み合わせで実際に再現するかどうかを確認したうえで、当面はDesktop/Coworkのエージェントモードに依存しない構成を検討するのも一つの手です。

この記事を共有:XはてブLinkedIn