mcpField
L
LLM Wrapper MCP Server

LLM Wrapper MCP Server

ローカル
github.comAI・エージェント074 週間前に更新

LLM Wrapper MCP Server について

LLM Wrapper MCP Serverは、OpenRouterや設定可能なAPIエンドポイント経由でLLMを呼び出し、タスクを委任するAgent向けのSTDIOベースのMCPサーバーです。`llm_call`ツールを提供し、`llm-accounting`による利用記録と監査にも対応します。

主な機能

  1. 01STDIOベースのMCPサーバー
  2. 02`llm_call`ツール
  3. 03モデルとAPIエンドポイントの設定
  4. 04ツール呼び出し対応
  5. 05利用記録と監査

活用シーン

  1. 01MCPエージェントからのLLM呼び出し
  2. 02個別の呼び出しでモデルを選択
  3. 03LLMの利用状況とクエリの確認

MCP 対応

`stdin`と`stdout`上のJSON-RPCでMCPクライアントと通信します。モデル呼び出し用の`llm_call`を提供し、MCPツール呼び出しに対応します。

設定

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

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

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

リポジトリ

ツール

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

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

詳細

LLM Wrapper MCP Server

「MCP 対応のあらゆる LLM エージェントが、OpenRouter.ai API を通じて利用可能な他のあらゆる LLM と通信したり、タスクを委任したりできるようにします。」

さまざまな大規模言語モデル(LLM)と標準化されたインターフェースを介してシームレスにやり取りできるように設計された、Model Context Protocol(MCP)サーバーラッパーです。このプロジェクトでは、LLM 呼び出し、ツールの実行、結果の処理を行う、堅牢で柔軟な STDIO ベースのサーバーを提供することで、開発者が LLM の機能をアプリケーションに統合できるようにします。

特長

  • 標準化された LLM とのやり取りを実現するため、Model Context Protocol(MCP)の仕様を実装しています。
  • 標準入出力を介して LLM リクエストとレスポンスを処理する、STDIO ベースのサーバーを提供します。
  • MCP プロトコルを通じたツール呼び出しや結果の受け渡しなど、高度な機能をサポートします。
  • API のベース URL とモデルパラメーターを通じて、さまざまな LLM プロバイダー(OpenRouter、ローカルモデルなど)を使用するように設定できます。
  • 拡張性を考慮して設計されており、新しい LLM バックエンドを簡単に統合できます。
  • 堅牢なロギング、レート制限、監査機能を実現するために llm-accounting と統合されています。これにより、リモート LLM の使用状況や推論コストを監視し、デバッグや法的目的のためにクエリとレスポンスを調査できます。

依存関係

このプロジェクトは、以下の主要な依存関係を使用しています。

コア依存関係
  • pydantic:Python の型ヒントを使用したデータ検証と設定管理。
  • pydantic-settings:環境変数と設定を管理する Pydantic の機能。
  • python-dotenv:.env ファイルからキーと値のペアを読み取り、環境変数として設定します。
  • requests:Python 向けの洗練されたシンプルな HTTP ライブラリ。
  • tiktoken:OpenAI のモデルで使用できる、高速な BPE トークナイザー。
  • llm-accounting:堅牢なロギング、レート制限、監査機能を提供します。
開発用依存関係
  • pytest:成熟したフル機能の Python テストフレームワーク。

  • black:妥協のない Python コードフォーマッター。

  • isort:インポートをアルファベット順に並べ替え、セクションと種類ごとに自動で分割する Python ユーティリティ/ライブラリ。

  • mypy:Python 用のオプションの静的型チェッカー。

  • pytest-mock:モックを簡単に利用できる mocker フィクスチャを提供する pytest プラグイン。

インストール

llm-wrapper-mcp-server パッケージは PyPI で公開されており、pip でインストールできます。

pip install llm-wrapper-mcp-server

または、ローカル開発やソースからのインストールの場合:

  1. 仮想環境を作成して有効化します。
python -m venv .venv
source .venv/bin/activate  # On Windows: .venv\Scripts\activate
  1. パッケージをインストールします。
pip install -e .

設定

プロジェクトのルートに .env ファイルを作成し、次の変数を設定します。

OPENROUTER_API_KEY=your_openrouter_api_key_here

サーバーはデフォルトで OpenRouter を使用するように設定されています。API キーは OPENROUTER_API_KEY 環境変数から読み込まれます。使用する LLM モデルと API のベース URL は、主にサーバー実行時のコマンドライン引数で設定します(下記参照)。

CLI 引数で上書きされない場合のデフォルト設定:

  • LLMClient の API ベース URL:https://openrouter.ai/api/v1(LLM_API_BASE_URL 環境変数または --llm-api-base-url CLI 引数で上書きできます)
  • LLMClient のデフォルトモデル:perplexity/llama-3.1-sonar-small-128k-online(--model CLI 引数で上書きできます)

使用方法

