mcpField
M
MCP Server Implementation

MCP Server Implementation

ローカル
github.com/yisu201506開発ツール283 週間前に更新

MCP Server Implementation について

外部ツールを使うLLMチャットサービスの構築を目的とした、FlaskベースのMCP実装例です。モデルのテキストからツール呼び出しを解析して実行し、結果を会話に戻します。

主な機能

  1. 01テキスト形式のツール呼び出しを解析・実行
  2. 02天気と計算機のサンプルツール
  3. 03複数ターンの会話コンテキストを維持
  4. 04正規表現による呼び出しの検出
  5. 05FlaskのチャットAPI

活用シーン

  1. 01会話中に天気情報を取得
  2. 02会話中に計算を実行
  3. 03パラメーターと実行処理を備えたツールの追加
  4. 04REST API経由でチャットアプリに接続

MCP 対応

テキスト解析によるツール呼び出しのフローを実装し、Flask APIを提供します。LLMにツール定義を渡し、呼び出しを解析して実行した結果を会話に挿入します。

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

インストール方法は未掲載です

このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。

リポジトリ

ツール

ツール一覧はまだ取得されていません

ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。

詳細

MCP サーバーの実装

外部ツールを使用して大規模言語モデルの機能を拡張する、Model Context Protocol(MCP)の Flask ベースの完全な実装です。

概要

このリポジトリでは、Model Context Protocol(MCP)を処理するサーバーの構築方法を紹介します。MCP は、モデルのテキスト出力内でツールを直接呼び出し、LLM の機能を拡張する方法です。関数呼び出しとは異なり、MCP ではツールの定義をコンテキストウィンドウに直接配置し、モデルの自然言語による応答を解析して、ツールの使用を特定します。

機能

  • 🔧 MCP の完全な実装:解析、実行、応答処理をすべて実装
  • 🌤️ サンプルツール:パラメーター検証機能付きの天気および計算ツール
  • 🔄 会話フロー:複数回のやり取りでコンテキストを維持
  • 🧩 正規表現ベースの解析:ツール呼び出しに対応する柔軟なテキスト解析
  • 🚀 Flask API:チャット連携用の REST API エンドポイント

プロジェクト構成

mcp_server/
├── app.py                  # Main Flask application
├── mcp_handler.py          # MCP parsing and execution
├── mcp_example.py          # Standalone MCP example
├── requirements.txt        # Dependencies
├── tools/                  # Tool implementations
│   ├── __init__.py
│   ├── weather.py          # Weather API tool
│   └── calculator.py       # Calculator tool
└── README.md               # This file

インストール

  1. リポジトリをクローンします:

    git clone https://github.com/yourusername/mcp-server.git
    cd mcp-server
    
  2. 仮想環境を作成します:

    python -m venv venv
    source venv/bin/activate  # On Windows: venv\Scripts\activate
    
  3. 依存関係をインストールします:

    pip install -r requirements.txt
    
  4. 環境変数を設定します:

    # Create a .env file with:
    LLM_API_KEY=your_llm_api_key_here
    WEATHER_API_KEY=your_weather_api_key_here
    FLASK_APP=app.py
    FLASK_ENV=development
    

使い方

サーバーの起動

Flask の開発サーバーを起動します:

flask run

本番環境の場合:

gunicorn app:app
API エンドポイント
  • POST /chat:MCP を使用してチャットメッセージを処理します
    curl -X POST http://localhost:5000/chat \
      -H "Content-Type: application/json" \
      -d '{
        "messages": [
          {
            "role": "user",
            "content": "What's the weather like in Boston?"
          }
        ]
      }'
    
単独実行の例

サンプルスクリプトを実行して、MCP の動作を確認します:

python mcp_example.py

動作の仕組み

  1. ツールの登録:ツールをパラメーターおよび実行ロジックとともに登録します
  2. ツール定義の挿入:XML 形式のツール説明をプロンプトに追加します
  3. LLM 応答の処理:正規表現パターンを使って、LLM のテキスト出力内のツール呼び出しを特定します
  4. ツールの実行:パラメーターを解析し、適切なツールハンドラーに渡します
  5. 結果の挿入:ツールの実行結果を応答に挿入します

