Integrations
Uses environment variables via .env file for configuration management, allowing customization of service parameters like maximum token count and Redis connection details.
Leverages the Google Gemini API (gemini-2.5-pro-preview-03-25) for text generation in a conversational AI 'waifu' character, with request queuing for handling concurrent requests asynchronously.
Implements a queue system for asynchronous processing of AI generation requests, providing job status tracking and efficient handling of concurrent requests.
MCP ワイフキュー(ジェミニ版)
このプロジェクトは、会話型AI「waifu」キャラクター用のMCP(Model Context Protocol)サーバーを実装します。Redisキューを介してGoogle Gemini APIを活用し、非同期処理を実現します。FastMCP FastMCP
を使用することで、サーバーのセットアップと管理を簡素化します。
目次
特徴
- Google Gemini API (
gemini-2.5-pro-preview-03-25
) を使用したテキスト生成。 - 同時リクエストを非同期的に処理するために Redis を使用したリクエスト キューイング。
FastMCP
を使用した MCP 準拠 API。- MCP リソースによるジョブ ステータスの追跡。
- 環境変数 (
.env
ファイル) による構成と~/.api-gemini
からの API キーの読み込み。
建築
このプロジェクトは、いくつかの主要なコンポーネントで構成されています。
main.py
:FastMCP
アプリケーションを初期化し、MCP ツール/リソースを定義するメイン エントリ ポイント。respond.py
:google-generativeai
ライブラリを使用して Gemini API と対話するためのコアテキスト生成ロジックが含まれています。task_queue.py
: Redis キューとのやり取りを処理し (python-rq
を使用)、生成リクエストをキューに登録します。utils.py
: ユーティリティ関数、具体的には、respond.py
内の Gemini ロジックを呼び出すためにワーカーによって実行されるcall_predict_response
が含まれています。worker.py
:call_predict_response
を呼び出して、キューからのジョブを処理する Redis ワーカー (python-rq
)。config.py
:pydantic-settings
を使用して構成を管理します。models.py
: MCP リクエストとレスポンスの検証用の Pydantic モデルを定義します。
リクエストのフローは次のとおりです。
- クライアントは、
generate_text
MCP ツール (main.py
で定義) にリクエストを送信します。 - ツールはリクエスト (プロンプト) を Redis キュー (
task_queue.py
によって処理) にエンキューします。 worker.py
プロセスがキューからジョブを取得します。- ワーカーは
call_predict_response
関数 (utils.py
から) を実行します。 call_predict_response
、Gemini API と対話するpredict_response
関数 (respond.py
内) を呼び出します。- 生成されたテキスト (またはエラー メッセージ) は
predict_response
によって返され、RQ によってジョブ結果として保存されます。 - クライアントは
job://{job_id}
MCP リソース (main.py
で定義) を使用してジョブのステータスと結果を取得できます。
前提条件
- Python 3.7以上
pip
またはuv
(Python パッケージインストーラー)- Redis サーバー (インストール済み、実行中)
- Google Gemini APIキー
Redis をシステムにインストールする手順については、Redis の公式 Web サイトをご覧ください: https://redis.io/docs/getting-started/ Gemini API キーは、Google AI Studio から取得できます: https://aistudio.google.com/app/apikey
インストール
- リポジトリをクローンします。Copy
- 仮想環境を作成してアクティブ化します (
venv
またはuv
を使用)。venv
(標準ライブラリ) を使用する:Copyuv
を使用する (インストールされている場合):Copy - 依存関係をインストールします (venv または
uv
内でpip
を使用)。pip
を使用する:Copyuv
の使用:Copy
構成
- **APIキー:**ホームディレクトリ(
~/.api-gemini
)に.api-gemini
というファイルを作成し、Google Gemini APIキーを入力してください。ファイルに余分な空白が含まれていないことを確認してください。(CopyYOUR_API_KEY_HERE
実際のキーに置き換えてください) - その他の設定:
.env.example
ファイルを.env
にコピーします。Copy .env
ファイルを変更して、残りの構成値を設定します。MAX_NEW_TOKENS
: Gemini レスポンスのトークンの最大数 (デフォルト:2048
)。REDIS_URL
: Redis サーバーの URL (デフォルト:redis://localhost:6379
)。FLASK_ENV
、FLASK_APP
: オプション。他の場所で使用される場合は Flask に関連しますが、MCP サーバー/ワーカー操作の中心ではありません。
サービスの実行
- **Redis が実行中であることを確認してください。**ローカルにインストールした場合は、Redis サーバープロセスを起動する必要がある場合があります(例:
redis-server
コマンド、またはサービスマネージャー経由)。 - **RQ ワーカーを起動します。**ターミナルを開き、仮想環境をアクティブ化 (
source .venv/bin/activate
または同様のコマンド) して、次を実行します。このコマンドはワーカープロセスを起動し、Copy.env
ファイルで定義された Redis キューのジョブをリッスンします。このターミナルは実行したままにしておいてください。 - MCP サーバーを起動します。 別のターミナルを開き、仮想環境をアクティブにして、
uvicorn
などのツールを使用して MCP サーバーを実行します (インストールする必要がある場合があります:pip install uvicorn
またはuv pip install uvicorn
):Copy8000
ご希望のポートに置き換えてください。----reload
フラグは開発時に便利です。あるいは、Redis (実行されていない場合) とワーカーをバックグラウンドで起動しようとするstart-services.sh
スクリプト (主に Linux/macOS 環境向けに設計) を使用することもできます。Copy
MCP API
サーバーは、次の MCP 準拠のエンドポイントを提供します。
ツール
generate_text
- **説明:**バックグラウンド キューを介して Gemini 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
: ジョブの現在の状態(例:「キューに追加済み」、「開始済み」、「終了済み」、「失敗」)。RQは内部的に若干異なる用語を使用します(「開始済み」と「処理中」、「終了済み」と「完了」)。リソースはこれらをマッピングします。result
: ジョブのステータスが「完了」の場合、Geminiから生成されたテキスト。それ以外の場合はnull
。ジョブが失敗した場合、RQの処理に応じて、結果はnull
になるか、エラー情報が含まれる場合があります。
テスト
プロジェクトにはテストが含まれています。テストの依存関係がインストールされていることを確認してください( pip install -e .[test]
またはuv pip install -e .[test]
)。
pytest
を使用してテストを実行します。
**注意:**テストでは、実装に応じて、Redis のモック ( fakeredis
) と、場合によっては Gemini API 呼び出しが必要になる場合があります。
トラブルシューティング
- エラー:
Gemini API key not found in .../.api-gemini or GEMINI_API_KEY environment variable
。ホームディレクトリに~/.api-gemini
ファイルを作成し、有効なGemini APIキーを入力してください。または、GEMINI_API_KEY
環境変数がフォールバックとして設定されていることを確認してください。 - Gemini API 呼び出し中にエラーが発生しました(例: AuthenticationError、PermissionDenied) :
~/.api-gemini
(またはフォールバック環境変数)内の API キーが正しく有効であることを再度ご確認ください。該当する場合は、Google Cloud プロジェクトで API が有効になっていることを確認してください。 - ジョブが「キュー」で停止している場合: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ファイルを参照してください。
This server cannot be installed
remote-capable server
The server can be hosted and run remotely because it primarily relies on remote services or has no dependency on the local environment.
Redis キューイングと GPU アクセラレーションを備えたテキスト生成サービスを使用して会話型 AI「waifu」キャラクターを実装する MCP サーバー。
Related MCP Servers
- AsecurityAlicenseAqualityA server enabling integration between KoboldAI's text generation capabilities and MCP-compatible applications, with features like chat completion, Stable Diffusion, and OpenAI-compatible API endpoints.Last updated -2053JavaScriptMIT License
- -securityAlicense-qualityA TypeScript-based MCP server that provides two tools for chatting with Mistral AI models, supporting both text-only conversations and image+text inputs.Last updated -JavaScriptMIT License
- -securityFlicense-qualityAn MCP server that enables AI assistants like Claude to interact with Anki flashcard decks, allowing users to create, manage, and update flashcards through natural language conversations.Last updated -1TypeScript
- -securityAlicense-qualityA Model Context Protocol (MCP) server that enables real-time, interactive AI chat with Selector AI through a streaming-capable server and Docker-based client communicating via stdin/stdout.Last updated -1PythonApache 2.0