Odoo MCP Server
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| ODOO_DB | Yes | Database name | |
| ODOO_URL | Yes | Your Odoo server URL | |
| ODOO_TIMEOUT | No | Connection timeout in seconds | 30 |
| ODOO_PASSWORD | Yes | Password or API key | |
| ODOO_USERNAME | Yes | Login username | |
| ODOO_VERIFY_SSL | No | Whether to verify SSL certificates | true |
Capabilities
Features and capabilities supported by this server
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| diagnose_odoo_callC | Diagnose an Odoo model call without executing it |
| generate_json2_payloadB | Build a JSON-2 request preview without network access |
| inspect_model_relationshipsB | Inspect model relationships and required field metadata |
| diagnose_accessC | Diagnose ACL and record-rule visibility for an Odoo model |
| upgrade_risk_reportC | Report Odoo upgrade and JSON-2 migration risks |
| lookup_model_historyA | Look up Odoo model rename/removal history by old or new model name (e.g. account.invoice -> account.move) |
| fit_gap_reportC | Classify Odoo requirements into fit/gap implementation buckets |
| scan_addons_sourceA | Scan local Odoo addon source without importing addon code |
| build_domainC | Build a validated Odoo domain from structured conditions |
| business_pack_reportC | Report expected modules, models, and safe discovery calls for a business pack |
| get_odoo_profileC | Read a bounded profile of the connected Odoo environment |
| schema_catalogC | Build and cache a bounded Odoo model schema catalog |
| health_checkA | Report this MCP server's non-secret runtime safety posture |
| list_instancesA | List configured Odoo instance names without credentials |
| list_modelsB | List Odoo models with optional name filtering |
| get_model_fieldsB | Get field metadata for a specific Odoo model |
| search_recordsA | Search Odoo records with read-only search_read; optional free-text |
| read_recordA | Read a single Odoo record by model and ID |
| read_attachmentA | Read an ir.attachment's metadata and size-capped base64 content |
| aggregate_recordsA | Aggregate Odoo records server-side using Postgres groupby/sum/count. Uses formatted_read_group on Odoo 19+ and read_group on earlier versions. |
| search_employeeB | Search for employees by name |
| search_holidaysC | Search for holidays within a date range |
| preview_writeA | Preview create, write, or unlink without executing it |
| validate_writeB | Validate a standard write payload against optional fields_get metadata |
| execute_approved_writeC | Execute a previously previewed and confirmed standard write |
| chatter_postA | 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. |
| execute_methodC | Execute a custom method on an Odoo model |
| index_knowledgeA | Fetch a bounded slice of records and build a local BM25 knowledge index |
| search_knowledgeB | Relevance-ranked local BM25 search over previously indexed records |
| knowledge_statsA | Report local knowledge index sizes and document budget |
| receivable_payable_agingC | Aged receivable/payable report bucketed by days overdue |
| accounting_health_summaryC | Open receivable/payable item counts and draft invoice backlog |
| search_across_instancesA | Read-only search fanned out across configured Odoo instances, merged and attributed |
| aggregate_across_instancesA | Read-only aggregate fanned out across instances with combined grand totals |
| accounting_health_across_instancesC | AR/AP aging fanned out across instances — the partner-network sweep |
| submit_async_taskA | Run an allowlisted long-running read operation in the background |
| get_async_taskA | Poll a background task's status and result |
| cancel_async_taskC | Cancel a pending or running background task |
| list_async_tasksA | List recent background tasks newest-first |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
| diagnose_failed_odoo_call | Guide an assistant through diagnosing a failed Odoo model call. |
| fit_gap_workshop | Structure an Odoo fit/gap workshop from raw requirements. |
| json2_migration_plan | Plan migration from XML-RPC/JSON-RPC style calls to Odoo JSON-2. |
| safe_write_review | Review a proposed create/write/unlink before execution. |
| custom_module_audit | Guide a local source audit for custom Odoo addons. |
| invoice_approval_chain | Find, validate, and gated-post draft customer invoices with human checkpoints. |
| po_to_receipt | Three-way match a purchase order against its receipt and vendor bill; flag discrepancies. |
| customer_onboarding | Dedup-check then create a customer with contacts and payment terms via the write gate. |
| expense_claim_review | Review pending expense claims against policy and gated-approve or refuse them. |
| accounting_close_checklist | Read-only month-end close checklist: aging, unreconciled items, draft backlog, lock-date guidance. |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
| get_models | List all available models in the Odoo system (default Odoo instance) |
Latest Blog Posts
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/tuanle96/mcp-odoo'
If you have feedback or need assistance with the MCP directory API, please join our Discord server