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, including field names, types, help text, and 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. It is 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, and 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, which lets the AI 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: the payload, target records, and 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.