search_recordsLABSCO SUMMARY
Aggregation runs in the database, and the generic method call is off by default.
Two design choices carry this. aggregate_records pushes totals and groupings down to PostgreSQL rather than pulling rows into the model's context, which is the difference between a monthly sales question working and blowing your budget. And call_model_method — which can invoke any public method, including destructive ones — is simply not registered unless you set two separate flags. Odoo's own record rules and ACLs still apply throughout.
What it is
An Odoo ERP bridge: search, read, create, update and delete records in any model, with server-side aggregation and an opt-in escape hatch for workflow actions.
What you get
- search_records — search any model with an Odoo domain, chosen fields and a limit
- get_record, create_record, update_record and delete_record — single-record CRUD with field validation and permission checks
- list_models and list_resource_templates — which models are exposed, and the resource URI patterns available
- aggregate_records — group, sum and count in PostgreSQL instead of pulling raw rows; it defaults to a count per group
- post_message — write to a record's chatter, as an internal note or a comment that notifies followers, with optional HTML
- call_model_method — invoke any public model method for workflow actions like posting an invoice or confirming a sale order
- Smart field selection when you omit fields: essential and business-relevant fields are picked, technical and expensive ones skipped, defaulting to 15 fields
- Resource URIs under odoo:// for a record, a search, a count or a model's fields
Requirements
Python 3.10 or higher and uv. Set ODOO_URL and ODOO_API_KEY, plus ODOO_DB when the database is not implied; runs via uvx as mcp-server-odoo on your local machine, not the Odoo server. For production use, install the Odoo MCP module on version 16.0 or later; YOLO mode works against any Odoo with XML-RPC enabled and no module, for testing and demos. call_model_method only registers when both ODOO_YOLO and ODOO_MCP_ENABLE_METHOD_CALLS are true.
Setup effort
One command plus a key — uvx mcp-server-odoo, then supply credentials
USE CASES
Answering a totals question
Group sales orders by month and sum the amounts server-side, instead of listing every order.
Finding records without knowing the field names
Search with a domain and omit fields — the server picks the business-relevant ones for that model.
Logging what happened on a record
Post a note to the chatter, or a comment when the followers should be notified.
Confirming a sale order from the conversation
Call the model's own workflow method — available only once you have turned that escape hatch on deliberately.
10 tools
Listed in project docs. Your client may show a different list.
get_recordlist_modelslist_resource_templatescreate_recordupdate_recorddelete_recordpost_messageaggregate_recordscall_model_methodBEFORE YOU INSTALL
What to know first
Tools you get
10 tools named in the project's documentation.
Requires
- uvx on PATH
- Python 3.10 or later
- ODOO_API_KEY in your environment
- ODOO_URL in your environment
Optional
- ODOO_PASSWORD in your environment
- ODOO_USER in your environment
Where it runs
The documented client runs the server on your machine.
INSTALLATION
Connect your client
Server setup
uvx mcp-server-odooMCP Clients
Zed
{
"context_servers": {
"odoo": {
"command": {
"path": "uvx",
"args": [
"mcp-server-odoo"
],
"env": {
"ODOO_URL": "<YOUR_ODOO_URL>",
"ODOO_API_KEY": "<YOUR_ODOO_API_KEY>",
"ODOO_DB": "<YOUR_ODOO_DB>"
}
}
}
}
}The configuration on this page does not set ODOO_USER and ODOO_PASSWORD. You need them only instead of ODOO_API_KEY: to sign in with a username and password, put both in the block's "env" section instead of ODOO_API_KEY. The server also reads a .env file from its working directory.