Skip to main content
Glama
monthop-gmail

cf-odoo-mcp-server

cf-odoo-mcp-server

MCP server — Cloudflare Workers 上で動作する Odoo ERP 用

ステートレス HTTP トランスポートを使用 — Durable Objects もコンテナも不要 常駐プロセスも不要で、Workers の free tier に収まる

odoo-mcp-claude からの移植 これは同じ 10 個のツールを提供するが、Python プロセスとして実行され XML-RPC で通信する

Odoo 19 には API key が 2 種類ある — どちらを使うべきか先に確認

Odoo 19 では API key を 2 つのスコープで発行でき、互換性がない

key の種類

通信先

得られるもの

mcp

Odoo 自身の /mcp

内蔵 MCP server の 5 ツール 読み取り専用 — 書き込みスコープは開放不可

rpc

/jsonrpc

ORM へのフルアクセス このプロジェクトはこちらを使用

スコープの分離は双方向で厳格: rpc 種の key で /mcp を叩くと 401 が返る 一方 mcp 種の key は JSON-RPC で認証できない

そのため、エージェントが読み取り専用ならこのプロジェクトは不要かもしれない Odoo 内蔵の MCP server はデプロイ不要、ホスティング不要、Odoo のパスワードを他所に置く必要もない — client を https://<あなたのodoo>/mcp に mcp 種の key とともに向けるだけで完了する さらに technical model も拒否してくれる。これはこのプロジェクトにはない guardrail だ

書き込みが必要な作業には rpc 種の key が必要で、それがこのプロジェクトが存在する理由 — 単一エンドポイントで複数の Odoo に接続するケースや、読み取り時のデフォルト上限も含む 両者は並行して運用できる

NOTES.md に完全な比較がある 内蔵 MCP server の schema がエージェントをつまずかせる点も含む

Related MCP server: Odoo 18 MCP Server

なぜ XML-RPC ではなく JSON-RPC なのか

Python の xmlrpc.client は raw socket を必要とするが、Workers の runtime にはそれがない しかし Odoo は同じ execute_kw を /jsonrpc で JSON-RPC として公開しており、これは普通の HTTP なので fetch で直接使える — 変換は不要

要件

Odoo は HTTPS でインターネットからアクセス可能である必要がある — Worker は LAN には到達できない Odoo がまだ公開されていない場合は Cloudflare Tunnel を前に置く

Tools

Tool

Odoo のメソッド

odoo_list_servers

— (設定済みサーバーを表示)

odoo_search_read

search_read

odoo_search_count

search_count

odoo_read

read

odoo_create

create して書き込んだフィールドを読み戻す

odoo_write

write して書き込んだフィールドを読み戻す

odoo_delete

unlink

odoo_execute

任意のメソッド

odoo_fields_get

fields_get

odoo_version

common.version

設定

変数

用途

MCP_AUTH_TOKEN

必須 呼び出し側が添付する必要がある bearer token

ODOO_SERVERS

JSON で 1 つまたは複数のサーバーをサポート。設定すると下記の変数を上書きする

ODOO_URL ODOO_DB ODOO_USERNAME ODOO_PASSWORD

単一サーバー用の代替オプション

ALLOWED_ORIGIN_HOSTNAMES

任意。ブラウザの Origin が /mcp を呼び出せるようにする hostname のカンマ区切りリスト。* も可。未設定の場合、localhost と Worker 自身の workers.dev hostname のみ受け付ける — サーバー側の client は Origin を送らないため影響を受けない

アカウントのパスワードではなく API key を使用し、そのアカウントにはツールが実際に必要とする権限のみ付与する — odoo_delete と odoo_write はそのアカウントがアクセスできるすべてにアクセスできる

ODOO_SERVERS は次のような形式

{
  "default_server": "prod",
  "servers": {
    "prod": { "url": "https://odoo.example.com", "db": "mydb", "username": "bot@example.com", "password": "api-key" }
  }
}

ローカル開発

npm install
cp .dev.vars.example .dev.vars   # แล้วกรอกค่าให้ครบ
npm run dev

.dev.vars は gitignore 済み — パスワードを commit しては絶対にいけない

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

secret は保存時に暗号化され、wrangler.jsonc には表示されない

client への接続

このフォルダの .mcp.json は Claude Code 用のファイルであり、Worker 用ではない — 単に client にどの endpoint にどの token で通信するかを伝えるだけだ。このファイルは environment から値を参照するため 秘密情報は含まれておらず、git に commit できる

{
  "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 は .env を自動ロードしない — 呼び出す前に environment に export する必要がある

cp .env.example .env    # แล้วกรอก MCP_AUTH_TOKEN
set -a; . ./.env; set +a
claude

export を忘れると変数が置換されず、claude mcp list が変数が見つからないと警告し Worker は 401 を返す — 静かに失敗するのではなく、気づける形で失敗する

ODOO_MCP_URL は staging と production など、Worker ごとに別々のものを指すためにある — .mcp.json を編集する必要はない

.mcp.json を読まない他の client は、同じ形式で endpoint と Authorization: Bearer <token> ヘッダーを自分で設定する

GET /health は認証不要で {"status":"ok"} を返す

セキュリティ

この endpoint は public であり、/mcp に入るすべてのリクエストには bearer token の添付が必要 比較は constant time で行われる。MCP_AUTH_TOKEN が設定されていない場合、Worker は 500 を返す 開け放しにする代わりに

単一の共有 token は、個人用サーバーや社内利用に適している。ユーザーごとに識別する必要がある場合は Workers OAuth Provider を 前段に置く

実運用でのメモ

NOTES.md には、実際の Odoo でテストした内容と、AI エージェントに これらのツールを操作させる際の重要な注意点が記録されている — 特に Odoo が readonly field に書き込んだ値を 静かに破棄する点について

License

MIT

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables interaction with Odoo 18 (JSON-RPC API) via MCP, supporting model exploration, CRUD operations, and secure API key authentication.
    Apache 2.0
  • F
    license
    Not graded
    quality
    D
    maintenance
    Full-featured MCP connector for Odoo ERP via XML-RPC, enabling natural language interaction with CRM, sales, inventory, and other Odoo modules.
    -
  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables interaction with Odoo ERP systems, providing tools and resources to access models, records, and methods via stdio or HTTP streamable transport.
    MIT