cf-odoo-mcp-server
Provides tools for interacting with an Odoo ERP instance, enabling AI agents to search and read records, count records, create, write, and delete records, execute arbitrary model methods, retrieve field definitions, and check the Odoo version.
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., "@cf-odoo-mcp-server@cf-odoo-mcp-server Show me recent sales orders"
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.
cf-odoo-mcp-server
MCP server for Odoo ERP running on Cloudflare Workers
Uses stateless HTTP transport — no Durable Objects, no container, no long-running process, fits comfortably in the Workers free tier.
Ported from odoo-mcp-claude which provides the same set of 10 tools but runs as a Python process talking over XML-RPC.
Odoo 19 has 2 kinds of API keys — check which one to use
Odoo 19 issues API keys in 2 scopes, and they are not interchangeable.
Key type | Talks to | What you get |
| Odoo's own | Built-in MCP server, 5 tools read-only — no write scope to enable |
|
| Full ORM access this project uses this one |
The scope split is strict in both directions: an rpc key hitting /mcp gets 401, and an mcp key cannot authenticate via JSON-RPC either.
So you may not need this project at all if your agent is read-only. Odoo's built-in MCP server needs no deployment, no hosting, and no moving your Odoo password elsewhere — just point the client at https://<odoo-ของคุณ>/mcp with an mcp key and you're done. It also refuses technical models, which is a guardrail this project doesn't have.
Work that must write data needs an rpc key, which is the reason this project exists — including the case of connecting to multiple Odoo instances through a single endpoint, and having a default cap on reads. Both can run side by side.
NOTES.md has the full comparison, including the points where the built-in MCP server's schema will trip up an agent.
Why JSON-RPC instead of XML-RPC
Python's xmlrpc.client needs a raw socket, which the Workers runtime doesn't provide. But Odoo exposes the same execute_kw set over JSON-RPC at /jsonrpc, which is plain HTTP usable directly with fetch without any adaptation.
Requirements
Odoo must be reachable from the internet over HTTPS — a Worker can't reach into a LAN. If Odoo isn't public yet, put a Cloudflare Tunnel in front of it.
Tools
Tool | Odoo method |
| — (shows configured servers) |
|
|
|
|
|
|
|
|
|
|
|
|
| any method |
|
|
|
|
Configuration
Variable | What it does |
| Required bearer token callers must attach |
| JSON accepting one or multiple servers; if set, overrides the one below |
| Optional fallback for a single server |
| Optional; comma-separated list of hostnames allowed to call |
Use an Odoo API key instead of an account password, and grant that account only the permissions the tools actually need — odoo_delete and odoo_write can access everything that account can access.
ODOO_SERVERS looks like this:
{
"default_server": "prod",
"servers": {
"prod": { "url": "https://odoo.example.com", "db": "mydb", "username": "bot@example.com", "password": "api-key" }
}
}Local development
npm install
cp .dev.vars.example .dev.vars # แล้วกรอกค่าให้ครบ
npm run dev.dev.vars is already gitignored — don't commit passwords.
Deploy
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_PASSWORDSecrets are encrypted at rest and never appear in wrangler.jsonc.
Connecting a client
.mcp.json in this folder is a Claude Code file, not a Worker one — it just tells the client which endpoint to call with which token. The file references values from the environment, so it contains no secrets and can be committed to 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 doesn't load .env for you — export into the environment before invoking.
cp .env.example .env # แล้วกรอก MCP_AUTH_TOKEN
set -a; . ./.env; set +a
claudeIf you forget to export, the variables won't be substituted, claude mcp list will warn you that the variables aren't found, and the Worker will respond 401 — failing loudly, not silently.
ODOO_MCP_URL exists to point at different Workers, e.g. staging and production, without editing .mcp.json.
Other clients that don't read .mcp.json should set the endpoint and Authorization: Bearer <token> header themselves following the same pattern.
GET /health needs no auth and returns {"status":"ok"}.
Security
This endpoint is public, so every request to /mcp must carry a bearer token, compared in constant time. If MCP_AUTH_TOKEN isn't set, the Worker returns 500 instead of opening up.
A single shared token suits a personal server or internal use. If you need per-user identity, put a Workers OAuth Provider in front instead.
Notes from real-world use
NOTES.md records what was tested against a real Odoo and important caveats when an AI agent is the one calling these tools — especially how Odoo silently drops values written to readonly fields.
License
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