Odoo MCP Gateway
by Leov3
README.md
# Odoo MCP Gateway
MVP funcional en FastAPI para administrar múltiples instancias de Odoo desde un panel simple y exponer tools MCP desde un único servicio.
## Requisitos
- Python 3.12
- Docker y Docker Compose
## Generar `ENCRYPTION_KEY`
```bash
python -c "from cryptography.fernet import Fernet; print(Fernet.generate_key().decode())"
```
## Configuración local
1. Copia `.env.example` a `.env`.
2. Completa estas variables:
- `ADMIN_USER`
- `ADMIN_PASSWORD`
- `MCP_BEARER_TOKEN`
- `ENCRYPTION_KEY`
- `APP_SECRET_KEY`
## Ejecutar con Docker
```bash
docker compose up --build
```
La aplicación queda disponible en:
- Panel admin: `http://localhost:8000/admin`
- Login: `http://localhost:8000/admin/login`
- Ajustes de usuario: `http://localhost:8000/admin/settings`
- Health check: `http://localhost:8000/health`
- MCP por instancia: `http://localhost:8000/<instancia>/mcp/`
## Entrar al panel
Usa el usuario y contraseña definidos en:
- `ADMIN_USER`
- `ADMIN_PASSWORD`
Desde `Settings` puedes cambiar el nombre de usuario y la contraseña del único admin.
## Configurar Easypanel
Ver [Guia de despliegue](./DEPLOYMENT.md).
## Conectar un cliente MCP
Cada instancia configurada expone su propio endpoint MCP. El formato es:
```text
https://tu-dominio/<instancia>/mcp/
```
El endpoint requiere este encabezado:
```text
Authorization: Bearer <MCP_BEARER_TOKEN>
```
Ejemplo:
```bash
curl -H "Authorization: Bearer change_me_long_random_token" https://tu-dominio/compraloahora/mcp/
```
### n8n
Para n8n usa `MCP Client` con:
- `Server Transport`: `HTTP Streamable`
- `MCP Endpoint URL`: `https://tu-dominio/compraloahora/mcp/`
- `Authentication`: `Bearer Auth` o `Header Auth`
- Si usas `Bearer Auth`, pega solo el token.
- Si usas `Header Auth`, define exactamente:
- `Authorization: Bearer <MCP_BEARER_TOKEN>`
Si el nodo falla con `Bearer Auth`, cambia a `Header Auth` para forzar exactamente ese header.
Las tools ya quedan ligadas a la instancia del endpoint, así que no necesitas pasar `instance` en cada llamada.
Tools expuestas actualmente:
- `odoo_test_connection`
- `odoo_search_partners`
- `odoo_search_leads`
- `odoo_create_lead`
- `odoo_search_sale_orders`
- `odoo_create_partner`
- `odoo_search_products`
- `odoo_search_products_by_sku`
- `odoo_search_products_by_category`
- `odoo_search_product_variants`
- `odoo_search_products_by_stock`
- `odoo_get_partner`
- `odoo_update_partner`
- `odoo_get_product`
- `odoo_get_product_pricing`
- `odoo_get_stock_availability`
- `odoo_get_sale_order`
- `odoo_create_quotation`
- `odoo_add_quotation_line`
- `odoo_update_quotation_line`
- `odoo_confirm_quotation`
- `odoo_send_quotation`
- `odoo_cancel_sale_order`
- `odoo_update_lead_stage`
- `odoo_set_next_activity`
- `odoo_log_note`
- `odoo_search_pipeline`
- `odoo_search_my_activities`
Herramientas de negocio para Mario, pensadas para que n8n gestione el flujo comercial y el estado conversacional fuera del MCP:
- `buscar_cliente_por_telefono`
- `crear_o_actualizar_cliente_whatsapp`
- `buscar_producto_venta`
- `consultar_disponibilidad`
- `crear_cotizacion_whatsapp`
- `actualizar_cotizacion_whatsapp`
- `confirmar_cotizacion_whatsapp`
- `consultar_estado_pedido`
- `crear_actividad_para_vendedor`
Prompt recomendado para el agente:
- [`app/mario_prompt.md`](/home/leonardo/Documentos/Proyectos/ODOO/Odoo%20MCP%20gateway/app/mario_prompt.md)
### Validado en esta instalación
- Endpoint MCP: `https://dev-odoo-mcp-gateway.ouiteb.easypanel.host/compraloahora/mcp/`
- Instancia activa: `Compraloahora`
- URL Odoo: `https://odoo-concept-compralo-ahora-staging-compraloahora-33072015.dev.odoo.com`
- Version: `17`
- API mode: `xmlrpc`
- `odoo_test_connection`: OK
## Seguridad
- No compartas el `MCP_BEARER_TOKEN`.
- No subas `.env` al repositorio.
- El secreto de cada instancia se guarda cifrado con Fernet.
- En edición, el campo secreto se deja vacío y solo se actualiza si escribes uno nuevo.
- Este proyecto no incluye multiusuario, OAuth, ni permisos avanzados.
- El estado conversacional de Mario debe vivir en el agente de n8n, no en el MCP.
This server cannot be deployed
Maintenance
ActivityInactive
ResponsivenessNo issues