Skip to main content
Glama

MCP for Claude & ChatGPT

Create records

odoo_create

Create one or more records in an Odoo model. Pass values as a dict for a single record, or a list of dicts for batch creation. The model must be on the workspace's write whitelist with can_create=true. Sensitive fields (passwords, tokens, API keys) cannot be set. Pass context (e.g. {'company_id': N}) when the record must be scoped to a specific company. Lines created inside the record through x2many commands (e.g. order_line: [[0, 0, {...}]] on a purchase order) ride this model's permission: the line model does not need its own whitelist entry, so create the record with all its lines in one call. Returns the IDs of the created records. Odoo accepts fields it will not keep (computed, screen-only) and still creates the record: when the result carries ignored or unverified, read it before telling the user what was saved — their absence means everything landed. Html fields take markdown, converted the Odoo way: - [ ]/- [x] checklists, pipe tables, ##/### sections, --- separators. No inline style, invented classes or invented image URLs.

Tool call template

Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {
      "model": "<model>",
      "values": "<values>"
    },
    "name": "odoo_create"
  }
}

Input Schema

NameRequiredDescriptionDefault
modelYesOdoo model technical name (e.g., 'res.partner').
valuesYesField-value dict, or list of dicts for batch creation.
contextNoOptional Odoo context (e.g. {'company_id': N, 'allowed_company_ids': [N]}).

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observed

TDQS

A4.3/5.0
Behavior5/5

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

Annotations only say readOnly=false and destructive=false; the description layers on non-obvious behavior: sensitive fields are silently rejected, x2many lines inherit the parent model's permission so no separate whitelist entry is needed, and unknown fields may be accepted but dropped with `ignored`/`unverified` in the result. That last point is exactly the kind of trap an agent would otherwise misreport to a user.

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?

Front-loaded with purpose and batch semantics, then escalating to permission and result-inspection caveats; there is little filler. The trailing Html-field paragraph is the weakest structural fit — it is field-type guidance rather than create guidance — though it is non-obvious and not repeated elsewhere.

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

Completeness5/5

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

For a 3-param, high-complexity mutation tool with no output schema, the description covers return value (created IDs), failure-ish states (`ignored`/`unverified`), permissions, and context scoping. An agent has enough to call this correctly and to report results honestly.

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

Parameters4/5

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

Schema coverage is already 100%, so the schema carries the baseline, but the description earns extra credit by explaining the dict-vs-list-of-dicts choice for `values` and giving a concrete reason to use `context` ({'company_id': N}). It does not document the nested field-value shape inside `values`, which is the genuinely hard part.

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

Purpose4/5

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

States a specific verb and resource ("Create one or more records in an Odoo model") plus the single-vs-batch shape of `values`. It implicitly separates itself from the update path (odoo_write) by using "create", but never names a sibling, so the boundary still requires schema-level inference.

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

Usage Guidelines4/5

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

Gives real preconditions — the model must be write-whitelisted with can_create=true — and tells the agent when to pass `context` and when to batch rather than loop. It stops short of naming the alternative tools (odoo_write for updates, odoo_execute for model methods) whose overlapping surface an agent must distinguish.

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.