Skip to content

1.2.1

Choose a tag to compare

@tuanle96 tuanle96 released this 14 Jul 14:44

Community patch: the write-approval gate no longer drops valid tokens on int/float transport drift, the 10 highest-traffic tools describe their parameters to MCP clients, and the test suite is hermetic on developer machines that carry a real Odoo config. All three code changes came from community PRs. 41 tools · 11 prompts · 909 tests.

Fixed

  • Write-approval tokens survive int/float transport driftcanonical_json now collapses integral floats (1.0) to ints before hashing, recursively, booleans untouched. A payload crossing a JS/TS transport layer (where 1 and 1.0 are the same value) no longer yields a different SHA-256 approval token between validate_write and execute_approved_write, ending intermittent "approval token does not match the canonical payload" failures on valid, unchanged payloads. Thanks @Xavier-SDK (#48); the stateful half of the story is under discussion in #49.
  • Hermetic test suite on developer machines — an autouse fixture pins the suite to the CI baseline (no Odoo config), so a real ~/.config/odoo/config.json or checkout-level odoo_mcp_policy.json no longer flips instance-resolution semantics and fails instance/knowledge tests locally while CI stays green.

Added

  • Per-parameter input descriptions (first 10 tools)search_records, read_record, execute_method, the gated-write trio, and the accounting/diagnostics/cross-instance entry points now wrap every non-context parameter in Annotated[..., Field(description=...)], so MCP clients and inspectors render real inputSchema property descriptions. Coverage pinned by DESCRIBED_INPUT_TOOLS in the schema regression test; remaining groups tracked in #35. Thanks @SyedIshmumAhnaf (#41).

Changed

  • Field ranking / smart field selection helpers extracted from agent_tools.py into a dedicated field_ranking.py core module (compatibility re-exports kept, import-linter contract updated, no behavior change). Thanks @vaishnavidesai09 (#42).