v1.0.0 — the milestone
Four roadmap phases close the highest-value gaps no open-source Odoo MCP server covered. 27 → 39 tools, 5 → 10 prompts, 854 tests. Verified before release: full pytest/ruff/mypy/import-linter green + real Docker smoke on Odoo 19.
Field-level ACL (open-source first)
Opt-in, per-instance, per-model field allow/deny enforced at a single choke point on every path that returns record data — search_records, read_record, aggregate_records (denied groupby/measure rejected), get_model_fields (marked restricted, not hidden), index_knowledge (excluded before BM25 indexing), and the odoo:// resources. Responses note redacted_fields. Malformed policy fails closed at startup; no policy = byte-identical prior behavior. Until now only commercial bridges offered this. → docs/field-acl.md
Cross-instance fan-out (open-source first)
search_across_instances, aggregate_across_instances, accounting_health_across_instances — ask one question across many client DBs and get merged, _instance-attributed results with a partial-failure map. Selection by list, "all", or {"tags":[...]}; per-instance "cross_instance": false opt-out. Each instance queried under its own field ACL (applied before merge), bounded concurrency, and its own rate-limit budget. No warehouse, no sync. → docs/partner-playbook.md
5 operational workflow prompts (10 total)
invoice_approval_chain, po_to_receipt, customer_onboarding, expense_claim_review, accounting_close_checklist — each names required modules, exact tools per step, and human checkpoints; every write-bearing step routes through the gated workflow. No competitor ships these.
Head-to-head benchmarks
docs/benchmarks.md publishes reproducible, measured latency vs another Odoo MCP server on the same Odoo 19 stack: mcp-odoo p50 9.9 ms search vs 22.4 ms; 9.0 ms read vs 10.9 ms; 16.8 ms list-models vs 19.6 ms (competitor faster on aggregate — stated honestly). The competitor's standard mode 404s without a companion Odoo addon.
Full changelog: CHANGELOG.md