AI business analyst for Odoo ERP (18+) — one-call reports with verdicts, over MCP
56 tools with consistent naming (verb_noun pattern: list_, search_, get_, aggregate_) and basic descriptions (50-150 chars). All tools have input schemas with type definitions and parameter descriptions. However, descriptions are generic and lack LLM-optimization guidance (e.g., 'when to use', 'what it returns', dependencies). Output schemas are undocumented, LLMs cannot infer response structure. Error handling is absent from tool definitions. No tool annotations (readOnlyHint, destructiveHint). Parameter constraints are minimal (no enums, ranges, or format specs). Tools like search_read and aggregate_records accept complex domain/measure arrays but lack examples or validation guidance. The 56-tool breadth is impressive but dilutes per-tool quality, many list_* tools are near-identical (list_invoices, list_payments, list_pickings) with no differentiation.
HR absence and time-off overview with pending approvals
Aggregate records from an Odoo model with grouping and measures
Comprehensive business health report with highlights, risks, and verdict across all modules
Check product stock levels and availability
Search for partners (customers/vendors) by name or email
Search for products by name or category
Output schemas undocumented. LLMs cannot infer response structure for any of the 56 tools. No documentation of returned fields, types, or pagination behavior.
Descriptions lack LLM-optimization guidance. Generic 50-150 char descriptions omit 'when to use', 'what it returns', and dependencies. E.g., 'List available Odoo models' does not explain when to call it vs get_model_fields.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint). All tools are marked READ_ONLY in metadata but FastMCP tool definitions lack formal annotations for agent planning.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 62 | 2026-07-28+ | v2 |
Get field definitions for an Odoo model
Inventory analysis identifying shortages, dead stock, and supply risks
List activities and follow-ups
List job applicants and recruitment pipeline
List approval requests and workflows
List employee attendance records
List bills of materials
List calendar events and meetings
List HR departments
List documents and files
List email marketing campaigns
List employees with department and status information
List equipment and assets
List event registrations and attendees
List events and conferences
List employee expenses and reimbursements
List helpdesk tickets and support requests
List invoices with status and amounts
List job positions and openings
List knowledge base articles
List maintenance requests and work orders
List manufacturing orders with status and progress
List available Odoo models, optionally filtered by name
List CRM opportunities with stage and revenue information
List payments and payment records
List stock pickings and transfers
List point-of-sale orders
List point-of-sale sessions
List projects with status and progress
List purchase orders with vendor and status information
List repair orders and maintenance work
List sales orders with status and amounts
List document signature requests
List subscriptions and recurring contracts
List surveys and questionnaires
List project tasks with assignments and status
List time-off and leave requests
List timesheets and logged hours
List vehicles and fleet assets
Sales pipeline analysis with stage breakdown and risk assessment
Procurement and purchase order monitoring with delivery and quality risks
Manufacturing and production status with order and resource utilization
Project status and progress tracking
Read specific records by ID from an Odoo model
Accounts receivable analysis with aging and payment status
Current sales performance snapshot with revenue trends and quotation status
Count records matching a domain in an Odoo model
Search and read records from an Odoo model
Daily standup digest for project team coordination
Project team workload and capacity analysis
Parameter constraints missing. Complex parameters like 'domain' (search_read, aggregate_records) accept arrays but lack format examples, validation rules, or enum constraints. LLMs cannot infer valid Odoo domain syntax.
Duplicate tool definitions. 30+ list_* tools (list_invoices, list_payments, list_pickings, etc.) are near-identical with only model name varying. No differentiation in descriptions or parameters. Wastes agent reasoning cycles.