MCP Waifu Queue (Gemini Edition) について
MCP Waifu Queue (Gemini Edition) は、Redis キューとワーカーを介して OpenRouter を呼び出す、非同期テキスト生成向けの MCP サーバーです。ジョブの送信と結果取得を分け、並行リクエストを扱えます。
主な機能
- 01OpenRouter によるテキスト生成
- 02Redis を使った非同期リクエスト処理
- 03MCP リソースによるジョブ状態の追跡
- 04環境変数またはファイルからの設定・キー読み込み
活用シーン
- 01テキスト生成ジョブを送信し、後から結果を取得
- 02Redis キューで並行する生成リクエストを処理
MCP 対応
プロンプトを Redis キューに登録してジョブ ID を返す `generate_text` ツールを提供します。クライアントは `job://{job_id}` リソースから状態と結果を取得できます。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
MCP Waifu Queue
このプロジェクトは、Redis キューを介した非同期処理に OpenRouter API を利用し、会話型 AI の「waifu」キャラクター向け MCP(Model Context Protocol)サーバーを実装します。サーバーのセットアップと管理を簡素化するため、FastMCP ライブラリを使用しています。
目次
機能
~/.model-openrouterのモデル、またはopenrouter/freeを使用した OpenRouter 経由のテキスト生成。- Redis を使用したリクエストのキューイングによる、同時リクエストの非同期処理。
FastMCPを使用した MCP 準拠の API。- MCP リソースによるジョブステータスの追跡。
- 環境変数(
.envファイル)による設定。 - API キーの読み込み:
- OpenRouter:
OPENROUTER_API_KEYまたは~/.api-openrouter
- OpenRouter:
- ホームディレクトリ内のモデル選択ファイル:
- OpenRouter のモデル名は
~/.model-openrouter
- OpenRouter のモデル名は
アーキテクチャ
このプロジェクトは、次の主要なコンポーネントで構成されています。
main.py:メインのエントリーポイントです。FastMCPアプリケーションを初期化し、MCP ツールとリソースを定義します。respond.py:OpenRouter API を使用したテキスト生成の中核ロジックが含まれています。task_queue.py:Redis キューとのやり取り(python-rqを使用)を処理し、生成リクエストをキューに追加します。utils.py:ユーティリティ関数が含まれています。特に、ワーカーによって実行され、respond.py内の生成ロジックを呼び出すcall_predict_responseが含まれています。worker.py:キューからジョブを処理し、call_predict_responseを呼び出す Redis ワーカー(python-rq)です。config.py:pydantic-settingsを使用して設定を管理します。models.py:MCP リクエストとレスポンスの検証に使用する Pydantic モデルを定義します。
リクエストの処理の流れは次のとおりです。
- クライアントが
main.pyで定義されたgenerate_textMCP ツールにリクエストを送信します。 - ツールがリクエスト(プロンプト)を Redis キューに追加します(
task_queue.pyが処理します)。 worker.pyプロセスがキューからジョブを取得します。- ワーカーが
utils.pyにあるcall_predict_response関数を実行します。 call_predict_responseがrespond.pyにあるpredict_response関数を呼び出し、この関数が OpenRouter API とやり取りします。- 生成されたテキスト(またはエラーメッセージ)が
predict_responseから返され、RQ によってジョブの結果として保存されます。 - クライアントは
main.pyで定義されたjob://{job_id}MCP リソースを使用して、ジョブのステータスと結果を取得できます。
graph LR
subgraph Client
A[User/Client] -->|1. Send Prompt via MCP Tool| B(mcp-waifu-queue: main.py)
end
subgraph mcp-waifu-queue Server
B -->|2. Enqueue Job (prompt)| C[Redis Queue]
B -->|7. Return Job ID| A
D[RQ Worker (worker.py)] --|>| C
D -->|3. Dequeue Job & Execute| E(utils.call_predict_response)
E -->|4. Call Generation Logic| F(respond.predict_response)
F -->|5. Call OpenRouter API| G[OpenRouter API]
G -->|6. Return Response| F
F --> E
E -->|Update Job Result in Redis| C
A -->|8. Check Status via MCP Resource| B
B -->|9. Fetch Job Status/Result| C
B -->|10. Return Status/Result| A
end
前提条件
- Python 3.7+
pipまたはuv(Python パッケージインストーラー)- Redis サーバー(インストール済みで、実行中であること)
- OpenRouter API キー
Redis のインストール方法については、Redis 公式サイトをご覧ください:https://redis.io/docs/getting-started/ OpenRouter API キーは、こちらから取得できます:https://openrouter.ai/
インストール
-
リポジトリをクローンします:
git clone <YOUR_REPOSITORY_URL> cd mcp-waifu-queue -
uvを使用して仮想環境を作成し、有効化します:python -m uv venv .venv .venv/Scripts/python.exe -m ensurepip .venv/Scripts/python.exe -m pip install uv -
依存関係をインストールします:
.venv/Scripts/python.exe -m uv pip install -r requirements.txt .venv/Scripts/python.exe -m uv pip install -r requirements-dev.txt
構成
-
$HOME内のファイルを使ったモデル名の設定:- OpenRouter のモデルファイル:
echo "openrouter/free" > ~/.model-openrouter
- OpenRouter のモデルファイル:
-
API キー: 環境変数での設定を推奨します。設定されていない場合はファイルが使用されます。
- OpenRouter:
OPENROUTER_API_KEYまたは~/.api-openrouter
echo "YOUR_API_KEY_HERE" > ~/.api-openrouter(
YOUR_API_KEY_HEREを実際のキーに置き換えてください) - OpenRouter:
-
その他の設定:
.env.exampleファイルを.envにコピーします。cp .env.example .env -
.envファイルを編集し、残りの設定値を指定します。MAX_NEW_TOKENS:応答の最大トークン数(デフォルト:2048)。REDIS_URL:Redis サーバーの URL(デフォルト:redis://localhost:6379)。FLASK_ENV、FLASK_APP:任意の設定です。他の用途で Flask を使用する場合に関連しますが、MCP サーバー/ワーカーの動作には必須ではありません。
サービスの実行
-
Redis が実行中であることを確認します。 ローカルにインストールした場合は、Redis サーバープロセスを起動する必要があることがあります(例:
redis-serverコマンド、またはサービスマネージャーを使用)。 -
RQ ワーカーを起動します: ターミナルを開き、仮想環境を有効にして(
source .venv/bin/activateなど)、次のコマンドを実行します。python -m mcp_waifu_queue.workerこのコマンドはワーカープロセスを起動します。ワーカーは
.envファイルで定義された Redis キューのジョブを待ち受けます。このターミナルは開いたままにしてください。 -
MCP サーバーを起動します: 別のターミナルを開き、仮想環境を有効にして、
uvicornなどのツールを使って MCP サーバーを起動します(インストールが必要な場合があります:pip install uvicornまたはuv pip install uvicorn)。uvicorn mcp_waifu_queue.main:app --reload --port 8000 # Example port8000を使用するポートに置き換えてください。--reloadフラグは開発時に便利です。代わりに、Redis(未起動の場合)とワーカーをバックグラウンドで起動する
start-services.shスクリプトを使用することもできます(主に Linux/macOS 環境向けに設計されています)。# Ensure the script is executable: chmod +x ./scripts/start-services.sh ./scripts/start-services.sh # Then start the MCP server manually as shown above.
MCP API
サーバーは、次の MCP 準拠エンドポイントを提供します。
ツール
generate_text- 説明: バックグラウンドキューを介して、テキスト生成リクエストを OpenRouter API に送信します。
- 入力:
{"prompt": "Your text prompt here"}(型:GenerateTextRequest) - 出力:
{"job_id": "rq:job:..."}(キューに登録されたジョブの一意な ID)
リソース
job://{job_id}- 説明: 以前に送信されたジョブのステータスと結果を取得します。
- URI パラメーター:
job_id(generate_textツールが返す ID)。 - 出力:
{"status": "...", "result": "..."}(型:JobStatusResponse)status:ジョブの現在の状態(例:「queued」、「started」、「finished」、「failed」)。RQ では内部的に多少異なる用語が使われます(「processing」ではなく「started」、「completed」ではなく「finished」)。このリソースはこれらの状態を対応付けます。result:ジョブのステータスが「completed」の場合は生成されたテキスト、それ以外の場合はnullです。ジョブが失敗した場合、RQ の処理方法によっては、結果がnullになるか、エラー情報が含まれることがあります。
テスト
このプロジェクトにはテストが含まれています。テスト依存関係をインストールしてください(pip install -e .[test] または uv pip install -e .[test])。
pytest を使ってテストを実行します。
pytest tests
注: テストの実装によっては、Redis(fakeredis)や OpenRouter API 呼び出しのモックが必要になる場合があります。
トラブルシューティング
- エラー:
OpenRouter API key not available:OPENROUTER_API_KEYが設定されていること、または~/.api-openrouterにキーが1行で(空白なしで)記載されていることを確認してください。 - ジョブが「queued」のまま停止する:RQ ワーカー(
python -m mcp_waifu_queue.worker)が別のターミナルで実行されており、.envで指定されているものと同じ Redis インスタンスに接続していることを確認してください。エラーがないか、ワーカーのログを確認してください。 - ConnectionRefusedError(Redis):Redis サーバーが起動しており、
.envで指定されているREDIS_URLからアクセス可能であることを確認してください。 - MCP サーバーへの接続に関する問題:MCP サーバー(
uvicorn ...)が起動しており、正しいホスト/ポートに接続していることを確認してください。
貢献
- リポジトリをフォークします。
- 機能またはバグ修正用の新しいブランチを作成します(
git checkout -b feature/your-feature-name)。 - 変更を加えてコミットします(
git commit -am 'Add some feature')。 - ブランチをフォークしたリポジトリにプッシュします(
git push origin feature/your-feature-name)。 - 元のリポジトリにプルリクエストを作成します。
プロジェクトのコーディング規約とリンティングルール(ruff)に従ってください。
ライセンス
このプロジェクトは MIT-0 ライセンスの下でライセンスされています。詳細については、LICENSE ファイルをご覧ください。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。