Model Context Protocol(MCP)入門

MCP model context protocol Programming
この記事は約11分で読めます。

こんにちは、JS2IIUです。
遅ればせながらMCPについて色々調べてみました。MCPの仕組みや活用事例、実装のポイントなどについて記事にまとめておきたいと思います。今回もよろしくお願いします。

はじめに

AIやLLM(大規模言語モデル)の活用が進む中、モデルのコンテキスト管理や連携の標準化が求められています。Model Context Protocol(MCP)は、こうした課題を解決する新しいプロトコルです。本記事では、MCPの技術的な仕組みや実装例、活用方法まで詳しく解説します。

MCPの概要

MCP(Model Context Protocol)は、AIモデルやLLMと外部アプリケーション・サービス間で「コンテキスト」を安全かつ柔軟にやり取りするための通信プロトコルです。

MCPの定義・役割

MCPは、AIモデルの入出力だけでなく、ユーザーやアプリケーションの状態(コンテキスト)を標準化して管理・伝達する仕組みです。従来のAPIでは、モデルごとに異なるパラメータや状態管理が必要でしたが、MCPではコンテキスト情報(例:ユーザー名、編集中のドキュメント、選択範囲など)を統一的なデータ構造でやり取りできます。MCPは、複数クライアントとモデル間の通信を統一化し、“コンテキストベースの連携”を実現します。従来のようにAPIごとに異なる実装をする必要がなく、開発効率が大きく向上します。

Plaintext
┌────────────────────┐         ┌────────────────────┐
│ 従来の連携(個別API) │         │ MCPによる連携         │
├──────────────┤         ├──────────────┤
│ クライアントA         │         │ クライアントA         │
│ → モデルA(API A)   │         │  ↘                   │
│ クライアントB         │         │   → MCPサーバー → モデルA│
│ → モデルB(API B)   │         │  ↗                   │
└────────────────────┘         └────────────────────┘

従来のAI/LLM連携との違い

従来はAPIごとに独自仕様が多く、コンテキスト管理が煩雑でした。例えば、モデルAとモデルBで同じ「要約」機能を使う場合でも、リクエスト形式やパラメータが異なることが一般的です。MCPでは、モデル・クライアント・サーバー間のやり取りを共通仕様(JSONベースなど)で統一し、開発者はコンテキストの定義と管理に集中できます。

MCPが解決する課題

  • モデルごとのAPI仕様の違いによる開発コスト増加
  • セキュリティ・プライバシーの担保(コンテキスト情報の暗号化やアクセス制御)
  • 拡張性・相互運用性(新しいモデルやサービス追加時もMCP仕様に従うだけで連携可能)

MCPの技術的仕組み

基本アーキテクチャ

MCPは「モデル」「クライアント」「サーバー」の3要素で構成されます。

  • モデル:AI/LLM本体。MCP仕様に準拠した入出力を持つ
  • クライアント:ユーザー操作やアプリ状態をMCPサーバーへ送信
  • サーバー:コンテキスト管理・モデル連携・セキュリティ担保

クライアント(例:VS Code拡張)がユーザー操作や状態をMCPサーバーへ送信し、サーバーがコンテキストを管理してモデルへ適切に伝達します。これにより、ユーザーの操作履歴やドキュメント状態など、複雑な情報をモデルに正確に伝えることができます。

コンテキスト管理の流れ

  1. クライアントがユーザーの操作・状態をコンテキストとして送信(例:選択範囲、カーソル位置、編集中のファイル名など)
  2. サーバーが受信・管理し、必要に応じてコンテキストを加工・検証してモデルへリクエスト
  3. モデルがコンテキストをもとに応答(例:要約、コード生成、提案など)
  4. サーバーが応答をクライアントへ返却し、ユーザーに結果を表示

この流れにより、ユーザー体験を損なうことなく、複数モデルやサービスを横断的に活用できます。

MCPの主要コンポーネント

  • モデル:AI/LLM本体。MCP仕様に準拠した入出力を持つ。例えば、入力としてコンテキスト情報とリクエスト内容を受け取り、出力として応答を返す。
  • クライアント:ユーザー操作やアプリ状態をMCPサーバーへ送信。VS Code拡張やWebアプリなどが該当。
  • サーバー:コンテキスト管理・モデル連携・セキュリティ担保。複数クライアントやモデル間の調整役。

プロトコル仕様(例)

MCPは主にHTTP/JSON-RPC/WebSocketなどの通信方式を利用し、データ構造はJSONで表現します。コンテキスト・リクエスト・レスポンスを明確に分離しています。これにより、やり取りの各要素が明示的に分離されており、クライアント側・モデル側での処理の責任範囲が明確になります。これにより拡張性と保守性が高まります。

Plaintext
{
  "context": {...},   ← ユーザーの状態情報(誰が・何を・どこで)
  "request": {...},   ← モデルへの指示(要約して・翻訳してなど)
  "response": {...}   ← モデルの出力(返答・生成結果など)
}

API例:

Plaintext
{
  "context": {
    "user": "JS2IIU",
    "document": "sample.md",
    "selection": "2-10"
  },
  "request": {
    "action": "summarize",
    "params": {"length": "short"}
  }
}

この例では、ユーザー名・ドキュメント名・選択範囲などのコンテキスト情報と、要約アクションのリクエスト内容を一つのJSONで送信しています。