概要(テキスト):

  • エージェントソフトウェアは、MCP プロトコル(stdin/stdout)を介して LLM Wrapper MCP Server と通信します。
  • LLM Wrapper MCP Server は、LLM API の呼び出しとレスポンスのために、LLM プロバイダー(OpenRouter.ai など)とやり取りします。
  • サーバーは、ロギングと監査のために LLM 会計システムとも統合されています。
  • 主なコンポーネント:
    • MCP 通信ハンドラー
    • LLM クライアント
    • ツール実行機能
    • LLM 会計の統合
サーバーの実行

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

python -m llm_wrapper_mcp_server [OPTIONS]

例:

python -m llm_wrapper_mcp_server --model your-org/your-model-name --log-level DEBUG

python -m llm_wrapper_mcp_server --help を実行すると、サーバーを設定するために使用できるすべてのコマンドラインオプションを確認できます。

このサーバーは Model Context Protocol(MCP)STDIO サーバーとして動作し、標準入力と標準出力を介して通信します。MCP 通信用のネットワークポートは開きません。

MCP 通信

サーバーは、stdin と stdout を介して JSON-RPC メッセージを使用して通信します。次の MCP メソッドをサポートしています。

  • initialize:プロトコルのバージョンとサーバーの機能を確立するためのハンドシェイクです。
  • tools/list:利用可能なツールを一覧表示します。メインサーバーは llm_call ツールを提供します。
  • tools/call:指定されたツールを実行します。
  • resources/list:利用可能なリソースを一覧表示します(現在はありません)。
  • resources/templates/list:利用可能なリソーステンプレートを一覧表示します(現在はありません)。

llm_call ツールは、引数として prompt(文字列、必須)と、任意で model(文字列)を受け取ります。指定したモデルが許可されている場合は、呼び出しごとにモデルを上書きできます。

クライアントとの通信例(Python)

標準入力/出力を介した通信をサポートする任意の言語で、STDIO MCP サーバーと通信できます。以下は、subprocess モジュールを使用した Python の例です。

import subprocess
import json
import time

def send_request(process, request):
    """Sends a JSON-RPC request to the server's stdin."""
    request_str = json.dumps(request) + "\\n"
    process.stdin.write(request_str.encode('utf-8'))
    process.stdin.flush()

def read_response(process):
    """Reads a JSON-RPC response from the server's stdout."""
    line = process.stdout.readline().decode('utf-8').strip()
    if line:
        return json.loads(line)
    return None

if __name__ == "__main__":
    # Start the MCP server as a subprocess
    # Ensure you have the virtual environment activated or the package installed globally
    server_process = subprocess.Popen(
        ["python", "-m", "llm_wrapper_mcp_server"], # Add any CLI args here if needed
        stdin=subprocess.PIPE,
        stdout=subprocess.PIPE,
        stderr=subprocess.PIPE, # Capture stderr for debugging
        text=False # Use bytes for stdin/stdout
    )

    print("Waiting for server to initialize...")
    # The server sends an initial capabilities message on startup (id: None)
    initial_response = read_response(server_process)
    print(f"Server Initial Response: {json.dumps(initial_response, indent=2)}")

    # 1. Send an 'initialize' request
    initialize_request = {
        "jsonrpc": "2.0",
        "id": "1",
        "method": "initialize",
        "params": {}
    }
    print("\\nSending initialize request...")
    send_request(server_process, initialize_request)
    initialize_response = read_response(server_process)
    print(f"Initialize Response: {json.dumps(initialize_response, indent=2)}")

    # 2. Send a 'tools/call' request to use the 'llm_call' tool
    llm_call_request = {
        "jsonrpc": "2.0",
        "id": "2",
        "method": "tools/call",
        "params": {
            "name": "llm_call",
            "arguments": {
                "prompt": "What is the capital of France?"
                # Optionally add: "model": "another-model/if-allowed"
            }
        }
    }
    print("\\nSending llm_call request...")
    send_request(server_process, llm_call_request)
    llm_call_response = read_response(server_process)
    print(f"LLM Call Response: {json.dumps(llm_call_response, indent=2)}")

    # You can also read stderr for any server logs/errors
    # Note: stderr might block if there's no output, consider using non-blocking reads or threads for real apps
    # stderr_output = server_process.stderr.read().decode('utf-8')
    # if stderr_output:
    #     print("\\nServer Stderr Output:\\n", stderr_output)

    # Terminate the server process
    server_process.terminate()
    server_process.wait(timeout=5) # Wait for process to terminate
    print("\\nServer process terminated.")

開発

プロジェクトのディレクトリとファイル構成の詳細、およびソフトウェア開発エージェント向けの重要なガイドラインについては、AGENTS.md を参照してください。このドキュメントは、コードベースに貢献するエージェントにとって不可欠です。

テストの実行

このプロジェクトでは、テストに pytest を使用します。

すべての単体テストを実行するには:

pytest

通常のテスト実行中に外部 API が呼び出されないよう、統合テストはデフォルトで無効になっています。統合テストを含めて実行するには、integration マーカーを使用します。

pytest -m integration
開発用依存関係のインストール

開発用依存関係をインストールします。

pip install -e ".[dev]"

ライセンス

MIT ライセンス

コメント

MCP は初めてですか?

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

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