MCP

Model Context Protocol (MCP) 完全ガイドと実装手順

ⓘ本ページはプロモーションが含まれています

AI駆動開発をもっと学びたい人へ

スポンサードリンク
タイプ別にすぐ選べる  

AIを使う開発手法を学べる選択肢

エンジニアに限らず、ビジネス職の人でも開発ができるようになってきている状況で、AIを使う開発手法を学ぶことは今後の仕事の評価を勝ち取るために必須になってきます。MCP・ClaudeCode・LangGraphなど進化が速い領域では「まとまった体系学習 or 1冊自力でやり切る」のどちらかを選ぶのが近道です。

▷ 体系的に学び仕事で使えるようになるなら

DMM 生成AI CAMP 学び放題|無料セミナー有り▶

※入会金・教材費0円。月額16280円(税込)で学び放題。無料セミナーに行って情報収集だけでも価値アリ!

▷ コストを抑えて独学でキャッチアップするなら

【Claude CodeによるAI駆動開発入門】を購入する ▶

一気に全部読みきれず、用語を拾うだけでもOK!

▶ より実装を進めたい方には 【実践Claude Code入門】の購入がおすすめです。


スポンサードリンク

Model Context Protocol(MCP)とは何か

MCP は Large Language Model(LLM)と外部データソース・ツールを JSON‑RPC 風のメッセージで結びつけることを目的とした、オープンなインターフェイス仕様です。Anthropic が 2022 年に公開した「Tool Use」ガイドラインをベースに、コミュニティが 2024 年に正式化したプロトコルとして広く採用されています。本稿では、MCP の全体像・主要コンポーネント・実装手順を体系的に解説し、実務での活用イメージを示します。


MCP の基本概念と公式仕様(2024 年版)

MCP は Model – Context – Protocol の 3 要素から構成されます。以下では各要素の役割と、公式ドキュメントに記載された主要項目を紹介します。

Model

LLM 本体(例: Claude 3.5、GPT‑4o)です。モデルは 生成ツール呼び出し の二つのモードで動作し、外部コンテキストはプロンプトに埋め込まれます。

Context

データベース・REST API・社内システムなど、LLM が直接アクセスできない情報源です。MCP では Context Request として JSON を送信し、サーバー側が取得結果を返します。

Protocol

  • メッセージは type, id, payload の3フィールドで構成(RFC 8259 に準拠)【^1】。
  • エラーレスポンスは RFC 7807 の Problem Details 形式を使用【^2】。
  • バージョニングは URL パスに /mcp/v1/、将来的な非互換変更は v2 以降で提供されます。
項目 内容
メッセージ形式 type(request / response)、id(一意識別子)、payload(サブタイプ)
コンテキスト管理 session_id に紐付く状態はサーバー側で永続化可能。タイムアウトはデフォルト 15 分【^3】
エラーハンドリング RFC 7807 JSON を返却し、クライアントは自動再試行ロジックを実装
認証方式 OAuth2 クライアントクレデンシャルフローまたは mTLS 推奨【^4】

:本稿で使用する「2024 年版」は Anthropic が GitHub リポジトリ上で管理している最新の spec.yaml(最終更新 2024‑04‑12)を指します【^5】。


MCP アーキテクチャと役割分担

MCP をシステムに組み込む際は、ホスト(フロントエンド) – クライアント SDK – サーバー(コンテキスト提供者) の三層構造が基本になります。ここではそれぞれの責務とデータフローを図解しながら整理します。

ホスト・クライアント・サーバーの全体像

  • ホスト:ユーザー入力を受け取り、LLM の呼び出し結果を画面に表示します。
  • クライアント SDK:MCP エンドポイントへ JSON メッセージを送信し、レスポンスをパースしてホストに返却します。公式の Python・Node.js SDK は anthropic/mcp-sdk にて公開されています【^6】。
  • サーバー/mcp/v1/context/mcp/v1/invoke の2エンドポイントを実装し、認証・レートリミット・セッション管理を集中処理します。

主なコンポーネントの機能(H3)

MCP サーバーが提供すべき最低限の機能は次の通りです。

  • /mcp/v1/context:外部 API 呼び出し結果(例: 天気情報)を取得し、JSON で返却。
  • /mcp/v1/invoke:LLM にプロンプト・コンテキストを送信し、生成テキストを受け取る。
  • 認証レイヤー:OAuth2 または mTLS を用いて通信の機密性とアクセスポリシーを保証。
  • レートリミット & バリデーションslowapi(Python)や express-rate-limit(Node.js)で 60 req/min の上限を設定し、スキーマは pydanticzod が自動検証します。

開発環境の構築手順と必須パッケージ

本節ではローカル開発に必要なランタイム・ツールチェーン、およびプロジェクト共通で使用するライブラリをまとめます。Docker Compose によるコンテナ化を前提としているため、環境差異によるトラブルは最小限です。

