Skip to content

1.2.0

Choose a tag to compare

@tuanle96 tuanle96 released this 14 Jul 13:27

Field-ops release: context-safe attachment uploads, an Agent Skills pack, typo-tolerant model-history lookups, and kinder failure modes around Odoo's XML-RPC None-marshalling quirks. 41 tools · 11 prompts · 901 tests.

Highlights

  • Local-file attachment uploadsvalidate_write accepts <field>_from_path (e.g. datas_from_path) for binary fields: the server reads the file itself and the approval only ever carries a sha256:<hex>:<size> fingerprint, so a large PDF never has to fit through the agent's context. Fail-closed: requires ODOO_MCP_ATTACHMENT_UPLOAD_ROOTS, enforces ODOO_MCP_MAX_ATTACHMENT_UPLOAD_BYTES, and rides the normal preview_writevalidate_writeexecute_approved_write gate. (#46)
  • Agent Skills packskills/ ships 4 business-workflow playbooks in the open Agent Skills format (odoo-data-quality-gate, odoo-migration-copilot, odoo-month-end-close, odoo-agency-fleet-review): judgment layers (evidence rules, pacing, human checkpoints) on top of the tool surface. Install by copying into ~/.claude/skills/.
  • Model-history lookupslookup_model_history now suggests close model names on a miss, and the cross-version rename map covers additional Odoo model renames. (#43, #36)

Fixed

  • No more phantom failures on void methods — when Odoo faults server-side with cannot marshal None unless allow_none is enabled, the method (button_draft, action_post, account.move.line.reconcile, ...) has already executed and committed; only serializing the None return value failed. execute_method now reports success: true, result: null with an explicit warning instead of an error that invites retrying a side-effect call.
  • The blocked-side-effect error on execute_method now points at the policy file (ODOO_MCP_POLICY_FILE, default ./odoo_mcp_policy.json, re-read on every request — no server restart) as the primary allowlist mechanism, before the env-var fallbacks.
  • get_model_fields requests a bounded, marshal-safe attributes list — unblocks models whose full fields_get faults server-side on Odoo 19 (e.g. product.pricelist). (#44)
  • Write-policy tests now run from an empty CWD, so a developer checkout carrying a real odoo_mcp_policy.json at the documented default location no longer breaks the suite.