A Model Context Protocol (MCP) server for Odoo module development with AI assistance. Provides version-aware official documentation links (17.0, 18.0, 19.0), intelligent code generation, and development workflow automation.
🚀 Quick Start | 📖 OpenCode Setup | 🧪 Testing Guide | 🔧 Troubleshooting | 📋 Guides Index | 📝 Changelog
- 📚 Official Documentation Links: Version-aware links to Odoo's developer reference at
https://www.odoo.com/documentation/<version>/developer/reference.html - 🧭 Skill-Informed Odoo Guardrails: Built-in guidance learned from mart337i/odoo-skills without requiring that repo at runtime
- 🔧 Version-Aware Code Generation: All generated code includes version info and relevant documentation links
- 🦉 OWL Frontend Scaffolds: Generate Odoo OWL components, client actions, field widgets, services, and frontend tests
- 📋 Integrated Development Guidelines: Built-in Odoo coding standards and best practices enforcement
- 💡 Smart Prompts: Guided workflows with rules-aware feature development, debugging, and upgrades
- 🎯 Automatic Context: Generated code includes references to official Odoo documentation and development rules
This MCP server pairs well with the companion Odoo skill set at mart337i/odoo-skills. Use those skills in your agent/client for deeper Odoo workflows like addon planning, migrations, code review, testing, OWL frontend work, and debugging. The MCP server does not require that repo at runtime; it only generates tools, guardrails, and references that complement skill-driven work.
# Ensure Python 3.12+ is installed
python --version
# Install MCP CLI (if not already installed)
pip install "mcp[cli]"-
Quick Install (Recommended):
mcp install src/odoo_mcp/server.py --name "Odoo Dev" -
Manual Install:
Edit your Claude Desktop config file:
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - Linux:
~/.config/Claude/claude_desktop_config.json - Windows:
%APPDATA%\Claude\claude_desktop_config.json
Add this configuration:
{ "mcpServers": { "odoo-dev": { "command": "python", "args": ["/absolute/path/to/odoo-dev-mcp/src/odoo_mcp/server.py"] } } } - macOS:
-
Restart Claude Desktop
📖 Complete OpenCode Setup Guide →
Quick setup - add to ~/.opencode/config.jsonc:
First, install dependencies:
cd /path/to/odoo-dev-mcp
curl -LsSf https://astral.sh/uv/install.sh | sh
uv sync{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"odoo-dev": {
"type": "local",
"command": ["python3", "/absolute/path/to/odoo-dev-mcp/src/odoo_mcp/server.py"],
"enabled": true,
"environment": {
"PYTHONPATH": "/absolute/path/to/odoo-dev-mcp"
}
}
}
}See examples/opencode.jsonc.example for a complete working example.
Note: Requires pip install mcp first.
Then use in OpenCode:
Search Odoo documentation for "fields.Command"
Set Odoo version to 19.0
Get Odoo local context
Get documentation URL for reference/backend/orm
Create model library.book with fields: name, author
Get development guidelines
Configure these optional environment variables so the MCP can point agents at your local Odoo source, command template, and local development guide:
export ODOO_SOURCE=/path/to/odoo
export ODOO_BASE_COMMAND="/path/to/odoo/odoo-bin -c /path/to/odoo.conf --addons-path=/path/to/addons"
export ODOO_TOOL_README=/path/to/local-development/README.mdUse get_odoo_local_context() or odoo://local/context to inspect the configured values. The server treats ODOO_BASE_COMMAND as a command template only; agents should still ask before running commands that touch a database or local service.
See OPENCODE_SETUP.md for complete guide with examples, troubleshooting, and workflows.
python test_server.pyYou should see all tests pass with ✓ marks.
# Set your Odoo version
Set Odoo version to 19.0
# Create a module
Create an Odoo module called "library_management" with display name "Library Management"
# Create a model
Create a model library.book with fields: name (char), author_id (many2one to res.partner), isbn (char)
# Generate views
Create a form view for library.book with fields: name, author_id, isbn
# Add security
Create security rules for library.book in module library_management
# Search official documentation catalog
Search Odoo documentation for "computed fields"
set_odoo_version(version)- Switch between 17.0, 18.0, 19.0get_current_version()- Check current version
get_odoo_local_context(include_readme_excerpt)- Show configuredODOO_SOURCE,ODOO_BASE_COMMAND,ODOO_TOOL_README, source hints, and command templatesget_documentation_url(path, version)- Get an official Odoo documentation URLsearch_documentation(query, version)- Search the built-in official reference catalog and return Odoo documentation linksget_development_guidelines(context)- Get context-specific coding guidelines- Contexts:
general,models,views,security,all
- Contexts:
explain_odoo_error(error_text, version, context)- Diagnose patterned Odoo tracebacks with root cause, inspection steps, and docs linksplan_odoo_feature(description, module_name, version)- Create a skill-informed Odoo implementation plan with security, view, test, and docs guidanceplan_owl_feature(description, module_name, integration_type, target_bundle, version)- Plan Odoo OWL frontend work with asset, registry, service, and test guardrailslayout_module_dependencies(module_name, features, models, integrate_with, explicit_dependencies)- Infer and order manifest dependencies for an Odoo module
create_odoo_module(name, display_name, description, ...)- Generate module structure with version-specific manifestcreate_odoo_model(model_name, description, fields, inherit)- Create Python models with ORM documentation linkscreate_odoo_view(model_name, view_type, fields_to_display, view_name, parent_menu)- Generate safer XML views with version-awaretree/listhandling and no fake menu parentcreate_security_rules(model_name, module_name, groups)- Create security config with security documentationcreate_base_automation(...)- Generate version-awarebase.automationand linkedir.actions.serverXML for automated actionscreate_upgrade_script(module_name, from_version, to_version, ...)- Generate version-awarepre-migration.py,post-migration.py, andend-migration.pyscaffolds with verifiedodoo.upgrade.utilhelper examplescreate_owl_component(component_name, module_name, ...)- Generate Odoo OWL JS/XML/SCSS component scaffolds and manifest asset entriescreate_owl_client_action(action_name, module_name, ...)- Generate an OWL client action,registry.category("actions")registration, andir.actions.clientXMLcreate_owl_field_widget(widget_name, module_name, ...)- Generate an OWL field widget usingstandardFieldPropsand the fields registrycreate_owl_service(service_name, module_name, ...)- Generate a frontend service using the services registry and explicit dependenciescreate_owl_test(component_name, module_name, ...)- Generate an Odoo Hoot frontend test scaffold and test asset entry
develop_odoo_feature(description)- Guided feature developmentdebug_odoo_error(error, context)- Error debugging assistanceupgrade_odoo_module(module, from_version, to_version)- Migration guidancereview_odoo_code(code)- Code review with best practices
Access Odoo documentation and development rules:
Documentation:
odoo://docs/19.0/index- Official developer reference indexodoo://docs/19.0/reference/backend/orm- ORM reference URL and metadataget_documentation_url("reference/backend/security", "19.0")- Official Odoo security documentation URL
Local Odoo Context:
odoo://local/context- Configured local Odoo source path, base command, and tooling README excerpt
Development Rules:
odoo://rules/all- All development guidelinesodoo://rules/clean-code- Clean code principlesodoo://rules/odoo-development- Odoo-specific conventions
# In Claude/OpenCode:
1. Set Odoo version to 19.0
2. Plan the feature: task management with priorities and deadlines
3. Layout dependencies for task management with chatter and automations
4. Create module "task_manager" with display name "Task Manager"
5. Create model task.task with fields:
- name (char, required)
- description (text)
- priority (selection: low, medium, high)
- assigned_to (many2one: res.users)
- deadline (date)
6. Create form view for task.task
7. Create list view for task.task
8. Create security rules for task.task
9. Create an automated action that assigns overdue tasksCreate a base automation for task.task that runs on create or write, watches stage_id and deadline, and executes Python code.
The helper will include base_automation manifest dependency guidance and version-specific notes for time-based triggers.
Plan an OWL client action for an equipment rental dashboard in equipment_rental.
Create an OWL component called Rental Dashboard in equipment_rental with title prop, orm service, and local state.
Create an OWL field widget called Rental Badge in equipment_rental for char and selection fields.
The OWL helpers generate Odoo asset bundle entries, @odoo/owl imports, registry wiring, XML templates, SCSS, and frontend test guidance.
Create upgrade scripts for equipment_rental from 17.0 to 19.0, renaming old_stage_id to stage_id and old XML IDs.
The migration scaffold includes phase-specific odoo.upgrade.util examples for model, field, XML ID, module, SQL, and ORM data-migration helpers.
Explain this Odoo error: odoo.tools.convert.ParseError: while parsing views/equipment_views.xml, External ID not found in the system
All Odoo field types are supported:
fields = [
{"name": "name", "type": "Char", "required": True},
{"name": "description", "type": "Text"},
{"name": "amount", "type": "Float"},
{"name": "quantity", "type": "Integer"},
{"name": "active", "type": "Boolean"},
{"name": "date", "type": "Date"},
{"name": "partner_id", "type": "Many2one", "comodel_name": "res.partner"},
{"name": "line_ids", "type": "One2many", "comodel_name": "model.line", "inverse_name": "parent_id"},
{"name": "tag_ids", "type": "Many2many", "comodel_name": "model.tag"},
{"name": "state", "type": "Selection", "selection": "[('draft', 'Draft'), ('done', 'Done')]"}
]uv run python -m tests.test_servermcp dev odoo_mcp_server.pyodoo_mcp_server.py
├── Resources (Documentation)
│ ├── Official Odoo reference URL catalog
│ ├── Version-specific links
│ └── Topic search
├── Tools (Code Generation)
│ ├── Module scaffolding
│ ├── Model definitions
│ ├── View generation
│ └── Security rules
└── Prompts (Workflows)
├── Feature development
├── Error debugging
├── Module upgrades
└── Code review
The server includes comprehensive Odoo development guidelines that are automatically applied:
- Clean Code Principles - General software engineering best practices
- Odoo Conventions - Odoo-specific naming, structure, and coding standards
- Module structure and naming
- Model and field naming conventions
- View architecture standards
- Security rules patterns
- ORM best practices
- Performance optimization tips
All code generation tools automatically include:
⚠️ Naming convention warnings- 📋 Context-specific guidelines
- 🔗 Links to relevant rules sections
- ✅ Best practice recommendations
# Get general guidelines
get_development_guidelines("general")
# Get model-specific rules
get_development_guidelines("models")
# Access all rules
View resource: odoo://rules/all
The server points to official Odoo documentation instead of vendoring stale local copies. The base URL pattern is:
https://www.odoo.com/documentation/<version>/developer/reference.html
Common topic links follow the same structure:
https://www.odoo.com/documentation/19.0/developer/reference/backend/orm.html
https://www.odoo.com/documentation/19.0/developer/reference/backend/security.html
https://www.odoo.com/documentation/19.0/developer/reference/frontend/owl_components.html
The repository still contains docs/ as a legacy local fallback, but MCP tools prefer official documentation URLs.
docs/
├── 17.0/ (legacy fallback)
├── 18.0/ (legacy fallback)
└── 19.0/ (legacy fallback)
rules/
├── clean-code.mdc
└── odoo-development.mdc
- ✅ Windows, macOS, Linux
- ✅ Claude Desktop
- ✅ OpenCode (VS Code extension)
- ✅ Any MCP-compatible client
- Python 3.12+
- MCP SDK 1.4.1+
- FastMCP
- Check config file is valid JSON
- Verify absolute paths
- Restart Claude Desktop completely
pip install "mcp[cli]"Use get_documentation_url() or odoo://docs/<version>/index. The server returns official Odoo URLs and does not require local docs for normal use.
- Always set the Odoo version first - All code generation adapts to the selected version
- Review development guidelines - Use
get_development_guidelines()for context-specific rules - Follow naming conventions - Generated code includes rules warnings for common mistakes
- Use descriptive model names - e.g.,
library.book(with dots), notlib_b(with underscores) - Check rules in generated code - Each tool output includes relevant naming and coding rules
- Search before asking - Use
search_documentation()for official reference links - Test incrementally - module → models → views → security
- Review code against rules - Use the
review_odoo_codeprompt for rule compliance checks
MIT License
Contributions welcome! This server follows clean code principles and Odoo best practices.
{ "$schema": "https://opencode.ai/config.json", "mcp": { "odoo-dev": { "type": "local", "command": ["uv", "run", "/absolute/path/to/odoo-dev-mcp/src/odoo_mcp/server.py"], "enabled": true, "environment": { "PATH": "/home/user/.local/bin:/usr/local/bin:/usr/bin:/bin", "ODOO_SOURCE": "/path/to/odoo", "ODOO_BASE_COMMAND": "/path/to/odoo/odoo-bin -c /path/to/odoo.conf --addons-path=/path/to/addons", "ODOO_TOOL_README": "/path/to/local-development/README.md" } } } }