odoo-mcp-server
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| ODOO_DB | Yes | Odoo database name | |
| ODOO_URL | Yes | Base URL of the Odoo instance, e.g. https://mycompany.odoo.com | |
| ODOO_API_KEY | Yes | Odoo API key for the configured user (a password also works, but is not recommended) | |
| ODOO_TIMEOUT | No | XML-RPC timeout in seconds | 30 |
| ODOO_USERNAME | Yes | Login of the API-key user | |
| ODOO_MCP_MODELS | No | Comma-separated allowlist of models; globs are allowed, e.g. sale.*. Defaults to all models. | |
| ODOO_MCP_MAX_LIMIT | No | Hard cap on the limit parameter | 200 |
| ODOO_MCP_ALLOW_WRITE | No | Set to 1 to register create_record and update_record | 0 |
| ODOO_MCP_DENY_MODELS | No | Extra model denylist on top of the built-in denylist, e.g. hr.*,account.* | |
| ODOO_MCP_ALLOW_DELETE | No | Set to 1 to register delete_record; requires ODOO_MCP_ALLOW_WRITE=1 | 0 |
| ODOO_MCP_DEFAULT_LIMIT | No | Default page size when the model does not pass limit | 50 |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| list_modelsA | List the Odoo models this server can access, optionally filtered by name. Models blocked by the safety policy are never listed. |
| describe_modelA | Describe a model's fields (type, label, required, readonly, relation, selection values) and what the current user is allowed to do with it. Required fields are listed first. |
| search_recordsA | Search records matching a domain and return selected fields. Returns the total number of matches, the current page of records and,
when more records exist, |
| read_recordB | Read a single record by id (all non-binary fields unless |
| count_recordsA | Count the records matching a domain (cheap; no data is transferred). |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
| sales_summary | Summarise confirmed sales for a period: totals, top customers, top products. |
| explore_model | Guided tour of an Odoo model: purpose, key fields and sample records. |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
| server-info | Odoo version, database, user and the active safety settings. |
TDQS
Scored across 5 tools
Each tool has a clearly distinct role: model discovery, schema description, multi-record search, single-record read, and cheap counting. Although count_records overlaps slightly with search_records' total-match behavior, the explicit cost distinction makes the boundary clear.
All tool names follow the same snake_case verb_noun convention: list_models, describe_model, search_records, read_record, count_records. Pluralization is also used predictably for collection vs. single-record operations.
Five tools is a compact, well-scoped set for read-only Odoo data access. Each tool earns its place: discovery, schema introspection, search, single-record read, and count are all non-redundant primitives.
The read-only lifecycle is well covered: model listing, field descriptions, paginated search, single-record read, and counting. Write operations are absent, but the safety-policy wording suggests this is intentional; minor gaps include no binary/attachment read or aggregate/group-by support.