Skip to main content
Glama
bemade

odoo-mcp

by bemade

bemade-odoo-mcp

An MCP server that connects to Odoo 19.0, giving AI assistants full access to any Odoo model.

Supports two authentication modes:

  • API key (Bearer) — connects via the JSON-2 API (/json/2/)

  • Username/password (session) — connects via JSON-RPC (/web/dataset/call_kw/)

Features

  • search_records — Search any model with domain filters, field selection, and pagination

  • read_record — Read specific records by ID

  • list_models — List installed Odoo models

  • get_model_fields — Inspect a model's field schema

  • get_model_doc — Retrieve API documentation for a model

  • create_record / update_records / delete_records — Write operations

  • call_method — Call any public method on any model

Related MCP server: MCP Server for Odoo

Requirements

  • Python 3.12+

  • An Odoo 19.0 instance with either an API key or login credentials

Installation

uv tool install bemade-odoo-mcp

Or from source:

git clone https://github.com/bemade/odoo-mcp.git
cd odoo-mcp
uv sync

Configuration

Set environment variables (or create a .env file).

ODOO_URL=https://your-odoo-instance.com
ODOO_API_KEY=your-api-key-here
ODOO_DB=your-database-name  # only needed for multi-database setups

To create an API key in Odoo, go to Settings > Users > [your user] > Preferences > API Keys.

Option B: Username/password (convenient for local dev)

ODOO_URL=http://localhost:8069
ODOO_USERNAME=admin
ODOO_PASSWORD=admin
ODOO_DB=mydb

Optional

ODOO_INSTANCE_LABEL=production  # label shown in the MCP server name (default: "odoo")

Usage with Claude Code

Add to your Claude Code MCP config (.claude/settings.json or project .mcp.json):

{
  "mcpServers": {
    "odoo": {
      "command": "uv",
      "args": ["run", "--directory", "/path/to/odoo-mcp", "odoo-mcp"]
    }
  }
}

Or if installed as a tool:

{
  "mcpServers": {
    "odoo": {
      "command": "odoo-mcp"
    }
  }
}

Connecting to multiple instances

Run the same server binary multiple times with different env vars. Claude Code namespaces the tools automatically (mcp__odoo-prod__search_records, etc.):

{
  "mcpServers": {
    "odoo-prod": {
      "command": "odoo-mcp",
      "env": {
        "ODOO_URL": "https://prod.example.com",
        "ODOO_API_KEY": "prod-key",
        "ODOO_INSTANCE_LABEL": "production"
      }
    },
    "odoo-dev": {
      "command": "odoo-mcp",
      "env": {
        "ODOO_URL": "http://localhost:8069",
        "ODOO_USERNAME": "admin",
        "ODOO_PASSWORD": "admin",
        "ODOO_DB": "mydb",
        "ODOO_INSTANCE_LABEL": "local-dev"
      }
    }
  }
}

Development

uv sync
uv run pytest

License

LGPL-3.0-only

Available Tools

9 tools
call_methodA
Destructive

Call any public method on an Odoo model.

Use get_model_doc first to discover the correct parameter names and types.

Args:
    model: The Odoo model name (e.g. "sale.order").
    method: The method name (e.g. "action_confirm").
    ids: Optional list of record IDs to operate on.
    params: Optional dict of keyword arguments passed to the method.
ParametersJSON Schema
NameRequiredDescriptionDefault
modelYes
methodYes
idsNo
paramsNo

TDQS

A4.2/5.0
Behavior3/5

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

Annotations already set destructiveHint=true, so description doesn't need to repeat that. Description adds that the tool accepts model, method, ids, and params, but does not explain behavior like side effects on different record IDs or error handling, which would add value beyond annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Extremely concise: two sentences plus a clear argument list. No unnecessary words, front-loaded with purpose and usage guidance. Every sentence earns its place.

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?

