Model Context Protocol(MCP) - Shinichi0713/LLM-fundamental-study GitHub Wiki
MCP とは
スマートフォン時代になり、特に USB-C の普及により、現在ではほとんどのデバイスが同じケーブル一本で充電できるようになりました。
Model Context Protocol(MCP)は、まさに AI 界の USB-C
MCP を「AI 用の USB-C ポート」と表現していますが、これは単なる比喩ではありません。
USB-C が様々なデバイスを標準化されたインターフェースで接続できるように、MCP は生成 AI モデルと様々なデータソースやツールを標準化された方法で接続します。
素晴らしいと感じる例:
例えば、あなたが開発している AI アシスタントに、カレンダー、メール、天気予報、株価情報など 10 種類のサービスと連携させたいとします。
従来の方法では、10 種類の API それぞれに対して個別の連携コードを書く必要がありました。
しかし、MCP を使えば、一度 MCP クライアントを実装するだけで、MCP に対応した全てのサービスと簡単に連携できるようになります。
要するに、MCP対応のAIアシスタントに好きな“周辺機器”を後付けできるようになるんです。 例えば「ファイルシステム読み書き」「データベース問い合わせ」「外部API利用」「ブラウザ操作」など、欲しい機能ごとに小さなMCPサーバー(≒ツールの詰まった箱)を用意し、それをAIにポンと繋げるイメージです。 これまではAIに新機能を持たせるにはカスタムコードを書いて統合する必要がありましたが、MCPのおかげでプラグ&プレイに近い感覚で機能追加が可能になりました。
MCPが出来た背景
AIと外部サービスの連携には以下のような課題が存在した。
- 連繋の複雑さ
各AIモデルと各サービスの組合せごとに個別の連携開発が必要だった。 - 最新データへのアクセス
AIは学習済みデータに依存し、最新情報にアクセスできなかった。 - セキュリティリスク
起業の機密データをAIに直接渡す必要があった。
上記の課題に対するソリューション。
課題 | MCPによる解決策 |
---|---|
連携の複雑さ | 標準プロトコルによる接続の簡素化 |
最新データへのアクセス | リアルタイムで外部データソースに接続 |
セキュリティリスク | データは社内に保持したまま必要な情報だけをAIと共有 |
MCPのアーキテクチャ
MCP は基本的にクライアント・サーバモデル
MCP ホスト
MCP ホストは、生成 AI モデルを搭載したアプリケーションです。例えば、Claude Desktop、Zed、Cursor などの開発環境が該当します。これらのアプリケーションは、MCP クライアントを通じて外部データやツールにアクセスします。
MCP クライアント
MCP クライアントは、MCP ホスト内に組み込まれたコンポーネントで、MCP サーバとの通信を担当します。クライアントはサーバとの接続を確立し、リソース、ツール、プロンプトなどの機能を利用するためのリクエストを送信します。
MCP サーバ
MCP サーバは、特定のデータソースやツールへのアクセスを提供する軽量サーバです。例えば、ファイルシステム、データベース、API などへのアクセスを提供するサーバがあります。サーバはクライアントからのリクエストを処理し、必要なデータや機能を提供します。
memo
クライアントはサーバー作成者側が責任持つ感じだろうか。
使う側が、MCPに則って活用するのみといいうように認識した。
通信プロトコル
MCP の通信は、JSON-RPC 2.0 プロトコルに基づいています1(https://zenn.dev/cloud_ace/articles/model-context-protocol#fn-1b73-1)。クライアントとサーバ間の通信は、標準入出力(stdio)または HTTP with Server-Sent Events(SSE)トランスポートを通じて行われます
この標準化された通信プロトコルにより、異なるシステム間でもシームレスな連携が可能になります。
sequenceDiagram
participant Client
participant Server
Client->>Server: 初期化メッセージを送信
Server->>Client: プロトコルバージョンなどの情報を返信
Client->>Server: サーバの機能(リソース、ツール、プロンプト)を問い合わせ
Server->>Client: 利用可能な機能のリストを返信
Client->>Server: 特定の機能を利用するためのリクエストを送信
Server->>Client: リクエストを処理し、結果を返信
MCPを使える製品の例
2025年4月時点では、AIチャットやプログラミング支援ツール、クラウドサービスのマネージド機能として提供されています。例えば、次のような製品となります。
- Amazon Bedrock Agents (Inline Agent SDK)
- Azure AI Agent Service(プレビュー利用)
- Claude Desktop
- Cline
MCPのユースケース
公式のドキュメントを見ると、例えばこのようなユースケースが示されています。
- ファイルシステムからファイルを安全に呼び出し、操作する
- PostgreSQLから読み取り専用でアクセスする
- Google Driveのファイルアクセスと検索
- GitHubのAPIを使ったファイルの操作や検索
- Slackチャンネルの管理とメッセージング
- テキストベースの基盤モデルからAI画像生成の実行
MCPを利用したソリューション・製品
- マルチエージェントコンタクトセンタ 顧客対応を行うAIエージェントは軽量なモデルを利用し、ナレッジベースやCRMを利用した回答と、会話ごとにCRMに登録するエージェントに渡す。CRM登録されるとスーパーバイザのAIエージェントが応対履歴の要約をリアルタイムで行い、顧客へのレコメンドを作成し、顧客対応のAIエージェントが気づいていない示唆をコンテキストとしてMCPで提供し、顧客対応の品質をニアリアルタイムで向上させていく。
- 社内データベースのMCP対応 社内のデータベースをMCP対応にして、AIが利用しやすい環境を作成、AIチャットボットに必要な時に必要なデータベースを追加することで、社内のデータアクセスの速度を向上
MCPを利用することでAIとサービスとの連携がかなりしやすくなる。AI同士の情報のやり取りが出来るようになる
トライアル
VScodeにMCPサーバー組込
参考URL: https://zenn.dev/jetblog/articles/original-mcp-server
UVコマンドインストール
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
仮想環境でプロジェクト作成
# プロジェクトの新規作成
uv init echo_hello
cd echo_hello
# Python仮想環境を使用
uv venv
.venv\Scripts\activate
# 依存関係をインストールする
uv add mcp[cli] httpx
# MCPサーバーのソースコード作成
new-item echo_hello.py
MCPサーバーをPythonで作成
from typing import Any
import httpx
from mcp.server.fastmcp import FastMCP
# FastMCPサーバーの初期化
mcp = FastMCP("echo_hello")
# FastMCPサーバーが呼び出された時の処理
@mcp.tool()
async def echo_hello(name: str) -> str:
# 「コンニチハ、{プロンプトから渡された値}!!!!」と返すだけ
return f"コンニチハ, {name}!!!!"
if __name__ == "__main__":
# 初期化とサーバー実行
mcp.run(transport='stdio')
MCPの今後の展望
AIとサービスとの連携がシームレスに出来るようになることによる展望を考える。
-
開発ツールとの統合拡大 IDEや、プロジェクト管理ツール、コード管理プラットホームとの連携が進んでいくと開発ワークフローの効率化が期待できる。
例. 「この PR のコードレビューをして」と指示するだけで、AI がリポジトリの内容を分析し、適切なフィードバックを提供する。
「このバグの原因を特定して」と言えば、エラーログとコードベースを参照して問題箇所を指摘する。 -
相互運用性の向上
MCP が広く採用されれば、異なる AI モデルやツール間の相互運用性が向上し、開発者はより柔軟にシステムを構築できるようになります。
例.
特定のタスクには Claude が優れており、別のタスクには GPT-4 が適している場合、両方のモデルを同じ MCP インターフェースで利用できれば、最適な AI を選択しやすくなります。