1.2.1
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 drift —
canonical_jsonnow collapses integral floats (1.0) to ints before hashing, recursively, booleans untouched. A payload crossing a JS/TS transport layer (where1and1.0are the same value) no longer yields a different SHA-256 approval token betweenvalidate_writeandexecute_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.jsonor checkout-levelodoo_mcp_policy.jsonno 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 inAnnotated[..., Field(description=...)], so MCP clients and inspectors render realinputSchemaproperty descriptions. Coverage pinned byDESCRIBED_INPUT_TOOLSin the schema regression test; remaining groups tracked in #35. Thanks @SyedIshmumAhnaf (#41).
Changed
- Field ranking / smart field selection helpers extracted from
agent_tools.pyinto a dedicatedfield_ranking.pycore module (compatibility re-exports kept, import-linter contract updated, no behavior change). Thanks @vaishnavidesai09 (#42).