Standardizing LLM Interaction with MCP Servers について
Tools、Resources、Prompts を示す簡潔な MCP サーバーとクライアントの実装例です。MCP の基本コンポーネントと、クライアントとサーバーの連携方法を学びたい開発者に適しています。
主な機能
- 01MCP サーバーの実装例
- 02シンプルなコマンドラインクライアント
- 03ベクトルデータベースを検索するツール
- 04コンテキストを提供するリソースの選択
- 05分析ワークフロー向けのプロンプトテンプレート
活用シーン
- 01MCP サーバーの基本コンポーネントの学習
- 02ChromaDB を使ったナレッジベース型チャットボットの構築例
- 03クライアントとサーバーの連携パターンの理解
MCP 対応
本プロジェクトは MCP サーバー(mcp_server.py)とコマンドラインクライアント(client.py)を含み、サーバーは Tools、Resources、Prompts の 3 種類の機能を公開します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
MCP サーバーとの LLM のやり取りを標準化する
Model Context Protocol(MCP)は、アプリケーションが LLM にコンテキストを提供する方法を標準化するオープンプロトコルです。つまり、LLM ベースのアプリケーションがデータソースに接続してコンテキストを取得し、ツールを使用し、標準化されたプロンプトを実行するための統一されたフレームワークを提供します。
MCP エコシステムは、次の3つのコンポーネントで構成されます。
-
MCP サーバーは、ツールの利用可能性(使用できる関数の公開)、ツールの実行(要求された関数の実行)、リソースとしての静的コンテンツ(参照できるデータの提供)、プリセットプロンプト(一般的なタスク向けの標準化されたテンプレート)を担当します。
-
クライアントは、サーバーへの接続、LLM との統合、コンポーネント間のメッセージのやり取りを管理します。
-
ホストは、フロントエンドインターフェース、ユーザーへの MCP 機能の提示、エコシステム全体の統合ポイントを提供します。
このアーキテクチャにより、相互運用性を維持しながら、異なるコンポーネントを独立して開発できるモジュール型システムが実現します。これにより、ユーザーはさまざまな LLM 関連機能向けの MCP サーバーを作成し、対応する多様なアプリケーションに自由に組み込めます。一般的には、サービス API やツールの統合、自分のマシン上にあるローカルデータソースへの接続に使用されます。
MCP サーバーのコンポーネント
MCP サーバーは、明確に定義されたインターフェースを通じて標準化された機能を公開することで、プロトコルの基盤を形成します。ホストやクライアントはプロトコル標準を使用してこれらのサーバーに接続できますが、ユーザーに機能をどのように提示するかは柔軟で、開発者に委ねられています。つまり、コマンドラインインターフェースやグラフィカルアプリケーションを通じて実装するか、大規模なシステムに組み込むかなど、実装とユーザー体験は開発者次第です。
このガイドでは、主な機能を備えた MCP サーバーのサンプルと、やり取りのパターンを示すシンプルなクライアントの実装について説明します。まずは、MCP サーバーの主なコンポーネントを見ていきましょう。
ツール
ツールは、LLM がアクションを実行したり情報を取得したりするために呼び出せる関数です。各ツールは次の要素で定義されます。
{
name: string; // Unique identifier for the tool
description?: string; // Human-readable description
inputSchema: { // JSON Schema for the tool's parameters
type: "object",
properties: { ... } // Tool-specific parameters
}
}
ツールを使うと、LLM は外部システムとやり取りしたり、コードを実行したり、データベースにクエリを実行したり、計算を行ったりできます。ツールは、作用をもたらす操作や新しい情報を計算する操作を表します。
リソース
リソースは、クライアントアプリケーションがアクセスできるデータソースを表します。URI で識別され、次のものが含まれます。
{
uri: string; // Unique identifier for the resource
name: string; // Human-readable name
description?: string; // Optional description
mimeType?: string; // Optional MIME type
}
リソースには、設定ファイルのような静的なものと、データベースレコードや API レスポンスのような動的なものがあります。関数呼び出しを必要とせずに、LLM にコンテキストを提供します。
プロンプト
プロンプトは、特定のやり取りのパターンを定義する再利用可能なテンプレートです。サーバーは、標準化された会話の流れを公開できます。
{
name: string; // Unique identifier for the prompt
description?: string; // Human-readable description
arguments?: [ // Optional list of arguments
{
name: string; // Argument identifier
description?: string; // Argument description
required?: boolean; // Whether argument is required
}
]
}
プロンプトを使うと、一般的なタスク向けに一貫性のある専用のやり取りを作成でき、スラッシュコマンドなどの UI 要素からユーザーが呼び出せるようになります。
注:ツールは LLM とのやり取り(関数呼び出しに類似)に特化して設計されていますが、プロンプトとリソースは MCP エコシステム内で異なる役割を果たします。プロンプトは通常、ユーザーが制御するテンプレートで、スラッシュコマンドなどの UI 要素から直接呼び出せます。リソースはアプリケーションが制御するデータソースで、LLM のコンテキストに含める前に、ユーザーが選択できる形で提示されることがあります。
詳細やその他の機能については、MCP の公式ドキュメントをご覧ください。
サンプルのセットアップ
この MCP サーバーでは、ツール、リソース、プロンプトについて説明します。基本的なコンセプトは、次の機能を備えたシンプルなナレッジベースチャットボットのフローを作成することです。
- LLM がツールを使ってベクトルデータベースに問い合わせ、RAG の応答を生成できるようにする
- ユーザーが既存のリソースを選択してコンテキストとして提供できるようにする
- ユーザーが標準的なプロンプトを実行して、より複雑な分析ワークフローを実施できるようにする
上の図は、mcp_server.py で実装されており、対応するシンプルな CLI クライアントは client.py にあります。
参考情報として、公式の統合機能やコミュニティ製のサーバーについては、MCP のサーバー一覧をご覧ください。
セットアップとインストール
- リポジトリをクローンする
git clone https://github.com/ALucek/quick-mcp-example.git
cd quick-mcp-example
- ChromaDB データベースを作成する
M C P _ s e t u p . i p y n b の手順に従って、ベクトルデータベースを作成し、PDF を埋め込んでください。
- 仮想環境を作成してパッケージをインストールする
# Using uv (recommended)
uv venv
source .venv/bin/activate # On macOS/Linux
# OR
.venv\Scripts\activate # On Windows
# Install dependencies
uv sync
- クライアントとサーバーを実行する
python client.py mcp_server.py
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。