MCPサーバー構築の実践ガイド:Claude Codeを拡張する
Model Context Protocol(MCP)サーバーの構築方法を実践的に解説。Claude Codeに独自ツールを追加し、外部サービスと連携する手順を網羅。
ClaudeCode.Tokyo編集部
2026-03-01 公開
この記事のポイント
- —MCPサーバーを自作すればClaude Codeにデータベース操作・外部API呼び出しなど任意の機能を追加できる
- —TypeScript/Pythonの公式SDKを使えば最小限のコードでMCPサーバーを実装可能
- —セキュリティを考慮したツール設計とテスト方法を含む実践的な構築フローを解説
MCPとは何か
**Model Context Protocol(MCP)**は、Anthropicが2024年11月に発表したオープンプロトコルです。AIモデルが外部のツールやデータソースにアクセスするための標準化された通信規格を定義しています。
MCPの登場以前は、各AIツールが独自の方法で外部連携を実装していました。MCPにより、一度作ったサーバーはClaude Code、Claude Desktop、その他MCP対応クライアントで共通利用できるようになっています。
MCPサーバーの基本構造
MCPサーバーは以下の3つの要素で構成されます。
- ツール(Tools) — Claude Codeが呼び出せる関数。データベースクエリ、API呼び出しなど
- リソース(Resources) — 読み取り専用のデータソース。設定ファイル、ドキュメントなど
- プロンプト(Prompts) — 再利用可能なプロンプトテンプレート
TypeScriptでのMCPサーバー構築
セットアップ
mkdir my-mcp-server && cd my-mcp-server
npm init -y
npm install @modelcontextprotocol/sdk zod
npm install -D typescript @types/node
最小限のMCPサーバー
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
import { z } from "zod";
const server = new McpServer({
name: "my-tools",
version: "1.0.0",
});
// ツールの定義
server.tool(
"search_database",
"データベースからレコードを検索します",
{
query: z.string().describe("検索クエリ"),
limit: z.number().default(10).describe("最大件数"),
},
async ({ query, limit }) => {
// ここに実際のDB検索ロジック
const results = await searchDB(query, limit);
return {
content: [
{
type: "text",
text: JSON.stringify(results, null, 2),
},
],
};
}
);
// サーバー起動
const transport = new StdioServerTransport();
await server.connect(transport);
Claude Codeへの登録
構築したMCPサーバーをClaude Codeに登録するには、以下のコマンドを実行します。
claude mcp add my-tools node /path/to/my-mcp-server/dist/index.js
またはプロジェクトの.claude/mcp.jsonに直接記述します。
{
"mcpServers": {
"my-tools": {
"command": "node",
"args": ["/path/to/my-mcp-server/dist/index.js"],
"env": {
"DATABASE_URL": "postgresql://localhost:5432/mydb"
}
}
}
}
実践的なMCPサーバー例
例1:社内ナレッジベース検索
社内のConfluenceやNotionからドキュメントを検索するMCPサーバーです。
server.tool(
"search_knowledge_base",
"社内ナレッジベースを検索します",
{
query: z.string().describe("検索キーワード"),
space: z.string().optional().describe("検索対象のスペース名"),
},
async ({ query, space }) => {
const response = await fetch(
`${CONFLUENCE_URL}/rest/api/content/search?cql=text~"${query}"`,
{ headers: { Authorization: `Bearer ${CONFLUENCE_TOKEN}` } }
);
const data = await response.json();
return {
content: [{ type: "text", text: formatResults(data) }],
};
}
);
例2:Slack通知送信
Claude Codeの作業完了時にSlackに通知を送るツールです。
server.tool(
"notify_slack",
"Slackチャンネルにメッセージを送信します",
{
channel: z.string().describe("チャンネル名(#付き)"),
message: z.string().describe("送信するメッセージ"),
},
async ({ channel, message }) => {
await slackClient.chat.postMessage({
channel,
text: message,
});
return {
content: [{ type: "text", text: `${channel}に送信しました` }],
};
}
);
セキュリティのベストプラクティス
MCPサーバーを構築する際は、以下のセキュリティ原則を守ることが重要です。
- 最小権限の原則 — ツールに与える権限は必要最小限にする
- 入力バリデーション — zodスキーマで入力を厳密に検証する
- シークレット管理 — APIキーやトークンはenvフィールドで環境変数として渡す
- ログ記録 — ツールの実行ログを記録し、監査可能にする
- レート制限 — 外部APIへの呼び出し頻度を制限する
テストとデバッグ
MCPサーバーのテストには、Anthropicが提供するMCP Inspectorが便利です。
npx @modelcontextprotocol/inspector node dist/index.js
ブラウザでインスペクターが開き、各ツールを手動で実行して動作を確認できます。
まとめ
MCPサーバーの構築はClaude Codeの活用範囲を大幅に広げる手段です。公式SDKを使えば最小限のコードで独自ツールを実装でき、データベース操作・外部API連携・社内システムとの統合など多様なユースケースに対応できます。まずは小さなツールから始めて、段階的に機能を拡張していくアプローチがおすすめです。
よくある質問
Q. MCPサーバーとは何ですか?
Model Context Protocol(MCP)はAnthropicが策定したオープンプロトコルで、AIモデルが外部ツールやデータソースにアクセスするための標準規格です。MCPサーバーはこのプロトコルに準拠したサーバーで、Claude Codeに新しい機能(ツール)を提供します。
Q. MCPサーバーの構築にはどの程度の技術力が必要ですか?
Node.jsまたはPythonの基礎知識があれば構築可能です。公式SDKがプロトコルの詳細を抽象化しているため、ツールの入出力を定義するだけで動作します。基本的なMCPサーバーなら50行程度のコードで実装できます。
Q. MCPサーバーをチームで共有するにはどうすればよいですか?
MCPサーバーの設定はプロジェクトルートの.claude/mcp.jsonに記述します。このファイルをgitリポジトリに含めれば、チームメンバー全員が同じMCPサーバーを利用できます。npmパッケージとして公開する方法もあります。
Written by
ClaudeCode.Tokyo編集部
Claude Code専門メディア「ClaudeCode.Tokyo」の編集部です。AI×開発の最新情報を、初心者にもわかりやすくお届けします。