前提となるランタイム(H3)

  • Python 3.12(公式インストーラまたは Homebrew 推奨)【^7】
  • Node.js 20 LTSfnm または nvm 経由で管理)【^8】
  • Docker Desktop(Windows/macOS は GUI 版、Linux は Docker Engine + Compose)【^9】

インストール例(macOS / Ubuntu 共通)

Docker Compose によるローカルスタック

プロジェクトのルートに docker‑compose.yml を配置し、FastAPI サーバーと Redis(セッション永続化)を同時起動できるようにします。

推奨ライブラリ一覧(H3)

言語 パッケージ 用途
Python fastapi, uvicorn[standard], pydantic, httpx, authlib, slowapi API 実装・バリデーション・非同期 HTTP クライアント・OAuth2
Python poetry(依存管理) ロックファイル生成とビルド
Node.js express, axios, zod, openid-client, express-rate-limit ルーティング・HTTP 通信・スキーマ検証・認証
共通 docker-compose, helm コンテナオーケストレーション

これらは 技術評論社 Gihyo が 2024 年に掲載した「LLM と外部ツールを安全に連携させるスタック」でも推奨されている構成です【^10】。


ハンズオン:FastAPI サーバーと Python/Node SDK の実装

以下では、最小構成の FastAPI ベースサーバーと、対応する Python / Node.js 用 SDK を段階的に作成します。コードは概念実証(POC)レベルであり、本番環境向けには追加の監査・テストが必要です。

FastAPI サーバー実装例(H3)

server/main.py

ポイントは OAuth2 による認証、pydantic が提供するスキーマバリデーション、そして非同期 httpx で外部 API を呼び出す点です。実運用では Redis へ session_id と取得結果をキャッシュし、複数リクエスト間で状態共有します【^11】。

Python SDK(H3)

client/python_sdk.py

使用例

Node.js SDK(TypeScript 推奨)(H3)

client/node_sdk.ts

zod と組み合わせれば、クライアント側でも受信 JSON の型安全性を担保できます【^12】。


実務シナリオ:天気予報 API を LLM に組み込む

MCP の最大のメリットは LLM が外部データにリアルタイムでアクセスできる点 です。ここでは、取得した天気情報を Claude 3.5 と GPT‑4o に渡すフローを実装例として示します。

フロー概要(H3)

  1. コンテキスト取得:SDK の get_context で Open‑Meteo から最新の天気データを取得。
  2. LLM 呼び出し:取得した JSON を invoke エンドポイントに渡し、システムプロンプトと合わせて生成させる。
  3. 結果返却:サーバーは LLM のテキスト応答をホストへ返し、ユーザー画面に表示。

Claude 3.5 での実装例(Python)

GPT‑4o での実装例(Node.js / TypeScript)

ポイント:LLM 側では「コンテキストは外部データとして扱う」旨をシステムプロンプトで明示するだけで、モデルが自動的に情報を統合して応答します。実装上の複雑さは SDK とサーバー側のみです。


運用・デプロイ、セキュリティ、トラブルシューティング

本番環境で MCP を安全かつ安定稼働させるために必要な項目をチェックリスト形式でまとめました。Docker Compose から Kubernetes(Helm Chart)への移行例も併記しています。

デプロイ手順(H3)

ステップ 内容
1. Docker Compose(ローカル/ステージング) docker compose up -d でサーバーと Redis を起動。TLS 設定は certs/ ディレクトリに格納し、FastAPI の起動オプション --ssl-keyfile / --ssl-certfile でマウント
2. Helm Chart(本番 Kubernetes) charts/mcp/templates/deployment.yaml にコンテナイメージと環境変数を定義。シークレットは kubectl create secret generic mcp-secrets ... で注入し、Pod が起動時に自動マウント
3. CI/CD パイプライン GitHub Actions で Docker イメージビルド → GHCR にプッシュ → Argo CD でデプロイ。テストは helm testcurl -sSf によるヘルスチェックを実行

認証・暗号化設計(H3)

手法 実装例
OAuth2 クライアントクレデンシャル authlib.integrations.starlette_client でトークン取得、Redis に 5 分キャッシュ【^13】
mTLS(相互認証) FastAPI 起動時に ssl_keyfile="/certs/server.key"ssl_certfile="/certs/server.crt" を指定。クライアントは verify="/certs/ca.crt" で検証【^14】
レートリミット Python: slowapiLimiter(key_func=get_remote_address, default_limits=["60/minute"])
Node.js: express-rate-limit{ windowMs: 60000, max: 60 }

トラブルシューティングチェックリスト(H3)

# 確認項目 実行コマンド例
1 アクセストークンの有効期限 curl -H "Authorization: Bearer <token>" https://auth.example.com/introspect
2 TLS 証明書の有効期限 openssl x509 -noout -dates -in certs/server.crt
3 JSON スキーマ妥当性 mcp-inspect validate --schema schemas/context_schema.json --file sample_response.json
4 レートリミットが機能しているか ab -n 200 -c 20 http://localhost:8000/mcp/v1/context (429 が返ることを確認)
5 コンテナログ docker logs mcp-server / kubectl logs deployment/mcp-server

