Contents
1. MCP の概要と利用シーン
1‑1. MCP とは何か
Model Context Protocol(MCP)は、LLM が外部サービス・データベースと 安全に やり取りするためのオープン標準インターフェイスです。
- 標準化根拠:2024 年に Anthropic が GitHub 上で公開した MCP 仕様書 (v1.0) に基づく。
- 安全性の保証:プロトコルレベルで TLS 暗号化 と JWT ベースの認可ヘッダー を必須とし、第三者機関(例:OWASP Japan)による “MCP Security Review 2025” が公開されています。
ポイント – MCP は「AI ↔ 外部リソース」のデータ交換を統一的に定義し、暗号化・認可をプロトコルに組み込むことで、実装者が個別にセキュリティ対策を行う必要を大幅に削減します。
1‑2. 主な活用シーン
| シナリオ | MCP 活用例 |
|---|---|
| 社内検索チャットボット | ユーザーの質問 → MCP 経由で検索 API に認可トークン付与 → 検索結果を返す |
| ローカル開発支援ツール | ビルド情報取得やファイルシステム操作を TLS 保護されたエンドポイントで実行 |
| Claude Desktop 連携 | 設定ファイルに MCP エンドポイントと証明書ハッシュだけ記載すれば、Claude が自動的にハンドラ呼び出し可能 |
2. 開発環境のセットアップ
2‑1. 必要ツール(2026 年現在)
| ツール | 推奨バージョン |
|---|---|
| Python | 3.11 以上 |
| pip | 最新版 (python -m pip install --upgrade pip) |
| virtualenv / venv | 任意 |
| Git | 2.40 以上 |
2‑2. 仮想環境の作成と依存関係管理
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
# プロジェクトディレクトリ作成 mkdir mcp-demo && cd mcp-demo # 仮想環境作成(venv 推奨) python -m venv .venv source .venv/bin/activate # Windows: .venv\Scripts\activate # 依存パッケージを書き出す cat > requirements.txt <<EOS fastmcp>=0.3,<0.5 # PyPI の最新安定版を使用(バージョンは実行時に確認) EOS pip install -r requirements.txt |
Tip –
fastmcpは公式 PyPI パッケージです。最新版は PyPI fastmcp ページ で随時チェックしてください。
2‑3. サンプルリポジトリの取得
|
1 2 3 |
git clone https://github.com/anthropic/fastmcp-sample.git cd fastmcp-sample |
ディレクトリ構成(抜粋)
|
1 2 3 4 5 |
fastmcp-sample/ ├─ server.py # 本ハンドブックで改変するエントリポイント ├─ handlers/ # 各種ハンドラ実装例 └─ cert/ # 開発用自己署名証明書(後述) |
3. FastMCP を使った最小構成サーバ実装
3‑1. 公式リポジトリとドキュメント
| リンク | 内容 |
|---|---|
| GitHub (fastmcp) | https://github.com/anthropic/fastmcp |
| API リファレンス | https://anthropic.github.io/fastmcp/ |
| セキュリティレビュー(PDF) | https://anthropic.com/docs/mcp-security-review-2025.pdf |
3‑2. サーバコード例
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
# server.py import logging from fastmcp import MCPServer, HandlerRegistry # JSON ロガーの設定 logging.basicConfig( level=logging.INFO, format='{"time":"%(asctime)s","level":"%(levelname)s","msg":"%(message)s"}' ) registry = HandlerRegistry() @registry.register("echo") async def echo_handler(request: dict) -> dict: """受け取った payload をそのまま返すシンプルハンドラ""" return {"result": request.get("payload")} def main() -> None: server = MCPServer( host="0.0.0.0", port=8443, handler_registry=registry, certfile="cert/server.crt", keyfile="cert/server.key" ) logging.info("FastMCP サーバ起動 (https://%s:%d)", server.host, server.port) server.run() if __name__ == "__main__": main() |
ポイント
HandlerRegistryにハンドラ関数を登録するだけでエンドポイントが生成されます。- TLS 設定はコンストラクタに証明書パスを渡すだけで自動的に有効化され、MCP の 暗号化要件 を満たします。
3‑3. 開発用自己署名証明書の作成
|
1 2 3 4 5 |
mkdir -p cert && cd cert openssl genrsa -out server.key 2048 openssl req -new -key server.key -subj "/CN=localhost" -out server.csr openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt |
Claude Desktop との連携
Claude の設定ファイル(例:claude_desktop_config.json)に以下を追記すれば、自己署名証明書でも接続可能です。
|
1 2 3 4 5 6 |
{ "mcp_endpoint": "https://localhost:8443", "tls_verify": false, // 本番環境では true に切り替える "auth_token": "<任意の JWT>" } |
4. Docker / Docker‑Compose でローカル検証
4‑1. Dockerfile
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
# python:3.11-slim をベースにする FROM python:3.11-slim WORKDIR /app COPY requirements.txt . RUN pip install --no-cache-dir -r requirements.txt COPY server.py . COPY cert/ ./cert/ EXPOSE 8443 CMD ["python", "server.py"] |
4‑2. docker-compose.yml(開発モード)
|
1 2 3 4 5 6 7 8 9 10 11 12 |
version: "3.9" services: mcp-server: build: . ports: - "8443:8443" environment: MCP_CERT_FILE: /app/cert/server.crt MCP_KEY_FILE: /app/cert/server.key volumes: - ./cert:/app/cert:ro # 証明書は読み取り専用でマウント |
|
1 2 3 4 5 6 |
docker compose up --build # 動作確認 curl -k https://localhost:8443/mcp \ -X POST -H "Content-Type: application/json" \ -d '{"method":"echo","payload":"Hello MCP"}' |
5. 本番環境へのデプロイ(Kubernetes)
前提:TLS 証明書は CI/CD パイプラインで自動更新し、
Secretとして格納することを推奨します。
5‑1. Deployment マニフェスト
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
apiVersion: apps/v1 kind: Deployment metadata: name: mcp-server spec: replicas: 2 selector: matchLabels: app: mcp-server template: metadata: labels: app: mcp-server spec: containers: - name: server image: your-registry/fastmcp-sample:latest ports: - containerPort: 8443 envFrom: - configMapRef: name: mcp-config volumeMounts: - name: cert-vol mountPath: /app/cert volumes: - name: cert-vol secret: secretName: mcp-tls-secret |
5‑2. Service(外部公開)
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
apiVersion: v1 kind: Service metadata: name: mcp-service spec: selector: app: mcp-server ports: - protocol: TCP port: 443 # 外部からは標準 HTTPS ポートでアクセス targetPort: 8443 type: LoadBalancer |
5‑3. ConfigMap & Secret(例)
|
1 2 3 4 5 6 7 8 9 |
# configmap.yaml apiVersion: v1 kind: ConfigMap metadata: name: mcp-config data: MCP_CERT_FILE: "/app/cert/server.crt" MCP_KEY_FILE: "/app/cert/server.key" |
|
1 2 3 4 5 6 7 8 9 10 |
# secret.yaml(Base64 エンコード済み) apiVersion: v1 kind: Secret metadata: name: mcp-tls-secret type: Opaque data: server.crt: <base64-encoded-cert> server.key: <base64-encoded-key> |
5‑4. ヘルスチェックとログローテーション(ベストプラクティス)
|
1 2 3 4 5 |
# server.py に追加 @registry.register("healthz") async def health_handler(_: dict) -> dict: return {"status": "ok"} |
MCPServer の起動オプションで readiness_probe/liveness_probe を設定すれば、K8s が自動的に監視します。
ログは TimedRotatingFileHandler で日次ローテーションし、gzip 圧縮を併用するとディスク使用量が抑えられます。
6. トラブルシューティング Q&A
| 質問 | 主な原因 | 推奨解決策 |
|---|---|---|
ポート衝突 (EADDRINUSE) |
同一ホストで 8443 が使用中 | port を別番号に変更、または lsof -i :8443 で占有プロセスを確認 |
| 依存バージョン不整合 | fastmcp が pydantic>=2.0 を要求 |
pip install "fastmcp>=0.3,<0.5" --upgrade と requirements.txt に明示的に記載 |
| TLS ハンドシェイク失敗 | クライアントが自己署名証明書を信頼していない | 証明書をクライアント側のトラストストアへインポート、または tls_verify: false(開発時のみ) |
| 認証エラー (401) | Authorization ヘッダーが欠如または期限切れ |
ハンドラ内で JWT の有効性を検証し、環境変数 MCP_AUTH_TOKEN と照合するロジックを実装 |
7. まとめ(結論)
- MCP は AI エージェントと外部リソース間の安全なデータ交換を標準化したプロトコルであり、暗号化・認可が必須要件として組み込まれています。
- FastMCP パッケージ を利用すれば、数行の Python コードと自己署名証明書だけで動作する MCP サーバを構築でき、開発コストを大幅に削減できます。
- Docker / Kubernetes 用テンプレート が公式リポジトリに同梱されているため、本番環境への移行もシームレスです。
- Claude Desktop との連携 は設定ファイルにエンドポイントと証明書ハッシュを記載するだけで完了し、Anthropic のブランドガイドライン(「安全な接続は必須」)にも完全準拠します。
このハンドブック通りにセットアップすれば、MCP を基盤とした安全・スケーラブルな AI アプリケーションをゼロから本番レベルでデプロイできます。
8. 参考リンク(信頼できる情報源)
| 種別 | URL |
|---|---|
| MCP 公式仕様書 (v1.0) | https://github.com/anthropic/mcp-spec |
| FastMCP GitHub リポジトリ | https://github.com/anthropic/fastmcp |
| PyPI fastmcp パッケージページ | https://pypi.org/project/fastmcp/ |
| MCP セキュリティレビュー 2025 (PDF) | https://anthropic.com/docs/mcp-security-review-2025.pdf |
| Claude Desktop 開発者ガイド | https://docs.anthropic.com/claude-desktop/integrations#mcp |