Odoo Dev MCP
Provides version-aware tools for Odoo module development, including documentation search, code generation (models, views, security, OWL components), development guidelines, error debugging, and upgrade scaffolding.
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 Dev MCPCreate a model library.book with fields name and author"
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 Development MCP Server
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
Features
๐ 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
Works Great With Odoo Skills
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.
Installation
Prerequisites
# Ensure Python 3.12+ is installed
python --version
# Install MCP CLI (if not already installed)
pip install "mcp[cli]"For Claude Desktop
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.jsonLinux:
~/.config/Claude/claude_desktop_config.jsonWindows:
%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"] } } }Restart Claude Desktop
For OpenCode
๐ Complete OpenCode Setup Guide โ
Quick setup - add to ~/.opencode/config.jsonc:
Option 1: Using uv (Recommended)
{
"$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"
}
}
}
}First, install dependencies:
cd /path/to/odoo-dev-mcp
curl -LsSf https://astral.sh/uv/install.sh | sh
uv syncOption 2: Using Python directly
{
"$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 guidelinesLocal Odoo Environment Context
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.
Quick Start
1. Test the Server
python test_server.pyYou should see all tests pass with โ marks.
2. Basic Usage in Claude/OpenCode
# 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"Available Tools
Version Management
set_odoo_version(version)- Switch between 17.0, 18.0, 19.0get_current_version()- Check current versiondetect_odoo_version(path, ...)- Detect a likely local Odoo version from env vars,release.py, addon manifests, and branch names without changing the active version
Documentation & Guidelines
get_odoo_local_context(include_readme_excerpt)- Show configuredODOO_SOURCE,ODOO_BASE_COMMAND,ODOO_TOOL_README, source hints, and command templatesinspect_odoo_source(path, query, scope, max_files)- Use AST to compactly inspect Odoo core/addon manifests, models, controllers, routes, imports, and version signals without executing sourceget_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 guidelinesContexts:
general,models,views,security,all
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
Code Generation (Version-Aware)
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
Development Prompts
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
Resources
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
Examples
Complete Module Creation
# 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 tasksAutomated Action Example
Create 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.
OWL Frontend Examples
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.
Migration And Error Examples
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 systemField Types Examples
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')]"}
]Development
Run Tests
uv run python -m tests.test_serverTest with MCP Inspector
mcp dev odoo_mcp_server.pyArchitecture
odoo_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 reviewDevelopment Guidelines
The server includes comprehensive Odoo development guidelines that are automatically applied:
Built-in Rules
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
Rules Integration
All code generation tools automatically include:
โ ๏ธ Naming convention warnings
๐ Context-specific guidelines
๐ Links to relevant rules sections
โ Best practice recommendations
Access Guidelines
# Get general guidelines
get_development_guidelines("general")
# Get model-specific rules
get_development_guidelines("models")
# Access all rules
View resource: odoo://rules/allDocumentation Strategy
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.htmlCommon 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.htmlThe 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.mdcSupported Platforms
โ Windows, macOS, Linux
โ Claude Desktop
โ OpenCode (VS Code extension)
โ Any MCP-compatible client
Requirements
Python 3.12+
MCP SDK 1.4.1+
FastMCP
Troubleshooting
Server not showing in Claude?
Check config file is valid JSON
Verify absolute paths
Restart Claude Desktop completely
Import errors?
pip install "mcp[cli]"Documentation not found?
Use get_documentation_url() or odoo://docs/<version>/index. The server returns official Odoo URLs and does not require local docs for normal use.
Tips
Detect, then set the Odoo version - Use
detect_odoo_version()to inspect local evidence, thenset_odoo_version()if the active version should changeReview development guidelines - Use
get_development_guidelines()for context-specific rulesFollow 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 linksTest incrementally - module โ models โ views โ security
Review code against rules - Use the
review_odoo_codeprompt for rule compliance checks
License
MIT License
Contributing
Contributions welcome! This server follows clean code principles and Odoo best practices.
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.
Latest Blog Posts
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/mart337i/odoo-dev-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server