/ Каталог / Песочница / mcp-server-odoo
● Сообщество ivnvxd ⚡ Сразу

mcp-server-odoo

автор ivnvxd · ivnvxd/mcp-server-odoo

Query and safely update any Odoo ERP model from chat — orders, contacts, products — with smart field selection and read-only guardrails.

mcp-server-odoo connects to any Odoo 16+ instance via XML-RPC. It exposes record search/read/create/update/delete with auto-selection of meaningful fields per model, plus a YOLO-read mode for any Odoo version. Use API key auth (recommended) or user/password.

Зачем использовать

Ключевые функции

Живое демо

Как выглядит на практике

server-odoo.replay ▶ готово
0/0

Установка

Выберите клиент

~/Library/Application Support/Claude/claude_desktop_config.json  · Windows: %APPDATA%\Claude\claude_desktop_config.json
{
  "mcpServers": {
    "server-odoo": {
      "command": "uvx",
      "args": [
        "mcp-server-odoo"
      ],
      "_inferred": true
    }
  }
}

Откройте Claude Desktop → Settings → Developer → Edit Config. Перезапустите после сохранения.

~/.cursor/mcp.json · .cursor/mcp.json
{
  "mcpServers": {
    "server-odoo": {
      "command": "uvx",
      "args": [
        "mcp-server-odoo"
      ],
      "_inferred": true
    }
  }
}

Cursor использует ту же схему mcpServers, что и Claude Desktop. Конфиг проекта приоритетнее глобального.

VS Code → Cline → MCP Servers → Edit
{
  "mcpServers": {
    "server-odoo": {
      "command": "uvx",
      "args": [
        "mcp-server-odoo"
      ],
      "_inferred": true
    }
  }
}

Щёлкните значок MCP Servers на боковой панели Cline, затем "Edit Configuration".

~/.codeium/windsurf/mcp_config.json
{
  "mcpServers": {
    "server-odoo": {
      "command": "uvx",
      "args": [
        "mcp-server-odoo"
      ],
      "_inferred": true
    }
  }
}

Тот же формат, что и Claude Desktop. Перезапустите Windsurf для применения.

~/.continue/config.json
{
  "mcpServers": [
    {
      "name": "server-odoo",
      "command": "uvx",
      "args": [
        "mcp-server-odoo"
      ]
    }
  ]
}

Continue использует массив объектов серверов, а не map.

~/.config/zed/settings.json
{
  "context_servers": {
    "server-odoo": {
      "command": {
        "path": "uvx",
        "args": [
          "mcp-server-odoo"
        ]
      }
    }
  }
}

Добавьте в context_servers. Zed перезагружается автоматически.

claude mcp add server-odoo -- uvx mcp-server-odoo

Однострочная команда. Проверить: claude mcp list. Удалить: claude mcp remove.

Сценарии использования

Реальные сценарии: mcp-server-odoo

Answer ad-hoc sales questions against Odoo

👤 Ops managers, founders using Odoo as their source of truth ⏱ ~10 min beginner

Когда использовать: 'What were last week's top 5 customers by revenue?' — without writing XML-RPC.

Предварительные требования
  • Odoo API key — Odoo: user profile > Preferences > API Keys > New
  • ODOO_URL, ODOO_DB, ODOO_API_KEY env vars — Set in your MCP client config
Поток
  1. List available models
    list_models — which Odoo models can we query in this instance?✓ Скопировано
    → Model catalog with descriptions
  2. Run the query
    In sale.order, find orders with date_order between last Monday and today, group by partner_id, sum amount_total, top 5.✓ Скопировано
    → Ranked customer list with totals
  3. Drill in
    For the top customer, show the last 3 orders with their line items.✓ Скопировано
    → Detailed breakdown

Итог: A business answer from ERP data without leaving chat.

Подводные камни
  • Multi-currency totals aren't converted — Specify currency_id in the filter, or convert in the LLM layer
  • ODOO_YOLO=true is dangerous in prod — Use ODOO_YOLO=read or leave unset; enable full access only in a staging DB
Сочетать с: notion

Clean up stale CRM leads in Odoo

