MCP図解
概要:MCPとは
具体例:ファイル参照,ファイル編集,マニュアル読み込み,プログラム実行,検索,アプリの操作,機械の操作
目次
I. MCPはなぜ作られたのか?
II. MCPで何ができるのか?
III. MCPはどうすれば使えるようになるか?
IV. MCPはどのように動作するのか?
I. MCPはなぜ作られたのか?
LLMに情報収集や出力(例:検索,Office操作,コード実行)をさせる仕組みをアプリ間で共用可能にするため
従来は図1のようにLLMが外部機能を使う仕組みはアプリごとに独自実装されていた(例:ChatGPTのFunction calling・Tools:コード実行,検索,Canvas.ClaudeのTool use:Artifacts,AntThink)
そのため,図2のように別のアプリで作られたLLMのための道具を転用できなかった
この状況において,共通企画は図3のようなアプリとツールの自由な組み合わせを可能にする.
図1:AIアプリケーションの作り方(例:開発AIエージェント)
code:mermaid
graph TD
B --応答--> A
B <--呼び出し・応答--> C
B <--呼び出し・応答--> D
B <--呼び出し・応答--> E
B <--呼び出し・応答--> F
図2:外部連携を独自実装したアプリ同士は別のアプリの機能を使えない
code:mermaid
graph TD
B1 --> A
B2 --> A
subgraph 規格B
end
subgraph 規格A
end
B1 --> C1
B1 --> D1
B1 --> E1
B2 --> F2
B2 --> G2
B1 -.- F2
B1 -.- G2
B2 -.- C1
B2 -.- D1
B2 -.- E1
style B1 fill:#fff9c4,stroke:#fbc02d
style B2 fill:#bbdefb,stroke:#1976d2
style 規格A fill:#d3d3d3,stroke:#808080
style 規格B fill:#d3d3d3,stroke:#808080
style C1 fill:#fff9c4,stroke:#fbc02d
style D1 fill:#fff9c4,stroke:#fbc02d
style E1 fill:#fff9c4,stroke:#fbc02d
style F2 fill:#bbdefb,stroke:#1976d2
style G2 fill:#bbdefb,stroke:#1976d2
linkStyle 0 stroke:#fbc02d,stroke-width:2px
linkStyle 1 stroke:#1976d2,stroke-width:2px
linkStyle 2 stroke:#fbc02d,stroke-width:2px
linkStyle 3 stroke:#1976d2,stroke-width:2px
linkStyle 4 stroke:#fbc02d,stroke-width:2px
linkStyle 5 stroke:#fbc02d,stroke-width:2px
linkStyle 6 stroke:#fbc02d,stroke-width:2px
linkStyle 7 stroke:#1976d2,stroke-width:2px
linkStyle 8 stroke:#1976d2,stroke-width:2px
linkStyle 9 stroke:#888,stroke-dasharray:5 5,stroke-width:1px
linkStyle 10 stroke:#888,stroke-dasharray:5 5,stroke-width:1px
linkStyle 11 stroke:#888,stroke-dasharray:5 5,stroke-width:1px
linkStyle 12 stroke:#888,stroke-dasharray:5 5,stroke-width:1px
linkStyle 13 stroke:#888,stroke-dasharray:5 5,stroke-width:1px
図3:共通規格のMCPがあれば異なるAIアプリと外部連携機能を共有できる
code:mermaid
graph TD
B1 --> A
B2 --> A
subgraph MCP準拠
end
B1 --MCP--> C
B1 --> D
B1 --> E
B1 --> F
B2 --> C
B2 --> D
B2 --> E
B2 --> F
style A fill:#f5f5f5,stroke:#9e9e9e
style B1 fill:#fff9c4,stroke:#fbc02d
style B2 fill:#bbdefb,stroke:#1976d2
style MCP準拠 fill:#d3d3d3,stroke:#808080
linkStyle 0 stroke:#fbc02d,stroke-width:1px
linkStyle 1 stroke:#1976d2,stroke-width:1px
linkStyle 2 stroke:#fbc02d,stroke-width:1px
linkStyle 3 stroke:#1976d2,stroke-width:1px
linkStyle 4 stroke:#fbc02d,stroke-width:1px
linkStyle 5 stroke:#fbc02d,stroke-width:1px
linkStyle 6 stroke:#fbc02d,stroke-width:1px
linkStyle 7 stroke:#fbc02d,stroke-width:1px
linkStyle 8 stroke:#1976d2,stroke-width:1px
linkStyle 9 stroke:#1976d2,stroke-width:1px
linkStyle 10 stroke:#1976d2,stroke-width:1px
linkStyle 11 stroke:#1976d2,stroke-width:1px
II. MCPで何ができるのか?
LLMが自律的に情報を獲得・送信できるようになる.具体的には次の3種類の形式で表せる情報を扱える.
1. ツール:LLMに関数を実行させる
例:現在地を引数として現在の天気を調べる,四則演算の結果を返す,Shellを実行する
2. リソース:LLMにデータを渡す(URI形式で提供される読み出し専用データ)
例:開発者向けのドキュメント
3. プロンプト:LLMにプロンプトの定型文を渡す
例:翻訳を指示する文章の末尾にユーザー入力を埋め込むプロンプト(指示なしにChat UIに英文を書き込むだけでLLMは翻訳作業をしてくれる)
III. MCPはどうすれば使えるようになるか?
次に示す3種類の構成要素からなるシステムを構築すれば使える
サーバ:LLMの指示を受けて,情報を与えたり,機械を操作したりするプログラム
クライアント:AIアプリにMCPサーバとの通信経路を提供するプログラム
ホスト:LLMやクライアントを内包するAIアプリケーション
図4:ホストはLLMとクライアントを内包したAIアプリであり,各クライアントはサーバを介して接続する
code:mermaid
graph LR
end
end
LLM <--> Client1
LLM <--> Client2
LLM <--> Client3
Client1 <--MCP--> Server1
Client2 <--MCP--> Server2
Client3 <--MCP--> Server3
Server1 --WebAPI--- InternetService
Server2 --- LocalMemory
Server3 --- LocalFile
IV. MCPはどのように動作するのか?
LLMは次に示す2段階の仕組みにより,情報を自律的に送受信する(簡易的な説明)
1. 初期化
サーバは自身の機能(ツールやリソースなど)とその使い方に関する情報をクライアントに応答する
クライアントはそれら情報をLLMが扱いやすいコンテクスト情報(プロンプト)に整形する
ホストはサーバの機能を使える(コンテクスト情報から機能の使い方を知った)LLMを利用者に提供する
2. 呼び出し
ホストのLLMはコンテクスト情報に基づいて,必要な場面でツールの使用をクライアントにリクエストする
クライアントはリクエストをサーバに送信する
サーバはリクエストに応じて処理結果やデータを応答し,クライアントを返してホストのLLMに情報が与えられる
図5:最初にLLMに,MCPサーバの機能と使い方を教えて,必要なときに自分でサーバを呼ぶように指示をする
code:mermaid
sequenceDiagram
participant Server as MCPサーバ
participant Client as MCPクライアント
participant Host as MCPホスト(LLM)
participant User as 利用者
rect rgb(240, 240, 255)
Note over Server,User: 初期化プロセス
Server->>Client: 機能情報(関数や参照データ)と使用方法を提供
Client->>Host: 機能情報をLLMが扱いやすいコンテクスト情報(プロンプト)に整形
Host->>User: サーバの機能を利用できるLLMを提供
end
rect rgb(255, 240, 240)
Note over Server,User: 呼び出しプロセス
User->>Host: クエリ/タスク
Host->>Client: ツール使用をリクエスト
Client->>Server: リクエストを送信
Server->>Client: 処理結果やデータを応答
Client->>Host: 結果情報を提供
Host->>User: 応答を返す
end
ーーー
2025/4/16 12:42