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
インストール
- リポジトリをクローンします。
- 仮想環境を作成してアクティブ化します (
venv
またはuv
を使用)。venv
(標準ライブラリ) を使用する:uv
を使用する (インストールされている場合): - 依存関係をインストールします (venv または
uv
内でpip
を使用)。pip
を使用する:uv
の使用:
構成
- **APIキー:**ホームディレクトリ(
~/.api-gemini
)に.api-gemini
というファイルを作成し、Google Gemini APIキーを入力してください。ファイルに余分な空白が含まれていないことを確認してください。(YOUR_API_KEY_HERE
実際のキーに置き換えてください) - その他の設定:
.env.example
ファイルを.env
にコピーします。 .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
または同様のコマンド) して、次を実行します。このコマンドはワーカープロセスを起動し、.env
ファイルで定義された Redis キューのジョブをリッスンします。このターミナルは実行したままにしておいてください。 - MCP サーバーを起動します。 別のターミナルを開き、仮想環境をアクティブにして、
uvicorn
などのツールを使用して MCP サーバーを実行します (インストールする必要がある場合があります:pip install uvicorn
またはuv pip install uvicorn
):8000
ご希望のポートに置き換えてください。----reload
フラグは開発時に便利です。あるいは、Redis (実行されていない場合) とワーカーをバックグラウンドで起動しようとするstart-services.sh
スクリプト (主に Linux/macOS 環境向けに設計) を使用することもできます。
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
- AsecurityAlicenseAqualityAn MCP server implementation that integrates with Minimax API to provide AI-powered image generation and text-to-speech functionality in editors like Windsurf and Cursor.Last updated -21921JavaScriptMIT License
- -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
- -securityAlicense-qualityAn MCP-based service that enables AI models to seamlessly interact with Feishu (Lark) platform, supporting document reading and chatbot messaging capabilities.Last updated -3963TypeScriptMIT License
- -securityFlicense-qualityAn MCP server that provides user dialogue capabilities for AI code editors, allowing AI to interact with users through dialog boxes when needing input during the coding process.Last updated -Python