👤 Sales ops ⏱ ~30 min intermediate

Когда использовать: Leads pile up with no activity; you want to reassign or archive.

Поток
  1. Find stale leads
    In crm.lead, find leads where stage_id is not 'Won' and last activity > 60 days ago.✓ Скопировано
    → Stale lead list
  2. Propose actions
    Classify each: archive, reassign to team lead, or ping current owner.✓ Скопировано
    → Classification per lead
  3. Apply in batches (read-only first!)
    Dry run only: show what would change if I archived the 'archive' bucket.✓ Скопировано
    → Dry-run summary; then confirm before update_record

Итог: A cleaner pipeline with auditable changes.

Подводные камни
  • Archiving leads other teams depend on — Always dry-run first; tag archived leads rather than delete

Draft follow-ups for unpaid invoices

👤 AR and finance ⏱ ~25 min intermediate

Когда использовать: Monthly dunning run.

Поток
  1. Pull overdue invoices
    In account.move, find invoices where state='posted', payment_state='not_paid', invoice_date_due < today - 15.✓ Скопировано
    → Overdue list with partner + amount
  2. Draft a polite follow-up per customer
    For each, draft an email in the customer's preferred language using ODOO_LOCALE settings.✓ Скопировано
    → Per-invoice draft text

Итог: Dunning emails ready to send (human still reviews).

Комбинации

Сочетайте с другими MCP — эффект x10

server-odoo + notion

Pull a sales snapshot from Odoo, post to Notion for stakeholders

Run last-month sales by product category from Odoo, post as a Notion table under Finance / Monthly.✓ Скопировано
server-odoo + postgres

Cross-reference Odoo data with a warehouse replica for heavy analytics

For top-10 Odoo customers, pull their web-session counts from the Postgres analytics DB.✓ Скопировано

Инструменты

Что предоставляет этот MCP

ИнструментВходные данныеКогда вызыватьСтоимость
list_models (none) First-run discovery 1 XML-RPC call
search_records model: str, domain?: filter, fields?: str[], limit?: int Any read query 1 XML-RPC call
get_record model, id Known id, need full detail 1 call
create_record model, values: object Only with ODOO_YOLO=true or API key granting write 1 call (write)
update_record model, id, values Writes — confirm first 1 call (write)
delete_record model, id Rarely — archive is usually better 1 call (write, destructive)
list_resource_templates (none) Explore available resource URIs free

Стоимость и лимиты

Во что обходится

Квота API
Bounded by Odoo server; no per-call cost
Токенов на вызов
Smart-field responses keep responses under 1k tokens per record
Деньги
Free; you need an Odoo instance (community or enterprise)
Совет
Always pass explicit fields= on big models like product.template to avoid pulling 200 fields.

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

Права, секреты, радиус поражения

Минимальные скоупы: API key or user with read rights on the models you query
Хранение учётных данных: ODOO_API_KEY in env var; never commit to repo
Исходящий трафик: Calls to your Odoo instance only
Никогда не давайте: ODOO_YOLO=true in production

Устранение неполадок

Частые ошибки и исправления

Access Denied on model

API key user doesn't have access rights for that model. Grant or switch user.

Проверить: Odoo: Settings > Users > Access Rights
Database not found

Set ODOO_DB explicitly; auto-detection fails when db listing is disabled.

Проверить: curl -d '{"jsonrpc":"2.0","method":"call","params":{"service":"db","method":"list"}}' $ODOO_URL/jsonrpc
MCP Odoo module not installed

In standard mode, install the mcp_odoo community module, or switch to ODOO_YOLO=read mode.

Проверить: Odoo: Apps > search mcp_odoo

Альтернативы

mcp-server-odoo в сравнении

АльтернативаКогда использоватьКомпромисс
Direct XML-RPC via fetch MCPYou only need one specific queryNo smart field selection; boilerplate-heavy
postgres MCP on Odoo's DBYou want raw SQL and can connect to the underlying PostgresBypasses Odoo ACLs — dangerous without care

Ещё

Ресурсы

📖 Читать официальный README на GitHub

🐙 Открытые задачи

🔍 Все 400+ MCP-серверов и Skills