Odoo 18 Server
БесплатноНе проверенEnables interaction with Odoo 18 (JSON-RPC API) via MCP, supporting model exploration, CRUD operations, and secure API key authentication.
Описание
Enables interaction with Odoo 18 (JSON-RPC API) via MCP, supporting model exploration, CRUD operations, and secure API key authentication.
README
Odoo 18 MCP Server,使用 JSON-RPC API 連線。
Based on twtrubiks/odoo19-mcp-server, adapted for Odoo 18.
技術棧
- Python: 3.13
- FastMCP: >=3.0.0,<4.0.0
- odoo-client-lib: 2.0.1 (使用
jsonrpc/jsonrpcsprotocol)
架構
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/>jsonrpc/jsonrpcs protocol]
end
subgraph Odoo["Odoo 18 Server"]
EP["/jsonrpc endpoint"]
end
Client -->|MCP Protocol<br/>stdio/http/sse| Server
R --> DI
T --> DI
DI --> RPC
RPC -->|HTTP/HTTPS| Odoo
與 Odoo 19 版本的差異
| 項目 | Odoo 19 | Odoo 18 |
|---|---|---|
| Record URL 格式 | /odoo/{model}/{id} |
/web#id={id}&model={model}&view_type=form |
| RPC Protocol | json2/json2s(/doc-bearer/) |
jsonrpc/jsonrpcs(/jsonrpc) |
| View API | fields_view_get() |
get_views()(fields_view_get 已移除) |
| Domain operator | 支援 any |
不支援 any(用子查詢替代) |
環境變數
| 變數 | 說明 | 預設值 |
|---|---|---|
ODOO_URL |
Odoo 伺服器 URL | http://localhost:8069 |
ODOO_DATABASE |
資料庫名稱 | odoo |
ODOO_LOGIN |
用戶登入帳號(Email) | - |
ODOO_API_KEY |
API Key 認證(見下方取得方式) | - |
READONLY_MODE |
唯讀模式(禁止寫入操作) | false |
VIEW_FILTERED_MODE |
View 欄位過濾模式(只回傳 UI 可見欄位) | false |
建立 .env 檔案:
cp .env.example .env
# 編輯 .env 填入你的 API Key
如何取得 API Key
推薦:使用 Setup Wizard(bash setup-hr.sh),全自動完成。
手動方式:
- 登入 Odoo
- 點擊右上角頭像 → 我的個人資料(My Profile)
- 切換到 帳號安全(Account Security) 頁籤
- 找到 API Keys 區塊,點擊 New API Key
- 輸入描述(例如
MCP Server),點擊確認 - 複製產生的 API Key,貼到
.env的ODOO_API_KEY欄位
注意:API Key 只會顯示一次,請妥善保存。API Key 的權限等同於該用戶帳號的權限。
快速設定(Setup Wizard)
HR 等非技術人員只需執行一個指令:
bash setup-hr.sh
Wizard 會自動:
- 安裝 Python 虛擬環境和依賴
- 開啟瀏覽器選擇環境(SIT / PRD)
- 導到 Odoo 登入頁(SAML/SSO 自動登入)
- 點擊「Connect Claude Code」一鍵產生 API Key
- 自動寫入
.env並註冊 MCP Server
前提:Odoo 上需安裝
mcp_api_key模組(見下方)。
Odoo 模組:mcp_api_key
odoo_addons/mcp_api_key/ 提供 /mcp/setup 頁面,讓 SAML/SSO 用戶一鍵產生 API Key。
安裝方式:將 mcp_api_key/ 複製到 Odoo addons 路徑,然後在 Odoo 後台安裝「MCP API Key Generator」。
部署設定:建立 deploy-config.json(已在 .gitignore 中):
{
"environments": {
"sit": {"name": "SIT (Testing)", "odoo_url": "https://your-sit.com/", "database": "sit-db"},
"prd": {"name": "Production", "odoo_url": "https://your-prd.com/", "database": "prd-db"}
},
"defaults": {"readonly_mode": true, "view_filtered_mode": true}
}
手動安裝
pip install -r requirements.txt
啟動方式
開發模式(MCP Inspector)
fastmcp dev inspector odoo_mcp_server.py
傳輸模式(Transport)
| 模式 | 說明 | 適用情境 |
|---|---|---|
stdio |
標準輸入輸出(預設) | Claude Desktop、Cursor IDE、本機開發 |
http |
HTTP 協定 | 遠端服務、n8n、Web 應用整合 |
sse |
Server-Sent Events(已棄用) | 向下相容舊版 Client |
啟動不同模式
# 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
MCP Resources
| URI | 說明 |
|---|---|
odoo://models |
列出所有模型 |
odoo://model/{model_name} |
取得模型欄位定義 |
odoo://record/{model_name}/{record_id} |
取得單筆記錄 |
odoo://user |
當前登入用戶資訊 |
odoo://company |
當前用戶所屬公司資訊 |
MCP Tools
| 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 |
Claude Code MCP 設定
本機執行
claude mcp add odoo-mcp-server -- python odoo_mcp_server.py
手動設定 JSON(加到 ~/.claude.json)
{
"mcpServers": {
"odoo-mcp-server": {
"command": "/bin/python",
"args": [
"odoo_mcp_server.py"
]
}
}
}
Docker
claude mcp add odoo-mcp-server -- docker run -i --rm \
-e ODOO_URL=https://your-odoo-server.com/ \
-e ODOO_DATABASE=your_database_name \
-e [email protected] \
-e ODOO_API_KEY=your_api_key_here \
-e READONLY_MODE=true \
-e VIEW_FILTERED_MODE=true \
odoo18-mcp-server
雲端部署(HTTP 模式)
Docker Compose 範例:
services:
odoo-mcp:
build: .
ports:
- "8000:8000"
environment:
- ODOO_URL=https://your-odoo-server.com/
- ODOO_DATABASE=your_database_name
- [email protected]
- ODOO_API_KEY=your_api_key_here
- READONLY_MODE=true
- VIEW_FILTERED_MODE=true
command: ["python", "odoo_mcp_server.py", "--transport", "http", "--host", "0.0.0.0", "--port", "8000"]
restart: unless-stopped
Client 設定:
claude mcp add --transport http odoo-mcp https://your-cloud-server.com:8000/mcp
Docker 建置
docker build -t odoo18-mcp-server .
安全機制
唯讀模式
設定 READONLY_MODE=true 啟用唯讀模式,適用於生產環境查詢:
- 寫入工具(
create_record、update_record、delete_record、execute_method)透過 FastMCP tags 直接隱藏,LLM 不會看到這些工具
View 欄位過濾模式(本專案新增)
設定 VIEW_FILTERED_MODE=true 啟用,適用於讓非技術人員(如 HR)安全使用 MCP 查詢 PRD 資料。
問題:Odoo 的 ORM API 會回傳用戶有權限的所有欄位,即使 UI 上沒有顯示(例如薪資、個資等)。
解決方案:透過 get_views() 取得 list + form view 定義,只回傳 view 中可見的欄位。
一般模式: search_records("hr.employee") → 209 個欄位(含薪資、個資)
View 過濾: search_records("hr.employee") → 138 個欄位(只有 view 上顯示的)
運作方式:
- 首次查詢某個 model 時,呼叫
get_views()一次取得 list + form view - 從
models回傳取得該用戶可見的欄位定義(已過濾 groups) - 從 arch XML 解析
<field>名稱作為補充 - 合併欄位集合並快取,所有讀取操作只回傳這些欄位
- 即使 LLM 嘗試指定不在 view 中的欄位,也會被過濾掉
建議 HR 使用的設定(.env):
ODOO_URL=https://your-odoo-server.com/
ODOO_DATABASE=your_database_name
[email protected]
ODOO_API_KEY=hr_user_api_key_here
READONLY_MODE=true # 禁止寫入
VIEW_FILTERED_MODE=true # 只看 view 可見欄位
刪除二次確認
delete_record 內建 confirm 機制,LLM 必須先以 confirm=False 呼叫取得確認提示,經使用者同意後才能以 confirm=True 執行刪除。
健康檢查
HTTP/SSE transport 模式下提供 /health 端點:
curl http://localhost:8000/health
# {"status": "healthy", "service": "odoo18-mcp-server", "version": "1.0.0"}
測試
pip install -r requirements-dev.txt
pytest tests/
Credits
Based on twtrubiks/odoo19-mcp-server by @twtrubiks.
License
Apache 2.0
Установка Odoo 18 Server
У этого сервера нет опубликованного пакета — он собирается из исходников. Открой репозиторий и следуй инструкции в README.
▸ github.com/KKday-KevinChu/odoo18-mcp-serverFAQ
Odoo 18 Server MCP бесплатный?
Да, Odoo 18 Server MCP бесплатный — установка в пару кликов через Unyly без оплаты.
Нужен ли API-ключ для Odoo 18 Server?
Нет, Odoo 18 Server работает без API-ключей и переменных окружения.
Odoo 18 Server — hosted или self-hosted?
Доступен hosted-вариант: Unyly запускает сервер в облаке, локальная установка не обязательна.
Как установить Odoo 18 Server в Claude Desktop, Claude Code или Cursor?
Открой Odoo 18 Server на unyly.org, выбери вкладку своего клиента (Claude Desktop, Claude Code, Cursor) и нажми Install — конфиг сгенерируется автоматически, без правки JSON.
Похожие MCP
GitHub
PRs, issues, code search, CI status
автор: GitHubFilesystem
Secure file operations with configurable access controls.
Memory
Knowledge graph-based persistent memory system.
Template MCP Server
A CLI tool to create a new Model Context Protocol server project with TypeScript support, dual transport options, and an extensible structure
автор: mcpdotdirectCompare Odoo 18 Server with
Не уверен что выбрать?
Найди свой стек за 60 секунд
Автор?
Embed-бейдж для README
Похожее
Все в категории development
