tuanle96 avatar

Mcp Odoo

tuanle96/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-mcp

Run in your terminal. Replace YOUR_* placeholders with real values; add --scope user to install for every project.

Tools

Verified live · 26 tools

Verified 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

Parameters* required
argsvalue
include_debugboolean
default: false
kwargsvalue
metadatavalue
method*string
model*string
observed_errorvalue
target_versionvalue
transportstring
default: auto
use_live_metadataboolean
default: false
generate_json2_payloadBuild a JSON-2 request preview without network access7 params

Build a JSON-2 request preview without network access

Parameters* required
argsvalue
base_urlvalue
databasevalue
include_database_headerboolean
default: true
kwargsvalue
method*string
model*string
inspect_model_relationshipsInspect model relationships and required field metadata6 params

Inspect model relationships and required field metadata

Parameters* required
fields_metadatavalue
include_computedboolean
default: true
include_readonlyboolean
default: true
instancevalue
model*string
use_live_metadataboolean
default: true
diagnose_accessDiagnose ACL and record-rule visibility for an Odoo model9 params

Diagnose ACL and record-rule visibility for an Odoo model

Parameters* required
domainvalue
expected_countvalue
include_rulesboolean
default: true
instancevalue
limitinteger
default: 50
model*string
observed_errorvalue
operationstring
default: read
record_idsvalue
upgrade_risk_reportReport Odoo upgrade and JSON-2 migration risks8 params

Report Odoo upgrade and JSON-2 migration risks

Parameters* required
include_debugboolean
default: false
methodsvalue
modulesvalue
observed_errorsvalue
source_findingsvalue
source_versionvalue
target_versionvalue
use_live_metadataboolean
default: false
lookup_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)

Parameters* required
name*string
fit_gap_reportClassify Odoo requirements into fit/gap implementation buckets6 params

Classify Odoo requirements into fit/gap implementation buckets

Parameters* required
available_fieldsvalue
available_modelsvalue
business_contextvalue
installed_modulesvalue
requirements*array
use_live_metadataboolean
default: false
get_odoo_profileRead a bounded profile of the connected Odoo environment3 params

Read a bounded profile of the connected Odoo environment

Parameters* required
include_modulesboolean
default: true
instancevalue
module_limitinteger
default: 100
schema_catalogBuild and cache a bounded Odoo model schema catalog6 params

Build and cache a bounded Odoo model schema catalog

Parameters* required
include_fieldsboolean
default: false
instancevalue
limitinteger
default: 50
modelsvalue
queryvalue
refreshboolean
default: false
preview_writePreview create, write, or unlink without executing it6 params

Preview create, write, or unlink without executing it

Parameters* required
contextvalue
instancevalue
model*string
operation*string
record_idsvalue
valuesvalue
validate_writeValidate a standard write payload against optional fields_get metadata8 params

Validate a standard write payload against optional fields_get metadata

Parameters* required
contextvalue
fields_metadatavalue
instancevalue
model*string
operation*string
record_idsvalue
use_live_metadataboolean
default: true
valuesvalue
execute_approved_writeExecute a previously previewed and confirmed standard write2 params

Execute a previously previewed and confirmed standard write

Parameters* required
approval*object
confirmboolean
default: false
scan_addons_sourceScan local Odoo addon source without importing addon code3 params

Scan local Odoo addon source without importing addon code

Parameters* required
addons_pathsvalue
max_file_bytesinteger
default: 300000
max_filesinteger
default: 200
build_domainBuild a validated Odoo domain from structured conditions3 params

Build a validated Odoo domain from structured conditions

Parameters* required
conditions*array
fields_metadatavalue
logical_operatorstring
default: and
business_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

Parameters* required
instancevalue
pack*string
use_live_metadataboolean
default: true
health_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

Parameters* required
argsvalue
instancevalue
kwargsvalue
method*string
model*string
list_modelsList Odoo models with optional name filtering3 params

List Odoo models with optional name filtering

Parameters* required
instancevalue
limitinteger
default: 100
queryvalue
get_model_fieldsGet field metadata for a specific Odoo model5 params

Get field metadata for a specific Odoo model

Parameters* required
field_namesvalue
instancevalue
max_fieldsinteger
default: 30
model*string
relevancevalue
search_recordsSearch Odoo records with read-only search_read7 params

Search Odoo records with read-only search_read

Parameters* required
domainvalue
fieldsvalue
instancevalue
limitinteger
default: 10
model*string
offsetinteger
default: 0
ordervalue
read_recordRead a single Odoo record by model and ID4 params

Read a single Odoo record by model and ID

Parameters* required
fieldsvalue
instancevalue
model*string
record_id*integer
aggregate_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.

Parameters* required
domainvalue
group_by*array
instancevalue
lazyboolean
default: false
limitvalue
measuresvalue
model*string
offsetinteger
default: 0
ordervalue
chatter_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.

Parameters* required
approvalvalue
attachment_idsvalue
body*string
confirmboolean
default: false
instancevalue
message_typestring
default: comment
model*string
partner_idsvalue
record_id*integer
subtype_xmlidvalue
search_employeeSearch for employees by name3 params

Search for employees by name

Parameters* required
instancevalue
limitinteger
default: 20
name*string
search_holidaysSearch for holidays within a date range4 params

Search for holidays within a date range

Parameters* required
employee_idvalue
end_date*string
instancevalue
start_date*string

Sponsors

Configuration

ODOO_URL*

Odoo server URL, e.g. https://mycompany.odoo.com

ODOO_DB*

Odoo database name

ODOO_USERNAME*

Odoo login (email)

ODOO_PASSWORD*secret

Odoo 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