This release is a pre-release and may not be stable for production use.
odoo-model-mcp
MCP server that exposes Odoo's model registry (fields, inheritance, methods) without needing a database connection.
Point it at any Odoo project directory and get instant, structured answers about
models, fields, method override chains, and inheritance graphs — powered by
Odoo's own MetaModel registry loaded in-memory.
Status: Pre-alpha (0.1.0a1). Works with Odoo 16–19.
How it works
- MCP server (this package) receives tool calls via stdio.
- It auto-detects the Odoo project structure (odoo-bin, addons paths, venv).
- A persistent worker subprocess is spawned in the project's own Python venv, loading the full model registry once (~4 seconds).
- Subsequent queries are served over a Unix domain socket in 1–15 ms.
- Workers auto-shutdown after 10 minutes of inactivity.
Each project gets its own isolated worker process, so you can work with multiple Odoo versions simultaneously without conflicts.
Installation
# With uv (recommended)
uv tool install odoo-model-mcp
# With pip
pip install odoo-model-mcp
Usage with Claude Code
Add to your ~/.claude.json (global) or project .claude/settings.local.json:
{
"mcpServers": {
"odoo-model-registry": {
"type": "stdio",
"command": "odoo-model-mcp",
"args": []
}
}
}
If installed with uv and not on PATH:
{
"mcpServers": {
"odoo-model-registry": {
"type": "stdio",
"command": "uv",
"args": ["run", "--project", "/path/to/odoo-model-mcp", "odoo-model-mcp"]
}
}
}
Tools
All tools accept a project_path pointing to the root of an Odoo project.
Addons paths and the Odoo source location are auto-detected from the project
structure (or can be overridden with addons_paths). Modules can be excluded
by name with exclude_modules (useful when a module has unresolvable Python
dependencies).
detect_project_info
Detect an Odoo project's structure without loading the registry. Returns
odoo_path, addons_paths, python_bin, and odoo_version.
search_models
Search models by name or description substring.
search_models(project_path="/path/to/project", query="sale.order")
model_info
Full metadata for a model: all fields (with types, compute methods, related fields, module overrides), inheritance chain, extending modules (from MRO), and decorated methods.
model_info(project_path="/path/to/project", model_name="sale.order")
field_info
Detailed info for a single field: type, compute method, depends, store, index, related, groups, and which modules defined or overrode it.
field_info(project_path="/path/to/project", model_name="sale.order", field_name="amount_total")
method_overrides
Override chain for a method across the MRO, with source file locations (file path and line number) for each override.
method_overrides(project_path="/path/to/project", model_name="sale.order", method_name="_compute_amounts")
model_graph
Inheritance graph around a model: which modules extend it (same _name),
mixin parents (different _name), delegation parents (_inherits), and child
models that inherit from it.
model_graph(project_path="/path/to/project", model_name="sale.order")
Project auto-detection
The server detects project structure automatically:
- Odoo source: looks for
odoo-binor theodoo/Python package - Addons paths: parses
odoo.conf/.odoorc, or scans for directories containing modules (subdirs with__manifest__.py) - Python venv: checks
.venv/,venv/,env/ - Odoo version: reads from
.env(ODOO_VERSION=) orodoo/release.py
Architecture
Claude Code
|
| stdio (MCP protocol)
v
odoo-model-mcp server (lightweight Python process)
|
| Unix domain socket (JSON lines)
v
Worker process (project's own venv)
- Loads Odoo registry via MetaModel._build_model()
- Resolves full inheritance (MRO, __bases__, _build_model_attributes)
- Serves queries from in-memory registry
Development
git clone https://github.com/bemade/odoo-model-mcp.git
cd odoo-model-mcp
uv sync
uv run pytest
License
LGPL-3.0-only
Release files for odoo-model-mcp 0.1.0a2
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| odoo_model_mcp-0.1.0a2.tar.gz | 14.0 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| odoo_model_mcp-0.1.0a2-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 31.1 kB
Release files / odoo_model_mcp-0.1.0a2.tar.gz
| Download URL | odoo_model_mcp-0.1.0a2.tar.gz |
|---|---|
| Size | 14.0 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
ae09d940aaeb64d8cc218a006235f25996a4578110f690a5d24a45c5db951b5d
|
|
BLAKE2b-256 checksum How to use checksums |
ea19beccce893bbf068252e846058f704ed6edacaa33dc78914f3f7f7a77a13a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.9.26 {"installer":{"name":"uv","version":"0.9.26","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Pop!_OS","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|
Release files / odoo_model_mcp-0.1.0a2-py3-none-any.whl
| Download URL | odoo_model_mcp-0.1.0a2-py3-none-any.whl |
|---|---|
| Size | 17.1 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
eb55a3fa5a34170a23305c484831614703fdce63ae424078c14beeddcbf795c4
|
|
BLAKE2b-256 checksum How to use checksums |
7e52f9be3e86c939228f845578df9f7718aae2dead9aec94b914b17c5a216245
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.9.26 {"installer":{"name":"uv","version":"0.9.26","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Pop!_OS","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|