MCPでAIエージェントに「手」を与える — Model Context Protocol入門
AIエージェントの「手と目」の問題
ChatGPTやClaudeを使っていて、こんな不満を感じたことはありませんか?
「ファイルを読んでほしいのに、アップロードしないと見られない」
「データベースのデータを参照してほしいのに、コピペするしかない」
「外部APIを叩いてほしいのに、結果を手動で貼り付けるしかない」
LLM(大規模言語モデル)は優秀な「脳」ですが、外部世界にアクセスする「手」と「目」を持っていません。だから人間が毎回仲介する必要があります。
この問題を解決するプロトコルが**MCP(Model Context Protocol)**です。2024年11月にAnthropic社が公開し、急速にエコシステムが拡大しています。
本記事では、MCPの基本概念から最小限のサーバー実装までを解説します。
MCPとは何か — AIとツールを繋ぐプロトコル
MCPを一言で言えば、AIアプリケーションと外部ツールを繋ぐための標準プロトコルです。
HTTPがWebサーバーとブラウザを繋ぐ標準プロトコルであるように、MCPはAIモデルと外部リソースを繋ぐ標準プロトコルです。
従来の手法: Function Calling
MCP以前は、Function Calling(関数呼び出し)が主な手段でした。各AIアプリが独自に関数を定義し、LLMに「どの関数を呼ぶか」を判断させます。
しかしFunction Callingには問題があります:
- ツールごとに独自実装が必要: 各AIアプリが各ツール用の統合コードを書く必要がある
- 再利用性が低い: Claude用に書いた統合コードは、他のAIアプリでは使えない
- スケールしない: ツールが増えるたびに実装量が膨れ上がる
MCPの解決策: 標準化されたプロトコル
MCPは、ツール側(サーバー)とAI側(クライアント)の間に標準インターフェースを定義します。
AIアプリ(クライアント) ←→ MCPプロトコル ←→ ツール(サーバー)
サーバー側がMCP規格に従ってツールを公開すれば、MCP対応のAIアプリならどれでもそのツールを使えるようになります。Claude Desktop、Cursor、その他のMCP対応クライアントすべてで同じサーバーが動きます。
これが「Write once, run on any MCP-compatible client」の世界です。
MCPの3つのプリミティブ
MCPは3つの機能カテゴリ(プリミティブ)を定義しています。
1. Tools — AIに「手」を与える
AIがアクションを実行するための機能です。
- ファイルの読み書き
- APIの呼び出し
- データベースの操作
- コマンドの実行
例えば「ファイルを読む」ツールを定義すれば、AIはユーザーの指示に応じて自律的にファイルを読めます。
2. Resources — AIに「目」を与える
AIがデータを参照するための機能です。読み取り専用で、副作用がありません。
- ドキュメントの内容
- データベースのクエリ結果
- ログファイル
- 設定ファイル
ResourcesはURIで識別されます。例えば file:///project/README.md や db://users/schema のように、どのデータを参照するかを指定します。
3. Prompts — 再利用可能なプロンプトテンプレート
よく使うプロンプトをテンプレート化して保存する機能です。
- コードレビュー用のプロンプト
- ドキュメント作成用のプロンプト
- デバッグ用のプロンプト
引数を取れるので、柔軟なテンプレートが作れます。
最小限のMCPサーバーを実装する
実際にMCPサーバーを作ってみましょう。Python SDKを使います。
セットアップ
pip install mcp
サーバーコード
from mcp.server import Server
from mcp.types import Tool, TextContent
import mcp.server.stdio
import asyncio
app = Server("my-first-mcp-server")
@app.list_tools()
async def list_tools() -> list[Tool]:
return [
Tool(
name="get_current_time",
description="現在時刻を取得する",
inputSchema={
"type": "object",
"properties": {
"timezone": {
"type": "string",
"description": "タイムゾーン(例: Asia/Tokyo)",
"default": "UTC"
}
}
}
),
Tool(
name="calculate",
description="四則演算を実行する",
inputSchema={
"type": "object",
"properties": {
"expression": {
"type": "string",
"description": "計算式(例: 2 + 3 * 4)"
}
},
"required": ["expression"]
}
)
]
@app.call_tool()
async def call_tool(name: str, arguments: dict) -> list[TextContent]:
if name == "get_current_time":
from datetime import datetime
import zoneinfo
tz = arguments.get("timezone", "UTC")
try:
now = datetime.now(zoneinfo.ZoneInfo(tz))
result = now.strftime("%Y-%m-%d %H:%M:%S %Z")
except:
result = datetime.now().strftime("%Y-%m-%d %H:%M:%S UTC")
return [TextContent(type="text", text=f"現在時刻: {result}")]
elif name == "calculate":
expr = arguments["expression"]
try:
result = eval(expr) # 実運用では安全な評価器を使用
return [TextContent(type="text", text=f"結果: {expr} = {result}")]
except Exception as e:
return [TextContent(type="text", text=f"エラー: {e}")]
async def main():
async with mcp.server.stdio.stdio_server() as (read, write):
await app.run(read, write, app.create_initialization_options())
if __name__ == "__main__":
asyncio.run(main())
このサーバーは2つのツールを提供します:
-
get_current_time: 指定タイムゾーンの現在時刻を返す -
calculate: 数式を評価して結果を返す
Claude Desktopから接続する
Claude Desktopの設定ファイル(claude_desktop_config.json)に以下を追加します。
{
"mcpServers": {
"my-server": {
"command": "python",
"args": ["/path/to/your/server.py"]
}
}
}
Claude Desktopを再起動すると、ツールが利用可能になります。「今何時?」と聞けば get_current_time ツールが自動的に呼ばれ、「123 * 456を計算して」と聞けば calculate ツールが実行されます。
トランスポート — 通信方式の選択
MCPは2つのトランスポート方式をサポートしています。
- stdio: 標準入出力で通信。ローカル環境の標準方式。Claude Desktopとの接続はこれを使う
- HTTP/SSE: HTTPベースの通信。リモートサーバーへの接続に使う。Web上のMCPサーバーにアクセス可能
ローカル開発ならstdio、リモート運用ならHTTP/SSE——用途に応じて選びます。
セキュリティ上の注意点
MCPサーバーはAIに強力な権限を与えるため、セキュリティには注意が必要です。
- 最小権限の原則: ツールに必要最小限の権限だけを付与する
- 入力バリデーション: 引数を必ず検証する。eval()の使用は特に危険
- アクセス制御: 認証を導入し、信頼できるクライアントのみ接続許可
- ログ記録: ツールの呼び出し履歴を記録し、監査可能にする
まとめ
- MCP: AIアプリと外部ツールを繋ぐ標準プロトコル。Write once, run on any MCP-compatible client
- 3つのプリミティブ: Tools(実行)、Resources(参照)、Prompts(テンプレート)
- 実装: Python/Node.js SDKで数十行のサーバーが作れる
- 接続: Claude Desktop等のMCP対応クライアントから利用可能
- セキュリティ: 最小権限・入力バリデーション・アクセス制御が必須
MCPはAIエージェントの能力を劇的に拡張するプロトコルです。「AIが自律的にツールを使う」という未来が、既に動き始めています。
この記事は、著書「MCP実践入門 — AIエージェントを拡張するModel Context Protocol」(¥1,650・Kindle)の内容を再構成したものです。MCPの基本概念からTools/Resources/Promptsの実装、Claude Desktop統合、複数サーバー運用、実践プロジェクト集まで、10章で体系的に解説しています。Kindle Unlimited会員は読み放題対象です。
葉山悠希(はやま ゆうき)— AI×生産性向上の実践書を執筆しています。