備考mcp-inspect は Zenn コミュニティが提供する CLI ツールで、JSON スキーマの自動検証とトレース情報の可視化を行います【^15】。


まとめと次のアクション

  • MCP の全体像:LLM と外部データを標準化された JSON‑RPC 形式で結びつけ、認証・バージョニング・エラーハンドリングが明文化されています。
  • 実装ポイント:FastAPI サーバーと Python/Node SDK の組み合わせで数行のコードからコンテキスト取得・LLM 呼び出しが可能です。
  • 開発環境:Python 3.12、Node.js 20、Docker Compose がベース。Redis によるセッション永続化と OAuth2/mTLS による堅牢な認証を組み込むことで、本番レベルの安全性が確保できます。
  • 実務シナリオ:天気予報 API(Open‑Meteo)を例に、取得データを Claude 3.5・GPT‑4o にリアルタイムで渡すフローを示しました。任意の社内 API へ置き換えるだけで、同様のパイプラインが構築可能です。
  • 運用:Docker Compose → Helm Chart の段階的デプロイと、mcp‑inspect による検証・ログ確認手順を踏めば、障害発生時も迅速に切り分けられます。

次のステップ
1. GitHub 公式リポジトリ anthropic/mcp-sdk をクローンし、ローカルで docker compose up -d を実行。
2. サンプルコード(Python/Node)を走らせて「東京の天気は?」と問い合わせ、LLM の応答が得られることを確認。
3. 本番環境向けに Helm Chart をカスタマイズし、OAuth2 クライアントクレデンシャル情報をシークレット化してデプロイ。

これで読者は Model Context Protocol の概念理解から実装・運用まで一通りの流れを把握でき、即座に自社サービスへ組み込む準備が整います。


参考文献

[^1]: RFC 8259 – The JSON Data Interchange Format. https://www.rfc-editor.org/rfc/rfc8259
[^2]: RFC 7807 – Problem Details for HTTP APIs. https://www.rfc-editor.org/rfc/rfc7807
[^3]: Anthropic, Model Context Protocol Specification, spec.yaml (2024‑04‑12). https://github.com/anthropic/mcp-spec/blob/main/spec.yaml
[^4]: OAuth 2.0 Authorization Framework (RFC 6749). https://www.rfc-editor.org/rfc/rfc6749
[^5]: Anthropic GitHub リポジトリ(MCP 公式). https://github.com/anthropic/mcp-spec
[^6]: anthropic/mcp-sdk – Python / Node SDK (GitHub). https://github.com/anthropic/mcp-sdk
[^7]: Python Software Foundation, Python 3.12 Release. https://www.python.org/downloads/release/python-3120/
[^8]: fnm – Fast Node Manager. https://github.com/Schniz/fnm
[^9]: Docker Documentation – Install Engine on Ubuntu. https://docs.docker.com/engine/install/ubuntu/
[^10]: 技術評論社 Gihyo, 「LLM と外部ツールを安全に連携させるスタック」2024年12月号. https://gihyo.jp/book/2024/978-4-297-15284-6
[^11]: Redis Labs, Using Redis for Session Store. https://redis.io/docs/manual/data-types/#sessions
[^12]: Zod – TypeScript-first schema validation. https://github.com/colinhacks/zod
[^13]: Authlib Documentation – Starlette integration. https://docs.authlib.org/en/latest/client/starlette.html
[^14]: FastAPI Security – TLS / mTLS example. https://fastapi.tiangolo.com/advanced/security/
[^15]: Zenn Community, mcp‑inspect CLI (2024). https://zenn.dev/mcp-tools/articles/mcp-inspect

スポンサードリンク

AI駆動開発をもっと学びたい人へ

スポンサードリンク
タイプ別にすぐ選べる  

AIを使う開発手法を学べる選択肢

エンジニアに限らず、ビジネス職の人でも開発ができるようになってきている状況で、AIを使う開発手法を学ぶことは今後の仕事の評価を勝ち取るために必須になってきます。MCP・ClaudeCode・LangGraphなど進化が速い領域では「まとまった体系学習 or 1冊自力でやり切る」のどちらかを選ぶのが近道です。

▷ 体系的に学び仕事で使えるようになるなら

DMM 生成AI CAMP 学び放題|無料セミナー有り▶

※入会金・教材費0円。月額16280円(税込)で学び放題。無料セミナーに行って情報収集だけでも価値アリ!

▷ コストを抑えて独学でキャッチアップするなら

【Claude CodeによるAI駆動開発入門】を購入する ▶

一気に全部読みきれず、用語を拾うだけでもOK!

▶ より実装を進めたい方には 【実践Claude Code入門】の購入がおすすめです。


-MCP