Odoo MCP Server

ERPipe is the managed Odoo MCP gateway from the maintainer of erpipe-org/mcp-odoo, formerly tuanle96/mcp-odoo; the Python project remains the self-hosted server.

Local serverstdio

What is the Odoo MCP Server?

Odoo is an MCP project maintained in the erpipe-org/mcp-odoo repository. The maintainer describes its purpose as “ERPipe is the managed Odoo MCP gateway from the maintainer of erpipe-org/mcp-odoo, formerly tuanle96/mcp-odoo; the Python project remains the self-hosted server”. Read the project documentation for the complete scope.

Local setup

The project provides a local client configuration using /opt/homebrew/bin/python3. Follow the repository’s build and installation steps before copying it, and replace example paths with the paths on your own computer.

Configuration values

The example declares ODOO_URL, ODOO_DB, ODOO_USERNAME, ODOO_PASSWORD, ODOO_TRANSPORT. Secret-looking values have been replaced with placeholders. Required and optional labels are shown only when the documentation states them.

Source

Project documentation · Repository · Discovery listing. This profile records the public documentation checked on 2026-10-08.

Recorded tools

Check the linked publisher documentation and your connected client's tool list. Names and availability can vary with the server version and account permissions.

ToolWhat it does
list_modelsList Odoo model technical names and labels.
get_model_fieldsRead field metadata for one model.
search_recordsRun bounded read-only search_read. Smart-field selection when caller omits fields.
read_recordRead one record by model and ID. Smart-field selection when caller omits fields.
aggregate_recordsServer-side groupby/aggregation via formatted_read_group (Odoo 19+) or read_group (16-18).
search_employeeSearch employees by name.
search_holidaysSearch leave records by date range.
get_odoo_profileRead server version, user context, transport, database, and installed module summary.
schema_catalogBuild a bounded model catalog with optional field metadata.
build_domainBuild and validate an Odoo domain from structured conditions.
read_attachmentRead an ir.attachment's metadata and size-capped base64 content (ODOO_MCP_MAX_ATTACHMENT_BYTES, default 1 MiB).
preview_writeProduce a non-executing approval payload for create, write, or unlink.
validate_writeValidate a write payload against trusted live fields_get metadata.
execute_approved_writeExecute only a same-session, live-validated, confirmed write when ODOO_MCP_ENABLE_WRITES=1.
execute_methodExecute a reviewed model method. Direct create, write, and unlink are blocked. Side-effect methods require an exact allowlist or…
chatter_postPost a chatter message on a mail.thread record. Default mode requires the approval-token preview/execute flow.
diagnose_odoo_callDiagnose a model call without executing it.
diagnose_accessDiagnose ACL and record-rule visibility for the current Odoo credential.
inspect_model_relationshipsGroup relationship fields, required fields, and create/write hints.
generate_json2_payloadConvert XML-RPC-shaped input into JSON-2 endpoint, headers, and named body.
upgrade_risk_reportSurface transport, method, and migration risks across Odoo versions.
lookup_model_historyResolve outdated model names (account.invoice → account.move) against a curated per-version rename catalog.
scan_addons_sourceScan local addon source without importing addon code.
fit_gap_reportClassify requirements into standard, configuration, Studio, custom module, avoid, or unknown.
business_pack_reportReport expected modules, models, and discovery calls for sales, CRM, inventory, accounting, or HR.
index_knowledgeFetch a bounded record slice once and build a local BM25 index (accent-insensitive; data never leaves the machine).
search_knowledgeRelevance-ranked free-text search over indexed records with zero further RPC calls.
knowledge_statsReport per-model index sizes and the ODOO_MCP_KNOWLEDGE_MAX_DOCS budget.
receivable_payable_agingAged AR/AP report bucketed by days overdue (not due / 1-30 / 31-60 / 61-90 / 90+), with per-partner totals.
accounting_health_summaryOpen receivable/payable item counts plus the draft invoice backlog.
submit_async_taskRun an allowlisted long read operation (scan_addons_source, index_knowledge, receivable_payable_aging) on a bounded worker pool. Writes are never accepted.
get_async_taskPoll a task's status and result.
cancel_async_taskCancel a pending or running task.
list_async_tasksList live and recently finished tasks.
search_across_instancesSearch every opted-in instance (or a list/tag selection); rows tagged with _instance, partial results on per-instance failure.
aggregate_across_instancesGroup/aggregate per instance plus additive grand totals across the fleet.
accounting_health_across_instancesAR/AP aging across every client DB with combined buckets — the partner-network sweep.
health_checkReport non-secret MCP runtime posture, including rate-limit counters and field-ACL status when enabled.
list_instancesList configured Odoo instance names, URLs, databases, transports, and cross-instance tags — never credentials.

How to install the Odoo MCP Server

{
  "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_ODOO_PASSWORD",
        "ODOO_TRANSPORT": "xmlrpc"
      }
    }
  }
}

From the project documentation. Replace placeholders and example paths before connecting.

Configuration

VariableDescriptionRequired
ODOO_URLDeclared in the maintainer’s client configuration.Check documentation
ODOO_DBDeclared in the maintainer’s client configuration.Check documentation
ODOO_USERNAMEDeclared in the maintainer’s client configuration.Check documentation
ODOO_PASSWORDDeclared in the maintainer’s client configuration.Check documentation
ODOO_TRANSPORTDeclared in the maintainer’s client configuration.Check documentation