Model Context Protocolサーバー構築ガイド

MCPの本質を理解する

Model Context Protocol (MCP) は、大規模言語モデル (LLM) と開発ツール間の重要なコミュニケーションブリッジとして台頭してきました。このガイドでは、基本的な MCP サーバーのセットアップを詳細に解説し、AI モデルとローカル開発環境間のインタラクションを促進する方法について実践的な理解を提供します。

MCP の核心は、AI の運用環境を開発ツールから分離することです。ローカルサーバー上に存在する Python スクリプトが、特定の ‘秘密の単語’ を返すように設計されていると想像してください。この簡単な例は、コンテキストを制御する MCP の能力を強調しています。LLM は本質的にローカル環境を認識していないため、コンテキストデータにアクセスして解釈するために外部からの合図に依存します。MCP はこの重要な仲介役として機能し、ローカルリソースへの制御された安全なアクセスを保証します。

MCP の起源は Anthropic に遡ることができますが、その採用は単一のベンダーにとどまりません。LLM プロバイダー間の潜在的な競争傾向にもかかわらず、MCP の価値提案は広範なサポートを促しました。接続組織として、MCP はさまざまなツールに不可欠な部分となり、その機能がシームレスに統合されるにつれて背景に溶け込む可能性があります。

環境のセットアップ

Python環境の準備

まず、Python 環境を確立することから始めます。これは、MacBook など、Python がインストールされている任意のシステムで実行できます。重要なのは、依存関係を効果的に管理するために隔離された環境を作成することです。

  1. 仮想環境の作成: python3 -m venv venv コマンドを使用して、’venv’ という名前の仮想環境を作成します。
  2. 仮想環境のアクティブ化:
    • macOS/Linux の場合: source venv/bin/activate
    • Windows の場合: venv\Scripts\activate

MCPライブラリのインストール

Python 環境がアクティブになったら、次のステップとして、必要な MCP ライブラリをインストールします。これらのライブラリは、MCP サーバーの作成と管理に必要なツールと機能を提供します。

Python パッケージインストーラーである pip を使用して、必要なライブラリをインストールします。

1
pip install model-context-protocol

サンプルコードのダウンロード

このガイドで使用するサンプルコードをダウンロードします。以下のコマンドを実行して、必要なファイルをダウンロードし、指定されたディレクトリに展開します。

1
2
3
4
mkdir mcp_example
cd mcp_example
curl -LO https://raw.githubusercontent.com/anthropics/model-context-protocol/main/examples/getting_started/server.py
curl -LO https://raw.githubusercontent.com/anthropics/model-context-protocol/main/examples/getting_started/client.py

これらのファイルは、MCP サーバーとクライアントの基本的な実装を提供し、MCP の機能を理解するための出発点となります。

MCPサーバーの実装

サーバー側の実装

server.py ファイルには、MCP サーバーの基本的な実装が含まれています。このスクリプトは、指定されたポートでリッスンし、クライアントからのリクエストを処理します。

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
32
33
34
35
36
37
38
import asyncio
import json
import os
import uuid

import model_context_protocol as mcp

SECRET_WORD = "sesame"

class MyHandler(mcp.BaseHandler):
"""A handler for answering questions about a secret word."""

async def handle_context_request(self, request: mcp.ContextRequest) -> mcp.ContextResponse:
"""Handles a context request."""

question = request.query
if "secret" in question:
return mcp.ContextResponse(answer=SECRET_WORD)
else:
return mcp.ContextResponse(answer="I don't know the secret word.")

async def main():
"""Main function to start the server."""

port = int(os.environ.get("PORT", "8000"))
handler = MyHandler()
server = mcp.Server(handler=handler, port=port)
await server.start()
print(f"Server started on port {port}")
try:
await server.serve_forever()
except asyncio.CancelledError:
print("Server stopped")
finally:
await server.stop()

if __name__ == "__main__":
asyncio.run(main())

このコードは、MyHandler というクラスを定義しており、handle_context_request メソッドを通じてコンテキストリクエストを処理します。リクエストに ‘secret’ という単語が含まれている場合、秘密の単語を返します。それ以外の場合は、秘密の単語を知らないことを示します。

クライアント側の実装

client.py ファイルには、MCP サーバーにリクエストを送信するクライアントの基本的な実装が含まれています。

1
2
3
4
5
6
7
8
9
10
11
12
13
import asyncio

import model_context_protocol as mcp

async def main():
"""Main function to send a request to the server."""

client = mcp.Client(url="http://localhost:8000")
response = await client.get_context(query="What is the secret word?")
print(f"Response: {response.answer}")

if __name__ == "__main__":
asyncio.run(main())

このコードは、Client クラスを使用して MCP サーバーに接続し、’What is the secret word?’ というクエリを送信します。そして、サーバーからの応答を表示します。

サーバーの実行とテスト

サーバーの起動

サーバーを起動するには、次のコマンドを実行します。

1
python server.py

これにより、ポート 8000 でサーバーが起動します。ポート番号は環境変数 PORT を設定することで変更できます。

クライアントの実行

クライアントを実行するには、別のターミナルウィンドウで次のコマンドを実行します。

1
python client.py

これにより、クライアントがサーバーにリクエストを送信し、サーバーからの応答が表示されます。

1
Response: sesame

動作確認

クライアント側のコードを変更して、さまざまなクエリを送信し、サーバーがどのように応答するかを確認できます。例えば、’What is the meaning of life?’ というクエリを送信すると、サーバーは秘密の単語を知らないことを示す応答を返します。

MCPの利点

MCPは、LLMと開発ツール間の連携を容易にすることで、以下のようないくつかの利点を提供します。

  • セキュリティ: MCPは、ローカルリソースへのアクセスを制御し、安全なインタラクションを保証します。
  • 柔軟性: MCPは、さまざまなLLMプロバイダーと開発ツールとの互換性を提供します。
  • 拡張性: MCPは、さまざまなコンテキストリクエストに対応できるように拡張できます。
  • 簡素化: MCPは、LLMとローカル環境間の複雑なインタラクションを簡素化します。

MCPの応用例

MCPは、以下のようなさまざまな応用例に利用できます。

  • 知識ベースの統合: LLMをローカルの知識ベースに接続し、より高度な質問応答を実現します。
  • データベースアクセス: LLMがデータベースにアクセスして、特定の情報を取得できるようにします。
  • 外部APIの利用: LLMが外部APIを利用して、リアルタイムの情報を取得したり、アクションを実行したりできるようにします。
  • エージェントの開発: LLMをベースにしたエージェントを開発し、環境とインタラクションできるようにします。

まとめ

このガイドでは、基本的な MCP サーバーのセットアップ方法を詳細に解説しました。MCP は、LLM と開発ツール間の連携を促進するための強力なツールであり、さまざまな応用例に利用できます。MCP を理解し、活用することで、AI モデルの能力を最大限に引き出すことができます。

今後の展望

MCP は、LLM の進化とともに、ますます重要な役割を果たすことが予想されます。今後の展望としては、以下のような点が挙げられます。

  • 標準化: MCP の標準化が進み、さまざまなツールやプラットフォームでの相互運用性が向上する可能性があります。
  • 機能拡張: MCP の機能が拡張され、より複雑なコンテキストリクエストに対応できるようになる可能性があります。
  • セキュリティ強化: MCP のセキュリティが強化され、より安全なインタラクションが実現される可能性があります。
  • 容易な統合: MCP の統合が容易になり、開発者はより簡単に LLM をローカル環境に接続できるようになる可能性があります。

MCP は、AI の未来を形作る重要な技術の一つであり、その発展に注目が集まっています。