Skip to main content
Glama
solutionsunity

OdooSurface MCP

update

Modify field values on an existing Odoo record, including form and model fields, with command tuples for relational fields and context control for language or tracking.

Instructions

💡 Before multi-step work, check find_skill / list_workflows for canonical recipes. Update fields on an existing record. values: {field: value, ...}. Writes both form-view fields and model fields not exposed in the form view. One2many / many2many fields accept Odoo Command tuples directly: [[0,0,{vals}]] create+link, [[1,id,{vals}]] update line, [[2,id]] delete line, [[6,0,[ids]]] replace set. Pass context to control write behaviour — e.g. {lang: "fr_FR"} writes the value for that language on translate=True fields (without it, the user's language, as in the form), {mail_notrack: true} suppresses chatter entries. Returns {success, updated_fields, non_form_fields} or {error}.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
modelYes
valuesYes
contextNo
record_idYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observedv0.5.1

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does so well: it discloses that both form-view and hidden model fields are written, that context controls write behavior (lang for translate=True fields, mail_notrack suppressing chatter), and the return shape. It omits permission/auth requirements and reversibility, keeping it short of a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Dense but each clause earns its place, moving from purpose to values syntax to context to return value. The leading 💡 recipe hint is slightly off-topic as an opener and the sentence is long, but nothing is filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 4-param mutation tool with nested objects, no annotations, and no output schema, the description covers values semantics, context behavior, and return shape adequately. The main gap is the undocumented `model` and `record_id` params and absent auth/permission context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description must compensate, and it does for the hardest params: the `values` format and Odoo Command tuple syntax for one2many/many2many, plus detailed `context` semantics. `model` and `record_id` are left unexplained, which prevents a 5.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ("Update fields on an existing record") that cleanly distinguishes it from the sibling `create` and read tools like `get_record`/`list_records`. The scope (existing record, form and non-form fields) is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives a conditional trigger ("Before multi-step work, check find_skill / list_workflows for canonical recipes") and implicitly scopes to existing records. However it never explicitly contrasts with `create` or names when NOT to use it, so it stops short of full when/when-not guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.