API × MCP 連携設計

API × MCP連携設計ガイド:LLM統合の負債を防ぐ標準化アプローチ

この記事は急速に進化する技術について解説しています。最新情報は公式ドキュメントをご確認ください。

約12分で読めます
文字サイズ:
API × MCP連携設計ガイド:LLM統合の負債を防ぐ標準化アプローチ
目次

この記事の要点

  • 既存APIとAIエージェントの安全かつ効率的な連携手法
  • 技術的負債を解消し、開発・保守コストを削減するMCP設計
  • AI連携におけるセキュリティ、ガバナンス、コンプライアンスの確保

社内システムのAI活用を推進する中で、多くの開発現場が直面する深刻な課題があります。それは「AI連携の負債」とも呼ぶべき、乱立するAPI接続コードの問題です。

LLM(大規模言語モデル)に社内データベースを検索させたり、カレンダーに予定を登録させたりするために、ツールごとに個別の接続コードやアドホックなプロンプトを書いていないでしょうか。初期のPoC(概念実証)段階では機能しても、連携するシステムや利用するAIモデルが増えるにつれて、保守性は著しく低下し、拡張は困難になります。

この課題を解決するための鍵となるのが、AIモデルと外部ツール間の通信を標準化する「Model Context Protocol(MCP)」的な設計思想への移行です。本記事では、単にAPIを繋ぐだけでなく、既存のレガシーAPIを「AIフレンドリー」に再設計し、将来的な拡張性とセキュリティを担保するための標準化設計プロセスをステップバイステップで解説します。

なぜ今、独自のAPI連携を「標準化」へ移行すべきなのか

AIエージェントの能力を最大化するためには、外部システムとのスムーズな連携が不可欠です。しかし、連携手法の選択を誤ると、システム全体に大きな技術的負債を抱え込むことになります。

アドホックな開発が招く『AI連携の負債』とは

多くのプロジェクトでは、LLMと社内APIを連携させる際、プロンプト内にAPIの仕様を直接書き込み、LLMが生成したテキストを正規表現などでパースしてAPIに渡すという手法がとられがちです。しかし、このアドホックなアプローチには以下のような致命的な欠点があります。

  1. 保守性の欠如:APIのエンドポイントや引数が変更されるたびに、LLMのシステムプロンプトと接続用のグルーコード(糊付けコード)の両方を修正する必要があります。
  2. エラーの頻発:LLMの出力フォーマットが少しでも揺らぐと、API呼び出しが失敗します。JSON形式での出力を指示しても、余計な説明文が含まれることでパースエラーになるケースは珍しくありません。
  3. 再利用性の低さ:特定のLLMや特定のユースケースに強く依存したコードになりがちで、他のプロジェクトへの横展開が困難です。

インターフェース共通化の価値:接続性と保守性の両立

この負債を解消するためのアプローチが、インターフェースの共通化です。具体的には、Anthropicの公式ドキュメントで推奨されている「Messages APIのtools機能(tool use)」と、OpenAPI Schemaに準拠したツール定義を活用する標準化手法です。

この標準化されたプロトコル的アプローチ(MCP的アプローチ)を採用することで、LLMは「どのような機能が利用可能か」「どのような形式でデータを渡すべきか」を正確に理解できるようになります。開発者はLLMの気まぐれな出力に悩まされることなく、厳密に定義されたJSON Schemaに基づいてAPI連携を構築できるため、接続の安定性とコードの保守性が飛躍的に向上します。

連携設計を始める前の準備:ツールと環境のセットアップ

実践的な設計に入る前に、強固な土台となる開発環境と既存システムの整理を行う必要があります。

必要なツール:公式SDK(TypeScript/Python)と開発環境

標準化されたツール連携を実装するために、まずは公式提供されているSDKを導入します。Anthropic環境であれば、公式のPython SDK(anthropic-python)またはTypeScript SDK(anthropic-sdk)を使用するのがベストプラクティスです。

これらの公式SDKには、Messages APIを通じてtools(ツール機能)を呼び出すためのインターフェースが組み込まれており、型安全な開発をサポートします。また、ツールサーバー自体は自前で実装するか、LangChainなどのフレームワークを活用して構築することになります。

既存APIの仕様確認:認証方式とエンドポイントの整理

次に、連携対象となる既存の社内APIの仕様を洗い出します。人間向け、あるいは従来のシステム間連携向けに作られたAPIは、必ずしもAIが使いやすい設計になっているとは限りません。

