cf-odoo-mcp-server
cf-odoo-mcp-server
MCP server para Odoo ERP que se ejecuta en Cloudflare Workers
Usa un transport stateless HTTP — no necesita Durable Objects, ni contenedores, ni procesos en ejecución; cabe cómodamente en el free tier de Workers.
Es un port de odoo-mcp-claude, que ofrece el mismo conjunto de 10 herramientas, pero se ejecuta como un proceso de Python y habla mediante XML-RPC.
Odoo 19 tiene 2 tipos de API key — comprueba cuál necesitas
Odoo 19 permite crear API keys con 2 scopes que no son intercambiables.
Tipo de key | Habla con | Qué obtienes |
| el | servidor MCP integrado con 5 herramientas solo lectura — no hay scope de escritura que activar |
|
| acceso completo al ORM este proyecto usa este |
La separación de scopes es estricta en ambos sentidos: una key de tipo rpc que llame a /mcp recibirá un 401, y una key de tipo mcp no puede autenticarse vía JSON-RPC.
Por eso puede que no necesites usar este proyecto en absoluto. Si tu agente solo lee, el servidor MCP integrado de Odoo no requiere despliegue, ni buscar alojamiento, ni llevar el código de Odoo a otro sitio — basta con apuntar el cliente a https://<odoo-ของคุณ>/mcp con una key de tipo mcp. Además rechaza los modelos técnicos, una salvaguarda que este proyecto no tiene.
El trabajo que requiere escribir datos necesita una key de tipo rpc, que es la razón de ser de este proyecto — además de poder conectar varios Odoo a través de un único endpoint y tener un límite predeterminado al leer. Ambos pueden ejecutarse en paralelo.
NOTES.md tiene la comparación completa, incluidos los puntos donde el schema del servidor MCP integrado hace tropezar al agente.
Por qué usar JSON-RPC y no XML-RPC
El xmlrpc.client de Python necesita un raw socket, que el runtime de Workers no proporciona. Pero Odoo expone el mismo execute_kw vía JSON-RPC en /jsonrpc, que es HTTP normal y corriente, usable directamente con fetch sin necesidad de adaptaciones.
Requisitos
Odoo debe ser accesible desde Internet mediante HTTPS — el Worker no puede entrar en la LAN. Si Odoo aún no es público, pon Cloudflare Tunnel delante.
Herramientas
Herramienta | método de Odoo |
| — (muestra los servidores configurados) |
|
|
|
|
|
|
|
|
|
|
|
|
| cualquier método |
|
|
|
|
Configuración
Variable | Para qué se usa |
| Obligatorio bearer token que el llamador debe incluir |
| JSON que admite uno o varios servidores; si se define, tiene prioridad sobre las variables de abajo |
| alternativa para un solo servidor |
| Opcional. Lista de hostnames separados por comas a los que se permite que el |
Conviene usar una API key de Odoo en lugar de la contraseña de la cuenta, y dar a esa cuenta solo los permisos que las herramientas necesiten de verdad — odoo_delete y odoo_write acceden a todo lo que la cuenta pueda acceder.
ODOO_SERVERS tiene este aspecto
{
"default_server": "prod",
"servers": {
"prod": { "url": "https://odoo.example.com", "db": "mydb", "username": "bot@example.com", "password": "api-key" }
}
}Desarrollo local
npm install
cp .dev.vars.example .dev.vars # แล้วกรอกค่าให้ครบ
npm run dev.dev.vars ya está en gitignore; no commitees contraseñas jamás.
Despliegue
npx wrangler login
npx wrangler deploy
npx wrangler secret put MCP_AUTH_TOKEN # openssl rand -hex 32
npx wrangler secret put ODOO_URL
npx wrangler secret put ODOO_DB
npx wrangler secret put ODOO_USERNAME
npx wrangler secret put ODOO_PASSWORDLos secretos se almacenan cifrados y no aparecen en wrangler.jsonc.
Conectar el cliente
.mcp.json en esta carpeta es un archivo de Claude Code, no del Worker — solo le dice al cliente con qué endpoint y con qué token hablar. Este archivo toma valores del environment, así que no contiene secretos y se puede commitear a git.
{
"mcpServers": {
"odoo": {
"type": "streamable-http",
"url": "${ODOO_MCP_URL:-https://cf-odoo-mcp-server.<subdomain>.workers.dev/mcp}",
"headers": { "Authorization": "Bearer ${MCP_AUTH_TOKEN}" }
}
}
}Claude Code no carga .env por ti; tienes que exportar las variables al environment antes de invocarlo.
cp .env.example .env # แล้วกรอก MCP_AUTH_TOKEN
set -a; . ./.env; set +a
claudeSi olvidas exportarlas, las variables no se sustituirán; claude mcp list avisará de que no encuentra las variables y el Worker responderá 401 — falla de forma visible, no en silencio.
ODOO_MCP_URL sirve para apuntar a otro Worker, por ejemplo staging y production, sin tener que editar .mcp.json.
Para otros clientes que no lean .mcp.json, configura el endpoint y la cabecera Authorization: Bearer <token> con el mismo formato.
GET /health no requiere autenticación y devuelve {"status":"ok"}.
Seguridad
Este endpoint es público; toda petición que entre a /mcp debe llevar un bearer token, y se compara en tiempo constante. Si MCP_AUTH_TOKEN no está definido, el Worker devuelve 500 en lugar de abrirse del todo.
Un único token compartido es adecuado para un servidor privado o de uso interno. Si necesitas identidades individuales, pon Workers OAuth Provider delante.
Notas de uso real
NOTES.md documenta lo probado con un Odoo real y las precauciones importantes al dejar que un agente de IA maneje estas herramientas — en especial cómo Odoo descarta silenciosamente los valores escritos en campos de solo lectura.
Licencia
MIT
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.
Related MCP Connectors
An MCP server that let you interact with Cycloid.io Internal Development Portal and Platform
ERP français avec serveur MCP natif : plus de 1 800 actions métier auto-générées via OpenAPI.
A paid remote MCP for hosted MCP server, built to return verdicts, receipts, usage logs, and audit-r
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- 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/monthop-gmail/cf-odoo-mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server