Odoo Developer Assistant MCP
Provides tools for Odoo development and troubleshooting: classifies common Odoo error tracebacks, statically inspects addon manifests and dependencies, validates manifest fields and referenced data files, analyzes XML view/data files and Python model files for structural errors, audits security files (ir.model.access.csv and ir.rule XML), runs a consolidated addon health check with cross-file consistency scoring, and connects read-only via XML-RPC to a live Odoo instance to verify models, fields, and external XML IDs before deployment.
Click on "Deploy 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 Developer Assistant MCPanalyze this Odoo error: invalid XML ID in my custom view"
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 Developer Assistant MCP
An MCP (Model Context Protocol) server that helps Odoo developers investigate common errors, inspect custom addons, and validate module manifests.
The project provides initial troubleshooting suggestions and static validation. It does not modify an Odoo database or claim that a suggested diagnosis is confirmed.
Features
1. Odoo Error Analyzer
The analyze_odoo_error tool classifies common Odoo errors and suggests troubleshooting steps.
Currently recognized categories include:
XML ID errors
Access rights errors
OWL frontend errors
Database schema errors
XML data errors
Key and lookup errors
Generic RPC errors
Unknown errors receive general troubleshooting guidance.
2. Odoo Module Inspector
The inspect_odoo_module tool reads an addon's __manifest__.py file and reports:
Module name and version
Dependencies
Data file references
Installation settings
Dependency availability across supplied addon directories
Dependency checks cover only the directories supplied to the tool. A dependency reported as missing may still exist elsewhere in an Odoo installation.
3. Odoo Manifest Validator
The validate_odoo_manifest tool checks:
Required manifest fields
Field types
Referenced data files
Missing files
Unsafe file paths
Manifest syntax
The manifest is parsed without executing its Python code.
4. Odoo XML View Analyzer
The analyze_odoo_xml_view tool performs static analysis on Odoo XML data and view files to detect structural errors, syntax mistakes, and suspicious references before loading them into an Odoo database.
Capabilities include:
XML Syntax Validation: Identifies malformed XML with exact line and column numbers.
Root Element Checks: Verifies expected
<odoo>or legacy<openerp>root tags.Record Identifier Checks: Checks for required
idandmodelattributes on<record>tags, flags whitespace in IDs, and detects duplicate record IDs across the file.View Architecture Inspection: Verifies that
ir.ui.viewrecords define non-empty<field name="arch" type="xml">blocks.External ID Reference Extraction: Extracts
refattributes andref('...')expressions as informational items requiring verification in manifest dependencies or database models.File Safety: Enforces a 500 KB maximum file size limit, handles encoding issues, rejects directories, and supports optional
addon_pathconfinement to prevent path traversal or symlink escapes.
5. Odoo Python Model Analyzer
The analyze_odoo_python_model tool statically analyzes Python model files using Python's standard ast module to detect structural errors, missing attributes, decorator misconfigurations, and common mistakes without executing untrusted code.
Capabilities include:
Model Class Inspection: Detects classes inheriting from
models.Model,models.TransientModel, ormodels.AbstractModel.Model Attribute Validation: Checks for
_name,_inherit, and flags new models missing a_descriptionattribute.Relational Field Checks: Flags
fields.Many2oneorfields.Many2manymissing comodel names, andfields.One2manymissing inverse field names.On-delete Validation: Warns about suspicious
ondeleteconfigurations onMany2onefields.Decorator Diagnostics: Flags
@api.depends(),@api.onchange(), or@api.constrains()decorators with empty arguments.File Safety: Enforces a 500 KB maximum file size limit, handles encoding gracefully, and supports optional
addon_pathsandboxing.
6. Odoo Security Analyzer
The analyze_odoo_security tool inspects Odoo security files (ir.model.access.csv and security XML records) to detect syntax mistakes, missing model prefixes, invalid permission flags, and malformed rules before module loading.
Capabilities include:
Exact CSV Header Verification: Verifies the strict 8-column header (
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink).Model ID Prefix Validation: Checks that
model_id:idhas the mandatorymodel_prefix (e.g.model_custom_order, notcustom.order).Binary Permission Flags: Validates that all permission columns (
perm_read,perm_write,perm_create,perm_unlink) are strictly0or1.Integrity Checks: Detects duplicate access rule IDs and column count mismatches.
Global Rule Detection: Identifies rules with empty
group_id:idthat grant global permissions across all users.Security XML Analysis: Validates
ir.rulerecord definitions to ensuremodel_idanddomain_forceare declared.
7. Unified Odoo Addon Health Check
The check_odoo_addon_health tool acts as a single, comprehensive audit command for an entire Odoo addon directory. It orchestrates manifest, view, model, and security analyzers into a consolidated diagnostic report.
Capabilities include:
Manifest & Dependency Audit: Verifies manifest integrity and checks cross-directory dependency resolution.
Views & Data Audit: Discovers and audits all declared and directory XML view/data files.
Python Models Audit: Automatically discovers and inspects all model files in
models/.Security Audit: Audits
security/ir.model.access.csvand security XML rules.Cross-File Consistency Audit: Cross-references models, views, and security files within the addon to detect custom models missing security access rules and XML view
<field>tags referencing undeclared model fields.Consolidated Health Scoring: Assigns an overall status (
HEALTHY,NEEDS_ATTENTION,CRITICAL_ISSUES) with file counts, error/warning summaries, cross-file issues, and prioritized action suggestions.
8. Live Odoo Metadata Verifier
The verify_odoo_live_metadata tool enables developers to connect to an active Odoo instance (local development Docker, test instance, or staging server) via read-only XML-RPC to dynamically verify models, fields, and external XML IDs before deployment.
Capabilities include:
Model Verification: Queries
ir.modelto check whether referenced models exist in the target database.Field Verification: Queries
ir.model.fieldsto verify that field names, types (ttype), and attributes exist on the target model.External XML ID Verification: Queries
ir.model.datato verify external IDs (e.g.base.group_user,sale.action_orders).Read-Only Safety: Strictly executes read-only
search_readcalls; never writes to or modifies the database.Credential Protection: Passwords and API keys are never leaked or stored in responses.
Zero Dependencies: Powered exclusively by Python's standard library
xmlrpc.client.
Related MCP server: salesforce-deployment-guard
Requirements
Python 3.12 or a compatible Python version
MCP Python SDK 2.3.0
MCP Inspector for interactive testing
Installation
Clone or download the repository, then enter the project directory.
Create a virtual environment:
python3 -m venv .venv
source .venv/bin/activateInstall the Python dependency:
python -m pip install -r requirements.txtInstall pytest for development and testing:
python -m pip install pytestRun the Automated Tests
From the project root:
pytest -vThe current test suite contains 98 tests covering error classification, addon inspection, manifest validation, XML view analysis, Python model analysis, security analysis, cross-file consistency, live metadata verification, entry points, and edge cases.
Client Configuration
You can connect this MCP server to any MCP-compliant client (Claude Desktop, Cursor, Zed, etc.).
Claude Desktop
Add the following to your Claude Desktop configuration file:
macOS:
~/Library/Application Support/Claude/claude_desktop_config.jsonLinux:
~/.config/Claude/claude_desktop_config.jsonWindows:
%APPDATA%\Claude\claude_desktop_config.json
Option A: Direct execution with uvx (No local clone needed)
{
"mcpServers": {
"odoo-developer-assistant": {
"command": "uvx",
"args": [
"--from",
"git+https://github.com/pks0204/odoo-developer-assistant-mcp",
"odoo-developer-assistant"
]
}
}
}Option B: Local Repository
{
"mcpServers": {
"odoo-developer-assistant": {
"command": "/absolute/path/to/odoo-developer-assistant/.venv/bin/odoo-developer-assistant"
}
}
}Cursor / Zed
Configure the command in your editor's MCP settings:
Command:
odoo-developer-assistant(if installed in PATH or viauvx)Transport:
stdio
Example Assistant Prompts
Once configured, you can prompt your AI assistant with queries like:
"Audit the health of my custom addon at
/path/to/my_modulebefore I install it.""Check this Odoo log traceback and explain the root cause:
<paste traceback>""Inspect the XML view at
views/sale_order_views.xmlfor structural errors or deprecated syntax.""Analyze
models/res_partner.pyfor missing inverse fields or incomplete @api decorators.""Verify my
security/ir.model.access.csvpermissions file."
Run with MCP Inspector
Ensure MCP Inspector is available in your environment.
Start the project using:
./run_inspector.shOpen the Inspector URL displayed by the command in your browser.
The launcher starts the Inspector with server.py and handles process cleanup when the session ends.
Sample Addon & Fixtures
The sample_addons/my_custom_module directory contains a sample manifest for testing.
Some files referenced by the sample manifest are intentionally absent. This allows the manifest validator to demonstrate how it reports missing files.
The tests/fixtures/ directory provides sample XML view files (valid_view.xml, malformed_view.xml, suspicious_view.xml), a sample Python model file (sample_model.py), and sample security files (ir.model.access.csv, security_rules.xml) for testing and demonstration in MCP Inspector.
Project Structure
odoo-developer-assistant/
├── .github/
│ └── workflows/
│ └── ci.yml
├── .gitignore
├── LICENSE
├── README.md
├── pyproject.toml
├── pytest.ini
├── requirements.txt
├── run_inspector.sh
├── server.py
├── sample_addons/
│ └── my_custom_module/
│ └── __manifest__.py
└── tests/
├── fixtures/
│ ├── ir.model.access.csv
│ ├── malformed_view.xml
│ ├── sample_model.py
│ ├── security_rules.xml
│ ├── suspicious_view.xml
│ └── valid_view.xml
└── test_server.pyLimitations
Error analysis is based on recognizable text patterns and is not a confirmed diagnosis.
Dependency inspection only checks the supplied addon directories.
Manifest validation does not guarantee that an addon will install successfully in Odoo.
XML view analysis is static. It verifies syntax, structural conventions, and reference declarations, but does not guarantee that model fields or referenced external IDs exist in an active Odoo database.
Python model analysis is static. It inspects AST structure, required attributes, relational field declarations, and decorator syntax, but does not execute Python code or connect to an Odoo database.
Security analysis is static. It verifies CSV access rule syntax, model ID prefixes, and XML record rule definitions, but does not confirm whether referenced security groups exist in an active Odoo database.
The unified addon health check performs static analysis across files; complete behavioral verification requires testing the addon inside an active Odoo runtime environment.
The tools do not modify an Odoo database (live inspection via
verify_odoo_live_metadatais strictly read-only).
Future Improvements
Recognize additional Odoo error patterns and OWL UI tracebacks.
Support batch live metadata verification for large enterprise schemas.
Expand automated tests for unusual and edge-case inputs.
License
This project is licensed under the GNU Lesser General Public License v3.0 (LGPL-3.0) — see the LICENSE file for details.
Available Tools
8 toolsanalyze_odoo_errorB
Analyze an Odoo error and suggest troubleshooting steps.
Args: error_text: The error message or traceback to investigate.
| Name | Required | Description | Default |
|---|---|---|---|
| error_text | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full burden, and it discloses almost nothing: not what the analysis returns, not whether it is purely heuristic versus grounded in a knowledge base, not the expected size or format of the input, and no limits on error types supported. Only 'suggest troubleshooting steps' hints at the response shape.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short lines with the purpose front-loaded and no filler. The Args block largely restates the single schema property, so it earns little of its space, but nothing is bloated.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter, no-annotation, no-output-schema tool, the description covers the minimum needed to call it, but leaves an agent guessing about the nature of the returned analysis and any constraints on input. A sentence on output form and scope would close the gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, but the description supplies an Args block defining error_text as the error message or traceback to investigate, which adds slight meaning over the schema's bare 'Error Text' title by implying full tracebacks are acceptable. It does not specify length limits, encoding, or what detail level produces the best results.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (analyze) plus resource (Odoo error) and the added outcome (suggest troubleshooting steps). It is implicitly distinct from the sibling tools, which all inspect modules, manifests, views, models, or security, but the description never makes that separation explicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the name and the phrase 'error message or traceback to investigate,' so an agent can infer this is the entry point when it has a concrete failure. There is no explicit when-to-use framing, no mention of when a sibling like analyze_odoo_python_model would be the better choice, and no prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
analyze_odoo_python_modelA
Analyze an Odoo Python model file for structural errors, missing attributes, decorator misconfigurations, and common mistakes using AST.
Args: python_path: Absolute or relative path to the Python file. addon_path: Optional path to the containing addon directory to enforce sandboxed file access.
| Name | Required | Description | Default |
|---|---|---|---|
| addon_path | No | ||
| python_path | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden; 'using AST' plus 'sandboxed file access' implies a non-mutating static read, and the addon_path wording discloses the sandbox constraint, which is genuinely useful. It still omits what the result looks like (findings list, severity, line numbers), whether the file is ever modified, and what happens when the path is outside the sandbox or does not exist.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The behavioral summary is front-loaded in a single dense sentence, followed by a conventional Args block. The Args entries largely restate the schema but do add the absolute/relative and sandbox semantics, so the length is close to justified.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists and no annotations are present, so the description should describe the shape of the analysis result and any failure modes; neither is covered. It is adequate for knowing when to call the tool and how to fill both parameters, but incomplete about what comes back.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the Args block does the work: python_path is documented as absolute-or-relative, and addon_path is given a real purpose (containing addon directory that enforces sandboxed access) rather than a bare type. Minor gap: it doesn't say what happens if addon_path and python_path disagree.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb ('Analyze') and a precisely scoped resource ('an Odoo Python model file'), then enumerates the defect classes it detects (structural errors, missing attributes, decorator misconfigurations) and the technique (AST). This clearly separates it from siblings such as analyze_odoo_xml_view, validate_odoo_manifest, and inspect_odoo_module without needing to name them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The use case is implied by the enumerated error classes, so an agent can infer it should reach for this when statically checking a Python model file. However, there is no explicit when-to-use statement, no exclusion, and no reference to the sibling tools (e.g., inspect_odoo_module or analyze_odoo_error) that an agent might confuse it with.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
analyze_odoo_securityA
Analyze an Odoo security file (ir.model.access.csv or security XML data) for syntax mistakes, invalid headers, missing model prefixes, and misconfigured rules.
Args: file_path: Absolute or relative path to the security file (.csv or .xml). addon_path: Optional path to the containing addon directory to enforce sandboxed file access.
| Name | Required | Description | Default |
|---|---|---|---|
| file_path | Yes | ||
| addon_path | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It does disclose that addon_path enforces sandboxed file access, which is useful, but it does not state whether the tool only reads files, what permissions are required, or what the analysis returns. This is partially adequate but leaves behavioral gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description front-loads the purpose and checks, then provides a compact Args section. It is appropriately sized with no filler, though the Args formatting is slightly verbose relative to the two parameters.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has no annotations and no output schema, so the description should explain both operational safety and return behavior. It covers purpose and parameters well but never describes what analyze returns (e.g., list of issues, severity, or success indicator) and gives no explicit sibling routing, leaving an agent without key invocation context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it does: file_path is documented as an absolute or relative path to a .csv or .xml security file, and addon_path is documented as an optional containing addon directory used for sandbox enforcement. Both parameters gain meaning beyond the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Analyze) and resource (Odoo security file), enumerates the checks (syntax, headers, model prefixes, rules), and names the relevant file types. This distinguishes it from sibling analysis tools that target errors, XML views, Python models, or manifests.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies use on security files but does not explicitly say when to choose this over inspect_odoo_module, validate_odoo_manifest, or other siblings, nor does it state exclusions. Usage is inferable from the file-type scope, but guidance is not explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
analyze_odoo_xml_viewB
Analyze an Odoo XML data or view file for structural errors, suspicious references, and common issues.
Args: xml_path: Absolute or relative path to the XML file. addon_path: Optional path to the containing addon directory to enforce sandboxed file access.
| Name | Required | Description | Default |
|---|---|---|---|
| xml_path | Yes | ||
| addon_path | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It does disclose the sandboxing behavior of addon_path ('to enforce sandboxed file access'), which is meaningful context, but it never states that the operation is read-only/non-destructive or what the analysis returns, leaving the safety and output profile undocumented.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded purpose sentence, then a clean Args block. Every sentence contributes; only minor cost is docstring-style formatting rather than prose, but nothing is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 2-parameter analysis tool with no annotations and no output schema, the description covers inputs and the sandbox constraint, but it does not describe the shape of results (e.g., list of issues, severity) or confirm the read-only nature, which an agent needs to use it confidently.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate, and it does: xml_path is documented as absolute or relative to the XML file, and addon_path as an optional containing addon directory used to enforce sandboxed access. That adds semantics well beyond the bare string types, though it could still specify accepted formats or path resolution rules.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Uses a specific verb (Analyze) and a specific resource (Odoo XML data or view file), plus enumerates the classes of issues it looks for (structural errors, suspicious references, common issues). It is clearly distinct from analyze_odoo_python_model, validate_odoo_manifest, and analyze_odoo_security by resource type, though it never names a sibling to contrast with.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description says what it analyzes but gives no explicit when-to-use, when-not-to-use, or alternative among the many analyze_* siblings. An agent must infer that this is the right tool purely from the resource type 'XML view'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_odoo_addon_healthA
Run a comprehensive static health audit for an entire Odoo addon directory, evaluating the manifest, dependencies, XML views, Python models, and security rules.
Args: addon_path: Absolute or relative path to the Odoo addon directory. addons_directories: Optional list of directory paths containing other addons to check module dependencies against.
| Name | Required | Description | Default |
|---|---|---|---|
| addon_path | Yes | ||
| addons_directories | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full disclosure burden. The word 'static' usefully signals that no code is executed and that this is a read-only inspection, but it says nothing about whether files are touched, whether external services or a live Odoo instance are needed, or how long a full audit takes. It also does not describe the shape of the result (issue list, severity levels, pass/fail), which is important for a 'health' tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded: the scope sentence comes first, followed by a clean Args block. It has no filler sentences. The opening sentence is long but still earns its place by enumerating the audited surfaces.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter, annotation-free tool with no output schema, the description covers the inputs well but is silent about the return value. That matters for a 'comprehensive audit' whose usefulness depends on whether it returns structured findings, counts, or prose. It also does not mention any limits or prerequisites.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry parameter meaning, and it largely does: addon_path is described as an absolute or relative path to the addon directory, and addons_directories is described as an optional list of directories containing other addons, used to resolve module dependencies. The dependency-resolution purpose of the second parameter is genuine added meaning. It does not specify what a relative path is relative to, which is a small gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb ('Run a comprehensive static health audit') and resource (an entire Odoo addon directory), then enumerates the five areas checked (manifest, dependencies, XML views, Python models, security rules). This makes clear that the tool is a broad, all-in-one audit, unlike the narrow single-aspect sibling analyzers (validate_odoo_manifest, analyze_odoo_xml_view, analyze_odoo_python_model, analyze_odoo_security). However, the description never states this contrast directly, so an agent must infer it.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit when/when-not guidance or named alternatives. The enumeration of check areas only implies that this tool should be used when a full audit is needed, rather than calling individual sibling analyzers. There is also no mention of when to prefer verify_odoo_live_metadata, which would cover the dynamic side that this static audit does not.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
inspect_odoo_moduleB
Inspect an Odoo addon manifest and check dependencies across multiple addons directories.
Args: addon_path: Absolute path to the addon directory. addons_directories: Absolute paths to directories containing Odoo addons, such as standard, enterprise, and custom addons.
| Name | Required | Description | Default |
|---|---|---|---|
| addon_path | Yes | ||
| addons_directories | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must disclose behavioral traits. It implies a read-only inspection but does not state return values, error behavior, dependency-checking semantics, or whether the operation has side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose is front-loaded in a clear sentence, followed by compact parameter documentation. Every part of the description adds necessary information because the schema itself has no property descriptions.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is minimally complete for invocation: it explains both required parameters and the basic purpose. However, with no annotations, no output schema, and 0% schema description coverage, it omits return values and dependency-checking behavior, leaving important context gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, but the description compensates well by documenting both parameters: addon_path is the absolute addon directory, and addons_directories is an array of absolute paths to addon-containing directories with examples like standard, enterprise, and custom addons.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: inspecting an Odoo addon manifest and checking dependencies across addons directories. It is clear what the tool does, though it does not explicitly distinguish itself from siblings like validate_odoo_manifest or check_odoo_addon_health.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no explicit guidance on when to use this tool versus alternatives such as validate_odoo_manifest or check_odoo_addon_health. Usage is only implied by the purpose statement, leaving the agent to infer context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
validate_odoo_manifestB
Validate an Odoo addon's manifest and declared data/demo files.
Checks manifest syntax, important fields, and whether files declared in 'data' and 'demo' exist inside the addon directory.
Args: addon_path: Absolute path to the Odoo addon directory.
| Name | Required | Description | Default |
|---|---|---|---|
| addon_path | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It usefully discloses the checks performed (manifest syntax, important fields, data/demo file existence), but does not state that the operation is read-only or describe the validation result shape.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two compact sentences plus a short Args note; the validation checks are front-loaded and every line adds useful information given the bare schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Input semantics are covered, but with no output schema the description should explain what a validation result looks like; it does not. With no annotations and no sibling differentiation, the definition is only adequately complete for invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The sole parameter has 0% schema description coverage, and the description compensates by naming it and specifying it is an absolute path to the addon directory. This is sufficient to invoke correctly, though it adds no example path or format detail.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: validates an Odoo addon manifest plus declared data/demo files. It clearly defines scope, but does not explicitly distinguish itself from siblings such as check_odoo_addon_health or inspect_odoo_module.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no explicit when-to-use, when-not-to-use, or alternative guidance. An agent can infer it is for manifest validation, but must guess how it differs from sibling tools like check_odoo_addon_health.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
verify_odoo_live_metadataA
Connect to a running Odoo instance via read-only XML-RPC to dynamically verify whether models, model fields, and external XML IDs exist in the active database.
Args: url: URL of the Odoo instance (e.g. 'http://localhost:8069' or 'https://myodoo.example.com'). db: Name of the Odoo database. username: User login name / email. password: User password or API key. models_to_check: Optional list of model names to verify (e.g. ['sale.order', 'res.partner']). fields_to_check: Optional mapping of model names to lists of field names to verify (e.g. {'sale.order': ['partner_id', 'custom_ref']}). xml_ids_to_check: Optional list of external XML IDs to verify (e.g. ['base.group_user', 'sale.action_orders']). timeout: Network timeout in seconds (default: 10).
| Name | Required | Description | Default |
|---|---|---|---|
| db | Yes | ||
| url | Yes | ||
| timeout | No | ||
| password | Yes | ||
| username | Yes | ||
| fields_to_check | No | ||
| models_to_check | No | ||
| xml_ids_to_check | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description does useful work by declaring the transport is read-only XML-RPC, that credentials are required, and that the timeout defaults to 10 seconds. It does not say what happens when a model/field is missing (error vs. reported as absent), nor what the response looks like, which matters for a verification call whose whole value is its verdict.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The opening sentence front-loads the core action and the Args block is scannable with no filler. Slightly verbose in the example-heavy parameter lines, but every example disambiguates a format the schema leaves opaque.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, so the description must characterize the return value and it does not—an agent cannot tell whether it receives booleans per item, a list of missing IDs, or raises on failure. Inputs are fully covered; the result contract is the remaining gap for an 8-parameter verification tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the Args block carries the full load and does it well: each of the 8 parameters gets meaning, format, and concrete examples (URL shapes, model names, the fields mapping structure, XML ID samples, timeout default). An agent could construct a correct call from this alone.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: connect to a live Odoo instance over read-only XML-RPC and verify models, fields, and external XML IDs. That is clearly distinct from the static-analysis siblings, though it never names them explicitly to reinforce the split.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'running Odoo instance' and 'dynamically verify' imply this is for live-environment checks rather than static file inspection, but there is no explicit when-to-use guidance, no exclusions, and no reference to the sibling tools that analyze code statically.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
8 tool updates
v0.1.0- First observed
analyze_odoo_error - First observed
analyze_odoo_python_model - First observed
analyze_odoo_security - First observed
analyze_odoo_xml_view - First observed
check_odoo_addon_health - First observed
inspect_odoo_module - First observed
validate_odoo_manifest - First observed
verify_odoo_live_metadata
TDQS
Scored across 8 tools
The per-file analyzers (XML, Python, security) are clearly distinct, but inspect_odoo_module, validate_odoo_manifest, and check_odoo_addon_health all take the same addon_path argument and examine manifest/dependency concerns, with health subsuming the other two. An agent must read descriptions carefully to choose between inspect vs validate vs the full health audit.
Every tool follows a predictable verb_odoo_noun snake_case pattern (analyze_*, inspect_*, validate_*, check_*, verify_*) and uses 'odoo' as the consistent domain token. No mixed conventions or casing irregularities.
Eight tools is well within the sweet spot and each maps to a distinct artifact type or workflow stage (manifest, XML, Python, security, error, aggregate audit, live verification). Nothing feels padded or missing at the count level.
The surface covers static analysis across the major addon artifact types plus an aggregate health audit and live XML-RPC verification, which is strong lifecycle coverage for a developer assistant. Gaps remain: no scaffolding/module creation, no JS/OWL asset analysis, no automated fix application, and no i18n or test-related checks.
Maintenance
Related MCP Connectors
30+ deterministic dev and delivery tools: linting, metrics, diagrams, model advice, AI-text checks.
Free, read-only ship-readiness check for Replit, Lovable and Bolt apps.
Detects database migration table locks, terraform cost leaks, and OWASP API flaws.
SQL validation, formatting, parsing, metadata extraction, linting, and security analysis.
Related MCP Servers
- AlicenseAqualityAmaintenanceEnables AI coding assistants to validate HTML/CSS markup using W3C APIs, perform technical SEO audits, check broken links, and validate JSON-LD schemas directly in local workspaces.81,198 npm9MIT
- AlicenseAqualityBmaintenanceEnables analyzing Salesforce deployment logs, validating metadata manifests, assessing permission risks, and generating remediation plans through deterministic, local-only rules.4MIT
- AlicenseNot gradedqualityDmaintenanceEnables local code inspection and analysis for clean code practices, best practices, and actionable recommendations without external API calls or modifying the code.19 npm1MIT
- FlicenseNot gradedqualityAmaintenanceEnables 1C:Enterprise development with 74 tools for static analysis, code audit, query validation, EPF verification, and configuration management using local XML exports without a running database.2-