MCP Waifu Queue
Cola de Waifu MCP
Este proyecto implementa un servidor MCP (Model Context Protocol) para un personaje "waifu" de IA conversacional, aprovechando la API de OpenRouter a través de una cola Redis para el procesamiento asíncrono. Utiliza la biblioteca FastMCP para una configuración y gestión simplificadas del servidor.
Tabla de contenidos
Related MCP server: local-agent-context
Características
Generación de texto a través de OpenRouter utilizando el modelo de
~/.model-openrouteroopenrouter/free.Cola de solicitudes mediante Redis para gestionar solicitudes concurrentes de forma asíncrona.
API compatible con MCP utilizando
FastMCP.Seguimiento del estado del trabajo mediante recursos MCP.
Configuración mediante variables de entorno (archivo
.env).Carga de clave API:
OpenRouter:
OPENROUTER_API_KEYo~/.api-openrouter
Archivos de selección de modelo en el directorio de inicio:
~/.model-openrouterpara el nombre del modelo de OpenRouter
Arquitectura
El proyecto consta de varios componentes clave:
main.py: El punto de entrada principal, que inicializa la aplicaciónFastMCPy define las herramientas/recursos MCP.respond.py: Contiene la lógica central de generación de texto utilizando la API de OpenRouter.task_queue.py: Gestiona las interacciones con la cola Redis (usandopython-rq), encolando las solicitudes de generación.utils.py: Contiene funciones de utilidad, específicamentecall_predict_response, que es ejecutada por el trabajador para llamar a la lógica de generación enrespond.py.worker.py: Un trabajador de Redis (python-rq) que procesa trabajos de la cola, llamando acall_predict_response.config.py: Gestiona la configuración utilizandopydantic-settings.models.py: Define modelos Pydantic para la validación de solicitudes y respuestas MCP.
El flujo de una solicitud es el siguiente:
Un cliente envía una solicitud a la herramienta MCP
generate_text(definida enmain.py).La herramienta encola la solicitud (prompt) en una cola Redis (gestionada por
task_queue.py).Un proceso
worker.pyrecoge el trabajo de la cola.El trabajador ejecuta la función
call_predict_response(deutils.py).call_predict_responsellama a la funciónpredict_response(enrespond.py), que interactúa con la API de OpenRouter.El texto generado (o un mensaje de error) es devuelto por
predict_responsey almacenado como resultado del trabajo por RQ.El cliente puede recuperar el estado y el resultado del trabajo utilizando el recurso MCP
job://{job_id}(definido enmain.py).
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
endRequisitos previos
Python 3.7+
pipouv(instalador de paquetes de Python)Servidor Redis (instalado y en ejecución)
Una clave API de OpenRouter
Puede encontrar instrucciones para instalar Redis en su sistema en el sitio web oficial de Redis: https://redis.io/docs/getting-started/ Puede obtener una clave API de OpenRouter en: https://openrouter.ai/
Instalación
Clone el repositorio:
git clone <YOUR_REPOSITORY_URL> cd mcp-waifu-queueCree y active un entorno virtual usando
uv:python -m uv venv .venv .venv/Scripts/python.exe -m ensurepip .venv/Scripts/python.exe -m pip install uvInstale las dependencias:
.venv/Scripts/python.exe -m uv pip install -r requirements.txt .venv/Scripts/python.exe -m uv pip install -r requirements-dev.txt
Configuración
Nombres de modelo mediante archivos en $HOME:
Archivo de modelo de OpenRouter:
echo "openrouter/free" > ~/.model-openrouter
Claves API: Preferiblemente mediante variables de entorno con respaldo en archivo:
OpenRouter:
OPENROUTER_API_KEYo~/.api-openrouterGXP6
(Reemplace
YOUR_API_KEY_HEREcon su clave real)Otros ajustes: Copie el archivo
.env.examplea.env:cp .env.example .envModifique el archivo
.envpara establecer los valores de configuración restantes:MAX_NEW_TOKENS: Número máximo de tokens para la respuesta (predeterminado:2048).REDIS_URL: La URL de su servidor Redis (predeterminado:redis://localhost:6379).FLASK_ENV,FLASK_APP: Opcional, relacionado con Flask si se usa en otro lugar, no es fundamental para la operación del servidor/trabajador MCP.
Ejecución del servicio
Asegúrese de que Redis esté en ejecución. Si lo instaló localmente, es posible que deba iniciar el proceso del servidor Redis (por ejemplo, el comando
redis-server, o a través de un gestor de servicios).Inicie el trabajador RQ: Abra una terminal, active su entorno virtual (
source .venv/bin/activateo similar) y ejecute:python -m mcp_waifu_queue.workerEste comando inicia el proceso del trabajador, que escuchará los trabajos en la cola Redis definida en su archivo
.env. Mantenga esta terminal abierta.Inicie el servidor MCP: Abra otra terminal, active el entorno virtual y ejecute el servidor MCP utilizando una herramienta como
uvicorn(es posible que deba instalarla:pip install uvicornouv pip install uvicorn):uvicorn mcp_waifu_queue.main:app --reload --port 8000 # Example portReemplace
8000con el puerto deseado. La bandera--reloades útil para el desarrollo.Alternativamente, puede usar el script
start-services.sh(diseñado principalmente para entornos Linux/macOS) que intenta iniciar Redis (si no se está ejecutando) y el trabajador en segundo plano:# Ensure the script is executable: chmod +x ./scripts/start-services.sh ./scripts/start-services.sh # Then start the MCP server manually as shown above.
API MCP
El servidor proporciona los siguientes puntos finales compatibles con MCP:
Herramientas
generate_textDescripción: Envía una solicitud de generación de texto a la API de OpenRouter a través de la cola en segundo plano.
Entrada:
{"prompt": "Su prompt de texto aquí"}(Tipo:GenerateTextRequest)Salida:
{"job_id": "rq:job:..."}(Un ID único para el trabajo en cola)
Recursos
job://{job_id}Descripción: Recupera el estado y el resultado de un trabajo enviado anteriormente.
Parámetro URI:
job_id(El ID devuelto por la herramientagenerate_text).Salida:
{"status": "...", "result": "..."}(Tipo:JobStatusResponse)status: El estado actual del trabajo (por ejemplo, "queued", "started", "finished", "failed"). RQ utiliza términos ligeramente diferentes internamente ("started" vs "processing", "finished" vs "completed"). El recurso los mapea.result: El texto generado si el estado del trabajo es "completed", de lo contrarionull. Si el trabajo falló, el resultado podría sernullo contener información de error dependiendo del manejo de RQ.
Pruebas
El proyecto incluye pruebas. Asegúrese de haber instalado las dependencias de prueba (pip install -e .[test] o uv pip install -e .[test]).
Ejecute las pruebas usando pytest:
pytest testsNota: Las pruebas pueden requerir simular Redis (fakeredis) y potencialmente las llamadas a la API de OpenRouter dependiendo de su implementación.
Solución de problemas
Error:
OpenRouter API key not available: Asegúrese de queOPENROUTER_API_KEYesté configurado o que~/.api-openrouterexista con su clave en una sola línea (sin espacios).Trabajos atascados en "queued": Verifique que el trabajador RQ (
python -m mcp_waifu_queue.worker) se esté ejecutando en una terminal separada y conectado a la misma instancia de Redis especificada en.env. Compruebe los registros del trabajador en busca de errores.ConnectionRefusedError (Redis): Asegúrese de que su servidor Redis esté en ejecución y accesible en la
REDIS_URLespecificada en.env.Problemas de conexión al servidor MCP: Asegúrese de que el servidor MCP (
uvicorn ...) se esté ejecutando y que se esté conectando al host/puerto correcto.
Contribución
Haga un fork del repositorio.
Cree una nueva rama para su característica o corrección de errores (
git checkout -b feature/nombre-de-su-caracteristica).Realice sus cambios y confírmelos (
git commit -am 'Añadir alguna característica').Envíe su rama al repositorio bifurcado (
git push origin feature/nombre-de-su-caracteristica).Cree una Pull Request en el repositorio original.
Por favor, cumpla con los estándares de codificación y las reglas de linting del proyecto (ruff).
Licencia
Este proyecto tiene la licencia MIT-0; consulte el archivo LICENSE para obtener más detalles.
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- AlicenseNot gradedqualityBmaintenanceA plugin-based MCP server that enables AI assistants to interact with external systems through custom tools, resources, and prompts.4AGPL 3.0
- AlicenseNot gradedqualityDmaintenanceA local MCP server that gives AI coding agents persistent memory and context across sessions.9MIT
- AlicenseBqualityFmaintenanceA feature-rich MCP server for Discord, giving AI companions full presence in Discord communities — reading, responding, reacting, searching, and speaking.264651MIT
- AlicenseNot gradedqualityDmaintenanceMCP server integrating Higgsfield AI API for image generation, video animation, and speech-to-video synthesis with character management and job tracking.4MIT
Related MCP Connectors
Hosted MCP server connecting claude.ai, ChatGPT and other AI apps to your own computer
MCP server for AI dialogue using various LLM models via AceDataCloud
Cloud-hosted MCP server for durable AI memory
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/waifuai/mcp-waifu-queue'
If you have feedback or need assistance with the MCP directory API, please join our Discord server