先に結論
- 2026 年の AI Agent 技術スタックは「GPT / Gemini / Claude のどちらが強いか」で選ばない。ツール契約をモデル横断で再利用できるかで選ぶ。
- JSON Schema が真のベンダー横断契約であり、関数呼び出しは各モデルが呼び出しを出すときの口音にすぎない。
- MCP はその Schema を発見可能な
tools/listと実行可能なtools/callに変える。MCP がなければ Schema は文書のままである。 - GPT、Gemini、Claude は Host 側の推論エンジンとして置き換え可能だ。MCP Server、バリデータ、worktree は蓋を閉じないマシンで動かす。
- まず Schema を凍結し、次に MCP を繋ぎ、最後にモデルを替える。逆順にすると 3 つの tools 定義が永遠に揃わない。
モデル能力は分水嶺ではない。分水嶺は JSON Schema + Function Calling + MCP からなるツール契約である。
0. 先に結論
2026 年の AI Agent 技術スタックを組むなら、この一文で固定してよい。GPT、Gemini、Claude は入れ替え可能な推論層である。納品できるかどうかは、関数呼び出しが吐く引数が同一の JSON Schema を通るか、そしてその Schema が安定した MCP Server として公開されているかにかかっている。先にモデルを決め、後からツールを足す順序は、この 2 年で最も高い失敗だった。
1. 問題が残る理由:モデル先行が失敗する理由
チケットに多いのは「最新の GPT / Claude / Gemini に上げたのに Agent が仕事をしない」という文面だ。ボトルネックはモデルの賢さではなく、ツール定義が 3 系統で別々に書かれていることだ。OpenAI の tools、Gemini の functionDeclarations、Claude の tools / tool_use、さらに MCP の inputSchema。見た目はどれも関数呼び出しだが、実行時は互いに漂流する 4 つの契約である。
旧来のやり方は具体的に壊れる。Prompt をワークフローにし、モデルを OS にし、MCP を「もう一つのプラグイン」にする。チャットは滑らかだが、tools/call がパス・列挙・必須フィールドに触れた瞬間に 400 になる。チームは「どのモデルが素直か」を議論し、Schema の diff を取らない。賢いモデルは契約の分裂を治せない。
- Host は IDE にあり、MCP Server はノート PC にある。蓋を閉じると関数呼び出しは空回りする。
- 同じツールが GPT 側では
repoPath、Claude 側ではrepo_path。JSON Schema に単一の真実がない。 - Gemini の関数宣言から
additionalProperties: falseが抜け、モデルがフィールドを発明し始める。 - MCP の
tools/listが返す Schema と本番バリデータの git SHA が一致しない。
正しい切り分けは「推論できるか」と「安全に実行できるか」を分けることだ。推論は GPT、Gemini、Claude を回してよい。実行は同一の JSON Schema と常駐の MCP プロセス 1 つに載せる。マシン選定は MCP Server の配置:クラウドMac vs VPS vs ローカル を参照。
2. 五層分類:モデル、関数呼び出し、JSON Schema、MCP、Host
これらの語を百科事典のように横並びにしない。2026 年に動く Agent スタックは五層しかない。一層欠けると、別の層が埋め合わせたつもりになって本番で折れる。
2.1 推論層:GPT / Gemini / Claude
GPT(OpenAI)、Gemini(Google)、Claude(Anthropic)の仕事は、文脈を読み、ツールを呼ぶかを決め、Schema に合う引数を出し、結果を次ターンに折り込むことだ。ファイルシステムでも Git でもない。遅延、コンテキスト窓、価格、安全ポリシーで選ぶ。どれが OS に見えるかでは選ばない。 公式入口:OpenAI Function Calling、Gemini function calling、Claude tool use。
2.2 関数呼び出し:モデルの口音であり、バスではない
関数呼び出しは「どの関数を、どの引数で」とモデルが述べるプロトコルである。GPT は tool_calls、Claude は tool_use ブロック、Gemini は functionCall。口音は違うが意味は同じで、Schema に拘束された構造化呼び出しだ。3 社それぞれに handler を書くと四半期で分岐する。口音の適応は薄い翻訳層に残し、業務ロジックは正規化済み JSON だけを見る。
2.3 JSON Schema:ベンダー横断の契約
JSON Schema は型、必須、列挙、範囲、additionalProperties を記述する。OpenAI の parameters、Claude の input_schema、MCP の inputSchema は本質的に同一ファイルの投影であるべきだ。契約は git に入れ、合法/違法ペイロードでバリデータを叩く。Prompt で「フォーマットを守って」と頼まない。
2.4 MCP:契約を発見可能かつ実行可能にする
Model Context Protocol は Host が tools/list と tools/call をどう行うかを定める。ディスク、秘密、ネットワークに触るのは MCP Server プロセスだ。Cursor / Claude Code / 自前オーケストレータはどれも MCP Client にすぎない。MCP がなければ Schema は文書で止まる。MCP があっても蓋を閉じるノート上なら、関数呼び出しは夜間に一斉死する。Cursor 側は Cursor MCP。
2.5 Host:入口であり、能力そのものではない
Host は人がクリックする場所——IDE、CLI Agent、チャットアプリ——である。入口は体験を決め、実行可否は決めない。Claude Code を Host、GPT を予備モデルにするのは妥当だ。同じ MCP と同じ Schema を叩く限り。並列 worktree では Host をリポジトリと同機に置く。リモート Mac + worktree の短期レンタル。
3. GPT vs Gemini vs Claude vs MCP:五次元の対照
全行で表頭は同じ。MCP は第 4 のモデルではない。発見と実行の層だ。同じ表に載せるのは「モデルでバスを代用する」のを止めるためである。
| 層/選択肢 | 入口 | 実行 | コンテキスト | コスト | 権限境界 |
|---|---|---|---|---|---|
| GPT 関数呼び出し | API / ChatGPT / 対応 IDE | tool_calls を生成。ディスクには触れない | 会話 + messages に入れた材料 | token 課金。ツールループで請求が膨らむ | 秘密はバックエンド。モデルは引数と要約だけ |
| Gemini function calling | Gemini API / Studio / Vertex | functionCall を生成。実行はこちら | マルチモーダル文脈は強い。フィールドは Schema で抑える | token / プロジェクト枠 | GCP IAM + ツールのサンドボックス |
| Claude tool use | API / Claude Code / Console | tool_use を生成。CLI Host は続けて shell を走らせ得る | 長いコードセッションに強い。ファイルシステムではない | token。Agent ループも同様に金がかかる | ツール許可リスト + 人の確認。MCP 側でもう一層 |
| JSON Schema | バリデータ / codegen / 単一ソース | 不正呼び出しを拒否。業務は実行しない | なし。契約であり記憶ではない | ほぼゼロ(テストコスト) | 危険なフィールドを契約から消す方が長い Prompt より効く |
| MCP Server | stdio / SSE / リモート Host | Git、HTTP、DB、ファイルを実際に実行 | リポジトリ、秘密、マシン状態 | 常駐マシン(クラウドMac / VPS) | プロセスユーザー、パス許可リスト、送信出口 |
表の非対称な結論を覚える。3 社のモデルは推論と口音で競い、MCP は実行境界で競う。 「Claude に替える」では「蓋を閉じたノート上の MCP」は直らない。「MCP を入れる」だけでは合法 JSON は自動生成されない。Schema テストが要る。
4. シナリオの選び方
入口と実行の必要性で組み合わせを選ぶ。ベンチマーク順位でモデルを選ばない。
| 層/選択肢 | 入口 | 実行 | コンテキスト | コスト | 権限境界 |
|---|---|---|---|---|---|
| 個人 PoC、今週デモ | ローカル IDE + 1 モデル | stdio MCP、1〜2 tools | 単一リポジトリ | API 請求が主 | ローカルユーザー権限。本番秘密は繋がない |
| 小チームの日次出荷 | Claude Code または Cursor を Host | MCP Git + テスト runner | 複数 worktree | クラウドMac を日貸しで受入、その後月額 | ツール許可リスト。Agent の本番 DB 直結は禁止 |
| GPT / Gemini / Claude を切り替えたい | 自前オーケストレーション + 統一 tool gateway | 同一 Schema を 3 社の関数呼び出しへ投影 | 共有 MCP | 翻訳層 1 つで tools の三分裂を避ける | ゲートウェイ認証。モデルは生の秘密を見ない |
| iOS / Xcode / 署名 | Mac 上の CLI Agent | 同機 MCP + xcodebuild | 証明書、DerivedData、シミュレータ | 専有 M4 の方が「Linux MCP + 別 Mac」より安い | キーチェーンと署名は Mac に残す |
| 7×24 当番 Agent | リモート Host + 常駐 MCP | launchd / compose で生存 | 夜間ジョブ、webhook | 蓋を閉じたノート=隠れた障害 | 送信ファイアウォール + 監査ログ |
5. 推奨スタック
重ねてよい。下の 3 セットはいずれも git 上の JSON Schema 単一ソースから、各社の関数呼び出し宣言と MCP inputSchema を生成する。
組み合わせ A|個人:Cursor または Claude Code(Host) → 単一モデル(まず Claude または GPT。後で交換可) → ローカル stdio MCP(Git 読み取り専用) → Schema ファイル + バリデーションテスト 蓋を閉じると止まる。昼間の PoC 専用。 組み合わせ B|出荷チーム(推奨):CLI Agent を Host → GPT / Claude を同一 gateway で切替 → クラウドMac 上の MCP Git Server + テストツール → Schema 単一ソース → OpenAI tools / Claude input_schema / MCP inputSchema を生成 → 48h 日貸し:ノートの蓋を閉じ、tools/call がまだ成功することを確認 組み合わせ C|マルチモデルゲートウェイ:自前 orchestrator → Gemini をマルチモーダル入口、Claude/GPT をコードのツールループ → すべての functionCall / tool_use を JSON Schema 検証してから MCP tools/call → MCP はリポジトリと同機。モデル API は公開インターネット
コード側の最小契約例(OpenAI parameters、Claude input_schema、MCP inputSchema へ投影するときフィールド名は一致させる):
{
"name": "git_status",
"description": "Return git status for a worktree path",
"parameters": {
"type": "object",
"properties": {
"repo_path": { "type": "string", "minLength": 1 },
"porcelain": { "type": "boolean", "default": true }
},
"required": ["repo_path"],
"additionalProperties": false
}
}
6. よくある落とし穴
- 落とし穴 1:先に GPT か Claude かを決め、後からツールを足す。順序が逆だと 3 つの tools が永久に分岐する。
- 落とし穴 2:MCP を第 4 のモデルと扱う。MCP は推論しない。実行する。Schema のない MCP は型なし RPC にすぎない。
- 落とし穴 3:Prompt で JSON Schema を代用する。
additionalProperties: falseの方が「フィールドを捏造しないで」より効く。 - 落とし穴 4:関数呼び出しの成功を業務成功とみなす。モデルは合法 JSON で誤ったディレクトリを消せる。許可リストは MCP プロセスにあり、モデルにはない。
- 落とし穴 5:ローカル stdio が通った時点で本番とみなす。蓋閉じ、Wi‑Fi 切替、同僚が同じ MCP デプロイを再利用できないことが 7×24 の天敵である。
7. 実装手順(7 ステップ)
- Agent が本当に実行すべき動作を 3 つ列挙する(例:git status、テスト実行、issue 読み)。初日に 20 個の MCP tools を繋がない。
- 動作ごとに JSON Schema を 1 つ書き、git に入れる。合法/違法 fixture テストを足す。
- MCP Server を実装し、
inputSchemaは上記ファイルを直接参照する。手コピーしない。 - ベンダー適応層を 1 枚置く。同一 Schema を OpenAI tools、Gemini functionDeclarations、Claude input_schema へ投影する。
- Host を 1 つ(Cursor または Claude Code)で
tools/list→ 関数呼び出し →tools/call→ 結果の折り込みまで通す。 - MCP を蓋が閉じないマシン(クラウドMac または VPS)へ移す。ノートには Host だけ残す。8 時間蓋を閉じて再測する。
- 2 社目のモデルは翻訳層だけに接続する。tools ファイルを複製しない。同じ fixture で回帰する。スキル化は Agent Skills 2026 ガイド。
8. FAQ
関数呼び出しと MCP は同じものか?
違う。関数呼び出しはモデルが「ツールを使いたい」と述べる方法であり、MCP は Host がツールを発見し実行する方法である。MCP なしでも handler は書ける。関数呼び出しがなければ、モデルは自然言語を出すだけで、あなたがコマンドをコピーすることになる。
JSON Schema はどこまで厳しく書くべきか?
少なくとも型、required、enum、および additionalProperties: false をカバーする。パス系フィールドは .. を拒否する。厳しすぎると適応コストが増え、緩すぎると安全検査が Prompt に押し戻され、必ず漏れる。
GPT、Gemini、Claude はどう分担すべきか?
入口とモーダリティで分ける。Gemini は画像/動画入口、Claude は長いコードセッション、GPT は既存 OpenAI ゲートウェイがあるチーム向き。分担は Host のルーティングで行い、3 つの別 MCP Server としては行わない。
Chat Completions だけで MCP を使わなくてよいか?
単一アプリ・単一モデルならよい。2 社目のモデルや 2 つ目の Host(IDE + CLI)が出た瞬間、自前 handler が N セットに複製される。MCP の価値はツールプロセスを一度だけデプロイすることである。
なぜこのスタックをクラウドMac に載せるのか?
ツールチェーンに Xcode、キーチェーン、iOS シミュレータが含まれるなら、MCP と Agent は同機かつ常駐でなければならない。純粋な Git/HTTP なら Linux VPS で足りる。Apple 納品で MCP を Linux、ビルドを別 Mac に分けると、パスがもう一度割れる。
9. まとめ
2026 年の AI Agent 技術スタックは「最強モデルを 1 つ選ぶ」ことではない。1 つの JSON Schema、1 層の関数呼び出し適応、1 つの MCP Server、入れ替え可能な GPT/Gemini/Claude 推論層である。誰が強いかは変わる。契約と実行境界は毎週書き直さない。
実装順は固定する。Schema → MCP → Host 1 つで貫通 → モデル交換。マシン順も固定する。PoC はローカル、納品はクラウドMac または VPS。ベンチマークは見てよいが、契約テストの代わりにしてはならない。