odooclaw-mcp
OdooClaw MCP is a stdio MCP server that lets an MCP client run 129 validated tools against an Odoo 18 instance (CRUD, business workflows, accounting, and view/report migration helpers).
Core records:
odoo_search,odoo_read,odoo_search_read,odoo_create,odoo_write,odoo_invoke_action,odoo_get_record_summary(unlink is blocked).Partners, sales & CRM: find/summarize partners and sale orders, create quotations, confirm orders, create CRM leads.
Accounting & payments: purchase orders, vendor bills, pending-invoice lookup (Odoo 18
state='posted'semantics), invoice summaries, register payments, journal entries, tax summaries, AR/AP aging, period-close checks, bank-reconciliation suggestions.Projects, activities & chatter: tasks (find/create/update/status), activities (create/list/done/close with reason), chatter messages, timesheets, calendar events.
People ops: attendance find/check-in/check-out, today summary, missing-timesheet analysis, timesheet-from-attendance suggestions, expense reports (create/submit/approve), pending-action notifications.
Support, contracts & stock: helpdesk tickets (direct or partner-linked), draft ticket emails, contract line create/replace/close, product stock quantities.
Introspection & context: model schema lookup,
odoo_get_capabilities, plus 5 MCP resources (Odoo 18 field reference, allowed models, per-model schema, record summary, chatter summary).View/report migration toolkit: get views/reports by xmlid or model, scan migration issues, propose/validate/preview/visualize patches, compile-test views, apply patches safely and roll back via snapshots, including batch variants.
Guardrails built in: Pydantic validation of every payload (wrapped in a top-level
payloadobject), model allowlist, denylisted fields, action-method guard, and default/max search limits.
Provides tools for interacting with Odoo 18, including CRUD operations, sales, accounting, CRM, helpdesk, projects, and more.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@odooclaw-mcp Find sale order SO42 summary"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
OdooClaw MCP
Standalone MCP (Model Context Protocol) server for Odoo 18 over stdio.
MCP name: io.github.nicolasramos/odooclaw-mcp
PyPI package: odooclaw-mcp
Official CLI: odooclaw-mcp
Backward-compatible aliases are also installed:
odoo-mcpodoo-mcp-serverodoo-18-mcp-server
Quick Start
1) Install
pip install odooclaw-mcpFrom source:
git clone https://github.com/nicolasramos/odooclaw-mcp.git
cd odooclaw-mcp
pip install -e .2) Configure environment
cp .env.example .envRequired:
ODOO_URL=https://yourcompany.odoo.com
ODOO_DB=your_database
ODOO_USERNAME=your_username
ODOO_PASSWORD=your_passwordOptional:
ODOO_MCP_DEFAULT_LIMIT=50
ODOO_MCP_MAX_LIMIT=80
LOG_LEVEL=INFO3) Validate and run
odooclaw-mcp --check-config
odooclaw-mcpAlternative:
python -m odoo_mcpRelated MCP server: Odoo MCP Server
MCP Client Configuration (stdio)
{
"mcpServers": {
"odoo": {
"command": "odooclaw-mcp",
"env": {
"ODOO_URL": "https://yourcompany.odoo.com",
"ODOO_DB": "your_database",
"ODOO_USERNAME": "your_username",
"ODOO_PASSWORD": "your_password",
"ODOO_MCP_DEFAULT_LIMIT": "50",
"ODOO_MCP_MAX_LIMIT": "80"
}
}
}
}Tool call payload contract
When calling tools through the MCP protocol, arguments must be wrapped in a
top-level payload object.
Valid shape:
{
"name": "odoo_search",
"arguments": {
"payload": {
"model": "res.partner",
"domain": [["customer_rank", ">", 0]],
"limit": 3
}
}
}If payload is omitted, validation fails with an error equivalent to
Field required: payload.
Scope
129 MCP tools for Odoo operations (CRUD + business actions + migration workflows)
Pydantic validation for all tool payloads
Odoo 18 compatibility helpers (customer_rank / supplier_rank / payment_state)
Security guards (model allowlist, denylisted fields, action guard, unlink blocked)
Structured logging and audit actions
Available Tools
The server currently exposes 129 MCP tools.
Note: the grouped tables below focus on common/high-value tools. Use MCP
list_toolsto inspect the full live tool catalog for your installed version.
Core record operations
Tool | Purpose |
| Search records in an allowed model using Odoo domain syntax. |
| Read selected fields from specific record IDs. |
| Combined search + read for efficient retrieval. |
| Create a new record in an allowed model. |
| Update existing records in an allowed model. |
| Invoke an Odoo model method such as |
| Return a compact, human-friendly summary for a record. |
Partners, sales, and CRM
Tool | Purpose |
| Find a customer or vendor by name, VAT, or email. |
| Get a partner overview with useful business context. |
| Search sale orders by name, partner, or state. |
| Retrieve a sale order summary including lines. |
| Create a quotation / sale order with product lines. |
| Confirm a quotation into a sale order. |
| Create a CRM lead / opportunity. |
Accounting, purchasing, and payments
Tool | Purpose |
| Create a purchase order from partner and line data. |
| Create a vendor bill. |
| Find posted invoices or bills pending payment using Odoo 18 semantics. |
| Get a detailed summary of an invoice or bill. |
| Register a payment for a specific invoice. |
Projects, activities, and chatter
Tool | Purpose |
| Search project tasks by name, project, or stage. |
| Create a new project task. |
| Update task stage, assignee, or deadline. |
| Schedule an activity on a record. |
| List pending activities, optionally filtered by model or assignee. |
| Mark an activity as completed. |
| Post a chatter message on a record. |
| Create a summary-style activity for follow-up. |
| Close an activity and record the reason. |
| Log a timesheet entry for a project or task. |
Support, contracts, stock, and instance capabilities
Tool | Purpose |
| Report which modules and capabilities are available in the connected instance. |
| Create a helpdesk ticket directly. |
| Create a helpdesk ticket linked to a partner. |
| Prepare a draft support email from a ticket context. |
| Add a line to a contract. |
| Replace an existing contract line with a new one. |
| Close a contract line with a reason and close date. |
| Inspect stock quantities for a product. |
| Create a meeting or appointment with attendees. |
Introspection
Tool | Purpose |
| Inspect the fields and schema of a model such as |
Available Resources
The server also exposes 5 MCP resources for discovery and context:
Resource | Purpose |
| Odoo 18 field reference for common model/domain pitfalls such as |
| JSON list of models currently allowed by the security policy. |
| Technical schema for a specific Odoo model. |
| JSON summary of a specific record. |
| Summary of the chatter history for a specific record. |
Guardrails and Runtime Behavior
Uses standard Odoo JSON-RPC endpoints; it does not depend on OdooClaw delegation.
Tool payloads are validated with Pydantic before execution.
Model access is restricted by an allowlist defined in the server configuration.
Sensitive write fields are denylisted and
unlinkis blocked.Search-style tools use default and maximum limits (
ODOO_MCP_DEFAULT_LIMIT,ODOO_MCP_MAX_LIMIT).sender_idis treated as audit/context metadata; execution runs as the authenticated Odoo session user.Some tools require the corresponding Odoo apps/modules to be installed (CRM, Helpdesk, Projects, Contracts, Inventory, etc.).
Security Model
The server uses standard Odoo JSON-RPC endpoints and executes operations as the configured Odoo session user.
For production, use a dedicated least-privilege Odoo account.
Production Notes
This is a
stdioMCP server, not an HTTP API service.Docker/Compose support is mainly for packaging or controlled runtime scenarios.
In normal usage, your MCP client launches the server process directly.
Keep Odoo credentials in environment variables or a secrets manager.
Known Limitations
One Odoo credential context per MCP process.
ODOO_DBis currently required by the authentication flow.Some tools require specific Odoo apps/modules (CRM, Helpdesk, Project, etc.).
Designed for Odoo 18 field semantics.
Development
pip install -e .[dev]
ruff check src tests
black --check src tests
mypy src --ignore-missing-imports
pytest tests -v
python -m build
twine check dist/*Docs
License
MIT - see LICENSE.
Available Tools
85 toolsodoo_apply_report_patch_safeD
Inputs: payload (required).
odoo_apply_view_patch_safeD
Inputs: payload (required).
odoo_approve_expenseD
Inputs: payload (required).
odoo_assist_report_migrationD
Inputs: payload (required).
odoo_assist_view_migrationD
Inputs: payload (required).
odoo_batch_assist_report_migrationD
Inputs: payload (required).
odoo_batch_assist_view_migrationD
Inputs: payload (required).
odoo_check_inD
Inputs: payload (required).
odoo_check_outD
Inputs: payload (required).
odoo_close_activity_with_reasonD
Inputs: payload (required).
odoo_close_contract_lineD
Inputs: payload (required).
odoo_confirm_sale_orderC
Confirms a sale order, moving it from draft/sent to 'sale' status.
Inputs: payload (required). Returns: result
odoo_createD
Inputs: payload (required). Returns: result
odoo_create_activityD
Inputs: payload (required). Returns: result
odoo_create_activity_summaryD
Inputs: payload (required).
odoo_create_calendar_eventB
Creates a calendar event (appointment or meeting) handling multiple attendees automatically.
Inputs: payload (required). Returns: result
odoo_create_contract_lineD
Inputs: payload (required).
odoo_create_expense_reportD
Inputs: payload (required).
odoo_create_helpdesk_ticketD
Inputs: payload (required).
odoo_create_helpdesk_ticket_from_partnerD
Inputs: payload (required).
odoo_create_journal_entryD
Inputs: payload (required).
odoo_create_leadC
Creates a new CRM Lead / Opportunity.
Inputs: payload (required). Returns: result
odoo_create_purchase_orderD
Inputs: payload (required). Returns: result
odoo_create_sale_orderB
Creates a sale order (presupuesto) for a customer with product lines.
Inputs: payload (required). Returns: result
odoo_create_taskD
Inputs: payload (required). Returns: result
odoo_create_vendor_bill_from_ocr_validatedD
Inputs: payload (required).
odoo_create_vendor_invoiceD
Inputs: payload (required). Returns: result
odoo_draft_ticket_emailD
Inputs: payload (required).
odoo_find_attendanceD
Inputs: payload (required).
odoo_find_missing_timesheetsD
Inputs: payload (required).
odoo_find_my_tasksD
Inputs: payload (required).
odoo_find_partnerD
Inputs: payload (required). Returns: result
odoo_find_pending_invoicesA
Find invoices/bills pending payment for a partner. Uses correct Odoo 18 domains: state='posted' AND payment_state in ('not_paid','partial'). DO NOT use state='open' - that is Odoo 13 and does NOT exist in Odoo 18. Omit partner_id to get ALL pending invoices.
Inputs: payload (required).
odoo_find_sale_orderD
Inputs: payload (required).
odoo_find_taskD
Inputs: payload (required).
odoo_find_unreconciled_bank_linesD
Inputs: payload (required).
odoo_find_views_by_modelD
Inputs: payload (required).
odoo_get_ar_ap_agingD
Inputs: payload (required).
odoo_get_capabilitiesD
Inputs: payload (required).
odoo_get_invoice_summaryA
Get complete details of a specific invoice (account.move), including lines.
Inputs: payload (required).
odoo_get_model_schemaA
Retrieve the fields and schema for a given Odoo model (e.g. 'res.partner'). Very useful if a field search fails.
Inputs: payload (required). Returns: result
odoo_get_my_today_summaryD
Inputs: payload (required).
odoo_get_partner_summaryD
Inputs: payload (required).
odoo_get_product_stockB
Returns stock quantities (on hand, reserved) for a given product.
Inputs: payload (required).
odoo_get_record_summaryD
Inputs: payload (required).
odoo_get_report_templateD
Inputs: payload (required).
odoo_get_sale_order_summaryD
Inputs: payload (required).
odoo_get_tax_summaryD
Inputs: payload (required).
odoo_get_view_by_xmlidD
Inputs: payload (required).
odoo_invoke_actionD
Inputs: payload (required).
odoo_list_pending_activitiesD
Inputs: payload (required).
odoo_log_task_timesheetD
Inputs: payload (required). Returns: result
odoo_log_timesheetC
Logs a timesheet entry for a project or task.
Inputs: payload (required). Returns: result
odoo_mark_activity_doneD
Inputs: payload (required). Returns: result
odoo_notify_pending_actionsD
Inputs: payload (required).
odoo_post_chatter_messageD
Inputs: payload (required). Returns: result
odoo_post_journal_entryD
Inputs: payload (required).
odoo_preview_report_patchD
Inputs: payload (required).
odoo_preview_view_patchD
Inputs: payload (required).
odoo_propose_report_patchD
Inputs: payload (required).
odoo_propose_view_patchD
Inputs: payload (required).
odoo_readD
Inputs: payload (required).
odoo_reconcile_bank_lineD
Inputs: payload (required).
odoo_register_invoice_paymentD
Inputs: payload (required).
odoo_register_paymentC
Registers a payment for a specific customer or vendor invoice.
Inputs: payload (required). Returns: result
odoo_replace_contract_lineD
Inputs: payload (required).
odoo_rollback_patch_safeD
Inputs: payload (required).
odoo_run_period_close_checksD
Inputs: payload (required).
odoo_scan_report_migration_issuesD
Inputs: payload (required).
odoo_scan_view_migration_issuesD
Inputs: payload (required).
odoo_searchD
Inputs: payload (required).
odoo_search_readD
Inputs: payload (required).
odoo_submit_expense_reportD
Inputs: payload (required).
odoo_suggest_bank_reconciliationD
Inputs: payload (required).
odoo_suggest_expense_account_and_taxesD
Inputs: payload (required).
odoo_suggest_timesheet_from_attendanceD
Inputs: payload (required).
odoo_test_view_compilationD
Inputs: payload (required).
odoo_update_taskD
Inputs: payload (required). Returns: result
odoo_update_task_statusD
Inputs: payload (required).
odoo_validate_report_patchD
Inputs: payload (required).
odoo_validate_vendor_bill_duplicateD
Inputs: payload (required).
odoo_validate_view_patchD
Inputs: payload (required).
odoo_visualize_report_patchD
Inputs: payload (required).
odoo_visualize_view_patchD
Inputs: payload (required).
odoo_writeD
Inputs: payload (required). Returns: result
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 85 tools
With 85 tools covering many Odoo modules, there is significant overlap between generic CRUD tools (odoo_create, odoo_write) and model-specific tools (odoo_create_sale_order). Many tools lack descriptions, making it hard for an agent to distinguish when to use generic vs. specific tools.
All tools share the 'odoo_' prefix, but after that, naming is inconsistent: some are generic verbs (odoo_create, odoo_search), while most follow verb_noun (odoo_create_sale_order). This mixed pattern reduces predictability.
85 tools is far beyond typical well-scoped MCP servers (3-15). The server attempts to cover a vast Odoo API surface, resulting in an overwhelming number of tools, many of which are redundant or rarely used.
While the tool set spans many modules, it lacks key operations in each domain (e.g., no cancel_sale_order, no delete_task). Generic tools like odoo_write may compensate, but the surface feels incomplete and unbalanced.
Maintenance
Related MCP Connectors
MCP server unifying ERPs, CRMs, APIs and knowledge base for Claude, ChatGPT and Gemini.
Odoo MCP connector for ChatGPT and Claude: ask sales, invoices and stock in plain words. Read-only.
Odoo virtual employee via MCP: query, create, modify records, workflows, PDFs, and activities.
Your AI agent deploys, migrates & upgrades self-hosted Odoo ERP on a server you own.
Related MCP Servers
- AlicenseNot gradedqualityAmaintenanceAn MCP server that enables AI assistants like Claude to interact with Odoo ERP systems through natural language, allowing users to search, create, update, and manage business data in their Odoo instance.39,303 PyPI413Mozilla Public 2.0
- AlicenseBqualityDmaintenanceAn MCP server that enables AI assistants to interact with Odoo ERP apps like Inventory, CRM, Sales, and Manufacturing. It allows users to read, create, and manage Odoo records and workflows using natural language commands.2515 npm1ISC
- AlicenseNot gradedqualityDmaintenanceAn MCP server that enables AI assistants to interact with Odoo ERP, allowing natural language queries, record creation, updates, and deletions.LGPL 3.0
- AlicenseNot gradedqualityCmaintenanceAn MCP server that enables AI assistants to interact with Odoo ERP systems, allowing natural language access to business data, CRUD operations, and instance management without requiring Odoo module installation.1MIT