# ivnvxd/mcp-server-odoo [Health: Active]

**Category:** 🛠️ Other Tools and Integrations  
**Repository:** https://github.com/ivnvxd/mcp-server-odoo  
**GitHub Stars:** 407  
**Views:** 3  
**Installs:** 0  
**Upvotes:** 0  
**Directory Page:** https://allmcps.com/mcp/ivnvxd-mcp-server-odoo

## Description
/🏠 - Connect AI assistants to Odoo ERP systems for business data access, record management, and workflow automation.

## Tools
Capabilities this server exposes over MCP:

- **search_records** — Search for records in any Odoo model with filters.
- **get_record** — Retrieve a specific record by ID.
- **get_fields** — Describe a model's fields — type, label, required/readonly, relation target, and selection options. Use it to discover a model's schema before reading or writing records. Omit `attributes` for the curated default set (`type`, `string`, `required`, `readonly`, `relation`, `selection`); an explicit l…
- **get_current_context** — Return the current session context: the connected user, their timezone, the active company plus any other allowed companies, and UTC datetime-handling guidance. Useful when unsure which user or company a request runs as, or how to interpret datetimes. Spec-compliant clients also receive this contex…
- **list_models** — List all models enabled for MCP access.
- **list_resource_templates** — List available resource URI templates and their patterns.
- **create_record** — Create a new record in Odoo.
- **create_records** — Create several records of one model in one call. The call accepts at most 100 records. It is one transaction: either every record is created or none.
- **update_record** — Update an existing record.
- **update_records** — Update several records of one model in one call, with at most 100 distinct records. If any ID does not exist, nothing is written. Archived records can be updated, for example to unarchive them with `"active": true`. Use one of two forms.
- **delete_record** — Delete a record from Odoo.
- **read_attachment** — Read a file: an attachment or a binary field such as an image. Pass exactly one of `uri` (an `odoo://attachment/{id}` or `odoo://{model}/record/{id}/{field}` URI from a tool result) or `attachment_id`. The result depends on the file:
- **list_record_attachments** — List the files attached to a record, newest first, with name, mimetype, size, date and an `odoo://attachment/{id}` URI each. Files behind binary fields such as `image_1920` are not listed, because `get_record` returns those as URIs.
- **upload_attachment** — Attach a file to a record. `data` is the file as plain base64, at most about 2.9 MB after decoding. Odoo detects the mimetype when `mimetype` is not given. The result carries the new attachment's ID and its `odoo://attachment/{id}` URI. To show the file in the chatter, pass the ID to `post_message`…
- **post_message** — Post a message to a record's chatter (`mail.thread`). `subtype="note"` (default) is an internal log; `subtype="comment"` notifies followers. Set `body_is_html=true` for HTML markup. Optional `subject` sets a message subject line; optional `partner_ids` and `attachment_ids` reference existing partne…
- **aggregate_records** — Server-side aggregation. Use this whenever the question is "totals/counts/groupings" rather than "list of records" — it pushes the work down to PostgreSQL instead of pulling raw rows. Dispatches to `formatted_read_group` on Odoo 19+ (the new dedicated method) and falls back to `read_group` with res…
- **call_model_method** — Generic XML-RPC `execute_kw` escape hatch — invokes public **business** methods, for workflow actions not covered by CRUD (post invoice, confirm sale order, validate picking, etc.). Available **only** when both `ODOO_YOLO=true` (full YOLO) and `ODOO_MCP_ENABLE_METHOD_CALLS=true` are set; otherwise…

## Claude Desktop Quick Installation
Install path detected from listing signals. Uses `uvx` (confidence: high):

```json
"mcpServers": {
  "mcp-server-odoo": {
    "command": "uvx",
    "args": ["mcp-server-odoo"],
    "env": {
      "ODOO_URL": "",
      "ODOO_API_KEY": "",
      "ODOO_USER": "",
      "ODOO_PASSWORD": ""
    }
  }
}
```

**Requires environment variables:** `ODOO_URL`, `ODOO_API_KEY`, `ODOO_USER`, `ODOO_PASSWORD` — the values above are empty placeholders; fill in real credentials before running (see the repository for what each one is for).

## Documentation

## What ivnvxd/mcp-server-odoo does

ivnvxd/mcp-server-odoo gives an MCP client access to an Odoo instance through tools for reading and changing business records. It can search any model enabled for MCP access, retrieve records by ID, inspect model fields, and list available models. CRUD operations cover creating, updating, and deleting records, subject to Odoo permissions and the server's security configuration.

The server also supports operational tasks beyond basic record access. Agents can post notes or comments to a record's chatter, request server-side totals and groupings, and retrieve binary or attachment resources through resource URIs. A session context exposes the connected user, timezone, active company, other permitted companies, and guidance for handling UTC datetimes.

## How it works

The MCP process runs on the computer hosting the client, rather than on the Odoo server. It connects to Odoo using the configured URL and either an API key or username and password. MCP clients communicate with the process over the standard local process configuration, or the server can be started with streamable HTTP.

For production use, the documented standard mode targets Odoo 16.0 or later with the Odoo MCP module installed. YOLO mode can connect to any Odoo version with XML-RPC enabled, but it bypasses MCP security and is intended for development, testing, and demonstrations. The optional `call_model_method` tool is more restricted: it is available only when both YOLO mode is fully enabled and method calls are explicitly enabled.

## Setup and configuration

Install Python 3.10 or later and UV, then configure the server with `uvx mcp-server-odoo`. Pip, pipx, source installation, and Docker are also documented. The minimum connection setting is `ODOO_URL`. Authentication requires either `ODOO_API_KEY` or both `ODOO_USER` and `ODOO_PASSWORD`. `ODOO_DB` is optional because the database can be detected when it is not supplied.

`ODOO_LOCALE` selects the language used for Odoo responses. `ODOO_YOLO` controls the development mode, with supported values described as off, read, or true. `ODOO_MCP_ENABLE_METHOD_CALLS` enables the workflow-method escape hatch only alongside `ODOO_YOLO=true`.

The README includes configuration examples for Claude Desktop, Claude Code, Cursor, VS Code with GitHub Copilot, Windsurf, and Zed. Docker can run the server over stdio or streamable HTTP. HTTP transport has no built-in authentication, so its port should be limited to trusted networks or protected by an authenticating reverse proxy.

## Tools and capabilities

The ivnvxd/mcp-server-odoo tool set includes:

- `search_records` for filtered searches across Odoo models.
- `get_record` for reading a record by ID.
- `get_fields` for discovering field types, labels, required and readonly status, relations, and selection values.
- `get_current_context`, `list_models`, and `list_resource_templates` for session and server discovery.
- `create_record`, `update_record`, and `delete_record` for record changes.
- `post_message` for adding internal notes or follower-facing comments to chatter.
- `aggregate_records` for counts, sums, and groupings performed server-side instead of returning raw rows.
- `call_model_method` for public business methods such as confirming a sale order or posting an invoice, when its opt-in security requirements are met.

The server also provides pagination for larger result sets, model-aware field selection, hierarchical text output, multilingual responses, and resource access for images, documents, and `ir.attachment` files.

## Limitations and notes

Permissions remain important: normal operations use Odoo access controls, while YOLO mode intentionally reduces MCP-side protections. The method-call tool can invoke public business methods and should be enabled only when that behavior is acceptable. HTTP deployments require external access control because the transport itself does not authenticate callers.

Before changing records or invoking workflow methods, agents should inspect the model schema and session context so they use the correct fields, company, user, and datetime interpretation.

_Full upstream README: https://allmcps.com/mcp/ivnvxd-mcp-server-odoo/readme_

