Data Tools (Read & Write)¶
These are the bread-and-butter tools the AI uses to interact with Odoo records — list models, read records, search with filters, create, update, delete, and call methods. They are all seeded under the Read, Write, Execute, and Advanced categories.
Read tools¶
list_modelsLists every Odoo model the calling user has access to. Useful when the AI does not yet know what’s installed. Risk: low.
describe_modelReturns the full field schema for an Odoo model — field names, types, help text, constraints. The AI calls this before constructing search domains or write payloads. Risk: low.
search_recordsSearch records by Odoo domain. Returns matching IDs and field values. Built-in lookup hints help the AI translate prompts like “the Wood Corner draft invoice” into the correct domain expression. Risk: low.
get_recordRead a single record by ID with the chosen fields. Risk: low.
search_readSearch and read in one call — the most efficient read tool. The AI is encouraged to always pass an explicit
fieldslist to avoid loading sensitive relational fields by accident. Risk: low.read_groupAggregate with
GROUP BY. The backbone of analytics tools — sums, averages, counts grouped by any field. Risk: low.traverse_relationshipsFollow relationship chains (Many2one, One2many, Many2many) across multiple models in a single call. Risk: low.
Write tools¶
create_recordCreate a new record. Supports a
dry_run=trueflag — the AI can preview the resulting payload without committing it. Risk: medium.update_recordUpdate records by ID. The AI is taught to call
search_recordsfirst to translate a customer name or document number into the right IDs. Risk: medium.delete_recordDelete records by ID.
dry_run=truepreviews. Usually added to the connection’s Tools that need approval list because of its high risk. Risk: high.batch_create,batch_update,batch_deleteSame as the singular versions but for many records at once. Useful for bulk imports / cleanups. All support
dry_run. Risk: medium / medium / high.
Execute / advanced¶
execute_methodCall a public method on an Odoo model. This is the universal escape hatch — anything you could do from Odoo
execute_kwcan be done through this tool. The AI is trained to callsearch_recordsfirst to resolve names into IDs. Risk: high.build_domainBuild an Odoo domain expression from a natural-language description. Lets the AI translate “active customers in the US” into the correct list-of-lists domain. Risk: low.
validate_domainValidate a domain and return the number of matches. Risk: low.
Dry-run mode¶
create_record, update_record, delete_record and
their batch_* siblings all accept a boolean dry_run
argument. When set to true:
The AI sees exactly what would happen — payload, target records, computed fields.
Nothing is committed to the database.
The MCP Server still rate-limits and audit-logs the call.
The AI is trained to use dry-run before any write operation it isn’t sure about — particularly when the user phrased the request ambiguously.
Read scope and ACLs¶
Every read tool respects:
The Odoo user’s standard record rules and model ACLs.
The connection’s Allowed Models (if set).
The knowledge layer’s ir.attachment ACLs (for
knowledge_*tools — see Knowledge Search Modes).
Users can never see, create, or modify records they would not have access to from the standard Odoo UI.