MCP Vector Sync

by qtoexdj
Verified
# MCP Vector Sync Servicio MCP para sincronización automática de vectores de búsqueda multi-tenant con Supabase mediante un sistema basado 100% en eventos. ## Descripción Este servicio recibe notificaciones en tiempo real de Supabase cuando hay cambios en la tabla `proyectos`, genera embeddings vectoriales utilizando OpenAI, y actualiza la tabla `proyecto_vector` manteniendo una búsqueda vectorial eficiente para cada tenant. Implementa el protocolo MCP (Model Context Protocol) para exponer herramientas y recursos de sincronización. ## Características - Sistema basado 100% en eventos (webhooks directos desde Supabase) - Generación de embeddings con OpenAI - Procesamiento inmediato de cambios en proyectos - Sistema de reintentos automáticos con backoff exponencial - Registro de auditoría para debugging y monitoreo - Sincronización multi-tenant con aislamiento completo de datos - Exposición de herramientas MCP para control y monitoreo - Servidor de health check para supervisión - Containerizado con Docker para fácil despliegue - Compatible con Railway para despliegue en producción ## Arquitectura de eventos El sistema utiliza una arquitectura basada completamente en eventos: 1. **Trigger en Supabase**: Cuando se crea o modifica un proyecto, un trigger envía un webhook directamente al servicio 2. **Procesamiento con retraso controlado**: Para nuevas inserciones, se aplica un retraso de 20 segundos para evitar condiciones de carrera 3. **Reintentos automáticos**: En caso de fallos, el sistema reintenta hasta 3 veces con backoff exponencial (2, 4, 8 segundos) 4. **Registro de auditoría**: Todos los intentos se registran en la tabla `webhook_logs` para debugging y monitoreo ## Requisitos - Node.js >= 18 - Supabase con tabla `proyectos` y `proyecto_vector` - API Key de OpenAI - Docker (para despliegue) ## Configuración El servicio utiliza variables de entorno para su configuración: ``` # Supabase SUPABASE_URL=https://your-project.supabase.co SUPABASE_SERVICE_ROLE_KEY=your-service-role-key # OpenAI OPENAI_API_KEY=your-openai-api-key OPENAI_MODEL=text-embedding-ada-002 # Rate Limiting RATE_LIMIT_PER_TENANT=100 CONCURRENT_REQUESTS=5 # Logging LOG_LEVEL=info ``` ## Desarrollo Local 1. Instalar dependencias: ```bash npm install ``` 2. Configurar variables de entorno (crear archivo `.env` en la raíz del proyecto) 3. Ejecutar en modo desarrollo: ```bash npm run dev ``` ## Docker Para ejecutar el servicio con Docker: ```bash # Construir la imagen docker build -t mcp-vector-sync . # Ejecutar el contenedor docker run -p 3000:3000 --env-file .env mcp-vector-sync ``` O con Docker Compose: ```bash docker-compose up ``` ## Despliegue en Railway ### Preparación 1. Crea un repositorio en GitHub y sube el código: ```bash git init git add . git commit -m "Initial commit" git remote add origin https://github.com/tu-usuario/mcp-vector-sync.git git push -u origin main ``` 2. Crea una cuenta en [Railway](https://railway.app/) si aún no tienes una. ### Despliegue 1. En Railway, crea un nuevo proyecto desde GitHub 2. Selecciona el repositorio `mcp-vector-sync` 3. Railway detectará automáticamente el Dockerfile 4. Configura las variables de entorno en la sección "Variables" 5. Despliega el servicio Railway utilizará el archivo `railway.json` para configurar el deployment y el Dockerfile para construir la imagen. ### Monitoreo Una vez desplegado, puedes monitorear el servicio usando el endpoint `/health`: ``` https://tu-proyecto.railway.app/health ``` ## Endpoint de Webhook El sistema recibe webhooks en el siguiente endpoint: ``` https://tu-proyecto.railway.app/webhook/project-update ``` El payload esperado para el webhook debe incluir: ```json { "inmobiliaria_id": "uuid-del-tenant", "project_id": "uuid-del-proyecto", "event": "INSERT|UPDATE", "timestamp": "2025-03-22T17:45:00Z" } ``` ## Herramientas MCP El servicio expone las siguientes herramientas MCP: - `sync-tenant`: Fuerza la sincronización para un tenant específico - `get-sync-status`: Obtiene el estado de sincronización de un tenant - `control-monitor`: Inicia o detiene el monitor de sincronización ## Solución de problemas - Si hay errores con la generación de embeddings, verifica tu API key de OpenAI - Para problemas de conexión con Supabase, asegúrate de que la URL y la service key sean correctas - Revisa los logs en `webhook_logs` para diagnosticar problemas de webhooks - Logs detallados se pueden habilitar con `LOG_LEVEL=debug` ## Mantenimiento Para actualizar el servicio: 1. Haz cambios en el código 2. Actualiza la versión en `package.json` 3. Haz commit y push a GitHub 4. Railway detectará los cambios y redesplegará automáticamente ## Consideraciones de seguridad - Nunca incluyas credenciales o API keys en el código fuente - Utiliza variables de entorno para toda la configuración sensible - Asegúrate de que la service role key de Supabase tenga solo los permisos necesarios - En entornos de producción, considera implementar autenticación para los webhooks - Configura límites de tasa (rate limiting) para proteger contra ataques DoS