MCP Waifu Queue(双子版)
该项目为对话式 AI 角色“waifu”实现了一个 MCP(模型上下文协议)服务器,利用 Google Gemini API 通过 Redis 队列进行异步处理。它利用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
:包含实用函数,特别是call_predict_response
,它由工作者执行以调用respond.py
中的 Gemini 逻辑。worker.py
:一个 Redis 工作器(python-rq
),用于处理队列中的作业,调用call_predict_response
。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
调用predict_response
函数(在respond.py
中),该函数与 Gemini API 交互。- 生成的文本(或错误消息)由
predict_response
返回,并由 RQ 存储为作业结果。 - 客户端可以使用
job://{job_id}
MCP 资源(在main.py
中定义)检索作业状态和结果。
先决条件
- Python 3.7+
pip
或uv
(Python 包安装程序)- Redis 服务器(已安装并运行)
- Google Gemini API 密钥
您可以在 Redis 官方网站上找到在系统上安装 Redis 的说明: https://redis.io/docs/getting-started/您可以从 Google AI Studio 获取 Gemini API 密钥: 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 服务器进程(例如,使用
redis-server
命令或通过服务管理器)。 - **启动 RQ Worker:**打开终端,激活虚拟环境(
source .venv/bin/activate
或类似命令),然后运行:此命令将启动工作进程,该进程将监听.env
文件中定义的 Redis 队列中的作业。请保持此终端处于运行状态。 - **启动 MCP 服务器:**打开另一个终端,激活虚拟环境,然后使用
uvicorn
等工具运行 MCP 服务器(您可能需要安装它:pip install uvicorn
或uv pip install uvicorn
):将8000
替换为你想要的端口。----reload
标志对于开发很有用。或者,您可以使用start-services.sh
脚本(主要为 Linux/macOS 环境设计),该脚本尝试启动 Redis(如果未运行)和后台工作程序:
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
。如果作业失败,则结果可能为null
或包含错误信息,具体取决于 RQ 的处理方式。
测试
该项目包含测试。请确保已安装测试依赖项( 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 密钥(或 fallback 环境变量)是否正确有效。如果适用,请确保您的 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
)。 - 在原始存储库上创建一个新的 Pull 请求。
请遵守项目的编码标准和 linting 规则( 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.
一个 MCP 服务器,使用带有 Redis 排队和 GPU 加速的文本生成服务来实现对话式 AI“waifu”角色。
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