MCP server that enables AI agents to interact with Odoo ERP systems. Provides tools for searching, reading, creating, updating, and deleting Odoo records via the XML-RPC API, with an admin control panel UI.
The Odoo MCP server has well-structured tool definitions with complete input schemas and descriptions for all 10 tools. However, there are significant gaps in parameter descriptions, lack of output schema documentation, and missing error handling guidance that would be expected in production-grade tools. Tool names are clear and action-oriented (search_, get_, create_, update_, delete_, list_), following the verb_noun convention. Descriptions are present but vary in quality, most fall in the 30-100 character range, which is below the 194-char baseline for A+ tools. Input schemas are properly typed with JSON Schema, but lack detailed parameter constraints (enums, min/max bounds) and descriptions for many parameters.
Create a new Odoo record
Delete Odoo records by ID
Call any method on an Odoo model
Get field definitions for an Odoo model
Fetch specific Odoo records by ID
List all available Odoo models
Get comprehensive metadata for an Odoo model
Missing output schema documentation for all 10 tools. The rubric baseline requires 100% of A+ tools to have documented return types. Users and agents cannot predict the structure of responses, forcing them to discover outputs through trial-and-error or external documentation.
Parameter descriptions are missing or minimal for many tools. 'get_record' has properties 'model', 'ids', and 'fields' with no descriptions beyond the type. The rubric requires 100% of A+ tools to have param descriptions. LLMs cannot infer parameter meaning from names alone.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | D | 58 | 2026-07-28+ | v2 |
| 2026-03-09 | D | 51 | - | v1 |
Count Odoo records matching a domain
Search for Odoo records using a domain filter
Update existing Odoo records
No input validation constraints (enums, min/max, regex patterns) for critical parameters. The 'domain' parameter in search_records accepts arbitrary arrays with no guidance on structure. The 'model' parameter across all tools is unconstrained, no validation that it exists in the Odoo system before execution.
No error handling guidance in descriptions. Destructive operations (delete_record, update_record) provide no recovery guidance, confirmation step, or dry-run option. The tool descriptions do not state 'This is a destructive operation' or advise how to handle failures.
Dangerous tool (execute_method) has minimal governance. Accepts arbitrary method names and arguments on any model, no permission gates, no scope declarations, no rate limits. An agent could invoke destructive or privileged methods without checks. This pattern violates pattern:permission-gate and pattern:scope-declaration.
Tool descriptions are below the production baseline of 194 characters. Most tools have descriptions under 100 chars (e.g., 'Fetch specific Odoo records by ID' = 33 chars). Short descriptions lack context for LLM selection and do not explain prerequisites or expected use cases.
Pagination not explicitly documented for search_records. While limit/offset parameters exist, there is no statement of default limit, max limit, or total count in response. Large result sets could exhaust context or cause API timeouts without proper bounds.
create_record and update_record lack guidance on required vs optional fields. The 'values' parameter is type 'object' with no description of which fields are mandatory, which are optional, or what valid field names are. LLMs must guess or call get_model_fields first.