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.
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
- Arquitectura
- Prerrequisitos
- Instalación
- Configuración
- Ejecución del servicio
- API de MCP
- Pruebas
- Solución de problemas
- Contribuyendo
- Licencia
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ónFastMCP
y define herramientas/recursos de MCP.respond.py
: contiene la lógica de generación de texto principal que utiliza la bibliotecagoogle-generativeai
para 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_response
que 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.py
toma el trabajo de la cola. - El trabajador ejecuta la función
call_predict_response
(desdeutils.py
). call_predict_response
llama 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_response
y 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+
pip
ouv
(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:Copy
- Crear y activar un entorno virtual (usando
venv
ouv
):Usandovenv
(biblioteca estándar):UsandoCopyuv
(si está instalado):Copy - Instalar dependencias (usando
pip
dentro de venv ouv
):Usandopip
:UsandoCopyuv
:Copy
Configuración
- Clave API: Crea un archivo llamado
.api-gemini
en tu directorio personal (~/.api-gemini
) e introduce tu clave API de Google Gemini. Asegúrate de que el archivo no contenga espacios en blanco.(ReemplaceCopyYOUR_API_KEY_HERE
con su clave real) - Otras configuraciones: Copie el archivo
.env.example
a.env
:Copy - Modifique el archivo
.env
para 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-server
o mediante un administrador de servicios). - Inicie RQ Worker: abra una terminal, active su entorno virtual (
source .venv/bin/activate
o similar) y ejecute:Este comando inicia el proceso de trabajo, que escuchará los trabajos en la cola de Redis definida en el archivoCopy.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 uvicorn
ouv pip install uvicorn
):ReemplaceCopy8000
con el puerto deseado. El parámetro--reload
es útil para el desarrollo.Como alternativa, puede utilizar el scriptstart-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:Copy
API de MCP
El servidor proporciona los siguientes puntos finales compatibles con MCP:
Herramientas
generate_text
- Descripció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 sernull
o 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:
Gemini API key not found in .../.api-gemini or GEMINI_API_KEY environment variable
. Asegúrese de haber creado el archivo~/.api-gemini
en 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_KEY
esté 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_URL
especificada 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
- 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