Given absence of output schema, description should indicate return value (e.g., the method's result). It also does not clarify behavior when 'ids' is null (operates on all records? or none?). These gaps reduce completeness despite good parameter explanations.

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

Parameters5/5

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

Schema description coverage is 0%, but description fully explains all four parameters: model, method, ids (optional list of IDs), and params (optional dict of kwargs). This provides meaning beyond the schema's type/title, compensating for lack of schema descriptions.

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

Purpose5/5

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

Description clearly states 'Call any public method on an Odoo model', using a specific verb and resource. It differentiates from sibling tools like get_model_doc (discovery) and create_record (creation).

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?

Explicitly advises to 'Use get_model_doc first to discover the correct parameter names and types', setting a clear precondition and suggesting an alternative for discovery. Lacks explicit when-not scenarios but provides enough context.

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

create_recordA

Create a new record in an Odoo model.

Args:
    model: The Odoo model name (e.g. "res.partner").
    values: Dict of field names to values (e.g. {"name": "Acme"}).

Returns:
    The ID of the newly created record.
ParametersJSON Schema
NameRequiredDescriptionDefault
modelYes
valuesYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior3/5

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

Annotations already indicate not destructive. The description adds return value (ID of new record). However, it does not disclose potential side effects (e.g., triggering workflows) or permission requirements beyond the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is highly concise: one sentence of purpose, then structured Args and Returns sections. Every line adds value with no redundancy.

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

Completeness4/5

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

Given the simple input schema (two parameters) and presence of an output schema, the description covers the core semantics. It could mention that the model must exist, but overall it is sufficient for a create operation.

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?

With 0% schema description coverage, the description adds crucial meaning: explaining 'model' as an Odoo model name with example, and 'values' as a dict of field-value pairs. This compensates well for the sparse schema.

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

Purpose5/5

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

The description clearly states the tool's action: 'Create a new record in an Odoo model.' It provides specific examples and distinguishes it from siblings like read_record, update_records, and delete_records by focusing on creation.

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

Usage Guidelines3/5

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

The description implies usage for creating new records but does not explicitly differentiate when to use vs. alternatives (e.g., update_records for existing records). No guidance on when not to use or prerequisites.

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

delete_recordsA
Destructive

Delete records from an Odoo model.

Args:
    model: The Odoo model name (e.g. "res.partner").
    ids: List of record IDs to delete.

Returns:
    True if the deletion succeeded.
ParametersJSON Schema
NameRequiredDescriptionDefault
modelYes
idsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior3/5

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

Annotations already set destructiveHint=true, so the agent knows this is destructive. The description adds that it returns True on success, but lacks details on permissions, irreversibility, or effects on related records. No contradictions with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Very concise with a clear structure: action statement, then Args and Returns sections. No unnecessary words, and the essential information is front-loaded.

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

Completeness4/5

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

For a simple delete tool with two parameters and an annotation for destructiveness, the description covers the basics (purpose, params, return). Could mention that deletion is permanent, but overall adequate given the tool's simplicity.

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?

With 0% schema description coverage, the description fully explains both parameters: model is the Odoo model name with an example, and ids is a list of record IDs. This adds significant meaning beyond the schema types, though could mention constraints like valid model names.

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

Purpose5/5

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

The description clearly states it deletes records from an Odoo model, using the specific verb 'delete' and resource 'records'. It distinguishes from sibling tools like create_record, update_records, and search_records by focusing on deletion.

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?

No guidance on when to use this tool versus alternatives (e.g., for irreversible deletion) or when not to use it. The description does not mention prerequisites or exclusion conditions.

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

get_model_docA
Read-only

Get API documentation for an Odoo model.

Without a method name, returns a compact summary: each method's name and
call signature.  With a method name, returns that method's full
documentation (parameters, types, defaults, docstring, return type).

Use this before call_method to discover exact parameter names and types.
Requires the API key user to be in the api_doc.group_allow_doc group.

Args:
    model: The Odoo model name (e.g. "res.partner").
    method: Optional method name. If provided, returns full docs for that
        method only. If omitted, returns a summary of all methods.
ParametersJSON Schema
NameRequiredDescriptionDefault
modelYes
methodNo

TDQS

A4.7/5.0
Behavior5/5

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

The description discloses behavioral traits beyond annotations (readOnlyHint, openWorldHint): it explains that without a method name, a compact summary is returned, and with a method name, full documentation is returned. It also mentions the required group for access. No contradiction with annotations.

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?

The description is well-structured with paragraphs and front-loaded key information. It is detailed but not overly verbose. A slight reduction in explanatory prose could be made, but every sentence serves a purpose.

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?

Given the tool's simplicity (2 params, no output schema, annotations present), the description is complete. It covers input semantics, output behavior (compact vs full), and access requirements. No critical gaps exist.

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

Parameters5/5

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

Despite 0% schema description coverage, the description thoroughly explains both parameters. 'model' is described as the Odoo model name with an example. 'method' is described as optional, and its effect on the output (summary vs full docs) is clearly stated, adding significant meaning beyond the schema.

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

Purpose5/5

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

The description clearly states the tool's purpose: 'Get API documentation for an Odoo model.' It distinguishes between two modes (compact summary vs full documentation) based on the method parameter. It also differentiates from sibling tools like call_method by explicitly advising usage before it.

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?

The description advises using this tool before call_method to discover parameter names and types, providing clear context. It mentions a prerequisite (API key user must be in the api_doc.group_allow_doc group). However, it does not explicitly state when not to use it or provide alternatives for other related tasks (e.g., using get_model_fields for field definitions).

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

get_model_fieldsA
Read-only

Get field definitions for an Odoo model.

Returns a dict mapping field names to their metadata (type, string,
required, relation, etc.).

Args:
    model: The Odoo model name (e.g. "res.partner").
    attributes: List of field attributes to return
        (e.g. ["string", "type", "required"]). Defaults to all.
ParametersJSON Schema
NameRequiredDescriptionDefault
modelYes
attributesNo

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already indicate readOnlyHint=true. The description adds that it returns a dict mapping field names to metadata (type, string, required, relation, etc.), providing useful behavioral context beyond the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Description is concise: two sentences covering purpose, return format, and parameters, with no wasted words. Structured logically with purpose first, then details.

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?

With only two parameters (one required) and no output schema, the description fully explains input parameters and return format (dict mapping field names to metadata). No gaps remain.

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 0%, so description must carry full burden. It explains each parameter: model as 'The Odoo model name (e.g. res.partner)' and attributes with example list and default behavior. This adds significant meaning beyond bare schema.

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

Purpose5/5

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

The description clearly states the tool gets field definitions for an Odoo model, with a specific verb ('get') and resource ('field definitions'). It distinguishes from siblings like list_models (lists models) and read_record (reads records).

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

Usage Guidelines3/5

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

The description gives no guidance on when to use this tool versus alternatives (e.g., get_model_doc might be related). Purpose is clear but no explicit when-to-use or when-not-to-use context.

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

list_modelsA
Read-only

List installed Odoo models.

Args:
    domain: Optional domain filter on ir.model
        (e.g. [["model", "like", "sale"]]).
    limit: Maximum number of models to return. Defaults to 80.
    offset: Number of records to skip (for pagination).
ParametersJSON Schema
NameRequiredDescriptionDefault
domainNo
limitNo
offsetNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior3/5

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

Annotations declare readOnlyHint=true, so the description does not need to reiterate non-destructiveness. However, the description does not detail return format or behavior beyond what is implied by parameter semantics. It could mention that it returns a list of model records.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise: one sentence for purpose followed by a structured Args section. No unnecessary words, and the most important information (what it does) is front-loaded.

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

Completeness4/5

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

For a list tool with 3 parameters and an existing output schema (not shown but present), the description covers the essential behavioral details (filtering, pagination). It is sufficient for an AI agent to invoke correctly, though it could briefly mention the return type.

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?

Although the schema has 0% description coverage, the tool description provides clear, actionable explanations for each parameter (domain, limit, offset) including defaults and examples, fully compensating for the schema gap.

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

Purpose5/5

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

The description clearly states 'List installed Odoo models', using a specific verb and resource. It distinguishes from sibling tools like read_record (reads a single record) and search_records (searches records, not models).

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?

No guidance is provided on when to use this tool versus alternatives. No exclusions or context for when not to use it. Given the sibling tools list, explicit differentiation would help an AI agent select the correct tool.

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

read_recordA
Read-only

Read specific Odoo records by their IDs.

Args:
    model: The Odoo model name (e.g. "res.partner").
    ids: List of record IDs to read.
    fields: List of field names to return. Defaults to all fields.
ParametersJSON Schema
NameRequiredDescriptionDefault
modelYes
idsYes
fieldsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior3/5

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

Annotations already provide readOnlyHint=true. The description adds that the fields parameter defaults to all fields, but does not disclose other behavioral traits like error handling or performance. It adds value beyond annotations but could be more comprehensive.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise, using two sentences for purpose and a clear Args list. Every sentence is necessary and front-loaded, with no unnecessary text.

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

Completeness4/5

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

For a simple read tool with an output schema, the description covers all parameters and their semantics. It does not describe return values, but the presence of an output schema mitigates that need. It is sufficiently complete for a tool of this complexity.

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?

Since schema description coverage is 0%, the description adds essential meaning for each parameter: model with example, ids as list of integers, fields with default behavior. This significantly helps an agent understand required inputs beyond the schema types.

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

Purpose5/5

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

The description clearly states 'Read specific Odoo records by their IDs', using a specific verb and resource. It is distinct from sibling tools like search_records (searching) and create_record (creating), making it easy for an agent to select correctly.

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

Usage Guidelines3/5

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

The description implies usage when you have IDs and need to fetch records, but does not explicitly state when to avoid this tool or mention alternatives like search_records for searching. The guidance is adequate but not explicit.

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

search_recordsA
Read-only

Search for records in any Odoo model.

Args:
    model: The Odoo model name (e.g. "res.partner", "sale.order").
    domain: Odoo domain filter (e.g. [["is_company", "=", true]]).
        Defaults to [] (all records).
    fields: List of field names to return. Defaults to all fields.
    limit: Maximum number of records to return. Defaults to 80.
    offset: Number of records to skip (for pagination).
    order: Sort order (e.g. "name asc, id desc").
ParametersJSON Schema
NameRequiredDescriptionDefault
modelYes
domainNo
fieldsNo
limitNo
offsetNo
orderNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior4/5

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

Annotations indicate readOnlyHint=true. The description does not contradict and adds details about default values (limit=80, offset=0) and parameter behavior, which supplements the annotation.

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?

The description is concise with a clear first sentence and organized Args section. It could be slightly more front-loaded but is well-structured without extraneous content.

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

Completeness4/5

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

All 6 parameters are explained, defaults are given, and examples provided. The return value is not described, but output schema exists, so completeness is adequate.

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

Parameters5/5

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

The input schema has 0% description coverage, but the description explains each parameter's meaning, including model examples and domain format, adding significant value beyond the schema.

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

Purpose5/5

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

The description clearly states 'Search for records in any Odoo model', using a specific verb and resource. This distinguishes it from sibling tools like create_record, delete_records, and read_record.

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

Usage Guidelines3/5

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

The description does not explicitly provide guidance on when to use this tool versus alternatives. While it explains parameters, it lacks when-not or alternative tool recommendations.

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

update_recordsA
DestructiveIdempotent

Update existing records in an Odoo model.

Args:
    model: The Odoo model name (e.g. "res.partner").
    ids: List of record IDs to update.
    values: Dict of field names to new values.

Returns:
    True if the update succeeded.
ParametersJSON Schema
NameRequiredDescriptionDefault
modelYes
idsYes
valuesYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare destructiveHint=true and idempotentHint=true. The description adds that the return value is True on success, which is basic. No additional behavioral context (e.g., atomicity, rollback, irreversibility) is provided beyond what annotations convey.

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?

The description is concise with three sentences and an Args/Returns section. It front-loads the purpose, though the structured section repeats information already implied by the schema.

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?

Given the complexity (3 params, nested object, destructive hint), the description adequately covers parameters and return value, but lacks error handling details, examples, or clarification on valid ID requirements. It is adequate but not comprehensive for a mutation tool.

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?

Despite 0% schema coverage, the description explains all three parameters: model (with example), ids (list of integers), and values (dict). It adds meaning beyond the raw schema types, though it could be more precise about value constraints (e.g., valid field names).

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

Purpose5/5

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

The description clearly states the action ('Update existing records') and the resource ('an Odoo model'), distinguishing it from sibling tools like create_record, delete_records, and read_record.

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?

The description provides no guidance on when to use this tool versus alternatives (e.g., search_records to find IDs first), nor does it mention prerequisites or exclusions.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 9 tool updatesv0.1.0
    • First observedcall_method
    • First observedcreate_record
    • First observeddelete_records
    • First observedget_model_doc
    • First observedget_model_fields
    • First observedlist_models
    • First observedread_record
    • First observedsearch_records
    • First observedupdate_records

TDQS

A4.2/5.0
Disambiguation5/5

Each tool targets a distinct operation: schema discovery (list_models, get_model_doc, get_model_fields), CRUD (create, read, update, delete), search, and generic method call. No overlap.

Naming Consistency5/5

All tool names follow a uniform verb_noun pattern (e.g., list_models, create_record, search_records) using lowercase and underscores, making them predictable.

Tool Count5/5

9 tools is well-scoped for an Odoo integration, covering model discovery, CRUD, search, and a generic method call without being excessive or insufficient.

Completeness4/5

The tool set provides full CRUD, search, and schema discovery; the only minor gap is the absence of a dedicated count/aggregate operation, but search_records with limit=0 can approximate it.

Maintenance

ActivityInactive
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables AI assistants to interact with Odoo ERP systems through XML-RPC communication. Provides access to Odoo models, records, methods, and data structures for comprehensive ERP integration.
    2
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables AI assistants to interact with Odoo ERP systems through natural language, allowing users to search, create, update, and manage business records like customers, products, and invoices across any Odoo instance.
    1
    Mozilla Public 2.0
  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables AI assistants to interact with Odoo databases via XML-RPC and JSON-RPC for performing CRUD operations and managing modules. It supports advanced features like domain-based searching, field metadata inspection, and administrative task execution.
    16
    MIT

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/bemade/odoo-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server