Multi-tenant Odoo XML-RPC MCP with scope-based access control
Server provides 9 tools with complete JSON schemas and basic descriptions. All tools have input schemas with typed parameters and defaults. However, descriptions are generic (avg ~60 chars, well below the 194-char baseline for A+ tools) and lack context about WHEN to use each tool or what distinguishes them. Parameter descriptions are minimal. No output schemas documented. Error handling returns generic error dicts without recovery guidance. Missing tool annotations (readOnlyHint, destructiveHint) despite clear risk levels. No idempotency guarantees stated. Composition is sound (single responsibility per tool), but descriptions need expansion to meet LLM-optimization standards.
Create a new record in a model.
Get default values for model fields.
Get field definitions for a model.
Read specific records from a model.
Search for records in a model.
Count records matching domain in a model.
Search and read records in one call.
Descriptions are too brief (avg 60 chars vs 194-char baseline). Missing WHEN to use each tool and how they differ. E.g., search vs search_read vs search_count all sound similar; descriptions don't explain trade-offs.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint) despite clear risk levels (READ_ONLY, WRITE, DESTRUCTIVE). LLMs cannot infer safety properties without explicit hints.
Output schemas not documented. LLMs don't know what fields to expect from responses (e.g., does search return 'ids' or 'records'? Is 'count' always present?). Breaks downstream tool chaining.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 58 | <=2025-11-25 | v2 |
Delete records from a model.
Update existing records in a model.
Error handling returns generic {'error': str(e)} dicts without recovery guidance. LLMs cannot determine if error is retryable, user-fixable, or fatal. No actionable next steps provided.
Destructive operations (unlink, write, create) lack confirmation or dry-run support. Agents can accidentally delete records without safeguards.