Skip to main content
Glama
odoo19-mcp-server

odoo19-mcp-server

by twtrubiks

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
ODOO_URLNoOdoo server URLhttp://localhost:8069
ODOO_API_KEYYesAPI Key for Odoo authentication
ODOO_DATABASEYesThe name of the Odoo database to connect to
READONLY_MODENoEnable read-only mode to prevent write operations (true/false)false

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": true
}
logging
{}
prompts
{
  "listChanged": true
}
resources
{
  "subscribe": false,
  "listChanged": true
}

Tools

Functions exposed to the LLM to take actions

NameDescription
list_modelsC

List all available Odoo models.

get_fieldsC

Get field information for an Odoo model using ORM fields_get().

execute_methodA

Execute any method on an Odoo model (general-purpose escape hatch).

WARNING: Business methods (e.g. action_confirm, action_post, button_validate, toggle_active) can modify or irreversibly change data in Odoo and are NOT guarded by this server. Before calling any method that changes state, make sure the user explicitly asked for it.

search_recordsC

Search for records in an Odoo model.

count_recordsC

Count records in an Odoo model matching the domain.

read_recordsB

Read specific records by their IDs.

create_recordC

Create new record(s) in an Odoo model.

update_recordC

Update existing records in an Odoo model.

delete_recordA

Delete records from an Odoo model. IRREVERSIBLE operation.

IMPORTANT: You MUST first call with confirm=False to show the user what will be deleted. Only set confirm=True AFTER the user explicitly approves the deletion. NEVER set confirm=True on the first call.

prepare_uploadA

Prepare an out-of-band upload of a CLIENT-side file to this server.

Use this when the file to attach lives on the client machine and this MCP server is remote: pushing the bytes over plain HTTP keeps them out of the LLM token stream (much faster and cheaper than base64_data for large files).

Workflow:

  1. Call this tool to get the endpoint info and a short-lived upload_token.

  2. POST the file (multipart field 'file') to /upload, where is the same scheme://host:port this MCP connection uses: curl -fsS -F "file=@/local/invoice.png"
    -H "Authorization: Bearer <upload_token>" /upload -> {"file_path": "/shared/uploads/.png", "file_name": "invoice.png"}

  3. Call add_attachment(file_path=..., file_name=..., res_model=..., res_id=...).

add_attachmentA

Upload a file attachment to Odoo via ir.attachment.

Supports two input modes:

  • file_path: Read a local file from the MCP server's filesystem. The path must resolve to a location inside UPLOAD_DIR (default /shared/uploads); paths outside it are refused. If the file lives on the CLIENT machine and this server is remote, call prepare_upload first and POST the file to /upload to obtain a server-side file_path.

  • base64_data + file_name: Pass file content directly as base64 string. Use this when the file is not on disk (e.g., image uploaded via Discord).

Prompts

Interactive templates invoked by user choice

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription
list_models_resourceList all available Odoo models.
get_current_userGet current logged-in user information.
get_current_companyGet current user's company information.

TDQS

A3.5/5.0

Scored across 11 tools

Disambiguation4/5

The CRUD set (search/read/create/update/delete/count) is clearly differentiated by action, and metadata tools (list_models, get_fields) are distinct. The main blur is execute_method, a general escape hatch that can perform any of the CRUD operations, plus the coupled prepare_upload/add_attachment pair which requires understanding a shared workflow.

Naming Consistency4/5

Nearly all tools follow a verb_noun snake_case pattern (list_models, search_records, create_record, delete_record). Minor inconsistency between plural nouns (search_records, count_records, read_records) and singular (create_record, update_record, delete_record), but conventions are otherwise readable and predictable.

Tool Count5/5

11 tools is well-scoped for an Odoo ORM gateway: a clean CRUD+search core, two metadata/introspection helpers, an escape hatch, and two attachment tools. No redundant or filler tools.

Completeness4/5

Covers full CRUD, search, count, model/field introspection, and file attachments, which is solid lifecycle coverage for an Odoo data server. Minor gaps like a combined search_read or bulk update exist, and execute_method serves as a catch-all fallback.

Maintenance

ActivityMaintained
ResponsivenessNo issues