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 — field names, types, help text, 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 — 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, 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 — the AI can 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 — 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.