Model Context Protocol(MCP)
MCPはAIモデルと外部ツール・データソースを接続するためのオープンプロトコルです。Anthropicが策定し、業界標準として広がっています。
MCPとは何か
従来、各AIアプリが個別にツール連携を実装していた。MCPはこれを標準化する。
従来: AIアプリA ──独自実装──→ ツールX
AIアプリB ──独自実装──→ ツールX (同じツールなのに2回実装)
MCP: AIアプリA ─┐
├── MCP ──→ MCPサーバー(ツールX) (1回の実装で複数アプリが利用)
AIアプリB ─┘
USBのような「統一インターフェース」をAIツール連携に提供する。
アーキテクチャ
MCPは3つのレイヤーで構成される。
┌──────────┐ ┌──────────┐ ┌──────────┐
│ Host │────▶│ Client │────▶│ Server │
│(Claude等)│ │(SDK内蔵) │ │(ツール) │
└──────────┘ └──────────┘ └──────────┘
| レイヤー | 役割 | 例 |
|---|---|---|
| Host | ユーザーが操作するアプリ | Claude Desktop, IDE |
| Client | MCPプロトコルの通信管理 | SDK内のMCPクライアント |
| Server | ツール・データを提供 | ファイル操作サーバー、DB検索サーバー |
トランスポート
MCPの通信方式は2つ。
stdio(標準入出力)
ローカル実行向け。サーバーを子プロセスとして起動し、stdin/stdoutで通信。
- セットアップが簡単
- セキュリティリスクが低い(ローカル通信)
- Claude Desktopでの主な方式
Streamable HTTP
リモート実行向け。HTTPでサーバーと通信し、Server-Sent Events(SSE)でストリーミング。
- リモートサーバーに対応
- 複数クライアントから共有可能
- 認証・認可の仕組みを組み込める
3つのプリミティブ
MCPサーバーが提供できる機能は3種類。
1. Tools(ツール)
モデルが呼び出すアクション。API呼び出しやDB操作など。
{
"name": "search_database",
"description": "データベースを検索する",
"inputSchema": {
"type": "object",
"properties": {
"query": {"type": "string"}
}
}
}
- Claude APIのTool Useと連携
- モデルが「いつ使うか」を判断
2. Resources(リソース)
アプリが読み取るデータ。ファイルの内容やDB内のレコードなど。
- コンテキストとしてモデルに提供
- ユーザーやアプリが「何を読むか」を選択
3. Prompts(プロンプト)
ユーザーが選ぶテンプレート。繰り返し使うプロンプトパターンを再利用可能にする。
{
"name": "code_review",
"description": "コードレビュー用プロンプト",
"arguments": [
{"name": "language", "description": "プログラミング言語"}
]
}
使い分け
| プリミティブ | 誰が制御 | 用途 |
|---|---|---|
| Tools | モデル | アクション実行 |
| Resources | アプリ/ユーザー | データ読み取り |
| Prompts | ユーザー | テンプレート呼び出し |
Pythonでのサーバー実装
mcp パッケージを使った最小限のMCPサーバー。
インストール
基本的なサーバー
from mcp.server.fastmcp import FastMCP
# サーバーを作成
mcp = FastMCP("weather-server")
# ツールを定義
@mcp.tool()
def get_weather(city: str) -> str:
"""指定された都市の天気を取得する"""
# 実際にはAPIを叩く
return f"{city}の天気: 晴れ、22°C"
# リソースを定義
@mcp.resource("config://app")
def get_config() -> str:
"""アプリ設定を返す"""
return '{"theme": "dark", "language": "ja"}'
# サーバー起動
if __name__ == "__main__":
mcp.run()
実行
# stdioトランスポートで起動(デフォルト)
python weather_server.py
# HTTPトランスポートで起動
python weather_server.py --transport streamable-http --port 8000
Claude Desktopでの設定
claude_desktop_config.json にサーバーを登録する。
設定ファイルの場所
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - Windows:
%APPDATA%\Claude\claude_desktop_config.json
設定例
{
"mcpServers": {
"weather": {
"command": "python",
"args": ["/path/to/weather_server.py"]
},
"filesystem": {
"command": "npx",
"args": [
"-y",
"@modelcontextprotocol/server-filesystem",
"/Users/username/Documents"
]
}
}
}
公開MCPサーバー
ファイル操作、GitHub、Slack、データベースなど、すぐ使えるMCPサーバーが多数公開されている。 MCP Servers リスト を参照。
参考リンク
- MCP公式ドキュメント — 仕様・ガイドの全体
- MCP Python SDK — Python用SDK
- MCP TypeScript SDK — TypeScript用SDK
- 公開MCPサーバー一覧 — すぐ使えるサーバー集