Odel
odoo mcp connector

odoo mcp connector

Local
@management-cmykTypeScriptMITUpdated 1mo ago

Query, report on, and optionally modify any Odoo ERP from Claude. Read-only by default.

Odoo MCP Server

A Model Context Protocol server for Odoo. Connect Claude (or any MCP client) to your own Odoo ERP and query, report on, and optionally modify your data in natural language.

Works with any Odoo model. Safe by default: read-only unless you explicitly enable writes. Your credentials stay on your machine — nothing is stored or sent anywhere except your own Odoo instance.

Features

  • 🔍 Generic access to any model — search, read, count, introspect fields, list models
  • 📊 Ready-made business tools — overdue invoices, sales summary, low-stock products, top customers
  • 🔒 Read-only by default — create/update/delete only when you opt in (ODOO_ENABLE_WRITES=true)
  • 🔑 Your data, your machine — configured entirely through environment variables

Install

Add this to your MCP client config (e.g. Claude Desktop or Claude Code):

{
  "mcpServers": {
    "odoo": {
      "command": "npx",
      "args": ["-y", "odoo-mcp-connector"],
      "env": {
        "ODOO_URL": "https://your-company.odoo.com",
        "ODOO_DB": "your-database",
        "ODOO_USERNAME": "you@example.com",
        "ODOO_API_KEY": "your-odoo-api-key"
      }
    }
  }
}

Getting an Odoo API key

In Odoo: Settings → Users → (your user) → Account Security → New API Key. Paste the generated key into ODOO_API_KEY. (A password also works, but an API key is safer and revocable.)

Enabling writes

Read-only is the default. To let the model create, update, or delete records, add:

"ODOO_ENABLE_WRITES": "true"

⚠️ Odoo holds real business data. Enable writes only when you accept that the model can create, modify, or delete records — always within your Odoo user's own permissions.

Tools

Always available (read-only)

ToolPurpose
odoo_search_readSearch + read records from any model
odoo_readRead records by ID
odoo_countCount records matching a domain
odoo_fieldsIntrospect a model's fields (name, type, label)
odoo_list_modelsList available models
odoo_overdue_invoicesUnpaid customer invoices past their due date
odoo_sales_summaryRevenue + order count over a date range
odoo_low_stockProducts at/below a quantity threshold
odoo_top_customersTop customers by invoiced revenue

Only when ODOO_ENABLE_WRITES=true

ToolPurpose
odoo_createCreate a record
odoo_writeUpdate records by ID
odoo_unlinkDelete records by ID (irreversible)
odoo_callCall an arbitrary model method

Configuration reference

VariableRequiredDefaultDescription
ODOO_URLyesYour Odoo base URL
ODOO_DByesDatabase name
ODOO_USERNAMEyesLogin (email)
ODOO_API_KEYyesAPI key (or password)
ODOO_ENABLE_WRITESnofalseSet "true" to allow writes
ODOO_TIMEOUT_MSno30000Per-request timeout (ms)

Development

npm install
npm test       # vitest — fully mocked, no live Odoo needed
npm run build

License

MIT © Falak Sarhan Saade