| Availability |
Odoo Online
Odoo.sh
On Premise
|
| Odoo Apps Dependencies |
Discuss (mail)
|
| Lines of code | 2109 |
| Technical Name |
muk_mcp |
| License | LGPL-3 |
| Website | http://www.mukit.at |
| Versions | 17.0 18.0 19.0 |
| Availability |
Odoo Online
Odoo.sh
On Premise
|
| Odoo Apps Dependencies |
Discuss (mail)
|
| Lines of code | 2109 |
| Technical Name |
muk_mcp |
| License | LGPL-3 |
| Website | http://www.mukit.at |
| Versions | 17.0 18.0 19.0 |
MuK MCP Server
Model Context Protocol Server for AI Agent Integration
MuK IT GmbH - www.mukit.at
Overview
Turn your Odoo instance into a native MCP (Model Context Protocol)
server. Any MCP-compatible AI client — Claude Code, OpenCode,
Claude Desktop, Cursor, Windsurf, Codex CLI — can connect to the
/mcp endpoint and interact with your business data through
a standardized set of tools. No middleware, no extra processes.
Odoo is the MCP server.
Ships with 15 production-ready tools covering the full Odoo ORM surface: model discovery, schema introspection, search, read, create, update, delete, grouped aggregation, method execution, and chatter integration. Add your own tools through the backend UI — no code deployment required.
Native MCP Endpoint
The /mcp endpoint speaks the full MCP Streamable HTTP
protocol natively, handling JSON-RPC 2.0 messages for
initialize, tools/list, and
tools/call. Supports stateful sessions, Server-Sent
Events for real-time notifications, and batch requests. Authentication
uses Bearer tokens — either dedicated MCP keys with optional
model-level scopes or standard Odoo API keys.
Client Setup
Connect your preferred AI coding assistant in seconds. Generate an MCP key from your Odoo user preferences, then add the server to your client configuration.
Claude Code
claude mcp add odoo \ --transport http \ --url https://your-odoo.com/mcp \ --header "Authorization: Bearer YOUR_MCP_KEY"
Or add to your claude_code_config.json:
{
"mcpServers": {
"odoo": {
"type": "url",
"url": "https://your-odoo.com/mcp",
"headers": {
"Authorization": "Bearer YOUR_MCP_KEY"
}
}
}
}
OpenCode
Add to your .opencode/config.json or opencode.json:
{
"mcp": {
"odoo": {
"type": "remote",
"url": "https://your-odoo.com/mcp",
"headers": {
"Authorization": "Bearer YOUR_MCP_KEY"
}
}
}
}
Claude Desktop
Add to your claude_desktop_config.json:
{
"mcpServers": {
"odoo": {
"type": "url",
"url": "https://your-odoo.com/mcp",
"headers": {
"Authorization": "Bearer YOUR_MCP_KEY"
}
}
}
}
Cursor
Add to your .cursor/mcp.json:
{
"mcpServers": {
"odoo": {
"url": "https://your-odoo.com/mcp",
"headers": {
"Authorization": "Bearer YOUR_MCP_KEY"
}
}
}
}
Codex CLI
codex --mcp-server "odoo=https://your-odoo.com/mcp" \
--mcp-header "odoo=Authorization: Bearer YOUR_MCP_KEY"
15 Built-in Tools
Ships with a complete set of ORM tools covering the full lifecycle of Odoo data — from discovery to manipulation. Every tool is manageable via the backend UI and can be enabled, disabled, or customized individually.
| Tool | Category | Description |
|---|---|---|
list_models |
Read | Discover available Odoo models by substring search |
list_modules |
Read | List installed modules with versions and states |
get_model_schema |
Read | Get field definitions, types, relations, and selection values |
get_user_context |
Read | Authenticated user info, company, language, and security groups |
get_access_rights |
Read | Check CRUD permissions and list access control rules |
search_read |
Read | Search records by domain with pagination and sorting |
read_record |
Read | Read specific records by their database IDs |
search_count |
Read | Count records matching a domain filter |
read_group |
Read | Grouped aggregation (GROUP BY) with sum/count |
get_record_messages |
Read | Retrieve chatter history, comments, and field tracking |
create_record |
Write | Create new records with relational field support |
update_record |
Write | Partial updates on existing records by ID |
delete_record |
Write | Permanently delete records by ID |
post_message |
Write | Post comments or internal notes on chatter threads |
execute_method |
Write | Call any public method on a model (private methods blocked) |
Extensible Tool Registry
Add custom tools directly through the backend UI at
Settings > MCP Server > Tools — no code
deployment required. Each tool consists of a name, description, JSON
Schema for input parameters, and Python code executed in a sandboxed
safe_eval context. Tools can be enabled, disabled, and
reordered individually. The AI client is automatically notified when
the tool list changes.
Security & Access Control
Every MCP key supports fine-grained Model Scopes — restrict access to specific models with independent read, write, create, and delete permissions. Keys without scopes have unrestricted access (subject to the user's own Odoo permissions).
Built-in rate limiting (configurable per key, default 60 req/min) protects against runaway AI loops. A full audit log records every MCP request with method, tool, model, duration, and status — accessible at Settings > MCP Server > Audit Log.
Session Management
The server maintains stateful sessions per the MCP specification. Sessions track the last activity timestamp and are automatically cleaned up after the configured timeout (default: 24 hours). Users can view and revoke their active MCP sessions from their user preferences. Administrators can manage all sessions from the backend menu.
Want more?
Are you having troubles with your Odoo integration? Or do you feel
your system lacks of essential features?
If your answer is YES
to one of the above questions, feel free to contact us at anytime
with your inquiry.
We are looking forward to discuss your
needs and plan the next steps with you.
Our Services
Odoo
Development
Odoo
Integration
Odoo
Infrastructure
Odoo
Training
Odoo
Support
MuK MCP Server
Implements a native MCP (Model Context Protocol) server inside Odoo, exposing business data and operations to any MCP-compatible AI client. The server speaks MCP Streamable HTTP at a single /mcp endpoint using Bearer token authentication (Odoo API keys or dedicated MCP keys).
Compatible clients include Claude Desktop, Claude Code, OpenCode, Cursor, Windsurf, Codex CLI, and any tool that supports the MCP Streamable HTTP transport.
Installation
To install this module, you need to:
Download the module and add it to your Odoo addons folder. Afterward, log on to your Odoo server and go to the Apps menu. Trigger the debug mode and update the list by clicking on the "Update Apps List" link. Now install the module by clicking on the install button.
Upgrade
To upgrade this module, you need to:
Download the module and add it to your Odoo addons folder. Restart the server and log on to your Odoo server. Select the Apps menu and upgrade the module by clicking on the upgrade button.
Configuration
Creating an MCP Key
- Log in to Odoo and navigate to your user preferences (Settings > Users > Preferences).
- In the Account Security tab, click Add MCP Key.
- Enter a description (e.g. "Claude Code") and optionally restrict access to specific models via Model Scopes.
- Click Generate Key and copy the key immediately — it will not be shown again.
Server Settings
Navigate to Settings > General Settings > MCP Server to configure:
- Session Timeout — Hours after which inactive MCP sessions are cleaned up (default: 24).
- Log Retention — Days after which audit log entries are automatically deleted (default: 30).
API Key Scopes
Each MCP key can optionally be restricted to specific models with fine-grained permissions (read, write, create, delete). Leave the scope list empty to allow unrestricted access.
Rate Limiting
Each key has a configurable rate limit (requests per minute). Set to 0 for unlimited. The default is 60 requests per minute.
Client Setup
The MCP server endpoint is https://<your-odoo>/mcp. All clients authenticate via a Bearer token — either a dedicated MCP key (created in user preferences) or a standard Odoo API key with rpc scope.
Claude Code
claude mcp add odoo \ --transport http \ --url https://your-odoo.com/mcp \ --header "Authorization: Bearer YOUR_MCP_KEY"
Or add it directly to your claude_code_config.json:
{ "mcpServers": { "odoo": { "type": "url", "url": "https://your-odoo.com/mcp", "headers": { "Authorization": "Bearer YOUR_MCP_KEY" } } } }
OpenCode
Add the server to your .opencode/config.json or opencode.json:
{ "mcp": { "odoo": { "type": "remote", "url": "https://your-odoo.com/mcp", "headers": { "Authorization": "Bearer YOUR_MCP_KEY" } } } }
Claude Desktop
Add to your claude_desktop_config.json:
{ "mcpServers": { "odoo": { "type": "url", "url": "https://your-odoo.com/mcp", "headers": { "Authorization": "Bearer YOUR_MCP_KEY" } } } }
Cursor
Add to your .cursor/mcp.json:
{ "mcpServers": { "odoo": { "url": "https://your-odoo.com/mcp", "headers": { "Authorization": "Bearer YOUR_MCP_KEY" } } } }
Codex CLI
export MCP_ODOO_URL="https://your-odoo.com/mcp" export MCP_ODOO_KEY="YOUR_MCP_KEY" codex --mcp-server "odoo=$MCP_ODOO_URL" \ --mcp-header "odoo=Authorization: Bearer $MCP_ODOO_KEY"
cURL (testing)
curl -X POST https://your-odoo.com/mcp \ -H "Content-Type: application/json" \ -H "Authorization: Bearer YOUR_MCP_KEY" \ -d '{ "jsonrpc": "2.0", "id": 1, "method": "initialize", "params": {} }'
Usage
Once connected, the AI client automatically discovers all available tools via the tools/list MCP method. The module ships with 15 built-in tools organized into two categories:
Read Tools (10)
- list_models — Discover available Odoo models by substring search.
- list_modules — List installed modules with versions and states.
- get_model_schema — Get complete field definitions for any model (types, labels, relations, selection values).
- get_user_context — Retrieve the authenticated user's name, company, language, timezone, and security groups.
- get_access_rights — Check the current user's CRUD permissions on a model and list all access control rules.
- search_read — Search records by domain and return field values with pagination and sorting.
- read_record — Read specific records by their database IDs.
- search_count — Count records matching a domain filter.
- read_group — Grouped aggregation (SQL GROUP BY equivalent) with automatic sum/count for numeric fields.
- get_record_messages — Retrieve chatter history, comments, and field tracking for a record.
Write Tools (5)
- create_record — Create new records with support for relational field command tuples.
- update_record — Update existing records by ID (partial writes).
- delete_record — Permanently delete records by ID.
- post_message — Post comments or internal notes on a record's chatter thread.
- execute_method — Call any public method on a model or recordset (private methods starting with _ are blocked for safety).
Custom Tools
Additional tools can be created through the backend UI at Settings > MCP Server > Tools. Each tool consists of:
- A name and description (exposed to the AI client).
- A JSON Schema defining the input parameters.
- Python code executed in a sandboxed safe_eval context with access to env, arguments, json, UserError, and logger.
Tools are categorized as Read or Write and can be enabled/disabled individually.
Audit Log
Every MCP request is logged with the method, tool name, target model, duration, and status (ok, error, denied, rate_limited). Logs are accessible at Settings > MCP Server > Audit Log and are automatically cleaned up based on the configured retention period.
Sessions
The server maintains stateful sessions per the MCP specification. Active sessions are visible at Settings > MCP Server > Sessions (in debug mode) and can be revoked from user preferences. Sessions are automatically cleaned up after the configured timeout.
Credits
Contributors
- Mathias Markl <mathias.markl@mukit.at>
Author & Maintainer
This module is maintained by the MuK IT GmbH.
MuK IT is an Austrian company specialized in customizing and extending Odoo. We develop custom solutions for your individual needs to help you focus on your strength and expertise to grow your business.
If you want to get in touch please contact us via mail (sale@mukit.at) or visit our website (https://mukit.at).
Please log in to comment on this module