Cola de Waifu de MCP (Edición Géminis)
Este proyecto implementa un servidor MCP (Protocolo de Contexto de Modelo) para un personaje "waifu" con IA conversacional, aprovechando la API de Google Gemini mediante una cola de Redis para el procesamiento asíncrono. Utiliza la biblioteca FastMCP para simplificar la configuración y la gestión del servidor.
Tabla de contenido
Características
Generación de texto mediante la API de Google Gemini (
gemini-2.5-pro-preview-03-25).Cola de solicitudes mediante Redis para gestionar solicitudes simultáneas de forma asincrónica.
API compatible con MCP que utiliza
FastMCP.Seguimiento del estado del trabajo a través de recursos de MCP.
Configuración mediante variables de entorno (archivo
.env) y carga de clave API desde~/.api-gemini.
Arquitectura
El proyecto consta de varios componentes clave:
main.py: el punto de entrada principal, que inicializa la aplicaciónFastMCPy define herramientas/recursos de MCP.respond.py: contiene la lógica de generación de texto principal que utiliza la bibliotecagoogle-generativeaipara interactuar con la API de Gemini.task_queue.py: maneja las interacciones con la cola de Redis (usandopython-rq), poniendo en cola las solicitudes de generación.utils.py: contiene funciones de utilidad, específicamentecall_predict_responseque es ejecutada por el trabajador para llamar a la lógica Gemini enrespond.py.worker.py: un trabajador de Redis (python-rq) que procesa trabajos de la cola, llamandocall_predict_response.config.py: administra la configuración mediantepydantic-settings.models.py: define modelos de Pydantic para la validación de solicitudes y respuestas de 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 pone en cola la solicitud (prompt) en una cola de Redis (manejada por
task_queue.py).Un proceso
worker.pytoma el trabajo de la cola.El trabajador ejecuta la función
call_predict_response(desdeutils.py).call_predict_responsellama a la funciónpredict_response(enrespond.py), que interactúa con la API de Gemini.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).
Prerrequisitos
Python 3.7+
pipouv(instalador de paquetes de Python)Servidor Redis (instalado y en funcionamiento)
Una clave API de Google Gemini
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 Gemini de Google AI Studio: https://aistudio.google.com/app/apikey
Instalación
Clonar el repositorio:
git clone <YOUR_REPOSITORY_URL> cd mcp-waifu-queueCrear y activar un entorno virtual (usando
venvouv):Usando
python -m venv .venv source .venv/bin/activate # On Linux/macOS # .venv\Scripts\activate # On Windows CMD # source .venv/Scripts/activate # On Windows Git Bash/PowerShell CoreUsando
# Ensure uv is installed (e.g., pip install uv) python -m uv venv .venv source .venv/bin/activate # Or equivalent activation for your shellInstalar dependencias (usando
pipdentro de venv ouv):Usando
pip install -e .[test] # Installs package in editable mode with test extrasUsando
# Ensure uv is installed inside the venv if desired, or use the venv's python # .venv/Scripts/python.exe -m pip install uv # Example for Windows .venv/Scripts/python.exe -m uv pip install -e .[test] # Example for Windows # python -m uv pip install -e .[test] # If uv is in PATH after venv activation
Configuración
Clave API: Crea un archivo llamado
.api-geminien tu directorio personal (~/.api-gemini) e introduce tu clave API de Google Gemini. Asegúrate de que el archivo no contenga espacios en blanco.echo "YOUR_API_KEY_HERE" > ~/.api-gemini(Reemplace
Otras configuraciones: 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 de Gemini (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é ejecutándose. Si lo instaló localmente, es posible que deba iniciar el proceso del servidor Redis (por ejemplo, con el comando
redis-servero mediante un administrador de servicios).Inicie RQ Worker: abra una terminal, active su entorno virtual (
source .venv/bin/activateo similar) y ejecute:python -m mcp_waifu_queue.workerEste comando inicia el proceso de trabajo, que escuchará los trabajos en la cola de Redis definida en el archivo
.env. Mantenga esta terminal en ejecución.Inicie el servidor MCP: abra otra terminal, active el entorno virtual y ejecute el servidor MCP usando una herramienta como
uvicorn(es posible que necesite instalarla:pip install uvicornouv pip install uvicorn):uvicorn mcp_waifu_queue.main:app --reload --port 8000 # Example portReemplace
8000con el puerto deseado. El parámetro--reloades útil para el desarrollo.Como alternativa, puede utilizar el script
start-services.sh(diseñado principalmente para entornos Linux/macOS) que intenta iniciar Redis (si no está en ejecución) 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 de 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 Gemini a través de la cola en segundo plano.
Entrada:
{"prompt": "Your text prompt here"}(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 previamente.
Parámetro URI:
job_id(el ID devuelto por la herramientagenerate_text).Salida:
{"status": "...", "result": "..."}(Tipo:JobStatusResponse)status: El estado actual del trabajo (p. ej., "en cola", "iniciado", "finalizado", "fallido"). RQ utiliza términos ligeramente diferentes internamente ("iniciado" vs. "en proceso", "finalizado" vs. "completado"). El recurso los asigna.result: El texto generado por Gemini si el estado del trabajo es "completado"; de lo contrario,null. Si el trabajo falló, el resultado podría sernullo contener información de error, dependiendo del procesamiento de la solicitud.
Pruebas
El proyecto incluye pruebas. Asegúrese de tener instaladas las dependencias de prueba ( pip install -e .[test] o uv pip install -e .[test] ).
Ejecutar pruebas usando pytest :
Nota: Las pruebas pueden requerir simular Redis ( fakeredis ) y potencialmente las llamadas a la API de Gemini dependiendo de su implementación.
Solución de problemas
Error: . Asegúrese de haber creado el archivo
~/.api-geminien su directorio personal y de haber guardado en él su clave de API de Gemini válida. Como alternativa, asegúrese de que la variable de entornoGEMINI_API_KEYesté configurada como alternativa.Error durante la llamada a la API de Gemini (p. ej., AuthenticationError, PermissionDenied) : Verifique que la clave de API en
~/.api-gemini(o la variable de entorno de respaldo) sea correcta y válida. Asegúrese de que la API esté habilitada para su proyecto de Google Cloud, si corresponde.Trabajos bloqueados en "en cola" : Verifique que el trabajador de RQ (
python -m mcp_waifu_queue.worker) se esté ejecutando en una terminal independiente y conectado a la misma instancia de Redis especificada en.env. Revise los registros del trabajador para detectar errores.ConnectionRefusedError (Redis) : asegúrese de que su servidor Redis esté ejecutándose y sea accesible en la
REDIS_URLespecificada en.env.Problemas de conexión del servidor MCP : asegúrese de que el servidor MCP (
uvicorn ...) esté ejecutándose y de que se esté conectando al host/puerto correcto.
Contribuyendo
Bifurcar el repositorio.
Crea una nueva rama para tu característica o corrección de error (
git checkout -b feature/your-feature-name).Realice sus cambios y confirme (
git commit -am 'Add some feature').Envía tu rama a tu repositorio bifurcado (
git push origin feature/your-feature-name).Cree una nueva solicitud de extracción en el repositorio original.
Por favor, respete los estándares de codificación del proyecto y las reglas de linting ( ruff ).
Licencia
Este proyecto está licenciado bajo la licencia MIT-0: consulte el archivo de LICENCIA para obtener más detalles.
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.
Un servidor MCP que implementa un personaje 'waifu' de IA conversacional utilizando un servicio de generación de texto con cola de Redis y aceleración de GPU.
Related MCP Servers
- Asecurity-licenseAqualityAn 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 -21351MIT License
- -security-license-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.
- -security-license-qualityAn MCP-based service that enables AI models to seamlessly interact with Feishu (Lark) platform, supporting document reading and chatbot messaging capabilities.Last updated -442MIT License
- -security-license-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.