odoo-mcp
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., "@odoo-mcplist my Odoo profiles"
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.
Odoo MCP Multi (own build)
A from-scratch, open MCP server that turns Claude (or any MCP client) into an
operator of the Odoo ORM — exactly the 12 tools described in
Odoo_MCP_Tools_Guide.md.
It is a thin, ergonomic wrapper around Odoo's external API (XML-RPC):
Claude ──(MCP tool)──► server.py ──(XML-RPC /xmlrpc/2/object)──► Odoo (PostgreSQL)
◄──(structured JSON)── ◄──(ORM data)──Everything ultimately routes through one call:
models.execute_kw(db, uid, key, model, method, args, kwargs).
The 12 tools
Tool | Group | Risk | Purpose |
| Discover | — | See configured environments (call FIRST) |
| Discover | — | Odoo server version |
| Discover | — | Find tables (models) |
| Discover | — | See a model's schema |
| Read | — | Query data (returns pagination envelope) |
| Read | — | Native reports (Odoo 17+) |
| Write | ⚠️ | Create a record |
| Write | ⚠️ | Update records |
| Write | ⚠️⚠️ | Delete records |
| Write | ⚠️⚠️ | Run ANY model method |
| Bulk | — | Export (backup/migration) |
| Bulk | ⚠️ | Import/upsert in bulk |
Related MCP server: odoo-mcp-server
Quick install — one command, no clone (recommended)
Requires uv (pip install uv). This fetches the
code straight from GitHub, installs it in an isolated env, and registers it with
Claude — credentials are passed inline as env vars, so there's no file to edit:
claude mcp add odoo -s user \
-e ODOO_URL=https://your-instance.odoo.com \
-e ODOO_DB=your-db-name \
-e ODOO_USER=you@company.com \
-e ODOO_PASSWORD=your-api-key \
-- uvx --from git+https://github.com/AleemHaider/odoo-mcp odoo-mcpThat's the whole install. Start Claude and ask "List my Odoo profiles".
For multiple Odoo instances, use the profiles.json flow below instead.
Setup (manual / multi-profile)
1. Install
pip install -r requirements.txt # installs fastmcp2. Configure profiles
Copy the example and fill in your Odoo credentials:
cp profiles.example.json profiles.json{
"default": "Interhi",
"profiles": {
"Interhi": {
"url": "https://your-instance.odoo.com",
"database": "your-db-name",
"username": "admin",
"password": "your-api-key-or-password"
}
}
}Tip: In Odoo, generate an API key (Settings → Users → API Keys) and use it as the
password. Mark production profiles with"readonly": trueto block all mutations from that profile.
Alternative (single profile via env vars, no file):
export ODOO_URL="https://your-instance.odoo.com"
export ODOO_DB="your-db-name"
export ODOO_USER="admin"
export ODOO_PASSWORD="your-api-key"3. Run
python server.py # speaks MCP over stdioConnect it to Claude
Claude Desktop
Add to claude_desktop_config.json
(macOS: ~/Library/Application Support/Claude/, Windows: %APPDATA%\Claude\):
{
"mcpServers": {
"odoo": {
"command": "python",
"args": ["/absolute/path/to/odoo mcp/server.py"]
}
}
}Claude Code (CLI)
claude mcp add odoo -- python "/absolute/path/to/odoo mcp/server.py"Restart the client; the 12 tools appear automatically.
Key concepts (how to drive it)
Domains use Odoo prefix (Polish) notation — never the words
and/or:["&", ["state","=","posted"], ["move_type","=","out_invoice"]] ["|", ["a","=",1], ["b","=",2]]Every read returns a pagination envelope:
{"records": [...], "total": 128, "limit": 100, "offset": 0, "has_more": true, "next_offset": 100, "format": "json"}If
has_moreis true, call again withoffset = next_offset.Output
format:json(process),compact(light array-of-arrays),table(Markdown for users),html(paste into Odoo),csv(spreadsheet).IDs for methods always go in a list:
args=[[490749]].Relational command tuples:
[[0,0,{...}]](new o2m line),[[6,0,[id1,id2]]](set m2m).execute_kw is the swiss-army knife — any Odoo button = a method behind it:
account.move / action_post / [[490749]]validates an invoice.
Safety notes
Always run
list_available_profilesfirst to confirm the environment.Read-only introspection via
execute_kw(search/read/fields_get/read_group…) is allowed onreadonlyprofiles; mutating methods are blocked.Errors come back as
{"success": false, "error": "..."}with the cleaned Odoo message (e.g.Invalid leaf,Expected singleton).
Wraps the Odoo external API. Concept & tool set documented in
Odoo_MCP_Tools_Guide.md.
This server cannot be deployed
Maintenance
Related MCP Connectors
Odoo MCP Pack — ERP/CRM via Odoo's external JSON-RPC API.
Marketo MCP server for AI. 130 tools to operate Marketo from Claude, Cursor, or ChatGPT.
100+ MCP tools for AI agents: content metadata, trade intelligence, business-expertise analysis.
- odooOAuthcom.odooconsole
Odoo ERP for AI agents: hosted OAuth endpoint, gated writes, one endpoint for every instance.
Related MCP Servers
- AlicenseAqualityDmaintenanceEnables AI agents to interact with Odoo 19 via JSON-2 API, supporting CRUD operations on Odoo models through MCP tools.1MIT
- AlicenseNot gradedqualityCmaintenanceEnables interaction with Odoo ERP systems for product, customer, order, invoice, and payment management using MCP tools.6MIT
- AlicenseNot gradedqualityDmaintenanceEnables AI assistants to fully interact with Odoo ERP instances over XML-RPC, supporting read and write operations on any model without requiring Odoo module installation.4AGPL 3.0
- FlicenseNot gradedqualityCmaintenanceEnables Claude to read and write data in an Odoo instance, including stock, invoices, clients, and reminders, through a secure MCP connector.-