Odoo Mcp

io.github.nicolasramosPublished by GitHub account nicolasramosv1.0.1Updated Oct 26, 2026

MCP server for Odoo 18 with 38 business tools

Overview

AI-generated overview

Local MCP server that connects an assistant to an Odoo 18 instance, exposing tools to search, read and change business records such as partners, sales…

What you can do
  • Search, read and summarize records in allowed Odoo models using domain syntax, plus inspect model schemas and instance capabilities.
  • Create and update records, and invoke model methods such as action or button calls.
  • Work with partners, quotations and sale orders, CRM leads, purchase orders, vendor bills, invoices and payments.
  • Manage project tasks, activities, chatter messages and timesheets.
  • Handle helpdesk tickets, contract lines, product stock levels and calendar events.
When to use it
Useful when an assistant should work directly with live Odoo 18 business data — looking up customers, drafting or confirming quotations, checking pending invoices, updating tasks or posting chatter — instead of copying data by hand.
Requirements
Runs locally over stdio from the PyPI package odoo-18-mcp-server (Python). Requires ODOO_URL, ODOO_DB, ODOO_USERNAME and ODOO_PASSWORD, plus optional ODOO_MCP_DEFAULT_LIMIT and ODOO_MCP_MAX_LIMIT. Network access to the Odoo instance; some tools need the matching Odoo apps installed.
Before you install
The server acts as the configured Odoo user, so it can create and update records and invoke business actions such as confirming orders or registering payments. Use a dedicated least-privilege account and keep ODOO_PASSWORD in environment variables or a secrets manager. Deletion is blocked and sensitive fields are denylisted, but writes still change real business data.

Installation

In SourceWeft

  1. Open Odoo Mcp in the dashboard and add it to a workspace.
  2. Enable the server for the chats that should use its tools.

Desktop only via STDIO. STDIO servers start a local process, so they need the SourceWeft desktop host.

Other MCP clients

Follow the launch instructions in the repository.

README

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-mcp
  • odoo-mcp-server
  • odoo-18-mcp-server

Quick Start

1) Install

bash
pip install odooclaw-mcp

From source:

bash
git clone https://github.com/nicolasramos/odooclaw-mcp.gitcd odooclaw-mcppip install -e .

2) Configure environment

bash
cp .env.example .env

Required:

env
ODOO_URL=https://yourcompany.odoo.comODOO_DB=your_databaseODOO_USERNAME=your_usernameODOO_PASSWORD=your_password

Optional:

env
ODOO_MCP_DEFAULT_LIMIT=50ODOO_MCP_MAX_LIMIT=80LOG_LEVEL=INFO

3) Validate and run

bash
odooclaw-mcp --check-configodooclaw-mcp

Alternative:

bash
python -m odoo_mcp

MCP Client Configuration (stdio)

json
{  "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:

json
{  "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_tools to inspect the full live tool catalog for your installed version.

Core record operations

ToolPurpose
odoo_searchSearch records in an allowed model using Odoo domain syntax.
odoo_readRead selected fields from specific record IDs.
odoo_search_readCombined search + read for efficient retrieval.
odoo_createCreate a new record in an allowed model.
odoo_writeUpdate existing records in an allowed model.
odoo_invoke_actionInvoke an Odoo model method such as action_* or button_*.
odoo_get_record_summaryReturn a compact, human-friendly summary for a record.

Partners, sales, and CRM

ToolPurpose
odoo_find_partnerFind a customer or vendor by name, VAT, or email.
odoo_get_partner_summaryGet a partner overview with useful business context.
odoo_find_sale_orderSearch sale orders by name, partner, or state.
odoo_get_sale_order_summaryRetrieve a sale order summary including lines.
odoo_create_sale_orderCreate a quotation / sale order with product lines.
odoo_confirm_sale_orderConfirm a quotation into a sale order.
odoo_create_leadCreate a CRM lead / opportunity.

Accounting, purchasing, and payments

ToolPurpose
odoo_create_purchase_orderCreate a purchase order from partner and line data.
odoo_create_vendor_invoiceCreate a vendor bill.
odoo_find_pending_invoicesFind posted invoices or bills pending payment using Odoo 18 semantics.
odoo_get_invoice_summaryGet a detailed summary of an invoice or bill.
odoo_register_paymentRegister a payment for a specific invoice.

Projects, activities, and chatter

ToolPurpose
odoo_find_taskSearch project tasks by name, project, or stage.
odoo_create_taskCreate a new project task.
odoo_update_taskUpdate task stage, assignee, or deadline.
odoo_create_activitySchedule an activity on a record.
odoo_list_pending_activitiesList pending activities, optionally filtered by model or assignee.
odoo_mark_activity_doneMark an activity as completed.
odoo_post_chatter_messagePost a chatter message on a record.
odoo_create_activity_summaryCreate a summary-style activity for follow-up.
odoo_close_activity_with_reasonClose an activity and record the reason.
odoo_log_timesheetLog a timesheet entry for a project or task.

Support, contracts, stock, and instance capabilities

ToolPurpose
odoo_get_capabilitiesReport which modules and capabilities are available in the connected instance.
odoo_create_helpdesk_ticketCreate a helpdesk ticket directly.
odoo_create_helpdesk_ticket_from_partnerCreate a helpdesk ticket linked to a partner.
odoo_draft_ticket_emailPrepare a draft support email from a ticket context.
odoo_create_contract_lineAdd a line to a contract.
odoo_replace_contract_lineReplace an existing contract line with a new one.
odoo_close_contract_lineClose a contract line with a reason and close date.
odoo_get_product_stockInspect stock quantities for a product.
odoo_create_calendar_eventCreate a meeting or appointment with attendees.

Introspection

ToolPurpose
odoo_get_model_schemaInspect the fields and schema of a model such as res.partner or account.move.

Available Resources

The server also exposes 5 MCP resources for discovery and context:

ResourcePurpose
odoo://context/odoo18-fields-referenceOdoo 18 field reference for common model/domain pitfalls such as customer_rank, supplier_rank, and payment_state.
odoo://modelsJSON list of models currently allowed by the security policy.
odoo://model/{model_name}/schemaTechnical schema for a specific Odoo model.
odoo://record/{model}/{id}/summaryJSON summary of a specific record.
odoo://record/{model}/{id}/chatter_summarySummary 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 unlink is blocked.
  • Search-style tools use default and maximum limits (ODOO_MCP_DEFAULT_LIMIT, ODOO_MCP_MAX_LIMIT).
  • sender_id is 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 stdio MCP 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_DB is currently required by the authentication flow.
  • Some tools require specific Odoo apps/modules (CRM, Helpdesk, Project, etc.).
  • Designed for Odoo 18 field semantics.

Development

bash
pip install -e .[dev]ruff check src testsblack --check src testsmypy src --ignore-missing-importspytest tests -vpython -m buildtwine check dist/*

Docs

License

MIT - see LICENSE.

Source: README.md at commit 828344a

Tools

0
SourceWeft has not started this package in its sandbox yet, so its tools are not known.

Version history

1
  1. v1.0.1LatestSep 16, 2026

Score

50% of the applicable checks met

How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.

  • Reached in the last 30 days25 pts

    Keep the endpoint answering the MCP handshake; SourceWeft probes it every 30 days.

  • Auth declared10 pts

    Declare the credential headers in the registry entry, or keep the endpoint answering the probe so its auth can be classified.

  • Tools listed15 pts

    Answer tools/list without a credential, or ship a package that starts in a sandbox without one.

  • DescriptionRequired15 pts
  • Logo10 pts
  • Documentation15 pts
  • License10 pts