MCP server and CLI for Odoo ERP integration via JSON-RPC (tasks & timesheets)
Project description
MCP Odoo JSON-RPC
MCP-сервер и CLI для управления задачами и трудозатратами в Odoo ERP через JSON-RPC протокол.
Что это?
Odoo не предоставляет публичного REST/GraphQL API. Этот инструмент использует внутренний JSON-RPC протокол веб-клиента Odoo 17 и предоставляет два способа доступа:
mcp-odoo-server— MCP-сервер для Claude Code и других AI-ассистентовmcp-odoo-cli— интерактивный терминальный клиент для человека
Scope: проектные задачи + трудозатраты (timesheets). Другие модули Odoo (CRM, Sales, Inventory) пока не поддерживаются.
Быстрый старт
Установка
pip install mcp-odoo-jsonrpc
Авторизация
mcp-odoo-cli login --url https://odoo.example.com
Откроется браузер — войдите в Odoo. Сессия сохранится автоматически в системное хранилище (Windows Credential Manager / macOS Keychain / GNOME Keyring).
CLI
mcp-odoo-cli
MCP-сервер (для Claude Code)
{
"mcpServers": {
"odoo": {
"command": "python",
"args": ["-m", "mcp_odoo_jsonrpc"]
}
}
}
Возможности
| Инструмент | Описание |
|---|---|
list_tasks |
Получение списка задач пользователя |
get_task |
Детали задачи с обсуждениями и вложениями |
create_task |
Создание новой задачи в проекте |
update_task |
Обновление задачи (название, описание и пр.) |
change_task_stage |
Смена стадии/статуса задачи |
log_timesheet |
Списание трудозатрат по задаче |
get_timesheets |
Получение трудозатрат по задаче |
Безопасность
MCP-сервер работает в restricted mode по умолчанию — AI видит только структурные данные без корпоративного контента:
| Режим | Что видит AI | Активация |
|---|---|---|
restricted |
ID, стадия, часы, дедлайн. Без названий и текста | По умолчанию |
full |
Все данные: названия, описания, сообщения | ODOO_TRUST_MODE=full |
Дополнительные меры:
- Фильтр проектов:
ODOO_ALLOWED_PROJECTS=99,101— ограничить видимые проекты - Secure credentials:
session_idхранится в системном keyring, не в plaintext - detect-secrets: pre-commit hook предотвращает случайный коммит секретов
- CLI: всегда работает в full mode (пользователь смотрит в свой терминал)
Подробнее: SECURITY.md | ADR-005: Модель безопасности
Конфигурация
Через CLI (рекомендуется)
mcp-odoo-cli login --url https://odoo.example.com
Через переменные окружения
| Переменная | Обязательная | Описание |
|---|---|---|
ODOO_BASE_URL |
Да | Базовый URL инстанса Odoo |
ODOO_SESSION_ID |
Да | Значение cookie session_id |
ODOO_UID |
Да | ID пользователя в Odoo |
ODOO_EMPLOYEE_ID |
Нет | ID сотрудника (по умолчанию = UID) |
ODOO_COMPANY_IDS |
Да | ID компаний (через запятую) |
ODOO_TRUST_MODE |
Нет | restricted (по умолчанию) или full |
ODOO_ALLOWED_PROJECTS |
Нет | Фильтр проектов (ID через запятую) |
ODOO_LANG |
Нет | Язык (по умолчанию: ru_RU) |
ODOO_TZ |
Нет | Часовой пояс (по умолчанию: Europe/Moscow) |
См. .env.example
Архитектура
Odoo ERP (JSON-RPC)
↑
Anti-Corruption Layer
├── Transport (httpx + session_id cookie)
├── Protocol (JSON-RPC envelope, specifications)
└── Mapper (Odoo records ↔ Domain objects)
↑
Service Layer (OdooTaskService)
├── MCP Server (строки для AI)
└── CLI (rich таблицы для человека)
DDD-паттерн: Conformist + Anti-Corruption Layer. Подробнее: Context Map | Domain Model
Технологический стек
| Компонент | Технология |
|---|---|
| Язык | Python 3.12+ |
| MCP SDK | mcp v1.12+ |
| HTTP | httpx |
| Модели | pydantic v2 |
| TUI | rich |
| Credentials | keyring |
| Browser auth | playwright (dev) |
| Lint | ruff |
| CI | GitHub Actions |
| Odoo | 17 |
Документация
| Документ | Описание |
|---|---|
| Context Map | Архитектура и DDD-паттерны |
| Domain Model | 11 доменных объектов |
| JSON-RPC Reference | 9 задокументированных эндпоинтов |
| ADR | 6 архитектурных решений |
| CONTRIBUTING | Как внести вклад |
| SECURITY | Политика безопасности |
Лицензия
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file mcp_odoo_jsonrpc-0.1.0.tar.gz.
File metadata
- Download URL: mcp_odoo_jsonrpc-0.1.0.tar.gz
- Upload date:
- Size: 24.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a1622a9cd4ad9fc1910d1f199841a820b069d2fdc0f37cc8d271e573613fca79
|
|
| MD5 |
dcab1f97e54dbfe1814139c010c0ba74
|
|
| BLAKE2b-256 |
1617ca66ba2aa10cfe81fcab596b6da6587e53329799e55cd1a95797af42cf5a
|
Provenance
The following attestation bundles were made for mcp_odoo_jsonrpc-0.1.0.tar.gz:
Publisher:
release.yml on daniilpet/mcp-odoo-jsonrpc
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
mcp_odoo_jsonrpc-0.1.0.tar.gz -
Subject digest:
a1622a9cd4ad9fc1910d1f199841a820b069d2fdc0f37cc8d271e573613fca79 - Sigstore transparency entry: 1239530499
- Sigstore integration time:
-
Permalink:
daniilpet/mcp-odoo-jsonrpc@23a1306c08da55a2bb8bd9a44644fc08fff86aae -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/daniilpet
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@23a1306c08da55a2bb8bd9a44644fc08fff86aae -
Trigger Event:
push
-
Statement type:
File details
Details for the file mcp_odoo_jsonrpc-0.1.0-py3-none-any.whl.
File metadata
- Download URL: mcp_odoo_jsonrpc-0.1.0-py3-none-any.whl
- Upload date:
- Size: 25.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
764a2e3ae501b6f5d45f77ba28fa39c408ffc8104aa7a6362061c946d4c798c0
|
|
| MD5 |
0a3ae3f2b04aa36950a3f5f7a061c6c7
|
|
| BLAKE2b-256 |
4b05fd51f2acaf9aba10cc19ea67b125b2e6945bb1429fea95f026db0c9f82c4
|
Provenance
The following attestation bundles were made for mcp_odoo_jsonrpc-0.1.0-py3-none-any.whl:
Publisher:
release.yml on daniilpet/mcp-odoo-jsonrpc
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
mcp_odoo_jsonrpc-0.1.0-py3-none-any.whl -
Subject digest:
764a2e3ae501b6f5d45f77ba28fa39c408ffc8104aa7a6362061c946d4c798c0 - Sigstore transparency entry: 1239530502
- Sigstore integration time:
-
Permalink:
daniilpet/mcp-odoo-jsonrpc@23a1306c08da55a2bb8bd9a44644fc08fff86aae -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/daniilpet
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@23a1306c08da55a2bb8bd9a44644fc08fff86aae -
Trigger Event:
push
-
Statement type: