【比較】MCP・関数呼び出し・プラグインの違い¶
概要¶
LLM に外部システムを連携させる話になると「MCP」「関数呼び出し(function calling/tool use)」「プラグイン」が必ず混ざって出てきます。どれも「AI に外部の道具を使わせる」ように見えるため、同義語のように扱われがちですが、抽象度(レイヤー)が異なります。
整理すると、関数呼び出しはモデル API レベルの仕組み(モデルが「この関数をこの引数で呼んで」という構造化要求を返し、実行はアプリ側が担う)、MCP はその外部連携を標準化するオープンなプロトコル(クライアント/サーバ間で JSON-RPC により道具・データ・プロンプトをやり取り)、プラグインは特定プラットフォーム上の連携パッケージ/製品形態(ChatGPT plugins が典型で、現在は GPTs/Actions に移行済み)です。レイヤーを取り違えると「MCP と関数呼び出しのどちらかを選ぶ」といった本来不要な二者択一に陥ります。
例えるなら:道具を使わせる三つの層¶
- 関数呼び出し … モデルという作業者が「ドライバーを 3 番のネジに使いたい」と指示書を出す能力。ただし実際に手を動かして回すのは現場(あなたのコード)。
- MCP … 工具と作業者をつなぐ規格化された差込口(USB-C のようなもの)。どのメーカーの工具でも、規格に従えば同じ差込口でつながる。
- プラグイン … 特定の店(プラットフォーム)専用に箱詰めされた工具セット製品。その店の中でしか使えないが、利用者は箱を選ぶだけで済む。
詳細比較¶
| 比較軸 | 関数呼び出し(function calling / tool use) | MCP(Model Context Protocol) | プラグイン(例: ChatGPT plugins) |
|---|---|---|---|
| レイヤー | モデル API の機能 | 外部連携の標準プロトコル | 特定プラットフォーム上の連携パッケージ/製品 |
| 何をするか | モデルが構造化された呼び出し要求(tool_use)を返す | クライアント/サーバ間で道具・データ・プロンプトを規格化して交換 | プラットフォームに機能を追加する配布単位 |
| 実行主体 | アプリ側コード(または基盤側のサーバツール) | MCP サーバが提供、ホスト/クライアント経由で呼ぶ | プラットフォームが仲介して呼び出す |
| 標準化 | 各 LLM ベンダ API ごとの仕様 | ベンダ非依存のオープン標準(JSON-RPC 2.0 ベース) | プラットフォーム固有仕様 |
| 主な構成要素 | tools 定義/tool_use/tool_result | Host・Client・Server、primitives(tools/resources/prompts) | マニフェスト+API(OpenAPI 等) |
| 提供範囲 | 関数(ツール)の呼び出し | tools に加え resources(文脈データ)・prompts も | 主にツール的なアクション |
| 再利用性 | アプリごとに実装 | 「一度作れば多くのクライアントで使える」 | そのプラットフォーム内に限定 |
| 現況 | 主要 LLM で標準機能 | Anthropic 発のオープン標準、広範なクライアント/サーバが対応 | ChatGPT plugins は2024年に終了(新規作成終了 2024-03-19/完全終了 2024-04-09)、GPTs/Actions へ移行 |
よくある誤解¶
- 誤解1:「MCP と関数呼び出しはどちらかを選ぶ競合技術」 — レイヤーが違うので競合しません。関数呼び出しは「モデルが構造化要求を返す」モデル API の仕組みで、実行はアプリ側(または基盤側のサーバツール)。MCP は「その外部連携をベンダ非依存で標準化する」プロトコルで、内部的にはツール(tools)を扱うため、MCP サーバの tool を関数呼び出しの枠組みでモデルに見せる、という重ね方になります。
- 誤解2:「MCP は単なる関数呼び出しの言い換え」 — MCP が公開できる primitive は tools だけではありません。公式仕様ではサーバが tools(実行可能な関数)/resources(文脈データ)/prompts(再利用テンプレート) の 3 つを公開でき、
*/listで動的に発見しtools/callで実行します。さらに JSON-RPC 2.0 ベースで stdio / Streamable HTTP のトランスポートを抽象化する、より広い枠組みです。 - 誤解3:「ChatGPT plugins=MCP の前身で今も主流の連携方式」 — ChatGPT plugins はプラットフォーム固有のベータ機能で、2024 年に終了し GPTs/Actions に置き換わりました。MCP はベンダ非依存のオープン標準であり、plugins の単なる後継というより別レイヤーの標準化です(USB-C のように「一度作れば多くのクライアントにつながる」ことを狙う)。
実務での選び分け¶
- 1 つのアプリ内で、自前 API をモデルに呼ばせたいだけ → 関数呼び出しで十分。MCP サーバを立てる必要はない。
- 同じ連携を複数のクライアント(Claude / IDE / 社内エージェント等)から再利用したい/配布したい → MCP サーバとして実装する。「一度作れば多くのクライアントで使える」のが効く場面。
- モデルに渡すのが「実行アクション」だけでなく「文脈データ」や「定型プロンプト」も含む → MCP の resources / prompts primitive が活きる。関数呼び出し単体では表現しにくい。
- 特定プラットフォームのエコシステム内で配布したい → そのプラットフォームの仕組み(例: GPTs/Actions)に従う。plugins は終了済みなので新規採用しない。
- 判断の起点 → 「再利用・配布・ベンダ非依存が要るか?」が Yes なら MCP、単一アプリで閉じるなら関数呼び出し、と切り分ける。
ひとことまとめ¶
関数呼び出しは「モデルが構造化要求を返すモデル API の機能(実行はアプリ側)」、MCP は「その外部連携をベンダ非依存で標準化するオープンプロトコル(tools/resources/prompts を JSON-RPC で交換)」、プラグインは「特定プラットフォーム固有の連携パッケージ(ChatGPT plugins は終了)」。競合ではなくレイヤー違いです。
出典・参考¶
- Model Context Protocol「What is MCP?」(オープン標準、AI と外部システムを USB-C のように標準接続): https://modelcontextprotocol.io/introduction
- Model Context Protocol「Architecture overview」(Host/Client/Server、JSON-RPC 2.0、tools/resources/prompts、stdio・Streamable HTTP): https://modelcontextprotocol.io/docs/learn/architecture
- Anthropic「Tool use with Claude」(モデルは構造化された呼び出しを返し、実行はクライアント側コードまたは基盤側サーバツールが担う): https://platform.claude.com/docs/en/docs/agents-and-tools/tool-use/overview
- OpenAI「ChatGPT plugins」(プラグインの位置づけ。後にベータ終了し GPTs/Actions へ移行): https://openai.com/index/chatgpt-plugins/