特に確認すべきは「認証方式」です。OAuth 2.0やAPI Keyなど、APIごとに異なる認証メカニズムが存在します。AIエージェントが自律的にAPIを呼び出す際、これらの認証情報をどのように安全に保持し、リクエストに付与するかを事前に設計しておく必要があります。環境変数やシークレットマネージャーを利用し、LLM自体には決して生のクレデンシャルを渡さないアーキテクチャを構築することが重要です。

ステップ1:機能とデータ(ツールとリソース)のマッピング設計

連携設計を始める前の準備:ツールと環境のセットアップ - Section Image

標準化設計の核心は、既存のAPI群をLLMが理解しやすい形にマッピングし直す作業です。

LLMに『見せるデータ』と『実行させるアクション』の切り分け

API連携を設計する際、まずは機能を「読み取り専用のデータ取得」と「状態を変更する操作」に明確に分離します。

  • データ取得(リソース的役割):社内規定の検索、顧客情報の照会、ログの取得など、システムの状態を変更しない安全な操作です。これらはLLMにコンテキスト(前提知識)を提供するために使用されます。
  • 操作実行(ツール的役割):チケットの作成、メールの送信、データベースの更新など、システムの状態を変更する操作です。これらには厳密な権限管理と実行確認が求められます。

この分離を行うことで、「AIが勝手にデータを書き換えてしまう」というリスクを論理的に切り離すことができます。

tools(JSON Schema定義)とmessagesの役割分担

Anthropicのtool use機能において、標準的な概念となるのが「tools(関数定義)」と「messages」です。

APIの機能は、JSON Schemaを用いて厳密なtoolsとして定義します。ここでは、関数名、説明文(Description)、必要な引数の型と制約を記述します。一方、messages(システムプロンプトやユーザーとの対話履歴)は、LLMに「どのような状況でどのツールを使うべきか」という推論のガイドラインを与えるために使用します。

コンテキストとしてLLMに渡すデータ量も重要です。APIのレスポンスが巨大なJSONデータである場合、そのままLLMに渡すとトークン制限を超過したり、注意力が散漫になったりする可能性があります。必要な情報だけを抽出・要約してLLMに返す「ブリッジ層」の設計が、AIエージェントのパフォーマンスを左右します。

ステップ2:ツールサーバーの実装と検証

設計図が完成したら、実際にコードを記述し、既存APIをラップするサーバーを実装します。

公式SDKを用いたツール定義の基本構造

ツールサーバーの実装では、既存のAPIを直接LLMに叩かせるのではなく、間にインターフェース層(ブリッジ)を設けます。公式SDKを使用し、以下のような構造でツールを定義します。

  1. ツールのメタデータ定義:JSON Schemaを用いて、ツール名、説明、パラメータ(引数)の仕様を定義します。
  2. 実行関数の実装:LLMからツールの実行要求(ToolUseブロック)を受け取った際に、実際に社内APIを呼び出し、結果を処理する関数を記述します。
  3. 結果の返却:APIからのレスポンスをLLMが理解しやすいテキストや構造化データに変換し、ToolResultブロックとしてLLMに返却します。

この構造により、社内APIの複雑な仕様変更があっても、ブリッジ層の実行関数を修正するだけで済み、LLM側の定義やプロンプトに影響を与えない疎結合なシステムが実現します。

既存APIとのブリッジ機能の実装手順と検証

実装後は、必ずローカル環境での検証を行います。検証には、Claude APIクライアントや、APIが提供するツール呼び出しのテスト機能を使用します。

デバッグの際は、以下の点を確認します。

  • LLMが意図したタイミングでツール呼び出しを決定しているか(推論の正確性)
  • LLMが生成した引数が、JSON Schemaの定義通りにフォーマットされているか
  • ツール実行後の結果を受け取ったLLMが、正しい最終回答を生成できているか

ステップ3:セキュリティとガバナンスの組み込み

ステップ2:ツールサーバーの実装と検証 - Section Image

企業システムへの導入において、最も慎重に検討すべきなのがセキュリティとガバナンスです。

プロンプトインジェクションと意図しないAPI実行の防止

悪意のあるユーザーがプロンプトを通じてLLMを操り、意図しないAPIを実行させる「プロンプトインジェクション」は重大な脅威です。これを防ぐための最も確実な方法は、「Human-in-the-loop(人間による確認)」の実装です。

状態を変更する重要なAPI(決済、データ削除、外部へのメール送信など)については、LLMがツールの実行を決定した段階で処理を一時停止し、ユーザーインターフェース上で人間に承認を求めるフローを組み込みます。LLMには「実行計画の作成」までを任せ、「実際のトリガー」は人間が引くという設計が、エンタープライズ環境におけるベストプラクティスです。

