MCPツールの戻り値を文章だけにしない — outputSchemaに学ぶ検証可能なエージェント設計

AIエージェントのツールが「検索結果はこれです」と文章を返すだけでは、次の処理で値を取り違えても気づきにくくなります。MCPの2025-11-25仕様には、戻り値の形を宣言するoutputSchemaと、構造化データを返すstructuredContentがあります。これは単なるJSON化ではなく、エージェントの判断を検証可能な契約に変える仕組みです。

文章だけの戻り値は、次工程で曖昧になる

たとえば天気ツールが「気温は22.5度、湿度は65%です」と返した場合、人には読めても、後続処理は数値・単位・項目名を文章から再解釈しなければなりません。表現が少し変わるだけで、抽出ロジックやAIの理解が揺れます。

MCP仕様では、ツール結果は従来のcontentに加えて、JSONオブジェクトをstructuredContentとして返せます。さらにoutputSchemaを定義すると、返却すべき項目・型・必須条件を事前に示せます。サーバーはそのスキーマに適合する結果を返す必要があり、クライアント側にも検証が推奨されています。

outputSchemaがつくる3段階の防波堤

1. ツール側で壊れた出力を止める

気温が数値であるべきところに文字列が入った、必須の湿度が欠けた、といった異常をスキーマ検証で検出できます。AIへ渡してから推測で補わせるのではなく、境界で止める設計です。

2. エージェントの再解釈を減らす

temperatureconditionshumidityのように項目が明示されれば、エージェントは自然文を分解し直す必要がありません。MCP仕様は、出力スキーマが型情報の提供、厳密な検証、クライアントやLLMによる解析の支援につながると説明しています。

3. 後続システムへ安全に渡す

構造が固定されていれば、集計、条件判定、別ツールへの入力を通常のプログラムで扱えます。AIの柔軟さと、決定論的なソフトウェアの厳密さを分担できます。

エラーにも「直せる情報」を返す

MCPはエラーを、リクエスト構造そのものが不正な「プロトコルエラー」と、日付や値の範囲など実行条件に問題がある「ツール実行エラー」に分けています。後者はisError: trueと、修正に使える説明を結果として返せます。クライアントがその情報をモデルへ渡せば、エージェントは引数を直して再試行できます。

「失敗しました」だけでは復旧できません。「出発日は未来の日付で指定してください」のように、次の一手が分かるエラーを返すことが重要です。

大量データは一度に返さない

構造化しても、全件を一度に返せばコンテキストを圧迫します。MCPのページネーション仕様は、一覧を小さなまとまりに分け、nextCursorで続きを取得する方式を定めています。ページサイズはサーバー側が決め、クライアントは固定値を前提にしてはいけません。

実装では、次の順番が堅実です。

  • 通常は必要最小限の項目だけ返す
  • 一覧はページネーションする
  • 詳細は別の取得操作に分ける
  • スキーマ検証に失敗した結果はAIへ渡さない

考察:AI時代のAPI契約は「意味」まで含む

従来のAPI設計では、HTTP 200でJSONが返れば成功と見なしがちでした。しかしAIエージェントでは、そのJSONを次の判断材料として使います。項目名が曖昧、型が揺れる、エラーに修正方法がない――こうした小さな不備が、数ステップ後の誤操作へつながります。

車載システムで信号の型・範囲・異常時動作をインターフェースとして決めるのと同じです。モデルの賢さで吸収するのではなく、ツール境界で正常系と異常系を定義する。これが、エージェントを長い工程で安定させる近道だと考えます。

まとめ

  • structuredContentで結果を機械処理しやすくする
  • outputSchemaで項目・型・必須条件を契約にする
  • 修正可能なエラー情報を返し、再試行につなげる
  • 大量結果はページネーションし、コンテキストを守る

AIエージェントの信頼性は、モデルだけで決まりません。ツールの戻り値を「読める文章」から「検証できる契約」へ変えることが、地味ですが効く設計改善です。

出典