
Mcp Odoo
Connects Claude to Odoo 16+ instances through XML-RPC or JSON-2 APIs without requiring any server-side modules or admin setup. Exposes 24 tools for reading records, server-side aggregation, schema inspection, chatter posting, and addon scanning, plus gated write operations that require approval tokens. Includes migration helpers for JSON-2 transition and diagnostic tools for access rules and upgrade risks. Works with existing Odoo credentials and handles both local development and production instances. The safe write workflow and real Odoo smoke testing make this solid for automation workflows where you need reliable ERP integration without direct database access.
- GitHub stars
- 427
- tools
- 26
- auth
- Secret needed
- transport
- STDIO
- env vars
- 4
- last updated
- Jul 20, 2026
Install
From registry metadata$ npx add-mcp 'uvx odoo-mcp' --name mcp-odoo --env 'ODOO_URL=${ODOO_URL}' --env 'ODOO_DB=${ODOO_DB}' --env 'ODOO_USERNAME=${ODOO_USERNAME}' --env 'ODOO_PASSWORD=${ODOO_PASSWORD}'Run in your terminal. add-mcp asks which agents to add it to, then asks for each value it needs. Add -g to install it for every project.
Review the command, arguments and environment values before installing. MCP servers run with your local permissions.
Other ways
Claude Code
$ claude mcp add mcp-odoo --env ODOO_URL=YOUR_ODOO_URL --env ODOO_DB=YOUR_ODOO_DB --env ODOO_USERNAME=YOUR_ODOO_USERNAME --env ODOO_PASSWORD=YOUR_ODOO_PASSWORD -- uvx odoo-mcpRun in your terminal. Replace YOUR_* placeholders with real values; add --scope user to install for every project.
Tools
Verified live · 26 toolsVerified live against the running server on Jun 10, 2026.
diagnose_odoo_callDiagnose an Odoo model call without executing it10 params
Diagnose an Odoo model call without executing it
argsvalueinclude_debugbooleankwargsvaluemetadatavaluemethod*stringmodel*stringobserved_errorvaluetarget_versionvaluetransportstringuse_live_metadatabooleangenerate_json2_payloadBuild a JSON-2 request preview without network access7 params
Build a JSON-2 request preview without network access
argsvaluebase_urlvaluedatabasevalueinclude_database_headerbooleankwargsvaluemethod*stringmodel*stringinspect_model_relationshipsInspect model relationships and required field metadata6 params
Inspect model relationships and required field metadata
fields_metadatavalueinclude_computedbooleaninclude_readonlybooleaninstancevaluemodel*stringuse_live_metadatabooleandiagnose_accessDiagnose ACL and record-rule visibility for an Odoo model9 params
Diagnose ACL and record-rule visibility for an Odoo model
domainvalueexpected_countvalueinclude_rulesbooleaninstancevaluelimitintegermodel*stringobserved_errorvalueoperationstringrecord_idsvalueupgrade_risk_reportReport Odoo upgrade and JSON-2 migration risks8 params
Report Odoo upgrade and JSON-2 migration risks
include_debugbooleanmethodsvaluemodulesvalueobserved_errorsvaluesource_findingsvaluesource_versionvaluetarget_versionvalueuse_live_metadatabooleanlookup_model_historyLook up Odoo model rename/removal history by old or new model name (e.g. account.invoice -> account.move)1 params
Look up Odoo model rename/removal history by old or new model name (e.g. account.invoice -> account.move)
name*stringfit_gap_reportClassify Odoo requirements into fit/gap implementation buckets6 params
Classify Odoo requirements into fit/gap implementation buckets
available_fieldsvalueavailable_modelsvaluebusiness_contextvalueinstalled_modulesvaluerequirements*arrayuse_live_metadatabooleanget_odoo_profileRead a bounded profile of the connected Odoo environment3 params
Read a bounded profile of the connected Odoo environment
include_modulesbooleaninstancevaluemodule_limitintegerschema_catalogBuild and cache a bounded Odoo model schema catalog6 params
Build and cache a bounded Odoo model schema catalog
include_fieldsbooleaninstancevaluelimitintegermodelsvaluequeryvaluerefreshbooleanpreview_writePreview create, write, or unlink without executing it6 params
Preview create, write, or unlink without executing it
contextvalueinstancevaluemodel*stringoperation*stringrecord_idsvaluevaluesvaluevalidate_writeValidate a standard write payload against optional fields_get metadata8 params
Validate a standard write payload against optional fields_get metadata
contextvaluefields_metadatavalueinstancevaluemodel*stringoperation*stringrecord_idsvalueuse_live_metadatabooleanvaluesvalueexecute_approved_writeExecute a previously previewed and confirmed standard write2 params
Execute a previously previewed and confirmed standard write
approval*objectconfirmbooleanscan_addons_sourceScan local Odoo addon source without importing addon code3 params
Scan local Odoo addon source without importing addon code
addons_pathsvaluemax_file_bytesintegermax_filesintegerbuild_domainBuild a validated Odoo domain from structured conditions3 params
Build a validated Odoo domain from structured conditions
conditions*arrayfields_metadatavaluelogical_operatorstringbusiness_pack_reportReport expected modules, models, and safe discovery calls for a business pack3 params
Report expected modules, models, and safe discovery calls for a business pack
instancevaluepack*stringuse_live_metadatabooleanhealth_checkReport this MCP server's non-secret runtime safety posture
Report this MCP server's non-secret runtime safety posture
No parameters. Call it with no arguments.
list_instancesList configured Odoo instance names without credentials
List configured Odoo instance names without credentials
No parameters. Call it with no arguments.
execute_methodExecute a custom method on an Odoo model5 params
Execute a custom method on an Odoo model
argsvalueinstancevaluekwargsvaluemethod*stringmodel*stringlist_modelsList Odoo models with optional name filtering3 params
List Odoo models with optional name filtering
instancevaluelimitintegerqueryvalueget_model_fieldsGet field metadata for a specific Odoo model5 params
Get field metadata for a specific Odoo model
field_namesvalueinstancevaluemax_fieldsintegermodel*stringrelevancevaluesearch_recordsSearch Odoo records with read-only search_read7 params
Search Odoo records with read-only search_read
domainvaluefieldsvalueinstancevaluelimitintegermodel*stringoffsetintegerordervalueread_recordRead a single Odoo record by model and ID4 params
Read a single Odoo record by model and ID
fieldsvalueinstancevaluemodel*stringrecord_id*integeraggregate_recordsAggregate Odoo records server-side using Postgres groupby/sum/count. Uses formatted_read_group on Odoo 19+ and read_group on earlier versions.9 params
Aggregate Odoo records server-side using Postgres groupby/sum/count. Uses formatted_read_group on Odoo 19+ and read_group on earlier versions.
domainvaluegroup_by*arrayinstancevaluelazybooleanlimitvaluemeasuresvaluemodel*stringoffsetintegerordervaluechatter_postPost a chatter message on a mail.thread record. Default mode requires an approval token returned from a preview call; set MCP_CHATTER_DIRECT=1 to bypass and post immediately.10 params
Post a chatter message on a mail.thread record. Default mode requires an approval token returned from a preview call; set MCP_CHATTER_DIRECT=1 to bypass and post immediately.
approvalvalueattachment_idsvaluebody*stringconfirmbooleaninstancevaluemessage_typestringmodel*stringpartner_idsvaluerecord_id*integersubtype_xmlidvaluesearch_employeeSearch for employees by name3 params
Search for employees by name
instancevaluelimitintegername*stringsearch_holidaysSearch for holidays within a date range4 params
Search for holidays within a date range
employee_idvalueend_date*stringinstancevaluestart_date*stringSponsors
Configuration
ODOO_URL*Odoo server URL, e.g. https://mycompany.odoo.com
ODOO_DB*Odoo database name
ODOO_USERNAME*Odoo login (email)
ODOO_PASSWORD*secretOdoo password or API key
Readme
Details
- Repository
- github.com/tuanle96/mcp-odoo
- Website
- tuanle96.github.io/mcp-odoo
- Package
odoo-mcp- Transport
- STDIO
- Auth
- Required
- Registry
- MCP registry, active
- Resources
- 1
- Prompts
- 5
- Tools verified
- Jun 10, 2026