Technology Apr 26, 2026 · 2 min read

Built a native MCP server for Odoo so Claude, Cursor, and Codex can drive it directly

Most Odoo MCP integrations I came across follow the same pattern: a separate Python process running on your machine (or in a Docker container), talking to Odoo over XML-RPC or JSON-RPC from the outside. It works, but you end up with credentials in env files, a second thing to deploy and keep alive,...

DE
DEV Community
by Mathias Markl
Built a native MCP server for Odoo so Claude, Cursor, and Codex can drive it directly

Most Odoo MCP integrations I came across follow the same pattern: a separate Python process running on your machine (or in a Docker container), talking to Odoo over XML-RPC or JSON-RPC from the outside. It works, but you end up with credentials in env files, a second thing to deploy and keep alive, and no real visibility into what the AI did from inside Odoo.

I wanted something different, so I built muk_mcp — an open-source addon (LGPL-3) that makes Odoo itself the MCP server. No extra process, no middleware, no RPC bridge. The /mcp endpoint lives inside the registry and runs through the same ORM as everything else.

Install it, generate an MCP key from your user preferences, paste the URL into Claude Code, Claude Desktop, Cursor, Windsurf, Codex CLI, or OpenCode. The model gets 15 typed tools covering the full ORM lifecycle — model discovery, schema introspection, search, read, create, update, delete, grouped aggregation, chatter, and method execution.

muk_mcp architecture

Per-key scopes, rate limits, and audit log

Each key supports model-level scopes with separate read / write / create / delete permissions. Configurable rate limit per key (default 60 req/min). Every call lands in an audit log with method, tool, model, duration, and status.

Custom tools without leaving the UI

Custom tools can be added directly from the backend UI — name, description, JSON Schema for inputs, and Python in a sandboxed safe_eval context. No code deployment, no server restart. The connected client gets notified when the tool list changes.

Custom tools editor

Sessions are stateful per the MCP spec and clean themselves up after the configured timeout. Users can revoke their own sessions from preferences.

MCP-tagged chatter

Every chatter message authored by an MCP tool is tagged with a small MCP badge next to the author name, so it is immediately obvious which comments, status changes, and tracking entries came from an AI client and which came from a human.

MCP badge in chatter

Links

Would love feedback — what would you want from this kind of integration?

DE
Source

This article was originally published by DEV Community and written by Mathias Markl.

Read original article on DEV Community
Back to Discover

Reading List