Skip to main content
Glama
aadilakbar

MCP Odoo Bridge Server

by aadilakbar

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
ODOO_DBNoDatabase name (auto-detected if not set)
MCP_HOSTNoHost for HTTP transportlocalhost
MCP_PORTNoPort for HTTP transport8000
ODOO_URLYesYour Odoo instance URL (e.g., https://mycompany.odoo.com)
ODOO_USERNoUsername (if not using API key)
ODOO_YOLONoYOLO mode - bypasses MCP security (⚠️ DEV ONLY). Values: off, read, trueoff
ODOO_API_KEYNoAPI key for authentication (e.g., 0ef5b399e9ee9c11b053dfb6eeba8de473c29fcd)
ODOO_TIMEOUTNoRequest timeout in seconds30
MCP_TRANSPORTNoTransport type: stdio or streamable-httpstdio
ODOO_PASSWORDNoPassword (if not using API key)
ODOO_MAX_RECORDSNoDefault max records per query100

Instructions

Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.

This server publishes no instructions, or was last inspected before Glama recorded them.

Capabilities

Features and capabilities supported by this server

Protocol revision2025-11-25

CapabilityDetails
tools
{
  "listChanged": false
}
prompts
{
  "listChanged": false
}
resources
{
  "subscribe": false,
  "listChanged": false
}
experimental
{}

Tools

Functions exposed to the LLM to take actions

NameDescription
search_recordsA
Search for records in an Odoo model.

Args:
    model: The Odoo model name (e.g., 'res.partner', 'sale.order')
    domain: Search filter as Odoo domain list (e.g., [['is_company', '=', True]])
            Common operators: =, !=, >, <, >=, <=, like, ilike, in, not in
    fields: List of fields to return (empty = smart defaults)
    limit: Maximum records to return (default 80)
    offset: Number of records to skip (for pagination)
    order: Sort order (e.g., 'name asc, id desc')

Returns:
    JSON list of matching records

Examples:
    - Find all companies: model='res.partner', domain=[['is_company', '=', True]]
    - Find orders from this month: model='sale.order', domain=[['date_order', '>=', '2024-01-01']]
    - Find unpaid invoices: model='account.move', domain=[['payment_state', '!=', 'paid']]
get_recordB
Get a specific record by ID.

Args:
    model: The Odoo model name
    record_id: The ID of the record to retrieve
    fields: List of fields to return (empty = all accessible fields)

Returns:
    JSON object with the record data

Example:
    Get customer details: model='res.partner', record_id=5
count_recordsA
Count records matching a domain.

Args:
    model: The Odoo model name
    domain: Search filter as Odoo domain list

Returns:
    Number of matching records

Example:
    Count unpaid invoices: model='account.move', domain=[['payment_state', '!=', 'paid']]
list_modelsA
List all Odoo models available for MCP access.

Returns:
    List of models with their permissions (read, create, update, delete)
get_model_fieldsB
Get field definitions for an Odoo model.

Args:
    model: The Odoo model name
    field_types: Optional list of types to filter (e.g., ['many2one', 'char'])

Returns:
    List of fields with their types and descriptions
create_recordA
Create a new record in Odoo.

Args:
    model: The Odoo model name
    values: Dictionary of field values for the new record

Returns:
    Success message with the new record ID

Example:
    Create customer: model='res.partner', values={'name': 'New Customer', 'email': 'new@example.com'}
update_recordB
Update an existing record in Odoo.

Args:
    model: The Odoo model name
    record_id: The ID of the record to update
    values: Dictionary of field values to update

Returns:
    Success message

Example:
    Update customer phone: model='res.partner', record_id=5, values={'phone': '123-456-7890'}
delete_recordB
Delete a record from Odoo.

Args:
    model: The Odoo model name
    record_id: The ID of the record to delete

Returns:
    Success message

⚠️ WARNING: This action is irreversible!
execute_methodA
Execute a custom method on an Odoo model.

Args:
    model: The Odoo model name
    method: The method name to call
    record_ids: Optional list of record IDs to call the method on
    args: Positional arguments for the method
    kwargs: Keyword arguments for the method

Returns:
    Method result

⚠️ Note: This requires special permission in Odoo settings.

Example:
    Confirm sale order: model='sale.order', method='action_confirm', record_ids=[5]
get_record_nameC
Get the display name of a record (useful for looking up references).

Args:
    model: The Odoo model name
    record_id: The record ID

Returns:
    Display name of the record
search_and_read_oneA
Search and return the first matching record (convenience method).

Args:
    model: The Odoo model name
    domain: Search filter as Odoo domain list
    fields: List of fields to return

Returns:
    The first matching record or a message if not found

Prompts

Interactive templates invoked by user choice

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription
resource_modelsList all models enabled for MCP access

TDQS

A3.8/5.0

Scored across 11 tools

Disambiguation5/5

Every tool has a clearly distinct purpose with no ambiguity. Core CRUD operations (create_record, get_record, update_record, delete_record) are separate from search operations (search_records, search_and_read_one, count_records), metadata tools (list_models, get_model_fields), and specialized utilities (execute_method, get_record_name). The descriptions clearly differentiate each tool's specific function.

Naming Consistency5/5

All tools follow a consistent verb_noun naming pattern throughout (e.g., count_records, create_record, search_records). The naming is perfectly uniform with no deviations in style or convention, making the tool set highly predictable and readable.

Tool Count5/5

With 11 tools, this server is well-scoped for its purpose as an Odoo bridge. It provides comprehensive coverage of database operations (CRUD, search, count), metadata access, and specialized utilities without being overwhelming. Each tool earns its place in the set.

Completeness5/5

The tool surface provides complete CRUD/lifecycle coverage for the Odoo domain with no obvious gaps. It includes all essential operations (create, read, update, delete, search, count), metadata tools for discovery, and specialized utilities like execute_method for custom actions. The set enables full agent workflows without dead ends.

Maintenance

ActivityInactive
ResponsivenessNo issues