odoo19-mcp-server
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| ODOO_URL | No | Odoo server URL | http://localhost:8069 |
| ODOO_API_KEY | Yes | API Key for Odoo authentication | |
| ODOO_DATABASE | Yes | The name of the Odoo database to connect to | |
| READONLY_MODE | No | Enable read-only mode to prevent write operations (true/false) | false |
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": true
} |
| logging | {} |
| prompts | {
"listChanged": true
} |
| resources | {
"subscribe": false,
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| list_modelsC | List all available Odoo models. |
| get_fieldsC | Get field information for an Odoo model using ORM fields_get(). |
| execute_methodA | Execute any method on an Odoo model (general-purpose escape hatch). WARNING: Business methods (e.g. action_confirm, action_post, button_validate, toggle_active) can modify or irreversibly change data in Odoo and are NOT guarded by this server. Before calling any method that changes state, make sure the user explicitly asked for it. |
| search_recordsC | Search for records in an Odoo model. |
| count_recordsC | Count records in an Odoo model matching the domain. |
| read_recordsB | Read specific records by their IDs. |
| create_recordC | Create new record(s) in an Odoo model. |
| update_recordC | Update existing records in an Odoo model. |
| delete_recordA | Delete records from an Odoo model. IRREVERSIBLE operation. IMPORTANT: You MUST first call with confirm=False to show the user what will be deleted. Only set confirm=True AFTER the user explicitly approves the deletion. NEVER set confirm=True on the first call. |
| prepare_uploadA | Prepare an out-of-band upload of a CLIENT-side file to this server. Use this when the file to attach lives on the client machine and this MCP server is remote: pushing the bytes over plain HTTP keeps them out of the LLM token stream (much faster and cheaper than base64_data for large files). Workflow:
|
| add_attachmentA | Upload a file attachment to Odoo via ir.attachment. Supports two input modes:
|
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
| list_models_resource | List all available Odoo models. |
| get_current_user | Get current logged-in user information. |
| get_current_company | Get current user's company information. |
TDQS
Scored across 11 tools
The CRUD set (search/read/create/update/delete/count) is clearly differentiated by action, and metadata tools (list_models, get_fields) are distinct. The main blur is execute_method, a general escape hatch that can perform any of the CRUD operations, plus the coupled prepare_upload/add_attachment pair which requires understanding a shared workflow.
Nearly all tools follow a verb_noun snake_case pattern (list_models, search_records, create_record, delete_record). Minor inconsistency between plural nouns (search_records, count_records, read_records) and singular (create_record, update_record, delete_record), but conventions are otherwise readable and predictable.
11 tools is well-scoped for an Odoo ORM gateway: a clean CRUD+search core, two metadata/introspection helpers, an escape hatch, and two attachment tools. No redundant or filler tools.
Covers full CRUD, search, count, model/field introspection, and file attachments, which is solid lifecycle coverage for an Odoo data server. Minor gaps like a combined search_read or bulk update exist, and execute_method serves as a catch-all fallback.