Skip to main content
Glama
tuanle96

Odoo MCP Server

Odoo MCP

Odoo MCP превращает базу данных Odoo в сервер протокола Model Context Protocol. Он создан для локальных агентов, IDE и инструментов автоматизации, которым нужен реальный контекст Odoo без написанных вручную скриптов или небезопасного прямого доступа на запись.

Он использует XML-RPC для Odoo 16-18 и External JSON-2 для Odoo 19. Он предоставляет компактную поверхность MCP с инструментами чтения, диагностики, обнаружения схемы, помощниками по миграции, сканированием локальных аддонов и контролируемым рабочим процессом записи.

Основные возможности

Возможность

Что вы получаете

22 MCP-инструмента

Чтение записей, проверка схемы, создание доменов, сканирование аддонов, диагностика вызовов, правила доступа и проверка записей.

5 агентских промптов

Повторно используемые рабочие процессы для неудачных вызовов, анализа соответствия (fit/gap), миграции JSON-2, безопасной записи и аудита модулей.

Поддержка Odoo 16-19

XML-RPC по умолчанию, JSON-2 по выбору для Odoo 19.

Потоковый HTTP

Поддержка локального HTTP/SSE для клиентов, которые не используют stdio.

Безопасная запись

Прямые create, write и unlink заблокированы; одобренные записи требуют актуальных метаданных, токена той же сессии, явного подтверждения и шлюза окружения.

Реальные дымовые тесты

Валидация Docker Compose запускает временные стеки Odoo 16.0, 17.0, 18.0 и 19.0, включая ограниченных пользователей, пользовательские правила записей и установку/обновление упакованных XML-аддонов.

Related MCP server: Odoo MCP Server

Установка

pip install odoo-mcp

Для локальной разработки:

git clone https://github.com/tuanle96/mcp-odoo.git
cd mcp-odoo
uv sync --extra dev

Настройка

Установите значения подключения в окружении:

export ODOO_URL="https://your-odoo-instance.com"
export ODOO_DB="your-database"
export ODOO_USERNAME="your-user"
export ODOO_PASSWORD="your-password-or-api-key"
export ODOO_TRANSPORT="xmlrpc"

Для Odoo 19 JSON-2:

export ODOO_TRANSPORT="json2"
export ODOO_API_KEY="your-odoo-api-key"
export ODOO_JSON2_DATABASE_HEADER="1"

ODOO_JSON2_DATABASE_HEADER=1 отправляет X-Odoo-Database при вызовах JSON-2. Установите значение 0 только в том случае, если маршрутизация хоста или dbfilter уже выбирает нужную базу данных.

Вы также можете использовать odoo_config.json:

{
  "url": "https://your-odoo-instance.com",
  "db": "your-database",
  "username": "your-user",
  "password": "your-password-or-api-key"
}

Запуск

Запустите MCP-сервер через stdio:

odoo-mcp

или:

python -m odoo_mcp

Запустите потоковый HTTP для локальных клиентов:

odoo-mcp --transport streamable-http --host 127.0.0.1 --port 8000 --path /mcp

Нелокальные HTTP-привязки отклоняются, если вы не передадите --allow-remote-http или не установите MCP_ALLOW_REMOTE_HTTP=1. Этот сервер не включает встроенную HTTP-аутентификацию. Размещайте удаленные HTTP-развертывания за собственной аутентификацией, TLS и сетевой политикой.

Проверьте состояние среды выполнения без запуска цикла сервера:

odoo-mcp --health

MCP-инструменты

Инструмент

Назначение

execute_method

Выполнение проверенного метода модели. Прямые create, write и unlink заблокированы. Методы с побочными эффектами требуют точного списка разрешенных или ODOO_MCP_ALLOW_UNKNOWN_METHODS=1.

list_models

Список технических имен и меток моделей Odoo.

get_model_fields

Чтение метаданных полей для одной модели.

search_records

Выполнение ограниченного поиска search_read только для чтения.

read_record

Чтение одной записи по модели и ID.

search_employee

Поиск сотрудников по имени.

search_holidays

Поиск записей об отпусках по диапазону дат.

diagnose_odoo_call

Диагностика вызова модели без его выполнения.

diagnose_access

Диагностика видимости ACL и правил записей для текущих учетных данных Odoo.

inspect_model_relationships

Группировка полей связей, обязательных полей и подсказок для создания/записи.

generate_json2_payload

Преобразование входных данных в формате XML-RPC в эндпоинт JSON-2, заголовки и именованное тело.

upgrade_risk_report

Выявление рисков транспорта, методов и миграции между версиями Odoo.

fit_gap_report

Классификация требований на стандартные, конфигурационные, Studio, пользовательские модули, исключаемые или неизвестные.

get_odoo_profile

Чтение версии сервера, контекста пользователя, транспорта, базы данных и сводки установленных модулей.

schema_catalog

Создание ограниченного каталога моделей с дополнительными метаданными полей.

preview_write

Создание невыполняемого полезного контента для подтверждения create, write или unlink.

validate_write

Валидация полезного контента записи на основе доверенных актуальных метаданных fields_get.

execute_approved_write

Выполнение только подтвержденной записи в рамках той же сессии при установленном ODOO_MCP_ENABLE_WRITES=1.

scan_addons_source

Сканирование исходного кода локальных аддонов без импорта кода аддонов.

build_domain

Создание и валидация домена Odoo на основе структурированных условий.

business_pack_report

Отчет об ожидаемых модулях, моделях и вызовах обнаружения для продаж, CRM, инвентаризации, учета или HR.

health_check

Отчет о состоянии среды выполнения MCP без секретных данных.

