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_models

Lists every Odoo model the calling user has access to. Useful when the AI does not yet know what’s installed. Risk: low.

describe_model

Returns 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_records

Search 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_record

Read a single record by ID with the chosen fields. Risk: low.

search_read

Search and read in one call. It is the most efficient read tool. The AI is encouraged to always pass an explicit fields list to avoid loading sensitive relational fields by accident. Risk: low.

read_group

Aggregate with GROUP BY. The backbone of analytics tools: sums, averages, and counts grouped by any field. Risk: low.

traverse_relationships

Follow relationship chains (Many2one, One2many, Many2many) across multiple models in a single call. Risk: low.

Write tools

create_record

Create a new record. Supports a dry_run=true flag, which lets the AI preview the resulting payload without committing it. Risk: medium.

update_record

Update records by ID. The AI is taught to call search_records first to translate a customer name or document number into the right IDs. Risk: medium.

delete_record

Delete records by ID. dry_run=true previews. Usually added to the connection’s Tools that need approval list because of its high risk. Risk: high.

batch_create, batch_update, batch_delete

Same 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_method

Call a public method on an Odoo model. This is the universal escape hatch. Anything you could do from Odoo execute_kw can be done through this tool. The AI is trained to call search_records first to resolve names into IDs. Risk: high.

build_domain

Build 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_domain

Validate 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.