MCP と関数呼び出しの比較

機能MCP関数呼び出し
定義の場所プロンプトテキスト内API パラメーター内
呼び出し形式自然言語構造化された JSON
実装テキスト解析API 連携
可視性応答内に表示非表示の場合あり
プラットフォームのサポートテキストベースのあらゆる LLMAPI によるサポートが必要

会話の例

ユーザー:ボストンの天気はどうですか?

LLM:

I'll check the weather for you.

get_weather(location="Boston, MA", unit="fahrenheit")

処理後:

I'll check the weather for you.

get_weather(location="Boston, MA", unit="fahrenheit")

Result from get_weather:
{
  "location": "Boston, MA",
  "temperature": 72,
  "unit": "fahrenheit",
  "conditions": "Partly Cloudy",
  "humidity": 68,
  "wind_speed": 5.8
}

独自のツールを追加する

  1. Tool を継承する新しいクラスを作成します
  2. パラメーターと実行ロジックを定義します
  3. MCP ハンドラーに登録します

例:

class MyTool(Tool):
    def __init__(self):
        parameters = [
            {
                "name": "param1",
                "type": "string",
                "description": "Description of param1",
                "required": True
            }
        ]
        
        super().__init__(
            name="my_tool",
            description="Description of my tool",
            parameters=parameters
        )
    
    def execute(self, param1):
        # Tool logic here
        return {"result": "Processed " + param1}

MCP の設定と呼び出しフロー

  1. ツールの登録:

    • MCP ツールをハンドラーに登録します
    • 各ツールは、名前、説明、パラメーターの定義を提供します
  2. ツール定義の挿入:

    • ツールの定義をシステムメッセージに追加します
    • MCP の XML 構造に従った形式を使用します
  3. LLM 応答の処理:

    • LLM はツール呼び出しを含む場合がある応答を生成します
    • パターンマッチングを使って、テキスト内のツール呼び出しを特定します
    • ツールのパラメーターを解析し、ツールの実行メソッドに渡します
  4. ツールの実行:

    • 指定されたパラメーターを使ってツールを実行します
    • 結果を会話に挿入します
  5. 会話の管理:

    • ツールの結果を含む処理済みの応答を会話履歴に追加します
    • 以降の LLM リクエストでは、コンテキストとしてこの履歴を含めます

会話の例

会話の例は次のようになります。

ユーザー: ボストンの天気はどうですか?

システム: MCP ツールの定義を含むプロンプトを LLM に送信します

LLM の応答:

I'll check the weather for you.

get_weather(location="Boston, MA", unit="fahrenheit")

MCP ハンドラー: 応答を解析し、ツール呼び出しを見つけて、天気ツールを実行します

ツール実行結果:

Result from get_weather:
{
  "location": "Boston, MA",
  "temperature": 72,
  "unit": "fahrenheit",
  "conditions": "Partly Cloudy",
  "humidity": 68,
  "wind_speed": 5.8
}

処理済みの応答(ユーザーに返送):

I'll check the weather for you.

get_weather(location="Boston, MA", unit="fahrenheit")

Result from get_weather:
{
  "location": "Boston, MA",
  "temperature": 72,
  "unit": "fahrenheit",
  "conditions": "Partly Cloudy",
  "humidity": 68,
  "wind_speed": 5.8
}

ユーザー: 144 の平方根を計算できますか?

LLM の応答:

I can calculate that for you.

calculator(expression="sqrt(144)")

MCP ハンドラー: 応答を解析し、計算ツールを実行します

ツール実行結果:

Result from calculator:
{
  "expression": "sqrt(144)",
  "result": 12.0
}

処理済みの応答(ユーザーに返送):

I can calculate that for you.

calculator(expression="sqrt(144)")

Result from calculator:
{
  "expression": "sqrt(144)",
  "result": 12.0
}

The square root of 144 is 12.

これは、LLM によるテキストベースの呼び出しから実行、応答の処理まで、MCP ツールの使用における一連の流れを示しています。

ライセンス

MIT

コントリビューション

コントリビューションを歓迎します!お気軽にプルリクエストを送信してください。

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。