Skip to main content
Glama
odoo19-mcp-server

odoo19-mcp-server

by twtrubiks

Search Records

search_records
Read-onlyIdempotent

Find records in Odoo 19 models using domain filters, field selection, sorting, and pagination to retrieve exactly the data you need.

Instructions

Search for records in an Odoo model.

Input Schema

NameRequiredDescriptionDefault
limitNoMaximum number of records
modelYesModel name (e.g., 'res.partner')
orderNoSort order (e.g., 'name asc', 'create_date desc')
domainNoOdoo search domain (list of conditions). Examples: - Simple: [["name", "=", "John"]] - Multiple (AND): [["is_company", "=", True], ["active", "=", True]] - OR condition: ["|", ["name", "ilike", "test"], ["email", "ilike", "test"]] - any (Odoo 19+): [["order_line", "any", [["product_uom_qty", ">", 5]]]] - Operators: =, !=, >, >=, <, <=, like, ilike, in, not in, child_of, any
fieldsNoFields to return (None = auto-exclude dangerous fields like binary/image/html)
offsetNoNumber of records to skip

Output Schema

NameRequiredDescriptionDefault
resultYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed6 schema fields changed
    • addedInput schema / properties / domain / description
      Added value: +"Odoo search domain (list of conditions). Examples:\n- Simple: [[\"name\", \"=\", \"John\"]]\n- Multiple (AND): [[\"is_company\", \"=\", True], [\"active\", \"=\", True]]\n- OR condition: [\"|\", [\"name\", \"ilike\", \"test\"], [\"email\", \"ilike\", \"test\"]]\n- any (Odoo 19+): [[\"order_line\", \"any\", [[\"product_uom_qty\", \">\", 5]]]]\n- Operators: =, !=, >, >=, <, <=, like, ilike, in, not in, child_of, any"
    • addedInput schema / properties / fields / description
      Added value: +"Fields to return (None = auto-exclude dangerous fields like binary/image/html)"
    • addedInput schema / properties / limit / description
      Added value: +"Maximum number of records"
    • addedInput schema / properties / model / description
      Added value: +"Model name (e.g., 'res.partner')"
    • addedInput schema / properties / offset / description
      Added value: +"Number of records to skip"
    • addedInput schema / properties / order / description
      Added value: +"Sort order (e.g., 'name asc', 'create_date desc')"
  2. First observedv1.0.0

TDQS

C2.7/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true and idempotentHint=true, so safety is covered, but the description adds nothing on top: no note on pagination semantics (limit/offset interaction), no mention that unset fields auto-exclude binary/html, no return-shape context. For a search tool with real behavioral quirks, this is a bare minimum.

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?

A single short sentence with no padding and nothing buried; it is front-loaded. It is efficient rather than wasteful, though the brevity reflects under-specification that the other dimensions already penalize.

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

Completeness3/5

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

An output schema exists so return values need not be explained, and all six parameters are documented in the schema. The remaining gap is contextual: no hint of Odoo domain usage or how this relates to the eight sibling record tools, which a description for a search entry point should at least gesture at.

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

Parameters3/5

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

Schema description coverage is 100%, and the domain/order/fields parameters are documented in the schema with examples, so the schema does the heavy lifting. The description adds no parameter meaning beyond that, which lands at the baseline 3.

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

Purpose3/5

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

The description states a verb (Search) and a resource (records in an Odoo model), so the basic purpose is legible. However, it is so terse that it fails to separate this tool from close siblings like read_records, count_records, or list_models, leaving the agent to guess at scope.

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

Usage Guidelines2/5

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

There is no when-to-use guidance at all: nothing says to pick this over read_records or count_records, no mention of the domain-based filtering that is the tool's distinguishing feature, and no preconditions. The agent gets no routing help.

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