Model Context Protocol (MCP) server for Odoo ERP, in Rust. Read-first, single binary, stdio transport.
Solid foundation with clear, verb-prefixed tool names and complete JSON schemas for all 7 tools. Descriptions are present and actionable (avg ~90 chars). However, parameter descriptions are sparse or missing for several tools (odoo_read, odoo_search_count lack field-level guidance), and output schemas are not documented. Write tools (odoo_create, odoo_write) lack detail on expected return values and error cases. No tool annotations (readOnlyHint/destructiveHint) despite clear risk stratification in the server design. Error handling is minimal, no recovery guidance or actionable error messages visible in the code.
Create a record. Only available when the server is started with write access enabled.
List a model's fields with their types and labels — use this to discover the schema before querying.
Fuzzy-find records by display name; returns [id, name] pairs. Good for resolving a customer or product the user named.
Read given record ids of a model.
Count records matching a domain.
Search records and read fields in one call. Returns matching records as JSON.
Output schemas not documented. LLMs cannot predict what fields odoo_search_read, odoo_read, or odoo_fields_get return, forcing them to guess downstream field names and risk failed chaining.
Write tools (odoo_create, odoo_write) lack descriptions of return values and error cases. Agents cannot know whether create returns the new record ID, the full record, or just a success flag.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint) despite clear risk stratification. Server code distinguishes read vs write tools, but MCP schema does not expose this to clients.
Parameter descriptions sparse or missing. odoo_read 'ids' param has no description; odoo_search_count 'domain' param lacks guidance on format. Agents must infer Odoo domain syntax from context.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 61 | 2026-07-28+ | v2 |
Update existing records. Only available when the server is started with write access enabled.
No error recovery guidance. Code shows OdooError type but no visible error messages or recovery hints (e.g., 'Model not found. Call odoo_fields_get to list available models.').