cf-odoo-mcp-server
cf-odoo-mcp-server
MCP-Server für Odoo ERP, der auf Cloudflare Workers läuft
Verwendet stateless HTTP als Transport — keine Durable Objects, keine Container, keine dauerhaft laufenden Prozesse. Passt bequem in den Free-Tier von Workers.
Portiert von odoo-mcp-claude, das dieselben 10 Tools bietet, aber als Python-Prozess über XML-RPC läuft.
Odoo 19 hat 2 Arten von API-Keys — prüfe vorher, welchen du brauchst
Odoo 19 kann API-Keys mit 2 Scopes ausstellen, die nicht austauschbar sind.
Key-Typ | Spricht mit | Was du bekommst |
| Odoos eigenes | Integrierter MCP-Server mit 5 Tools nur lesend — kein Schreib-Scope zum Aktivieren |
|
| Voller ORM-Zugriff dieses Projekt verwendet diesen |
Die Scope-Trennung ist in beide Richtungen strikt: Ein rpc-Key gegen /mcp ergibt 401, und ein mcp-Key kann sich nicht über JSON-RPC authentifizieren.
Deshalb brauchst du dieses Projekt vielleicht gar nicht. Wenn dein Agent nur liest, musst du den integrierten MCP-Server von Odoo nicht deployen, kein Hosting suchen und keine Odoo-Zugangsdaten woanders ablegen — zeig einfach den Client auf https://<dein-odoo>/mcp mit einem mcp-Key. Außerdem lehnt er technische Modelle ab, eine Schutzmaßnahme, die dieses Projekt nicht hat.
Für Arbeiten, die Daten schreiben, brauchst du einen rpc-Key — das ist der Grund, warum dieses Projekt existiert — ebenso für den Fall, mehrere Odoo-Instanzen über einen einzigen Endpoint anzubinden, und für ein Standard-Leselimit. Beide können parallel laufen.
NOTES.md enthält den vollständigen Vergleich, einschließlich der Stellen, an denen das Schema des integrierten MCP-Servers Agenten stolpern lässt.
Related MCP server: Odoo 18 MCP Server
Warum JSON-RPC statt XML-RPC
Pythons xmlrpc.client benötigt Raw-Sockets, die die Workers-Runtime nicht bereitstellt. Odoo bietet jedoch dieselben execute_kw-Methoden über JSON-RPC unter /jsonrpc an, das einfaches HTTP ist und direkt mit fetch verwendet werden kann, ohne Anpassungen.
Voraussetzungen
Odoo muss über das Internet per HTTPS erreichbar sein — der Worker kann nicht ins LAN. Wenn Odoo noch nicht öffentlich ist, stelle einen Cloudflare Tunnel davor.
Tools
Tool | Odoo-Methode |
| — (zeigt die konfigurierten Server) |
|
|
|
|
|
|
|
|
|
|
|
|
| beliebige Methode |
|
|
|
|
Konfiguration
Variable | Zweck |
| Erforderlich Bearer-Token, das der Aufrufer mitsenden muss |
| JSON, unterstützt einen oder mehrere Server. Wenn gesetzt, hat es Vorrang vor den untenstehenden |
| Fallback-Option für einen einzelnen Server |
| Optional. Kommagetrennte Liste von Hostnames, deren Browser- |
Verwende besser einen API-Key von Odoo statt des Kontopassworts und gib dem Konto nur die Rechte, die die Tools tatsächlich benötigen — odoo_delete und odoo_write greifen auf alles zu, was das Konto erreichen kann.
ODOO_SERVERS sieht so aus:
{
"default_server": "prod",
"servers": {
"prod": { "url": "https://odoo.example.com", "db": "mydb", "username": "bot@example.com", "password": "api-key" }
}
}Lokale Entwicklung
npm install
cp .dev.vars.example .dev.vars # แล้วกรอกค่าให้ครบ
npm run dev.dev.vars ist bereits in .gitignore — committe niemals Passwörter.
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 werden verschlüsselt gespeichert und erscheinen nicht in wrangler.jsonc.
Client verbinden
.mcp.json in diesem Ordner ist eine Datei für Claude Code, nicht für den Worker — sie sagt dem Client nur, mit welchem Endpoint und welchem Token er sprechen soll. Die Datei referenziert Werte aus der Umgebung, enthält also keine Geheimnisse und kann in Git eingecheckt werden.
{
"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 lädt .env nicht selbst — du musst die Variablen vor dem Aufruf in die Umgebung exportieren.
cp .env.example .env # แล้วกรอก MCP_AUTH_TOKEN
set -a; . ./.env; set +a
claudeWenn du das Exportieren vergisst, werden die Variablen nicht ersetzt. claude mcp list warnt, dass die Variablen nicht gefunden werden, und der Worker antwortet mit 401 — ein sichtbarer Fehler, kein stilles Versagen.
ODOO_MCP_URL kann auf einen anderen Worker zeigen, z. B. Staging vs. Produktion, ohne .mcp.json zu ändern.
Andere Clients, die .mcp.json nicht lesen, müssen Endpoint und Header Authorization: Bearer <token> selbst nach demselben Muster setzen.
GET /health benötigt keine Authentifizierung und gibt {"status":"ok"} zurück.
Sicherheit
Dieser Endpoint ist öffentlich. Jede Anfrage an /mcp muss daher ein Bearer-Token enthalten, das in konstanter Zeit verglichen wird. Wenn MCP_AUTH_TOKEN nicht gesetzt ist, gibt der Worker 500 zurück, statt offen zu sein.
Ein gemeinsames Token eignet sich für private oder interne Server. Wenn du Benutzer individuell unterscheiden musst, stelle stattdessen den Workers OAuth Provider davor.
Notizen aus der Praxis
NOTES.md dokumentiert, was mit echten Odoo-Instanzen getestet wurde, sowie wichtige Vorsichtsmaßnahmen, wenn ein KI-Agent diese Tools steuert — insbesondere, dass Odoo Werte, die in Readonly-Felder geschrieben werden, stillschweigend verwirft.
Lizenz
MIT
This server cannot be deployed
Maintenance
Related MCP Connectors
Manage CloudPepper servers, Odoo instances, backups, and deployments over MCP.
Connect AI to Odoo ERP 14-20: search, create, update and manage records in natural language.
MCP server unifying ERPs, CRMs, APIs and knowledge base for Claude, ChatGPT and Gemini.
Related MCP Servers
- AlicenseNot gradedqualityBmaintenanceEnables interaction with Odoo ERP systems for product, customer, order, invoice, and payment management using MCP tools.7MIT
- AlicenseNot gradedqualityDmaintenanceEnables interaction with Odoo 18 (JSON-RPC API) via MCP, supporting model exploration, CRUD operations, and secure API key authentication.Apache 2.0
- FlicenseNot gradedqualityDmaintenanceFull-featured MCP connector for Odoo ERP via XML-RPC, enabling natural language interaction with CRM, sales, inventory, and other Odoo modules.-
- AlicenseNot gradedqualityDmaintenanceEnables interaction with Odoo ERP systems, providing tools and resources to access models, records, and methods via stdio or HTTP streamable transport.MIT