Ресурсы

URI

Описание

odoo://models

Список доступных моделей.

odoo://model/{model_name}

Чтение метаданных и полей модели.

odoo://record/{model_name}/{record_id}

Чтение одной записи.

odoo://search/{model_name}/{domain}

Поиск записей с ограниченным доменом.

Промпты

Промпт

Использовать для

diagnose_failed_odoo_call

Поиск первопричины неудачного вызова Odoo перед повторной попыткой.

fit_gap_workshop

Преобразование необработанных требований в категории fit/gap для Odoo.

json2_migration_plan

Планирование миграции с XML-RPC или JSON-RPC на External JSON-2.

safe_write_review

Проверка предлагаемого create, write или unlink.

custom_module_audit

Аудит исходного кода локального аддона со сканированием, рисками и бизнес-обоснованием.

Модель безопасной записи

Записи намеренно сделаны «скучными».

  1. preview_write создает канонический, невыполняемый полезный контент.

  2. validate_write проверяет метаданные модели, обязательные поля, поля только для чтения, подсказки связей, ID записей и форму полезного контента.

  3. execute_approved_write выполняется только при прохождении всех шлюзов:

    • одобрение получено от validate_write в том же процессе сервера,

    • валидация использовала доверенные, непустые актуальные метаданные fields_get Odoo,

    • токен не истек и не был использован,

    • передано confirm=true,

    • установлено ODOO_MCP_ENABLE_WRITES=1.

Правила доступа Odoo, правила записей и серверные ограничения по-прежнему определяют окончательный результат.

Проверенные методы с побочными эффектами, такие как sale.order.action_confirm, могут быть включены по одному:

export ODOO_MCP_ALLOWED_SIDE_EFFECT_METHODS="sale.order.action_confirm,res.partner.message_post"

ODOO_MCP_ALLOW_UNKNOWN_METHODS=1 по-прежнему поддерживается для доверенных развертываний, но health_check сообщает об этом как о широком режиме. Предпочитайте точный список разрешенных методов, если вам нужно лишь небольшое количество проверенных методов.

Настройка клиента

Claude Desktop на macOS считывает конфигурацию MCP из:

~/Library/Application Support/Claude/claude_desktop_config.json

Используйте абсолютный путь к Python, так как графические приложения могут не наследовать ваш PATH из оболочки:

{
  "mcpServers": {
    "odoo": {
      "command": "/opt/homebrew/bin/python3",
      "args": ["-m", "odoo_mcp"],
      "env": {
        "ODOO_URL": "https://your-odoo-instance.com",
        "ODOO_DB": "your-database",
        "ODOO_USERNAME": "your-user",
        "ODOO_PASSWORD": "your-password-or-api-key",
        "ODOO_TRANSPORT": "xmlrpc"
      }
    }
  }
}

Больше примеров находится в docs/client-configs.md.

Docker

Соберите образ:

docker build -t mcp/odoo:latest -f Dockerfile .

Запустите через stdio из MCP-клиента:

{
  "mcpServers": {
    "odoo": {
      "command": "docker",
      "args": [
        "run",
        "-i",
        "--rm",
        "-e", "ODOO_URL",
        "-e", "ODOO_DB",
        "-e", "ODOO_USERNAME",
        "-e", "ODOO_PASSWORD",
        "-e", "ODOO_TRANSPORT",
        "-e", "ODOO_API_KEY",
        "mcp/odoo:latest"
      ]
    }
  }
}

Запустите потоковый HTTP локально:

docker run --rm \
  -p 127.0.0.1:8000:8000 \
  -e ODOO_URL \
  -e ODOO_DB \
  -e ODOO_USERNAME \
  -e ODOO_PASSWORD \
  -e ODOO_TRANSPORT \
  -e ODOO_API_KEY \
  mcp/odoo:latest \
  --transport streamable-http \
  --host 0.0.0.0 \
  --port 8000 \
  --allow-remote-http

Тестирование

Запустите стандартные проверки качества:

uv run python -m ruff check .
uv run python -m mypy src
uv run python -m pytest

Запустите реальные дымовые тесты Odoo:

uv run --python 3.12 --with-editable . scripts/odoo_compose_smoke.py \
  --versions 16.0 17.0 18.0 19.0 \
  --timeout 360 \
  --inspector-smoke

Обвязка для дымовых тестов запускает временные стеки Docker Compose, проверяет прямой доступ к Odoo, проверяет MCP stdio, а для Odoo 19 также проверяет JSON-2 и потоковый HTTP.

Совместимость

XML-RPC остается транспортом по умолчанию для широкой совместимости. Odoo 19 поддерживает External JSON-2 через ODOO_TRANSPORT=json2. Odoo задокументировала устаревание XML-RPC и JSON-RPC для Odoo 20, поэтому новые интеграции должны планироваться с учетом JSON-2.

Участие в разработке

Проблемы, пулл-реквесты и отчеты о совместимости приветствуются. Начните с CONTRIBUTING.md, укажите вашу версию Odoo, транспорт, тип клиента и выполненную вами проверку.

Безопасность

Не публикуйте логи, содержащие учетные данные Odoo, API-ключи, имена баз данных из частных сред или полные трассировки отладки Odoo. Сообщайте об уязвимостях через SECURITY.md.

Лицензия

MIT. См. LICENSE.

Install Server
A
license - permissive license
B
quality
B
maintenance

Maintenance

Maintainers
Response time
1dRelease cycle
4Releases (12mo)
Commit activity
Issues opened vs closed

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/tuanle96/mcp-odoo'

If you have feedback or need assistance with the MCP directory API, please join our Discord server