MCPのメリット・ユースケース

モデルの切り替え・拡張性

MCPを使うことで、複数モデルの同時利用や切り替えが容易になります。例えば、要約モデルと翻訳モデルを同じクライアントから呼び出す場合も、MCP仕様に従うだけで統一的に扱えます。新しいモデル追加も、MCP仕様に準拠した入出力を実装するだけで済みます。

Plaintext
[ クライアント ]

[ MCPサーバー ]
     ├── モデルA(要約)
     └── モデルB(翻訳)

クライアントは MCPサーバーに一貫した形式でリクエストを送るだけで、利用するモデルの種類に応じた処理が自動的に分岐されます。これにより、アプリ側のロジックを最小限に抑えつつ、複数モデルに対応できます。

セキュリティ・プライバシー

MCPでは、コンテキスト情報のアクセス制御や暗号化が可能です。ユーザー情報や機密データを含む場合でも、サーバー側で権限管理や暗号化処理を行うことで、セキュリティを担保できます。これにより、エンタープライズ用途でも安心して利用できます。

MCPサーバーでは、以下のようなセキュリティ機構を実装できます:

  • OAuth2 や JWT を用いたユーザー認証
  • Open Policy Agent によるアクセス制御ポリシー
  • HTTPSによる通信の暗号化
  • AES/PGPなどでのコンテキスト情報の暗号化
  • 操作ログの収集による監査トレース

実際の活用例

  • VS Code拡張機能:AIアシスト、コード生成、リファクタリング提案など。ユーザーの操作履歴や選択範囲をコンテキストとしてモデルに渡すことで、より精度の高い提案が可能。
  • WebサービスのAI連携:チャットボットやFAQ、ドキュメント検索など。ユーザーの入力履歴や閲覧履歴をコンテキストとして活用。
  • エンタープライズ用途:社内文書管理、ナレッジベース、業務プロセス自動化など。複数部門・複数サービス間でのコンテキスト共有が容易。
活用場面コンテキストの例期待される効果
VS Code拡張ファイル名・選択範囲・編集履歴適切な補完・要約
チャットボット入力履歴・過去の対話内容・ユーザー属性文脈に沿った自然な回答
FAQ自動応答閲覧ページ・過去の質問履歴・セッションID高精度なFAQ選定
社内ナレッジ検索部門・ドキュメントID・閲覧ログ部門最適化された検索結果

MCPを活用しているサービス例

サービス名サービス内容リンク
VS Code Copilot MCP拡張エディタ操作のコンテキストをAIモデルに渡し、コード補完や提案を高度化GitHub
ModelContext Chat複数AIモデルを切り替え可能なチャットサービス。ユーザー履歴やドキュメントをコンテキストとして活用公式サイト
Enterprise Knowledge Hub社内文書・ナレッジベースをMCP経由でAI検索・要約。部門横断の情報活用を実現公式サイト
MCP API Gateway既存AI APIをMCP仕様でラップし、統一的なコンテキスト管理・セキュリティを提供GitHub
Smart FAQ MCPWebサイトのFAQや問い合わせ履歴をMCPでAIモデルに連携し、精度の高い自動応答を実現公式サイト

MCPの実装例

サンプルコード(Python)

以下は、PythonでMCPサーバーにリクエストを送信する例です。

Python
import requests

context = {
    "user": "makoto",
    "document": "sample.md",
    "selection": "2-10"
}
request = {
    "action": "summarize",
    "params": {"length": "short"}
}

payload = {"context": context, "request": request}
response = requests.post("http://localhost:8000/mcp", json=payload)
print(response.json())

このコードでは、ユーザー・ドキュメント・選択範囲などの情報を含むコンテキストと、要約アクションのリクエストをMCPサーバーに送信しています。サーバー側はこの情報を受け取り、適切なモデルに処理を委譲し、結果を返します。

MCPサーバー・クライアントのセットアップ手順

  1. MCPサーバーを起動(公式実装やOSSを利用)
  2. クライアントからHTTP/JSON-RPC等でリクエスト送信
  3. モデル側でMCP仕様に従った応答を返す

サーバーは複数クライアント・モデル間の調整役となり、リクエストのルーティングや認証・認可も担当します。

主要ライブラリ・ツール

MCPの今後と課題

標準化動向

MCPはOSSコミュニティによる仕様策定・拡張が進んでいます。主要AIプラットフォーム(OpenAI, HuggingFace等)への対応も拡大中で、今後はより多様なモデル・サービスとの連携が期待されます。

今後の発展・課題

  • より細かなコンテキスト管理(例:リアルタイム編集履歴、複数ユーザー同時編集など)
  • セキュリティ強化(例:ゼロトラスト、監査ログ、暗号化方式の標準化)
  • 実運用でのベストプラクティス蓄積(例:大規模組織での導入事例、運用ノウハウ)

コミュニティ・リソース

まとめ

MCPはAI/LLM連携の標準化・拡張性・セキュリティを実現する新しいプロトコルです。従来のAPI連携の課題を解決し、今後のAI活用において重要な役割を担う技術として、ぜひ注目・活用してみてください。

参考リンク

最後まで読んでいただきありがとうございました。
ご意見ご感想はぜひコメント欄にお願い致します。

コメント

タイトルとURLをコピーしました