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

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/aadilakbar/ad-mcp-bridge-server'

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