疑問
最近よく目にする「MCPサーバー」という言葉。
簡単に調べてみた結果、感想は以下の通り。
APIあれば充分じゃない?
わざわざMCPサーバーとして独立させる必要って何?
気になったので、AI初学者なりにChatGPTと対話しながら理解を深めました。
以下調べたことのまとめです
MCPとは
MCPは「Model Context Protocol」の略。
"外部のAPI、データベース、ファイル、ローカル機能などを、AIが理解して利用できる「道具」として提供するための共通規格"であり、
全体の構造は例えばこんな感じ。
ユーザー
↓ 目的を依頼
AIモデル
↓ 必要な道具を判断
AIアプリのMCPクライアント
↓ MCPによる共通通信
MCPサーバー
↓ 実際の処理
外部API・DB・ファイルなど
MCPサーバーの中にAIがいるわけではない
改めて確認、MCPサーバー自体にAIモデルが搭載されているわけではない。
MCPサーバーが持っているのは、主に次のようなもの。
- ツールの名前
- ツールの説明
- 入力形式
- 実際の処理
- 認証情報
- 入力検証や権限制御
例えば、ゲームのプレイヤーランキングを取得するツールなら、概念的には次のように定義するらしい(by ChatGPT)
server.registerTool(
"get_player_ranking",
{
description: "指定期間のプレイヤーランキングを取得する",
inputSchema: {
period: "string",
limit: "number",
},
},
async ({ period, limit }) => {
// 実際のランキングAPIを呼び出す
},
);
この説明文はMCPサーバー内のAIが考えているわけではなく、開発者が実装した固定のツール定義。
もちろん、CodexなどにMCPサーバーを作ってもらうことはできるが、完成したMCPサーバーにAIが内蔵されているという意味ではない。
AIモデルが直接MCPサーバーを呼ぶわけではない
AIモデルとMCPサーバーの間にはAIアプリが存在するとのこと。
AIモデル
↕ 判断・ツール実行要求
CodexなどのAIアプリ
↕ MCP通信
MCPサーバー
それぞれの役割を整理する。
人間の役割
- 達成したい目的を伝える
- AIに許可する操作を決める
- 重要な操作を承認する
- 最終結果を評価する
AIモデルの役割
- 依頼の目的を理解する
- 必要な情報を考える
- 使用するツールを選ぶ
- ツールを使う順番を組み立てる
- 取得結果を分析して説明する
AIアプリの役割
- MCPサーバーに接続する
- 利用可能なツールを取得する
- ツールの説明をAIモデルに渡す
- AIモデルからの実行要求をMCPサーバーへ渡す
- 実行結果をAIモデルへ返す
MCPサーバーの役割
- AIが利用できるツールを公開する
- 入力を検証する
- 外部APIやDBへアクセスする
- 認証情報を管理する
- 許可された処理だけを実行する
- 結果を共通形式で返す
MCPによって「目的レベル」で依頼できる
例えば、ゲームの売上が下がった原因を調べたい時、手段レベルまで依頼をブレイクダウンできれば、直接APIを叩きにいける
日別売上APIを呼び出してください。
次にプレイヤー数を取得してください。
継続率とステージ別離脱率も取得し、前月と比較してください。
ただ、MCPで必要なツールをAIに提供していれば、以下のような目的レベルでの依頼で良い。手段とかはAIが考えてくれる。
最近、ゲームの売上が落ちた原因を調べてください。
あとはAIが考えてくれる(例えばこんな感じ
- 日別売上を取得する
- プレイヤー数を取得する
- 継続率を取得する
- ステージ別離脱率を取得する
- アプリのエラー発生率を取得する
- 変化が起きた時期を比較する
- 原因の仮説を報告する
つまり、人間が手段レベルの指示を組み上げなくても、目的レベルで仕事を依頼しやすくなる。
既存APIを直接AIに使わせればよくないか
外部向けAPIがあるなら。
AIに直接そのAPIを使わせればよいのでは?
結論から言えば、直接使わせても問題ないし、MCPは必須ではない。
実装方法は大きく2つ。
AIアプリにAPI連携を直接実装する
AIモデル
↓
AIアプリ内の独自連携
↓
外部API
MCPを利用する
AIモデル
↓
AIアプリのMCPクライアント
↓
MCPサーバー
↓
外部API
どちらでも同じ結果を実現できるが、「AIに直接APIを使わせる」 には、実際には考えなきゃいけないことは非常に多い。
- API仕様をAIへ伝える
- AIの出力から引数を取り出す
- HTTPリクエストを実行する
- 認証情報を付加する
- 入力を検証する
- エラーを処理する
- 危険な操作を拒否する
- レスポンスをAIへ返す
さらに、AIモデルはAPIの呼び出し方法を考えることはできるが、通常はモデル自身が自由にHTTP通信を実行するわけではない。
→結局、AIとAPIを仲介する層が必要になる。
その仲介層を独自仕様で作ってもいいし、MCPという共通仕様で作ってもいいという理解。
(共通仕様で作ることによる再利用性のメリットとかも気になる
AIに万能なHTTPツールを渡してみちゃう
AIに次のような万能ツールを渡す方法も考えられます
http_request(
method,
url,
headers,
body
)
しかし、もちろん危ないことはわかります。
- 意図しないURLへアクセスできる
- 認証情報がAIから見える可能性がある
- 削除や更新APIを誤って呼ぶ可能性がある
- API仕様全体をAIへ渡す必要がある
- 入力を安全に制限しにくい
そこで、AIには用途を限定したツールを渡すことにする。これがMCPサーバ内で実装されているもの。
get_player_ranking(period, limit)
get_daily_sales(date)
get_stage_dropoff(stageId)
この形なら、AIは実際のURLやAPIトークンを知る必要がないなどのメリットがある。
MCPサーバー側で、アクセス先や認証処理を隠す↓
async ({ period, limit }) => {
return fetch(`${API_URL}/ranking`, {
headers: {
Authorization: `Bearer ${SECRET_TOKEN}`,
},
});
}
AIに必要な能力だけを、分かりやすく安全な形で提供できる。
MCPを作るのはどんなときか
MCPが向いているとき
- AIに目的レベルで仕事を依頼したい
- その仕事に外部データや操作が必要
- AIが複数のツールから手段を選ぶ必要がある
- 同じ機能をAIから繰り返し利用したい
- 複数のAIアプリから再利用したい
例えば、次のようなユースケース
- 売上低下の原因を複数データから調査する
- 障害の原因をログや監視データから特定する
- 顧客情報と注文履歴を調べて問い合わせへ回答する
- 上位ユーザーと離脱ユーザーの行動を比較する
- 社内の複数システムから情報を集めてレポートを作る
- 状況を判断して運営業務を実行する
MCPを作らなくてもよいケース
一方、次のような処理には通常のAPI実装で十分
- ゲーム内で自分のランキングを表示する
- ボタンを押して決まったAPIを呼ぶ
- AIによる判断が必要ない
- そのアプリからしか利用しない
- 一度しか使わない単純な処理
例えば、
ゲーム内のランキングボタンを押すと、自分の順位が表示される
という機能は、普通にゲームアプリからランキングAPIを呼べばいい。
一方、
上位プレイヤーと初心者の行動データを比較し、初心者が離脱する原因を説明して
という依頼では、AIが複数のデータ取得手段を考えて選んでくれるため、MCPが役立ちます。
複数のAIから呼び出せるのはなぜ?
MCPが共通の接続規格になっているから。
MCP対応のAIアプリは、接続したMCPサーバーに利用可能なツールを問い合わせられるようになっているらしい。(JSONとか?
{
"name": "get_player_ranking",
"description": "指定期間のプレイヤーランキングを取得する",
"inputSchema": {
"period": "string",
"limit": "number"
}
}
いろんなAIアプリが接続できる
Codex ─────────┐
社内AI ────────┼─ MCP ─→ 自作MCPサーバー ─→ 外部API
別のAIアプリ ──┘
特定のAIアプリ専用にAPI連携を何度も実装する必要がなくなる。
AIが進化したらMCPは不要になるのか
例えば、AIが次の作業を自動化できるようになったとして
- OpenAPI仕様の読み取り
- ツール名や説明文の生成
- 入力スキーマの生成
- MCPサーバーのコード生成
- APIエラーへの対応
次の問題は残る。
- どのシステムへのアクセスを許可するか
- 認証情報をどこで管理するか
- 読み取りと更新のどちらを許可するか
- 削除や送金前に承認を求めるか
- 誰がいつ何を実行したか記録するか
- 実際の通信をどのプロセスが実行するか
ただ、AIによってMCPサーバーが自動生成され、利用者が存在を意識しなくなる可能性はある...と思う
まとめ
MCPの本質的な価値は、
AIと外部システムの間に必要な、説明・実行・認証・権限制御を共通化すること
そしてMCPによって、人間の依頼が手段レベルから目的レベルに変わる。
手段レベル:
「売上APIと継続率APIを呼び、前月と比較して」
目的レベル:
「売上が落ちた原因を調べて」
次回はMCPの実装例についてみていきたいと思っています。