Odoo Projects MCP
Provides CRUD operations on Odoo projects, tasks, stages, timesheets, and milestones, enabling AI agents to manage project data programmatically through the Odoo XML-RPC API.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Odoo Projects MCPlist my open tasks"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Odoo Projects MCP
Servidor MCP remoto que da a Claude acceso al módulo de Proyectos de Odoo (Odoo Online / SaaS Custom), pensado para que varios miembros de un equipo lo usen, cada uno con su propia identidad de Odoo.
CRUD completo sobre proyectos, tareas, etapas, partes de horas (timesheets) e hitos, incluido el borrado.
Autenticación por persona mediante token en la URL: cada usuario tiene una URL propia (
https://<dominio>/mcp/<token>). El servidor mapea cada token a un login + API key de Odoo. Así cada acción queda registrada bajo el usuario real y respeta sus permisos de Odoo, sin que la API key viaje nunca en la URL. (Se usa este método porque el conector de Claude no reenvía cabeceras HTTP personalizadas; la URL sí llega siempre intacta.)Auto-registro (self-service): los usuarios se dan de alta solos en la página
/enrollcon una clave de invitación. El servidor valida sus credenciales contra Odoo y guarda el mapa en un volumen persistente. El administrador no tiene que editar variables ni redesplegar por cada persona.Desplegable en un VPS con Easypanel (que además gestiona el dominio y el certificado HTTPS automáticamente).
1. Requisitos previos
Odoo Online con plan Custom (los planes One App Free y Standard no permiten la API externa).
Un VPS con Easypanel instalado y un dominio (o subdominio) apuntando a él.
Cada miembro del equipo necesita una cuenta de usuario en Odoo con acceso al módulo de Proyectos.
Nota de compatibilidad: el servidor usa la API externa XML-RPC (
/xmlrpc/2). Odoo tiene previsto retirarla en favor de la nueva External JSON-2 API (Online 21.1, invierno 2027). Toda la comunicación con Odoo está aislada en la claseOdooClientdeserver.pypara poder migrar sin tocar las herramientas.
Related MCP server: MCP Odoo Server
2. Preparar Odoo (una vez, más una API key por persona)
2.1 Fijar contraseña a los usuarios (solo Odoo Online)
En Odoo Online los usuarios se crean sin contraseña local. Para poder generar una API key, cada usuario debe primero establecer una contraseña en su cuenta (Ajustes → Usuarios → seleccionar usuario → Cambiar contraseña).
2.2 Cada miembro genera su API key personal
Cada persona, con su propia sesión de Odoo:
Clic en su avatar (arriba a la derecha) → Mi perfil (o Preferencias).
Pestaña Seguridad de la cuenta.
Nueva clave de API → escribe una descripción (p. ej. "Claude MCP") → Generar clave.
Copia la clave en ese momento (no se vuelve a mostrar).
Cada quien guardará su par login + API key para el paso 4.
Seguridad: los permisos reales los define el rol del usuario en Odoo. Si quieres limitar a alguien a solo lectura, ajústalo en su perfil de Odoo (grupos de acceso), no en el MCP.
3. Desplegar en Easypanel
Tienes dos formas; la de App desde repositorio Git es la más cómoda si subes esta carpeta a GitHub/GitLab.
Opción A — desde repositorio Git (recomendada)
Sube esta carpeta (
odoo-projects-mcp/) a un repositorio.En Easypanel: Create → App.
Source: conecta tu repositorio y rama.
Build: selecciona Dockerfile (Easypanel lo detecta solo).
Environment: añade las variables (ver sección 3.1).
Domains: añade un dominio, p. ej.
odoo-mcp.tudominio.com, con el puerto 8000. Easypanel emite el certificado HTTPS con Let's Encrypt automáticamente.Deploy.
Opción B — imagen Docker manual
Si prefieres construir la imagen tú mismo:
docker build -t odoo-projects-mcp .
docker run -p 8000:8000 --env-file .env odoo-projects-mcpLuego expón el contenedor con un dominio en Easypanel apuntando al puerto 8000.
3.1 Variables de entorno (en Easypanel → Environment)
Variable | Valor | Obligatoria |
|
| Sí |
| nombre de la base de datos (suele ser el subdominio) | Sí |
| clave de invitación para el auto-registro en | Sí (para self-service) |
|
| Sí (para self-service) |
|
| Recomendada |
| mapa | No |
|
| No |
|
| No |
Ver .env.example para el detalle.
3.2 Añadir el volumen persistente (una sola vez)
Para que los usuarios auto-registrados sobrevivan a reinicios y redeploys, monta un volumen:
En Easypanel → tu servicio → Mounts / Volúmenes → Add Volume.
Tipo Volume, con un nombre (p. ej.
odoo-mcp-data) y Mount Path =/data.Guarda y redepliega.
Así el archivo /data/users.json (donde se guardan los registros) persiste siempre.
3.3 Comprobar que arrancó
Abre en el navegador https://odoo-mcp.tudominio.com/enroll: debe aparecer el formulario de alta. En los logs de Easypanel verás Application startup complete.
4. Cómo se da de alta y conecta cada miembro del equipo
Con el auto-registro, tú (admin) solo compartes dos cosas con tu equipo: la URL /enroll y la clave de invitación (ENROLL_SECRET). Cada persona hace:
Genera su API key en Odoo: su avatar → Mi perfil → Seguridad de la cuenta → Nueva clave de API → copia la clave. (En Odoo Online, antes debe tener una contraseña establecida en su usuario.)
Se registra: abre
https://odoo-mcp.tudominio.com/enroll, escribe la clave de invitación, su correo de Odoo y su API key, y pulsa Generar mi enlace.El servidor valida contra Odoo y le muestra su URL personal, tipo
https://odoo-mcp.tudominio.com/mcp/<su-token>.Conecta en Claude: Ajustes → Conectores → Añadir conector personalizado → pega esa URL como URL del conector → Guardar.
Listo: a partir de ahí Claude actúa en Odoo como esa persona, sin cabeceras ni credenciales dentro de Claude.
Revocar acceso: borra la entrada del usuario en
/data/users.json(o su API key en Odoo). CambiarENROLL_SECRETimpide nuevos registros pero no afecta a los ya dados de alta.
5. Módulos y nivel de acceso
Los permisos efectivos siempre están limitados por el rol del usuario de Odoo. Además, el propio servidor solo expone estas capacidades:
Módulo | Acceso | Herramientas |
Proyectos | Lectura + escritura + borrado |
|
CRM | Lectura + escritura |
|
Soporte / Helpdesk ⁽¹⁾ | Lectura + escritura |
|
Email Marketing | Lectura + escritura ⁽²⁾ |
|
Automatización de Marketing ⁽¹⁾ | Lectura + escritura |
|
Tableros / Dashboards | Solo lectura |
|
Ventas | Solo lectura |
|
Contabilidad | Solo lectura |
|
Compras | Solo lectura |
|
Gastos | Solo lectura |
|
Utilidades | Lectura |
|
⁽¹⁾ Helpdesk y Marketing Automation son apps de Odoo Enterprise; si no están instaladas, esas herramientas devolverán un error claro.
⁽²⁾ create_mailing_draft crea el envío en borrador: el envío real se confirma manualmente desde Odoo (no se envían correos automáticamente).
Los módulos en solo lectura (Ventas, Contabilidad, Compras, Gastos) no exponen ninguna herramienta de crear/editar/borrar por diseño.
Ejemplos de cosas que le puedes pedir a Claude:
"¿Qué oportunidades abiertas tengo en el CRM por etapa?"
"Crea un ticket de soporte para el cliente X sobre un problema de facturación."
"¿Cuánto suman las facturas de cliente pendientes de pago este mes?" (solo lectura)
"Muéstrame los contactos de la lista de email marketing 'Newsletter'."
"Crea una tarea 'Revisar contrato' en el proyecto Alfa, asignada a María, para el viernes."
6. Notas de seguridad
Cifrado en reposo: define
MASTER_KEY(clave Fernet) para que el archivo de usuarios se guarde cifrado. Sin ella, se guarda en texto plano (solo para pruebas). Genera la clave conpython3 -c "from cryptography.fernet import Fernet; print(Fernet.generate_key().decode())"y guárdala fuera del repo.Cifrado en tránsito: sirve el MCP siempre por HTTPS (Easypanel lo hace por defecto).
La API key nunca va en la URL; el servidor la resuelve desde el token. Aun así, la URL personal es un secreto: quien la tenga actúa como ese usuario.
Rotación / caducidad: con
TOKEN_TTL_DAYSlos enlaces caducan; re-registrarse invalida automáticamente el token anterior del mismo usuario.Rate limiting por IP en
/enroll(anti fuerza bruta) y en el endpoint MCP (ENROLL_RATELIMIT,MCP_RATELIMIT).Sin tokens en logs: el access-log de uvicorn está desactivado para que los tokens (en la URL) no queden registrados. Recomendado: desactiva también el access-log del proxy (Traefik/Easypanel) o excluye el path
/mcp.Borrado protegido:
delete_*requiereALLOW_DELETE=trueyconfirm=true(mitiga borrados accidentales y prompt-injection). Por defecto, deshabilitado.Permisos por usuario: los permisos efectivos son los del usuario de Odoo (grupos/ACLs). Para restringir a alguien, ajusta su rol en Odoo.
Revocar a una persona: borra su entrada en
users.json(o su API key en Odoo). CambiarENROLL_SECRETbloquea nuevos registros.Una petición sin token o con token desconocido/caducado es rechazada: no hay acceso anónimo.
Dependencias fijadas (
requirements.txtcon versiones exactas). Audita conpip-audit -r requirements.txt.
Responsabilidad del operador (fuera del código)
Hardening del VPS que corre Easypanel: parcheo del SO, SSH con llaves, firewall, backups cifrados, acceso restringido al panel.
Cumplimiento de datos: al usar este MCP, datos de Odoo (financieros, PII de clientes) se procesan en un LLM de terceros. Verifica el acuerdo de tratamiento de datos (DPA), la residencia/retención y la clasificación de datos permitida antes de un uso amplio o con datos regulados.
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.
Latest Blog Posts
- 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/thewth55-sys/odoo-projects-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server