Skip to main content
Glama
monthop-gmail

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

mcp

Odoos eigenes /mcp

Integrierter MCP-Server mit 5 Tools nur lesend — kein Schreib-Scope zum Aktivieren

rpc

/jsonrpc

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.

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

odoo_list_servers

— (zeigt die konfigurierten Server)

odoo_search_read

search_read

odoo_search_count

search_count

odoo_read

read

odoo_create

create, liest dann die geschriebenen Felder zurück

odoo_write

write, liest dann die geschriebenen Felder zurück

odoo_delete

unlink

odoo_execute

beliebige Methode

odoo_fields_get

fields_get

odoo_version

common.version

Konfiguration

Variable

Zweck

MCP_AUTH_TOKEN

Erforderlich Bearer-Token, das der Aufrufer mitsenden muss

ODOO_SERVERS

JSON, unterstützt einen oder mehrere Server. Wenn gesetzt, hat es Vorrang vor den untenstehenden

ODOO_URL ODOO_DB ODOO_USERNAME ODOO_PASSWORD

Fallback-Option für einen einzelnen Server

ALLOWED_ORIGIN_HOSTNAMES

Optional. Kommagetrennte Liste von Hostnames, deren Browser-Origin /mcp aufrufen darf, oder *. Wenn nicht gesetzt, werden nur localhost und der eigene workers.dev-Hostname des Workers akzeptiert — Server-seitige Clients senden ohnehin kein Origin und sind daher nicht betroffen.

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_PASSWORD

Secrets 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
claude

Wenn 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

-
license - not tested
Not graded
quality - not tested
B
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

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

View all MCP Connectors

Latest Blog Posts

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