odoo19-mcp-server
Odoo 19 MCP Server (JSON-2 API)
MCP-сервер для Odoo 19, использующий подключение через JSON-2 API.
Данный проект разработан на основе полного руководства по использованию Odoo 19 JSON-2 API.

Технологический стек
Python: 3.13
FastMCP: >=3.0.0,<4.0.0
odoo-client-lib: 2.0.1 (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Основные концепции MCP
Ресурсы (Resources) vs Инструменты (Tools)
Характеристика | Ресурсы | Инструменты |
Назначение | Предоставление контекстной информации | Выполнение операций/действий |
Триггер | Управление клиентом (например, Claude Code) | LLM автоматически решает, когда вызвать |
Параметры | Нет (или параметры URI) | Есть (генерируются LLM) |
Аналогия | Справочник сотрудника (фоновые знания) | Набор инструментов (используется по мере необходимости) |
Аналогия HTTP | GET (чтение) | POST/PUT/DELETE (операции) |
Ресурсы — динамический контекст, фоновая информация, которую LLM знает с самого начала:
odoo://user → "我是誰"
odoo://company → "我在哪間公司"
odoo://models → "有哪些模型可用"Инструменты — операции, вызываемые только при необходимости:
search_records(model="res.partner", domain=[...]) → 搜尋
create_record(model="sale.order", values={...}) → 建立Почему не использовать Default Prompt?
Способ | Default Prompt | Ресурс |
Источник данных | Жестко прописан в коде | Запрос к Odoo в реальном времени |
Время обновления | При развертывании | При каждом подключении |
Смена пользователя | Неверная информация | Автоматически корректная |
# ❌ Default Prompt(寫死)
SYSTEM_PROMPT = "當前用戶: Admin" # 換人登入就錯了
# ✅ Resource(動態)
@mcp.resource("odoo://user")
def get_current_user():
return client.read("res.users", [uid]) # 即時查詢Вывод: Ресурс — это «динамический контекст», а не статический текст.
См. также: MCP Resources | MCP Tools
Переменные окружения
Переменная | Описание | Значение по умолчанию |
| URL сервера Odoo |
|
| Имя базы данных | - |
| Аутентификация по API Key | - |
| Режим только для чтения (запрет записи) |
|
Создайте файл .env:
cp .env.example .envУстановка
pip install -r requirements.txtСпособы запуска
Режим разработки (MCP Inspector)
fastmcp dev inspector odoo_mcp_server.pyРежимы передачи (Transport)
Данный проект поддерживает три режима передачи MCP:
Режим | Описание | Сценарии использования |
| Стандартный ввод/вывод (по умолчанию) | Claude Desktop, Cursor IDE, локальная разработка |
| Протокол HTTP | Удаленные сервисы, n8n, интеграция с веб-приложениями |
| Server-Sent Events (устарело) | Обратная совместимость со старыми клиентами |
stdio vs HTTP/SSE: где выполняются вычисления
Ключевое различие между двумя режимами заключается в том, «кто запускает MCP-сервер» и «где выполняются вычисления»:
Режим stdio (локальные вычисления)
┌─────────────────────────────────────┐
│ 你的電腦 💻 │
│ │
│ Claude Desktop ──> MCP Server │
│ (使用本機算力) │
└─────────────────────────────────────┘Клиент (например, Claude Desktop) запускает MCP-сервер как дочерний процесс
MCP-сервер использует CPU/RAM вашего компьютера
Сервер запускается/завершается вместе с клиентом
Режим HTTP/SSE (удаленные вычисления)
┌──────────────┐ ┌──────────────────┐
│ 你的電腦 │ │ 雲端 ☁️ │
│ │ │ │
│Claude Desktop│ ──網路──>│ MCP Server │
│ (輕量) │ │ (使用雲端算力) │
└──────────────┘ └──────────────────┘MCP-сервер работает независимо в облаке или на удаленном хосте
Несколько клиентов могут подключаться к одному серверу одновременно
Подходит для командной работы, интеграции с n8n и промышленной эксплуатации
Запуск в разных режимах
# 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Облачное развертывание (режим HTTP)
Пример Docker Compose:
services:
odoo-mcp:
build: .
ports:
- "8000:8000"
environment:
- ODOO_URL=http://odoo:8069
- ODOO_DATABASE=odoo19
- ODOO_API_KEY=your_api_key_here
command: ["python", "odoo_mcp_server.py", "--transport", "http", "--host", "0.0.0.0", "--port", "8000"]
restart: unless-stoppedНастройка клиента (claude) для использования URL-подключения:
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"
}
}
}Ресурсы MCP
URI | Описание |
| Список всех моделей |
| Получение определений полей модели |
| Получение отдельной записи |
| Информация о текущем пользователе |
| Информация о компании текущего пользователя |
Инструменты MCP
Инструмент | Описание | Только чтение |
| Список/поиск доступных моделей | Yes |
| Получение определений полей модели | Yes |
| Поиск записей | Yes |
| Подсчет записей | Yes |
| Чтение записи по ID | Yes |
| Создание записи | No |
| Обновление записи | No |
| Удаление записи (требует подтверждения) | No |
| Выполнение метода модели | Depends |
Настройка MCP для Claude Code
Файл конфигурации находится в ~/.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"
]
}
}
}Docker (host.docker.internal)
Подходит для случаев, когда 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"
]
}
}
}Docker (host network)
Использование сетевого режима хоста:
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"
]
}
}
}Docker (удаленная Odoo)
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"
]
}
}
}Сборка Docker
docker build -t odoo-mcp-server .Настройка MCP для Gemini
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"
]
}
}
}Механизмы безопасности
Режим «только чтение»
Установите READONLY_MODE=true для включения режима «только чтение», подходящего для производственных сред:
Инструменты записи (
create_record,update_record,delete_record,execute_method) скрываются напрямую через теги FastMCP, поэтому LLM не будет их видеть.
Подтверждение удаления
delete_record имеет встроенный механизм подтверждения: LLM должна сначала вызвать его с параметром confirm=False для получения запроса на подтверждение, и только после согласия пользователя выполнить удаление с confirm=True.
Проверка работоспособности (Health Check)
В режимах HTTP/SSE предоставляется эндпоинт /health:
curl http://localhost:8000/health
# {"status": "healthy", "service": "odoo-mcp-server", "version": "1.0.0"}Подходит для Docker healthcheck, проверок Kubernetes, балансировщиков нагрузки. В режиме stdio не используется.
Лицензия
Apache 2.0
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/twtrubiks/odoo19-mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server