Skip to content

0.9.0 — async tasks, local knowledge search, accounting pack, rate limiting

Choose a tag to compare

@tuanle96 tuanle96 released this 11 Jun 07:18
· 11 commits to main since this release

Highlights

Tool surface: 27 → 36. This release ships the three capabilities no other Odoo MCP bridge has, plus an internal re-architecture.

Background tasks

submit_async_task runs allowlisted long read operations (addon scans, knowledge indexing, AR/AP aging) on a bounded worker pool — the agent keeps reasoning and polls with get_async_task. Results are TTL'd and size-capped; writes are never accepted on the async path.

Local-first knowledge search

index_knowledge fetches a bounded record slice once and builds an in-process BM25 index; search_knowledge answers free-text queries with relevance ranking and zero further RPC calls. Accent-insensitive ("hoa don" matches "hóa đơn"), no embeddings service, no new dependencies, no data leaving the machine.

Accounting pack (read-only)

receivable_payable_aging buckets open posted items by days overdue (not due / 1-30 / 31-60 / 61-90 / 90+) with per-partner totals; accounting_health_summary reports open AR/AP counts and the draft invoice backlog. Odoo 16+.

Rate limiting (opt-in)

ODOO_MCP_RATE_LIMIT_MODE=warn|block tracks per-instance:tool call volume in a sliding window; block refuses over-budget calls on the hot tools. Default off.

Architecture

server.py (2,553 lines) is now a thin re-export surface over domain modules (server_core, tools_read/write/diagnostics/knowledge/accounting/async, prompts). Full backward compatibility — every public symbol still imports from odoo_mcp.server. .importlinter enforces the layering (2 contracts kept).

Also

  • Benchmark harness: scripts/benchmark_tools.py + docs/benchmarks.md — measured p50 12–25 ms per read tool over MCP stdio against a local Odoo 19 stack.
  • Claude Desktop Custom Connector guide over Streamable HTTP + OAuth 2.1.
  • 804 tests (up from 497), real Docker smoke on Odoo 19 before this release.

Full changelog: CHANGELOG.md