A community-driven registry for the Claude Code ecosystem. Not affiliated with Anthropic.
Are you the author? Sign in to claim
MCP Server for Odoo 19 using JSON-2 API, built with FastMCP
支援的 MCP Client
Odoo 19 MCP Server,使用 JSON-2 API 連線。
本專案基於 Odoo 19 JSON-2 API 完整使用指南 開發。

flowchart TB
subgraph Client["MCP Client"]
CC[Claude Code]
GC[Gemini CLI]
MI[MCP Inspector]
end
subgraph Server["MCP Server (FastMCP)"]
R[Resources<br/>odoo://models<br/>odoo://user<br/>odoo://company]
T[Tools<br/>search_records<br/>create_record<br/>update_record]
DI[Dependency Injection<br/>get_shared_client]
end
subgraph RPC["OdooJsonRpcClient"]
OL[odoolib<br/>json2/json2s protocol]
end
subgraph Odoo["Odoo Server"]
EP["/jsonrpc endpoint"]
end
Client -->|MCP Protocol<br/>stdio/http/sse| Server
R --> DI
T --> DI
DI --> RPC
RPC -->|HTTP/HTTPS| Odoo
| 特性 | Resources | Tools |
|---|---|---|
| 用途 | 提供上下文資訊 | 執行操作/動作 |
| 觸發 | 客戶端控制(如 Claude Code) | LLM 自動決定呼叫 |
| 參數 | 無(或 URI 參數) | 有(需 LLM 生成) |
| 類比 | 員工手冊(背景知識) | 工具箱(按需使用) |
| HTTP 類比 | GET(讀取) | POST/PUT/DELETE(操作) |
Resources - 動態上下文,LLM 一開始就知道的背景資訊:
odoo://user → "我是誰"
odoo://company → "我在哪間公司"
odoo://models → "有哪些模型可用"
Tools - 需要時才呼叫的操作:
search_records(model="res.partner", domain=[...]) → 搜尋
create_record(model="sale.order", values={...}) → 建立
| 方式 | Default Prompt | Resource |
|---|---|---|
| 資料來源 | 寫死在程式碼 | 即時從 Odoo 查詢 |
| 更新時機 | 部署時 | 每次連線時 |
| 換用戶登入 | 資訊錯誤 | 自動正確 |
# ❌ Default Prompt(寫死)
SYSTEM_PROMPT = "當前用戶: Admin" # 換人登入就錯了
# ✅ Resource(動態)
@mcp.resource("odoo://user")
def get_current_user():
return client.read("res.users", [uid]) # 即時查詢
結論:Resource 是「動態的上下文」,不是靜態文字。
參考:MCP Resources | MCP Tools
| 變數 | 說明 | 預設值 |
|---|---|---|
ODOO_URL | Odoo 伺服器 URL | http://localhost:8069 |
ODOO_DATABASE | 資料庫名稱 | - |
ODOO_API_KEY | API Key 認證 | - |
READONLY_MODE | 唯讀模式(禁止寫入操作) | false |
建立 .env 檔案:
cp .env.example .env
pip install -r requirements.txt
fastmcp dev inspector odoo_mcp_server.py
本專案支援三種 MCP 傳輸模式:
| 模式 | 說明 | 適用情境 |
|---|---|---|
stdio | 標準輸入輸出(預設) | Claude Desktop、Cursor IDE、本機開發 |
http | HTTP 協定 | 遠端服務、n8n、Web 應用整合 |
sse | Server-Sent Events(已棄用) | 向下相容舊版 Client |
兩種模式的關鍵差異在於「誰來啟動 MCP Server」以及「算力在哪裡執行」:
stdio 模式(本機算力)
┌─────────────────────────────────────┐
│ 你的電腦 💻 │
│ │
│ Claude Desktop ──> MCP Server │
│ (使用本機算力) │
└─────────────────────────────────────┘
HTTP/SSE 模式(遠端算力)
┌──────────────┐ ┌──────────────────┐
│ 你的電腦 │ │ 雲端 ☁️ │
│ │ │ │
│Claude Desktop│ ──網路──>│ MCP Server │
│ (輕量) │ │ (使用雲端算力) │
└──────────────┘ └──────────────────┘
# stdio 模式(預設)
python odoo_mcp_server.py
# HTTP 模式
python odoo_mcp_server.py --transport http --host 0.0.0.0 --port 8000
# SSE 模式(已棄用,建議使用 HTTP)
python odoo_mcp_server.py --transport sse --host 0.0.0.0 --port 8000
專案提供 docker-compose.example.yml 範本,複製後修改即可使用:
cp .env.example .env # 填入 ODOO_URL / ODOO_DATABASE / ODOO_API_KEY
cp docker-compose.example.yml docker-compose.yml # 依需求調整
docker compose up -d
範本內容
volumes:
shared-uploads:
services:
odoo-mcp:
build: .
command: ["python", "odoo_mcp_server.py", "--transport", "http", "--host", "0.0.0.0", "--port", "8000"]
# 對外暴露 port 8000(host 端 client 可直接連 http://localhost:8000/mcp)。
# 若只需 Docker 內網存取(例如 client 也在同一個 compose 裡),可整段移除 ports。
ports:
- "8000:8000"
environment:
- ODOO_URL=${ODOO_URL}
- ODOO_DATABASE=${ODOO_DATABASE}
- ODOO_API_KEY=${ODOO_API_KEY}
- READONLY_MODE=${READONLY_MODE:-false}
volumes:
- shared-uploads:/shared # 圖片傳遞通道;對應 Dockerfile 預建的 /shared/uploads
restart: unless-stopped
圖片 / 附件傳遞:
add_attachment的file_path模式會從/shared/uploads/讀檔上傳到 Odoo,避免大量 base64 佔用 LLM output token。⚠️
shared-uploads是 Docker named volume,只能在「同一台 Docker host」共享。client 與 server 跨機器時無法共用此 volume,只能改用base64_data模式傳檔。詳見docker-compose.example.yml註解。
claude mcp add --transport http odoo-mcp https://your-cloud-server.com:8000/mcp
{
"mcpServers": {
"odoo-mcp": {
"type": "http",
"url": "https://your-cloud-server.com:8000/mcp"
}
}
}
| URI | 說明 |
|---|---|
odoo://models | 列出所有模型 |
odoo://model/{model_name} | 取得模型欄位定義 |
odoo://record/{model_name}/{record_id} | 取得單筆記錄 |
odoo://user | 當前登入用戶資訊 |
odoo://company | 當前用戶所屬公司資訊 |
| Tool | 說明 | 唯讀 |
|---|---|---|
list_models | 列出/搜尋可用模型 | Yes |
get_fields | 取得模型欄位定義 | Yes |
search_records | 搜尋記錄 | Yes |
count_records | 計數記錄 | Yes |
read_records | 讀取指定 ID 記錄 | Yes |
create_record | 建立記錄 | No |
update_record | 更新記錄 | No |
delete_record | 刪除記錄(需二次確認) | No |
execute_method | 執行模型方法 | Depends |
部分 client 的 Docker 設定(Claude Code / Gemini 的 Docker 版本)需要先建置本機映像檔:
docker build -t odoo-mcp-server .
本專案支援以下 MCP Client,各自的完整設定步驟見對應章節:
| Client | 加入方式 | 設定檔 |
|---|---|---|
| Claude Code | claude mcp add | ~/.claude.json |
| Gemini CLI | gemini mcp add | ~/.gemini/settings.json |
| Antigravity CLI | 手動編輯 | ~/.gemini/config/mcp_config.json |
| OpenClaw | openclaw mcp set | OpenClaw config |
| Codex CLI | codex mcp add + 手動編輯 | ~/.codex/config.toml |
設定檔位於 ~/.claude.json:
claude mcp add odoo-mcp-server -- python odoo_mcp_server.py
{
"mcpServers": {
"odoo-mcp-server": {
"command": "/bin/python",
"args": [
"odoo_mcp_server.py"
]
}
}
}
適用於 Odoo 執行在本機的情況:
claude mcp add odoo-mcp-server -- docker run -i --rm --add-host=host.docker.internal:host-gateway -e ODOO_URL=http://host.docker.internal:8069 -e ODOO_DATABASE=odoo19 -e ODOO_API_KEY=your_api_key_here odoo-mcp-server
{
"mcpServers": {
"odoo-mcp-server": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"--add-host=host.docker.internal:host-gateway",
"-e",
"ODOO_URL=http://host.docker.internal:8069",
"-e",
"ODOO_DATABASE=odoo19",
"-e",
"ODOO_API_KEY=your_api_key_here",
"odoo-mcp-server"
]
}
}
}
使用主機網路模式:
claude mcp add odoo-mcp-server -- docker run -i --rm --network host -e ODOO_URL=http://localhost:8069 -e ODOO_DATABASE=odoo19 -e ODOO_API_KEY=your_api_key_here odoo-mcp-server
{
"mcpServers": {
"odoo-mcp-server": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"--network",
"host",
"-e",
"ODOO_URL=http://localhost:8069",
"-e",
"ODOO_DATABASE=odoo19",
"-e",
"ODOO_API_KEY=your_api_key_here",
"odoo-mcp-server"
]
}
}
}
claude mcp add odoo-mcp-server -- docker run -i --rm -e ODOO_URL=https://example.com/ -e ODOO_DATABASE=odoo19 -e ODOO_API_KEY=your_api_key_here odoo-mcp-server
{
"mcpServers": {
"odoo-mcp-server": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-e",
"ODOO_URL=https://example.com/",
"-e",
"ODOO_DATABASE=odoo19",
"-e",
"ODOO_API_KEY=your_api_key_here",
"odoo-mcp-server"
]
}
}
}
gemini mcp add --scope user odoo-mcp docker -- run -i --rm --add-host=host.docker.internal:host-gateway -e ODOO_URL=http://host.docker.internal:8069 -e ODOO_DATABASE=odoo19 -e ODOO_API_KEY=your_api_key_here odoo-mcp-server
{
"mcpServers": {
"odoo-mcp": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"--add-host=host.docker.internal:host-gateway",
"-e",
"ODOO_URL=http://host.docker.internal:8069",
"-e",
"ODOO_DATABASE=odoo19",
"-e",
"ODOO_API_KEY=your_api_key_here",
"odoo-mcp-server"
]
}
}
}
自 2026/6/18 起個人版 Gemini CLI 停止服務,改用 Antigravity CLI。目前 沒有
mcp add子指令,需手動編輯設定檔。
設定檔路徑為 ~/.gemini/config/mcp_config.json(Antigravity CLI / IDE / SDK 共用,等同 Gemini CLI 的 --scope user)。
JSON 格式與上方 Gemini CLI 設定相同。
設定後進入 Antigravity CLI 以 /mcp 指令重新載入,並確認連線狀態。
OpenClaw 透過 CLI 管理 MCP server,設定會寫入 mcp.servers.<name>。
/mcp指令為 owner-only 且預設關閉,需以commands.mcp: true開啟才能在 chat session 中使用。
# 請將 your-server-ip 換成你的 MCP server 位址
openclaw mcp set odoo-mcp '{"type":"http","url":"http://your-server-ip:8000/mcp"}'
OpenClaw 會自動正規化設定,把 type:"http" 轉成 transport:"streamable-http" 後存入:
{
"mcp": {
"servers": {
"odoo-mcp": {
"url": "http://your-server-ip:8000/mcp",
"transport": "streamable-http"
}
}
}
}
/mcp 指令openclaw config set commands.mcp true
openclaw gateway restart
若想等進行中的工作排空再重啟,可改用
openclaw gateway restart --safe。
# server 是否註冊成功
openclaw mcp list
openclaw mcp show odoo-mcp
# /mcp 開關狀態(應回傳 true)
openclaw config get commands.mcp
完成後請開一個新的 chat session(或硬重整 dashboard),再輸入 /mcp 確認 odoo-mcp 連線狀態。
Codex 的
codex mcp add只支援 stdio(command/args),並不支援 url(streamable HTTP)形式的遠端 server。因此要連雲端 HTTP 模式的 MCP server,需先用佔位指令建立設定,再手動編輯~/.codex/config.toml。
codex mcp add odoo-mcp -- echo placeholder
codex mcp add 產生的佔位設定:
[mcp_servers.odoo-mcp]
command = "echo"
args = ["placeholder"]
手動改為 url(streamable HTTP):
[mcp_servers.odoo-mcp]
url = "https://your-cloud-server.com:8000/mcp"
若遠端 server 需要認證,可額外加上
bearer_token_env_var = "ODOO_MCP_TOKEN"或自訂http_headers。
設定 READONLY_MODE=true 啟用唯讀模式,適用於生產環境查詢:
create_record、update_record、delete_record、execute_method)透過 FastMCP tags 直接隱藏,LLM 不會看到這些工具delete_record 內建 confirm 機制,LLM 必須先以 confirm=False 呼叫取得確認提示,經使用者同意後才能以 confirm=True 執行刪除。
HTTP/SSE transport 模式下提供 /health 端點:
curl http://localhost:8000/health
# {"status": "healthy", "service": "odoo-mcp-server", "version": "1.0.0"}
適用於 Docker healthcheck、Kubernetes probe、load balancer 探活。stdio 模式下不影響。
Apache 2.0
Run Claude Code as an MCP server so any agent can delegate coding tasks to it
Browser automation using accessibility snapshots instead of screenshots
English-first Korean equity intelligence MCP — DART filings, foreign-holder 5%-rule flows, activist filings, KRX news. F
Unity MCP acts as a bridge between AI assistants and your Unity Editor. Give your LLM tools to manage assets, control sc