odoo-mcp
Click on "Install 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 |
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 installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
100+ MCP tools for AI agents: content metadata, trade intelligence, business-expertise analysis.
Hosted MCP with 91 agent tools: X, domains, SEO, Maps, Trends, Search, YouTube, TikTok, and more.
Augments MCP Server - A comprehensive framework documentation provider for Claude Code
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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/AleemHaider/odoo-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server