機密データのフィルタリングと監査ログの設計

また、APIのレスポンスに個人情報(PII)や機密データが含まれている場合、それをそのままLLMに渡すことは情報漏洩のリスクに繋がります。ツールサーバーのブリッジ層で、LLMに渡す前に機密データをマスキングするフィルタリング処理を必ず実装してください。

同時に、「いつ、誰が(どのユーザーのセッションで)、どのAIモデルを通じて、どのAPIを呼び出し、どのような引数を渡したか」を記録する監査ログの設計も不可欠です。これにより、万が一のインシデント発生時にも原因の追跡が可能になります。

よくある設計の落とし穴とトラブルシューティング

ステップ3:セキュリティとガバナンスの組み込み - Section Image 3

標準化されたツール連携を構築する中で、多くの開発者が陥りやすい落とし穴とその解決策を紹介します。

タイムアウトとレートリミットの制御

LLMのAPIは応答までに数秒から十数秒かかることがあり、さらに社内APIの実行時間が加わると、システム全体でタイムアウトが発生しやすくなります。このミスマッチを防ぐため、ツール実行時には非同期処理を活用し、フロントエンドに対してはプログレスインジケータ(「データ検索中...」などのステータス)を返す工夫が必要です。

また、LLMがループに陥り、短時間で大量のAPIリクエストを送信してしまうケースが報告されています。APIゲートウェイ側で適切なレートリミット(回数制限)を設定し、システムのリソース枯渇を防ぐ防御的設計が求められます。

LLMによるAPI引数の誤認識を防ぐスキーマ定義

「LLMがAPIを正しく呼んでくれない」というトラブルの多くは、JSON SchemaのDescription(説明文)の記述不足が原因です。人間向けの簡潔なAPIドキュメントをそのまま転用するのではなく、「プロンプトエンジニアリング的API設計」を行う必要があります。

ツールの説明文には、「このツールはどのような目的で使うのか」「どのような場合には使ってはいけないのか」を自然言語で詳細に記述します。引数についても、「日付は必ずYYYY-MM-DD形式で指定すること」といった制約を明記することで、LLMのハルシネーション(もっともらしい嘘の生成)による不正な引数生成を劇的に減らすことができます。

まとめ:標準化されたAI連携がもたらす次世代の業務基盤

LLMと社内システムを連携させる際、場当たり的な接続コードを量産することは、将来の運用保守において大きな重荷となります。Anthropicのtools機能やOpenAPI Schemaを活用した標準化アプローチを採用することで、既存のレガシーAPIを安全かつ効率的にAIエージェントの「手足」として機能させることが可能です。

単発の連携からプラットフォームへの進化

この設計思想は、単なる開発の効率化にとどまりません。インターフェースが標準化されることで、将来的に複数のAIモデルを切り替えたり、新しい社内ツールをプラグイン感覚で追加したりすることが容易になります。単発の連携スクリプトから、企業全体のAI活用を支える「業務のOS(プラットフォーム)」へと進化していく第一歩となるのです。

継続的なメンテナンス体制の構築

AI技術とプロトコルの進化は非常に速く、一度設計したシステムも定期的な見直しが必要です。最新のAPI連携手法やセキュリティ動向をキャッチアップするためには、専門知識を持つエンジニアやコミュニティとの継続的な接点を持つことが重要です。最新の知見やベストプラクティスを継続的に収集する仕組みを整え、自社のAIシステムを常に最適化していくことをおすすめします。


参考リンク

API × MCP連携設計ガイド:LLM統合の負債を防ぐ標準化アプローチ - Conclusion Image

参考文献

  1. https://shunkudo.com/claude%E3%81%AE%E6%9C%80%E6%96%B0%E3%82%A2%E3%83%83%E3%83%97%E3%83%87%E3%83%BC%E3%83%88%E6%83%85%E5%A0%B1-3/
  2. https://www.youtube.com/watch?v=umoAIATmPQo
  3. https://uravation.com/media/claude-code-v2-1-101-30-releases-5-weeks-guide-2026/
  4. https://support.claude.com/ja/articles/12138966-%E3%83%AA%E3%83%AA%E3%83%BC%E3%82%B9%E3%83%8E%E3%83%BC%E3%83%88
  5. https://www.qes.co.jp/media/claudecode/a925
  6. https://blog.serverworks.co.jp/claude-code-desktop-redesign-2026
  7. https://www.sbbit.jp/article/cont1/185224
  8. https://note.com/valen0214/n/ne1e21ba98a03

コメント

コメントは1週間で消えます
コメントを読み込み中...