How to use MCP with Odoo.
MCP turns Odoo into a set of tools an LLM can call. The useful work is deciding which tools exist — not exposing every model because you can.
Anthropic describes MCP as a standardized way for applications to provide context to LLMs. For Odoo, that means the ERP shows up as tools, not as a CSV dump.
A user asks: “Which customers have overdue invoices?” The client picks a tool. The server queries Odoo. The model summarises. That loop is the whole product.
What is the MCP architecture?
MCP client — Claude, ChatGPT-compatible MCP apps, Gemini agents, Cursor, other MCP-compatible agents. MCP server — the bridge. Odoo — the system of record. The protocol itself is the Model Context Protocol.
Best default for a business: AI → MCP → a small set of controlled tools → Odoo API or ORM → Odoo. That is better than handing the model every model and method.
What should your Odoo MCP expose?
Start with: search_customers, get_customer, search_sales_orders, get_sales_order, search_invoices, search_products, get_inventory, search_opportunities. Add writes later, named and reviewed.
Read vs write
“Show me unpaid invoices” is informational. “Cancel these invoices” changes the books. Start read-only. Can AI agents access Odoo? is the permission framing.
Permissions and JSON-2
MCP does not bypass Odoo security. JSON-2 checks access rights, record rules and field access for the authenticated user — which is why the user must be a dedicated bot account. Odoo MCP for Odoo 19 covers JSON-2 vs deprecated XML-RPC. Client how-tos: ChatGPT, Claude, Gemini, CrewAI.
Expose jobs, not models
An Odoo database has hundreds of models. An MCP server should have a handful of tools. The conversion is the work: “help collections chase overdue invoices” becomes search_overdue_invoices plus get_invoice plus, later, post_chatter_note — not account.move with every method.
Write a sentence for each tool as if it were a user-facing button. If you cannot, the tool is too wide. Wide tools make models improvisational; improvisation in an ERP is expensive.
Split read and write into different tools even when they touch the same model. That lets you ship reads this week and keep writes off until someone owns the blast radius. Security checklist.
How to use MCP with Odoo 19 without picking a deprecated RPC
If the MCP process is outside Odoo, implement tools with JSON-2: POST /json/2/<model>/<method>, Authorization: bearer, named arguments. Do not start a new sidecar on XML-RPC because a 2024 gist did.
If the MCP process is an Odoo module, call the ORM and skip the Online Custom-plan API. That is still “using MCP with Odoo.” The client neither knows nor cares which back end you chose.
Odoo 19.4 adds an official-sounding MCP door. Use it if it exists on your edition and plan; keep JSON-2 for software-to-software work either way. JSON-2 explained.
Attach one server to every MCP-compatible client you actually use
ChatGPT, Claude, Gemini and Cursor each have a registration UI. The server URL and OAuth or bearer story should be documented once. Copy-pasting different Odoo passwords into each vendor is how you lose the audit trail.
Test the same prompt in two clients. If answers diverge, you have a client allow-list or caching issue, not two different ERPs.
Definition if you still need the noun: What is Odoo MCP?
Official documentation
FAQ
What is the MCP architecture for Odoo?
An MCP client (Claude, ChatGPT, Gemini, a coding agent) talks to an MCP server, which talks to Odoo via JSON-2, older RPCs, or the ORM inside a module.
Should I expose all Odoo models?
No. Publish business capabilities: search customers, get a sales order, search invoices. Add writes as a separate, reviewed list.
Does MCP bypass Odoo security?
No. JSON-2 and the ORM still apply access rights, record rules and field access for the authenticated user.
Is XML-RPC the right API for new MCP servers?
Not on Odoo 19. JSON-2 is the current external API; older RPCs are deprecated and scheduled for removal in Odoo 22. JSON-2 vs XML-RPC.
The rest of the MCP cluster
Start read-only. Ask a real question.
Sandbox on sample data, or we put MCP on your instance.