MCP とは何か?
Model Context Protocol(MCP) は、Anthropic が策定したオープン標準で、AI モデルと外部ツール・データソースをシームレスに連携させるためのプロトコルです。USB-C が様々なデバイスを統一的に接続するように、MCP は Claude と外部世界をつなぐ標準インターフェースを提供します。
MCP を使うことで、Claude は以下のようなことが可能になります:
- ローカルファイルシステムの読み書き
- データベースへのクエリ実行
- 外部 API の呼び出し
- カスタムビジネスロジックの実行
MCP の基本アーキテクチャ
MCP は クライアント・サーバー型アーキテクチャ を採用しています。
Claude(MCP クライアント)
↕ MCP プロトコル(JSON-RPC over stdio/SSE)
MCP サーバー(カスタムツール群)
主な概念は以下の3つです:
Tools(ツール): Claude が呼び出せる関数。例えば read_file、query_database、send_email など。
Resources(リソース): Claude が参照できるデータ。ファイル、データベースのレコード、API レスポンスなど。
Prompts(プロンプト): 再利用可能なプロンプトテンプレート。特定のタスクに最適化されたプロンプトを提供します。
最初の MCP サーバーを作る
TypeScript で簡単な MCP サーバーを作ってみましょう。ここでは「現在時刻を返す」シンプルなツールを実装します。
1. プロジェクトのセットアップ
mkdir my-mcp-server
cd my-mcp-server
npm init -y
npm install @modelcontextprotocol/sdk
npm install -D typescript @types/node2. サーバーの実装
// src/index.ts
import { Server } from "@modelcontextprotocol/sdk/server/index.js";
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
import {
CallToolRequestSchema,
ListToolsRequestSchema,
} from "@modelcontextprotocol/sdk/types.js";
const server = new Server(
{
name: "my-mcp-server",
version: "1.0.0",
},
{
capabilities: {
tools: {},
},
}
);
// 利用可能なツール一覧を返す
server.setRequestHandler(ListToolsRequestSchema, async () => {
return {
tools: [
{
name: "get_current_time",
description: "現在の日時を返します",
inputSchema: {
type: "object",
properties: {
timezone: {
type: "string",
description: "タイムゾーン(例: Asia/Tokyo)",
},
},
},
},
],
};
});
// ツールの実行ハンドラー
server.setRequestHandler(CallToolRequestSchema, async (request) => {
if (request.params.name === "get_current_time") {
const timezone =
(request.params.arguments?.timezone as string) || "Asia/Tokyo";
const now = new Date().toLocaleString("ja-JP", { timeZone: timezone });
return {
content: [
{
type: "text",
text: `現在時刻(${timezone}): ${now}`,
},
],
};
}
throw new Error(`Unknown tool: ${request.params.name}`);
});
// サーバーの起動
const transport = new StdioServerTransport();
await server.connect(transport);3. Claude Desktop への接続
~/Library/Application Support/Claude/claude_desktop_config.json に以下を追加します:
{
"mcpServers": {
"my-mcp-server": {
"command": "node",
"args": ["/path/to/my-mcp-server/dist/index.js"]
}
}
}Claude Desktop を再起動すると、Claude の会話の中でこのツールが利用できるようになります。
実践的なユースケース
ケース1:社内データベース連携
// PostgreSQL に接続してデータを取得するツール
{
name: "query_sales_data",
description: "売上データをクエリします",
inputSchema: {
type: "object",
properties: {
start_date: { type: "string", description: "開始日(YYYY-MM-DD)" },
end_date: { type: "string", description: "終了日(YYYY-MM-DD)" },
},
required: ["start_date", "end_date"],
},
}このツールを使うと、「先月の売上データを分析して」という自然言語の指示だけで、Claude が自動的にデータベースをクエリして分析結果を返してくれます。
ケース2:ファイル操作の自動化
// プロジェクトディレクトリ内のファイルを読み書きするツール
{
name: "write_report",
description: "分析レポートをファイルに保存します",
inputSchema: {
type: "object",
properties: {
filename: { type: "string" },
content: { type: "string" },
},
required: ["filename", "content"],
},
}ケース3:外部サービス連携
Slack、Notion、GitHub などの外部 API と連携するツールを作ることで、Claude が直接これらのサービスを操作できるようになります。
// GitHub Issue を作成するツール
{
name: "create_github_issue",
description: "GitHub にイシューを作成します",
inputSchema: {
type: "object",
properties: {
repo: { type: "string", description: "リポジトリ名(owner/repo)" },
title: { type: "string", description: "イシューのタイトル" },
body: { type: "string", description: "イシューの本文" },
},
required: ["repo", "title"],
},
}MCP を使う際のベストプラクティス
ツールの粒度を適切に保つ: ひとつのツールに多くの機能を詰め込まず、単一責任の原則に従って設計しましょう。
エラーハンドリングを丁寧に: Claude はエラーメッセージを見て次のアクションを決定します。エラーの原因と推奨される対処法を明確に伝えましょう。
セキュリティに注意: MCP サーバーが外部 API キーや機密情報を扱う場合、環境変数を使って管理し、ハードコーディングは避けましょう。
ツールの説明を丁寧に書く: Claude はツールの description を読んで使うべきか判断します。日本語で明確に記述すると、より精度高くツールを活用してもらえます。
まとめ
MCP は Claude の可能性を大きく広げるエコシステムです。社内ツールとの連携、データベースのクエリ、外部サービスの操作など、あらゆる用途に応用できます。
Anthropic は MCP をオープン標準として公開しており、公式リポジトリ には多数のサンプルやコミュニティ製サーバーも公開されています。ぜひ自分のユースケースに合わせた MCP サーバーを作り、Claude との連携を深めてみてください。