MCPとは何か、なぜ重要か
MCP(Model Context Protocol)は、AnthropicがAIアシスタントと外部ツールを接続するための標準プロトコルとして2024年末にオープンソースで公開した仕様だ。
なぜ「標準」が必要だったのか。従来、各AIアプリケーションが独自の方法で外部ツールを統合していた。SlackをClaude Codeに繋げたければClaude Code用のコードを書き、同じSlack機能をCursorやContinueに追加したければそれぞれ別の実装が必要だった。ツールが増えるほど重複実装が増え、メンテナンスのコストも増していく。
MCPはこの問題を「USB規格」のような統一コネクタで解決しようとしている。MCPサーバーとして一度実装すれば、MCPクライアントに対応したどのAIアプリからでも使える。
MCPのアーキテクチャ
MCPはクライアント・サーバーモデルを採用している。
MCPサーバーは、特定のサービスや機能を外部に提供するプロセスだ。「GitHubのPRを一覧表示する」「Slackにメッセージを送る」「ファイルシステムを読む」といった機能をMCPの仕様に沿って公開する。
MCPクライアントは、AIアシスタント(Claude Codeなど)が内包しているコンポーネントで、MCPサーバーに接続してツールを呼び出す。
ホストは、クライアントが動くアプリケーション本体だ。Claude Code、Cursor、VS Code拡張など、エンドユーザーが直接使うソフトウェアがこれにあたる。
この分離により、ツール開発者はサーバーを作るだけでよく、AIアプリの内部実装を知る必要がなくなる。
通信プロトコルの仕様
MCPはJSON-RPC 2.0をベースとした通信プロトコルを採用している。トランスポート層はstdio(標準入出力)かSSE(Server-Sent Events)の2種類をサポートする。
ローカルで動くMCPサーバーはstdioが主流だ。ホストがサーバープロセスを起動し、標準入出力でメッセージをやり取りする。
リモートのMCPサーバー(外部APIとして公開するケース)はHTTP+SSEを使う。
主要なメッセージタイプを整理する。
initialize — クライアントがサーバーに接続し、対応している機能を確認する。
tools/list — サーバーが提供するツールの一覧を取得する。ツール名、説明、入力スキーマが返ってくる。
tools/call — 特定のツールを呼び出す。引数はJSONで渡す。
resources/list / resources/read — ファイルやドキュメントなどのリソースを扱う。
prompts/list / prompts/get — サーバーが提供するプロンプトテンプレートを扱う。
既存ツールのMCP対応状況
2026年時点で、主要なツールのMCPサーバーはすでに多数公開されている。
Anthropicが公式に提供しているリファレンスサーバーには、ファイルシステム操作、GitHubアクセス、Webスクレイピング(Puppeteer)、Slack、Google Drive、PostgreSQLなどがある。これらは @modelcontextprotocol/server-* というパッケージ名でnpmに公開されている。
コミュニティ製のMCPサーバーも急増しており、Notion、Linear、Jira、AWS、Figma、Supabaseなど、主要なSaaSほぼ全てについて何らかのMCPサーバーが存在する状況だ。
Claude CodeでMCPサーバーを追加する
Claude CodeへのMCPサーバー追加は、設定ファイルにサーバーの起動コマンドを記述するだけだ。
プロジェクトレベルの設定なら .claude/settings.json を、グローバルな設定なら ~/.claude/settings.json を編集する。
{
"mcpServers": {
"filesystem": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-filesystem", "/path/to/allowed/dir"]
},
"github": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-github"],
"env": {
"GITHUB_PERSONAL_ACCESS_TOKEN": "your-token-here"
}
}
}
}
Claude Codeを再起動すると設定が読み込まれ、登録したMCPサーバーのツールが自動的に使えるようになる。/mcp コマンドで接続状況を確認できる。
自作MCPサーバーの開発
Python SDKを使った自作MCPサーバーの基本的な実装を示す。
pip install mcp
from mcp.server import Server
from mcp.server.stdio import stdio_server
from mcp import types
app = Server("my-custom-server")
@app.list_tools()
async def list_tools():
return [
types.Tool(
name="get_weather",
description="指定した都市の天気を取得する",
inputSchema={
"type": "object",
"properties": {
"city": {
"type": "string",
"description": "都市名(例: Tokyo)"
}
},
"required": ["city"]
}
)
]
@app.call_tool()
async def call_tool(name: str, arguments: dict):
if name == "get_weather":
city = arguments["city"]
# 実際のAPI呼び出しに置き換える
weather_data = fetch_weather_api(city)
return [types.TextContent(type="text", text=str(weather_data))]
raise ValueError(f"Unknown tool: {name}")
async def main():
async with stdio_server() as (read_stream, write_stream):
await app.run(read_stream, write_stream, app.create_initialization_options())
if __name__ == "__main__":
import asyncio
asyncio.run(main())
このファイルを weather_server.py として保存し、Claude Codeの設定に追加する。
{
"mcpServers": {
"weather": {
"command": "python",
"args": ["/path/to/weather_server.py"]
}
}
}
TypeScript SDKでの実装
TypeScript版のSDKも提供されており、Node.jsで動かす場合はこちらが使いやすい。
import { Server } from "@modelcontextprotocol/sdk/server/index.js";
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
import { ListToolsRequestSchema, CallToolRequestSchema } from "@modelcontextprotocol/sdk/types.js";
const server = new Server(
{ name: "my-ts-server", version: "1.0.0" },
{ capabilities: { tools: {} } }
);
server.setRequestHandler(ListToolsRequestSchema, async () => ({
tools: [
{
name: "calculate",
description: "数式を計算する",
inputSchema: {
type: "object",
properties: { expression: { type: "string" } },
required: ["expression"]
}
}
]
}));
server.setRequestHandler(CallToolRequestSchema, async (request) => {
if (request.params.name === "calculate") {
const result = eval(request.params.arguments.expression);
return { content: [{ type: "text", text: String(result) }] };
}
throw new Error("Unknown tool");
});
const transport = new StdioServerTransport();
await server.connect(transport);
MCPの設計思想と今後の展開
MCPがオープンソースとして公開された背景には、AnthropicがAIエコシステムの標準を握ろうとする意図と、開放的なエコシステムを育てることでClaude自体の価値を高めようとする意図がある。
2026年時点では、CursorやContinue、Zedなど多くのAI開発ツールがMCPをサポートしており、「MCPサーバーを書けば主要なAIツール全てで使える」状態に近づいている。
OpenAIも独自の「プラグイン」仕様を持っていたが、MCPの普及を受けて互換性を検討する動きがある。AIツール統合の標準規格としてMCPが定着しつつある状況だ。
まとめ
MCPは、AIエージェントとツールの接続を標準化するプロトコルだ。ツール開発者にとって「一度書けばどこでも使える」状況を作り、AIアプリ開発者にとって「接続するだけで機能が増える」環境を実現する。
Claude Codeを使っているなら、まず公式のリファレンスサーバーをいくつか試してみるのが最初の一歩だ。ファイルシステムやGitHubとの連携を追加するだけで、日常の開発作業が大きく変わる体験ができる。