Model Context Protocol(MCP)は、Anthropic のClaudeや開発者向けツールのClaude Codeのようなモデルが、安全で標準化された方法で外部のツール、データソース、プロンプトを呼び出せるようにするオープンな標準です。
このガイドでは、ゼロから独自の MCP サーバーを構築し、Claude Code にカスタム機能へのアクセスを提供する方法を順を追って解説します。これにより、組み込み機能をはるかに超える拡張が可能になります。
Model Context Protocol(MCP)とは?
MCP(Model Context Protocol)は、言語モデルクライアント(Claude、Claude Code、その他の LLM フロントエンドなど)がツールサーバーやデータソースに接続する方法を標準化するために設計されたオープン仕様です。MCP は「LLM にとっての USB-C ポート」と考えてください。トランスポート/JSON-RPC スキーマを定義し、サーバーが次の3種類の機能を公開するための共通の方法を定義します。
- リソース — クライアントが読み取れるファイルやドキュメント状のデータ(例:データベースの行、テキストファイル、JSON ペイロード)。
- ツール — モデルがホストに実行を依頼できる呼び出し可能な関数(ユーザー承認あり)。
- プロンプト — モデル/クライアントが呼び出せる再利用可能なプロンプトテンプレートやワークフロー。
MCP は複数のトランスポート(stdio、HTTP、SSE)をサポートし、スキーマ、SDK、サンプルサーバーを提供するため、独自にワイヤフォーマットを作る必要はありません。プロトコルは公開で保守されており(仕様+SDK)、チュートリアルやサーバーギャラリーも用意されているため、導入を加速できます。
MCP はどのように設計されている?
MCP のアーキテクチャは意図的にシンプルでモジュール式です。中核要素は MCP のサーバー、MCP のクライアント、そして両者間で JSON-RPC でフレーミングされたメッセージを運ぶトランスポートです。Claude Code(や他の MCP クライアント)向けのサーバーを構築する際に触れる主要コンポーネントは以下の通りです。
サーバー、クライアント、プロトコル
- MCP サーバー — ツール、リソース、プロンプトを公開するサービス。ツールは副作用の実行やデータ取得を行い、リソースは読み取り専用のコンテンツを提供し、プロンプトはクライアントがモデルにサンプリングを依頼できる再利用可能なテンプレートです。
- MCP クライアント(ホスト) — 通常は LLM ホストの一部(例:Claude Code、VS Code プラグイン、ブラウザクライアント)。利用可能なサーバーを検出し、ツールの説明をモデルに提示し、モデル主導の呼び出しをサーバーへルーティングします。
- プロトコル — メッセージは JSON-RPC でエンコードされます。仕様ではライフサイクルイベント、ツールのディスカバリー、呼び出し、完了/サンプリング、および構造化された結果をクライアントとモデルに返送する方法が定義されています。
通信パターン(ツール使用時の流れ)
- クライアントがユーザーメッセージをモデルへ送信する。
- モデルがコンテキストを分析し、MCP で公開されたツール(複数の場合もあり)を呼び出すと判断する。
- クライアントが選択したトランスポートで MCP サーバーへツール呼び出しを転送する。
- サーバーがツールを実行して結果を返す。
- モデルがツールの出力を受け取り、ユーザーへの最終回答を作成する。
実装の基本要素
- JSON-RPC のメッセージは MCP スキーマに従います。
- ツール定義はサーバーのディスカバリー応答で公開され、クライアントは UI でモデルに提示できます。
- リソースはクライアントから
@source:path構文で参照されます(例:@postgres:...)。これにより、モデルは巨大なデータをプロンプトにインライン展開することなく外部コンテンツを参照できます。
なぜ Claude Code を MCP サーバーと統合するのか?
Claude Code はコード/開発者中心のワークフロー(エディタ/IDE 統合、コード理解など)に特化した Anthropic のソリューションです。社内ツール(ソース検索、CI ランナー、チケットシステム、プライベートレジストリなど)を MCP サーバーとして公開することで、Claude Code はコーディングの会話やエージェントのフロー内でそれらを第一級のツールとして呼び出せるようになります。
Claude Code を MCP サーバーと統合すると、コーディングエージェントに実務的で本番対応の機能が備わります。
1. モデルに実際のシステムで動作させる
Claude Code は MCP サーバーに対して、課題管理の問い合わせ、データベースクエリの実行、長文ドキュメントの読み取り、GitHub PR の作成などを依頼できます。これにより、コーディングセッション内からエンドツーエンドの自動化が可能になります。これは Claude Code のドキュメントで明示的にサポートされています(例:Postgres、Sentry の問い合わせや PR の作成)。
2. 大規模データや専門ロジックのオフロード
すべてのデータソースをプロンプトに埋め込む(トークンを消費する)代わりに、データやツールを MCP 経由で公開します。モデルはツールを呼び出して構造化された応答を受け取り、それをもとに推論します。これによりトークン消費が減り、サーバー側で重い処理(DB クエリ、長いファイルの読み取り、認証など)を扱えます。
3. セキュリティとガバナンス
MCP はサーバーレイヤーでアクセス制御と監査を一元化します。組織は承認済みサーバーをホワイトリスト化し、利用可能なツールを制御し、出力を制限できます。Claude Code はエンタープライズ向け MCP 設定やスコープごとの同意にも対応しています。
4. 再利用性とエコシステム
MCP サーバーはクライアントやチーム間で再利用可能です。一度構築すれば、多くの Claude/LLM クライアントが同じサービスを利用でき(あるいは実装を差し替えでき)ます。
始める前に必要なものは?
最低要件
- Python 3.10+ を備えた開発用マシン(例では Python を使用)。代替として Node/その他言語も MCP SDK でサポートされています。
uv(Astral のツール)または MCP stdio サーバーを実行する同等のランナー(MCP チュートリアルはuvを使用)。インストール手順は以下に記載。- Claude Code をインストール済み、またはクライアント(デスクトップまたは CLI)へアクセスしてサーバーの登録・テストが可能な状態;もしくは MCP 対応の任意のクライアント。Claude Code は HTTP、SSE、ローカル stdio サーバーをサポート。
- セキュリティ上の注意:チームやエンタープライズ環境では、信頼できる MCP サーバーのみを Claude Code に追加してください。MCP はサーバーに機微データへのアクセスを与え、サーバーが悪意のあるコンテンツを返すとプロンプトインジェクションのリスクがあります。
Claude Code CLI のインストールと検証方法
こちらは Claude Code インストールと使用ガイド です。
1) まとめ — 推奨インストール方法
macOS/Linux ではネイティブインストーラー(推奨)または Homebrew を使用します。必要に応じて NPM も利用可能です。Windows には PowerShell/CMD インストーラーがあります。出典:公式の Claude Code ドキュメントと GitHub。
2) 前提条件
- macOS 10.15+、Ubuntu 20.04+/Debian 10+、または Windows 10+(Windows では WSL を推奨)。
- NPM インストール方法を選ぶ場合のみ Node.js 18+ が必須。
3) インストールコマンド(いずれかを選択)
ネイティブ(推奨 — Node 依存なし)、macOS / Linux / WSL:
curl -fsSL https://claude.ai/install.sh | bash
# optional: install latest explicitly
curl -fsSL https://claude.ai/install.sh | bash -s latest
# or install a specific version
curl -fsSL https://claude.ai/install.sh | bash -s 1.0.58
Windows PowerShell:
irm https://claude.ai/install.ps1 | iex
# or for latest: & (::Create((irm https://claude.ai/install.ps1))) latest
(これらは公式のネイティブインストーラースクリプトです)。
NPM(Node ベースのグローバルインストールを望む場合):
# requires Node.js 18+
npm install -g @anthropic-ai/claude-code
sudo npm install -g は使用しないでください — sudo によるグローバルインストールは権限/セキュリティ上の問題につながります。権限エラーに遭遇した場合は、nvm を使うか、sudo を使わずに npm のグローバルプレフィックスを修正してください。
4) バイナリがインストールされたかの検証(基本チェック)
インストール直後にローカルで以下を実行:
# is the command on PATH?
which claude
# version (or -v)
claude --version
# or
claude -v
# help (sanity check)
claude --help
期待される結果:which がパス(例:/usr/local/bin/claude や ~/.nvm/.../bin/claude)を表示し、claude --version がセムバー形式の文字列を出力します。ドキュメントと README では claude が主要な CLI エントリーポイントであると示されています。
5) インストールの健全性と設定の検証(推奨チェック)
a) claude doctor を実行:
claude doctor
これは組み込みの診断ツールで、インストール種別、一般的な問題(npm の権限問題など)、ripgrep のような依存関係をチェックし、修正案を提示します。ドキュメントではインストール直後の claude doctor 実行が明確に推奨されています。
b) スモークテスト(非対話)を実行
プロジェクトディレクトリで:
cd /path/to/your/project
claude -p "Explain this project in 3 sentences"
これはプリントモード(-p)で単一のプロンプトを送信して終了します。CI や簡易な機能確認に適しています。
c) 認証の検証(CLI が Anthropic に到達できることを確認)
Claude Code は複数の認証フロー(コンソールの OAuth、API キー、プロバイダー統合)をサポートしています。一般的な確認事項:
- API キーを使用する場合(CI/ヘッドレス/ローカル環境変数):
export ANTHROPIC_API_KEY="sk-..."
# then
claude auth status
claude auth whoami # or `claude auth whoami` / `claude whoami` depending on version
CometAPI の API キーで Claude Code を利用できます。CometAPI 経由で Claude の API を利用すると 20% の割引が受けられます。
- コンソール経由で OAuth を使用した場合 — 次を実行:
claude auth status
claude auth whoami
アカウント/プラン情報、または認証済みである旨の確認が表示されるはずです。
ステップ別の環境準備
以下に、一般的な 2 つの開発スタック(TypeScript と Python)を準備する具体的な手順と、すべてが正常に動作することを確認するための簡易チェックを示します。
H3 — A. TypeScript / Node セットアップ(最速の方法)
- プロジェクトを作成して SDK をインストール:
mkdir mcp-demo && cd mcp-demo
npm init -y
npm install @modelcontextprotocol/sdk express zod
npm install --save-dev typescript tsx @types/node @types/express
server.tsを作成します。(「すばやく構築する方法」セクションに完全な例を掲載しています。)- 実行:
npx -y tsx server.ts
- ローカルで MCP Inspector を使ってテストするか、Claude Code に追加:
npx @modelcontextprotocol/inspector
# or (for Claude Code)
claude mcp add --transport http my-server http://localhost:3000/mcp
(Inspector と Claude のコマンドで、ディスカバリーの検証とツールの呼び出しが可能です。)
Claude Code 用の MCP サーバーを素早く構築する方法は?
クイックチェックリスト
-
サーバーを起動(Streamable HTTP を推奨):
node server.tsまたはuvicorn server:app。 -
開発マシンから次のいずれかを実施:
- MCP Inspector を使用して検証(
npx @modelcontextprotocol/inspector)し、tools/listとresources/listを確認;または - サーバーを Claude Code に追加:
claude mcp add --transport http <name> http://<host>:<port>/mcp(クライアントがリモート MCP をサポートしていれば、Web UI のフローに従ってください)。
Anthropic の Messages API コネクタでリモート MCP を使用する予定がある場合(別クライアント不要)、Claude のドキュメントを参照してください — ベータ用ヘッダーが必要な場合があります(正確なヘッダーと現状のサポート状況はドキュメントを確認)。
以下に、Claude Code(または MCP Inspector)へ接続できる、コピー&実行可能なコンパクトなサーバー例を 2 つ示します。TypeScript の例は Express + TypeScript SDK を使用し、Python の例は FastAPI のマウント方法を示します。
注意:以下のコードは公開 SDK の例に基づく最小構成で可読性を重視しています。本番運用では、認証、ログ、レート制限、SDK の既定値を超える入力検証を追加してください。
例 1:TypeScript + Express(Streamable HTTP)
server.ts を作成(完全版):
// server.ts
import express from "express";
import * as z from "zod/v4";
import { McpServer, ResourceTemplate } from "@modelcontextprotocol/sdk/server/mcp.js";
import { StreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/streamableHttp.js";
const server = new McpServer({ name: "claude-code-demo", version: "0.1.0" });
// Register a simple tool: add two numbers
server.registerTool(
"add",
{
title: "Add",
description: "Add two numbers a and b",
inputSchema: { a: z.number(), b: z.number() },
outputSchema: { result: z.number() }
},
async ({ a, b }) => {
const output = { result: a + b };
return {
content: ,
structuredContent: output
};
}
);
// Register a resource: greet user (dynamic)
server.registerResource(
"greeting",
new ResourceTemplate("greeting://{name}", { list: undefined }),
{ title: "Greeting", description: "Return a greeting for the name" },
async (uri, params) => {
return {
contents:
};
}
);
// Express + Streamable HTTP transport
const app = express();
app.use(express.json());
app.post("/mcp", async (req, res) => {
const transport = new StreamableHTTPServerTransport({ enableJsonResponse: true });
// Close transport when connection closes
res.on("close", () => transport.close());
await server.connect(transport);
await transport.handleRequest(req, res, req.body);
});
const port = parseInt(process.env.PORT || "3000", 10);
app.listen(port, () => console.log(`MCP server listening: http://localhost:${port}/mcp`));
実行:
npm install
npx -y tsx server.ts
続いて Claude Code に接続(例):
# Add the remote server to your Claude Code MCP list (local dev)
claude mcp add --transport http my-demo http://localhost:3000/mcp
この例は公式の TypeScript SDK クイックスタートに基づいており、ツールとリソースの登録方法、およびそれらを Streamable HTTP で公開する方法を示しています。
例 2:Python + FastAPI(FastMCP + Streamable HTTP)
server.py を作成(完全版):
# server.py
from fastapi import FastAPI
from mcp.server.fastmcp import FastMCP
app = FastAPI()
mcp = FastMCP("claude-python-demo", stateless_http=True)
# tool: simple sum
@mcp.tool()
def add(a: int, b: int) -> dict:
"""Add two integers"""
return {"result": a + b}
# resource: simple greeting resource template
@mcp.resource("greeting://{name}")
def greeting(name: str):
return {"contents": }
# mount the streamable-http MCP endpoint (FastMCP exposes an ASGI app)
app.mount("/mcp", mcp.streamable_http_app())
# optional endpoint to demonstrate other API routes
@app.get("/")
async def root():
return {"status": "OK"}
実行:
uvicorn server:app --reload --port 8000
Inspector で接続:
npx @modelcontextprotocol/inspector
# In Inspector select Streamable HTTP and enter http://localhost:8000/mcp
Python SDK の例と FastMCP のユーティリティにより、@mcp.tool() と @mcp.resource() で装飾した関数をモデルが検出・呼び出せるように簡単に登録できます。
Claude Code は実際にどのようにツールを呼び出す?
LLM がツールを使用すると判断した場合、クライアントは MCP サーバーへ JSON-RPC の呼び出しを送信します。サーバーは要求されたツール(例:DB クエリの実行、テストの実行、外部 API 呼び出しなど)を実行し、構造化コンテンツと表示用コンテンツを返します。クライアント(Claude Code)は構造化出力をモデルのコンテキストに含めることで、モデルが信頼できるデータに基づいて推論を継続できます。TypeScript SDK は inputSchema と outputSchema(zod)での登録をサポートしており、引数と出力が検証され、機械的に型付けされます。
どのテスト・デバッグツールを使うべき?
MCP Inspector
MCP Inspector は MCP サーバーのテスト用に公式提供されるビジュアル開発ツールです。サーバー(stdio、SSE、streamable-HTTP)へ接続し、ツール一覧の表示、手動呼び出し、JSON-RPC メッセージのライフサイクルの検査が可能で、開発中に非常に有用です。npx @modelcontextprotocol/inspector で起動します。
ローカルとリモートのテスト
- ローカル(stdio) — デスクトップアプリやオフラインデバッグに向いた素早い反復サイクル。
- Streamable HTTP — Inspector でのテストや、
claude mcp addCLI、Messages API の MCP コネクタを用いて Claude Code へ接続してリモートテスト。サーバーで要求される認証ヘッダーがある場合は必ず付与してください。
結論
MCP は、現代の LLM と実際にデータを保持しアクションを実行するシステムを橋渡しする実践的な手段です。コードのワークフローにおいて、MCP サーバーと統合された Claude Code は、リポジトリ、CI、課題管理、カスタムツール群へ構造化され監査可能なアクセスを提供し、より精密な自動化と安全な副作用を実現します。TypeScript と Python の公式 SDK、リモートホスティング向けの Streamable HTTP、MCP Inspector のようなツールにより、数分で最小サーバーを構築し、本番展開へ向けて反復できます。
開発者は Claude Sonnet 4.5 API や Claude Opus 4.1 API などに CometAPI 経由でアクセスできます。最新のモデルバージョン は常に公式サイトに合わせて更新されています。導入を開始するには、まず Playground でモデルの機能を試し、詳細手順は API ガイド を参照してください。アクセス前に、CometAPI にログインして API キーを取得していることを確認してください。CometAPI は公式価格よりもはるかに低価格での提供により、統合を支援します。
Ready to Go?→ 今すぐ CometAPI に登録
