
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.
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.
Review the command, arguments, and environment values before installing — MCP servers run with your local permissions.
Verified live against the running server on Jun 10, 2026.
diagnose_odoo_callDiagnose an Odoo model call without executing it10 paramsDiagnose 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 paramsBuild a JSON-2 request preview without network access
argsvaluebase_urlvaluedatabasevalueinclude_database_headerbooleankwargsvaluemethod*stringmodel*stringinspect_model_relationshipsInspect model relationships and required field metadata6 paramsInspect model relationships and required field metadata
fields_metadatavalueinclude_computedbooleaninclude_readonlybooleaninstancevaluemodel*stringuse_live_metadatabooleandiagnose_accessDiagnose ACL and record-rule visibility for an Odoo model9 paramsDiagnose ACL and record-rule visibility for an Odoo model
domainvalueexpected_countvalueinclude_rulesbooleaninstancevaluelimitintegermodel*stringobserved_errorvalueoperationstringrecord_idsvalueupgrade_risk_reportReport Odoo upgrade and JSON-2 migration risks8 paramsReport 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 paramsLook 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 paramsClassify 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 paramsRead a bounded profile of the connected Odoo environment
include_modulesbooleaninstancevaluemodule_limitintegerschema_catalogBuild and cache a bounded Odoo model schema catalog6 paramsBuild and cache a bounded Odoo model schema catalog
include_fieldsbooleaninstancevaluelimitintegermodelsvaluequeryvaluerefreshbooleanpreview_writePreview create, write, or unlink without executing it6 paramsPreview create, write, or unlink without executing it
contextvalueinstancevaluemodel*stringoperation*stringrecord_idsvaluevaluesvaluevalidate_writeValidate a standard write payload against optional fields_get metadata8 paramsValidate 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 paramsExecute a previously previewed and confirmed standard write
approval*objectconfirmbooleanscan_addons_sourceScan local Odoo addon source without importing addon code3 paramsScan local Odoo addon source without importing addon code
addons_pathsvaluemax_file_bytesintegermax_filesintegerbuild_domainBuild a validated Odoo domain from structured conditions3 paramsBuild a validated Odoo domain from structured conditions
conditions*arrayfields_metadatavaluelogical_operatorstringbusiness_pack_reportReport expected modules, models, and safe discovery calls for a business pack3 paramsReport expected modules, models, and safe discovery calls for a business pack
instancevaluepack*stringuse_live_metadatabooleanhealth_checkReport this MCP server's non-secret runtime safety postureReport this MCP server's non-secret runtime safety posture
No parameters — call it with no arguments.
list_instancesList configured Odoo instance names without credentialsList configured Odoo instance names without credentials
No parameters — call it with no arguments.
execute_methodExecute a custom method on an Odoo model5 paramsExecute a custom method on an Odoo model
argsvalueinstancevaluekwargsvaluemethod*stringmodel*stringlist_modelsList Odoo models with optional name filtering3 paramsList Odoo models with optional name filtering
instancevaluelimitintegerqueryvalueget_model_fieldsGet field metadata for a specific Odoo model5 paramsGet field metadata for a specific Odoo model
field_namesvalueinstancevaluemax_fieldsintegermodel*stringrelevancevaluesearch_recordsSearch Odoo records with read-only search_read7 paramsSearch Odoo records with read-only search_read
domainvaluefieldsvalueinstancevaluelimitintegermodel*stringoffsetintegerordervalueread_recordRead a single Odoo record by model and ID4 paramsRead 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 paramsAggregate 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 paramsPost 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 paramsSearch for employees by name
instancevaluelimitintegername*stringsearch_holidaysSearch for holidays within a date range4 paramsSearch for holidays within a date range
employee_idvalueend_date*stringinstancevaluestart_date*stringODOO_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