odoo-model-mcp
Provides tools for querying Odoo's model registry, including searching models, retrieving field details, inspecting inheritance chains, method overrides, and exporting the full registry without requiring a database connection.
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-model-mcpshow me the fields of sale.order"
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-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.
Related MCP server: MCP Odoo Server
Installation
# With uv (recommended)
uv tool install odoo-model-mcp
# With pip
pip install odoo-model-mcpUsage 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")list_models
Lightweight listing of every model in the registry (name, description, module, field count, abstract/transient flags). Use when you need a catalog but not per-field detail.
list_models(project_path="/path/to/project")dump_registry
Bulk-export the entire registry as JSONL to a file on disk. One call replaces thousands of per-model round trips; intended for downstream pipelines (indexers, embedders, static analysis). Writes records of two types:
{"type": "model", "data": {...model_info...}}— one per model{"type": "method_overrides", "model": "...", "method": "...", "overrides": [...]}— one per decorated method, with file/line for each override in the MRO chain
dump_registry(project_path="/path/to/project", output_path="/tmp/registry.jsonl")Project auto-detection
The server detects project structure automatically:
Odoo source: looks for
odoo-binor theodoo/Python packageAddons 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 registryDevelopment
git clone https://github.com/bemade/odoo-model-mcp.git
cd odoo-model-mcp
uv sync
uv run pytestLicense
LGPL-3.0-only
Available Tools
8 toolsdetect_project_infoA
Detect an Odoo project's structure without loading the registry.
Args: project_path: Path to the Odoo project root
| Name | Required | Description | Default |
|---|---|---|---|
| project_path | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | 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 discloses one behavioral trait (does not load the registry), but omits details about read-only nature, filesystem access, permissions, output format, or failure modes. This is a significant gap for a tool with no annotation support.
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 concise and front-loaded, with the core purpose in one sentence. The Args block is somewhat redundant with the schema but is brief and not overly verbose. It earns its place without unnecessary words.
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 simple one-parameter tool with an output schema, the description covers the basic purpose and a key differentiator. However, it lacks usage context (when to use vs sibling tools), details about what 'structure' entails, and any cautionary notes. It is adequate but leaves meaningful 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?
The schema has one parameter with no description, and the description's Args section adds only 'Path to the Odoo project root,' which is a marginal clarification over the parameter name 'Project Path.' No examples, constraints, or additional semantics are provided, and schema coverage is 0%, so the description barely compensates.
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 clearly states a specific action ('Detect an Odoo project's structure') with a distinguishing qualifier ('without loading the registry'). This differentiates it from sibling tools that operate on the registry, such as list_models and dump_registry.
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 a clear use case: lightweight inspection of project structure without touching the registry. However, it does not explicitly state when to prefer this tool over alternatives or provide exclusions. The context is clear but lacks explicit guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dump_registryA
Bulk export the entire registry to a JSONL file.
Emits one JSON object per line. Record types: {"type": "model", "data": {...model_info...}} {"type": "method_overrides", "model": "...", "method": "...", "overrides": [...]}
Designed for initial ingestion: one call replaces thousands of per-model round trips. Writes to a file on disk (where the worker runs) to avoid oversized MCP responses.
Args: project_path: Path to the Odoo project root output_path: Absolute path where the JSONL file will be written include_methods: If True, emit method_overrides records for every decorated method. Default True. addons_paths: Optional explicit addons paths (auto-detected if omitted) exclude_modules: Optional list of module names to skip loading
| Name | Required | Description | Default |
|---|---|---|---|
| output_path | Yes | ||
| addons_paths | No | ||
| project_path | Yes | ||
| exclude_modules | No | ||
| include_methods | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It transparently states the side effect of writing to disk: 'Writes to a file on disk (where the worker runs) to avoid oversized MCP responses.' It also explains the output format (JSONL) and record types. It does not mention file overwrite behavior or error conditions, but the disclosed side effects are significant and clearly conveyed.
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 well-structured with a clear lead sentence, a brief explanation of the output format, a usage note, and an organized arg list. It is slightly longer than minimal due to the JSON examples and detailed parameter explanations, but every sentence adds value. The front-loaded purpose and structured format earn it a strong score.
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?
Given the tool's complexity (bulk export, file output, multiple parameters) and the absence of schema descriptions, the description covers the essential aspects: purpose, usage context, side effects, output format, and parameter meanings. An output schema exists, so omitting explicit return values is acceptable. Minor gaps include lack of mention of error handling or resource implications, but overall the description is sufficiently complete for an agent to use the tool correctly.
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. It does so thoroughly by documenting each parameter in an Args block: project_path, output_path, include_methods, addons_paths, exclude_modules. It adds semantic detail beyond the schema, such as 'Absolute path where the JSONL file will be written' and 'Default True' for include_methods, which the schema only provides as a title/default. This fully compensates for the missing schema descriptions.
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 clearly states the verb and resource: 'Bulk export the entire registry to a JSONL file.' It distinguishes from sibling tools like list_models and model_info by emphasizing bulk export of the entire registry to a file, rather than per-model queries. The purpose is immediately understandable.
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 provides explicit usage context: 'Designed for initial ingestion: one call replaces thousands of per-model round trips.' This tells the agent when to use this tool versus making many smaller calls. However, it does not name specific alternative tools or explicitly state when not to use it, preventing a perfect score.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
field_infoA
Get detailed info for a field: type, compute, depends, overrides.
Args: project_path: Path to the Odoo project root model_name: Dotted model name, e.g. 'sale.order' field_name: Field name, e.g. 'amount_total' addons_paths: Optional explicit addons paths (auto-detected if omitted) exclude_modules: Optional list of module names to skip loading
| Name | Required | Description | Default |
|---|---|---|---|
| field_name | Yes | ||
| model_name | Yes | ||
| addons_paths | No | ||
| project_path | Yes | ||
| exclude_modules | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of behavioral disclosure. It adds some context by noting that addons paths are 'auto-detected if omitted' and that modules can be skipped, implying a module-loading process. However, it does not disclose potential side effects, performance impacts, or prerequisites beyond the project path, leaving a gap in transparency.
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 a single sentence followed by a well-organized parameter list. It is front-loaded with the purpose and avoids redundant text, making it concise and easy for an agent to parse quickly.
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, combined with the existing output schema, provides sufficient information for invoking the tool correctly. It covers all parameters and their roles. However, it could be enhanced by explicitly guiding when to use this tool over siblings, though the output schema mitigates the need to describe return values.
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 'Args:' section provides descriptions for all five parameters, which the schema lacks (0% schema coverage). It gives concrete examples (sale.order, amount_total) and explains optionality (auto-detected, skip loading), effectively compensating for the schema's lack of detail and adding significant meaning.
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 clearly states 'Get detailed info for a field: type, compute, depends, overrides,' which is a specific verb-resource pairing. Sibling tools like list_models and model_info indicate different foci, so field_info is easily distinguishable as the tool for field-level details.
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 does not explicitly state when to use this tool versus alternatives. It only describes the function and parameters, leaving usage inference to the agent. The purpose implies its use for field info, but no exclusions or alternative comparisons are provided, making guidance implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_modelsA
List every model in the project registry with lightweight metadata.
Returns: name, description, module, field_count, abstract, transient. Cheap to call; does not include per-field or per-method detail.
Args: project_path: Path to the Odoo project root addons_paths: Optional explicit addons paths (auto-detected if omitted) exclude_modules: Optional list of module names to skip loading
| Name | Required | Description | Default |
|---|---|---|---|
| addons_paths | No | ||
| project_path | Yes | ||
| exclude_modules | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the behavioral burden. It discloses return fields, labels itself as cheap to call, and reveals its limitation (no per-field/per-method detail), giving a transparent view of the tool's behavior for a read-only listing operation.
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 compact and well-structured: a clear purpose sentence, a return list, a cost/limitation note, and a concise Args block. Every line contributes necessary information with no redundancy or filler.
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 listing tool, the description is complete: it covers purpose, return values (effectively an output schema), parameter semantics, and limitations. The presence of sibling tools for deeper detail makes this scope sufficient, and the embedded return spec obviates the need for a separate output schema.
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 schema provides no descriptions for the three parameters, but the description's 'Args:' section adds semantic meaning. For example, 'addons_paths' is explained as 'Optional explicit addons paths (auto-detected if omitted)' and 'exclude_modules' as 'Optional list of module names to skip loading,' fully compensating for the 0% schema coverage.
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 opens with 'List every model in the project registry with lightweight metadata,' which uses a specific verb and resource. It further distinguishes from siblings like model_info and field_info by stating 'does not include per-field or per-method detail,' making the tool's scope unmistakable.
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 notes 'Cheap to call' and 'does not include per-field or per-method detail,' which implies it is suitable for broad overviews and not for detailed inspection. While it does not name explicit alternative tools, this context gives reasonable guidance on when to use the tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
method_overridesA
Get all modules that override a method, in MRO order, with source locations.
Args: project_path: Path to the Odoo project root model_name: Dotted model name, e.g. 'sale.order' method_name: Method name, e.g. '_compute_tax_totals' addons_paths: Optional explicit addons paths (auto-detected if omitted) exclude_modules: Optional list of module names to skip loading
| Name | Required | Description | Default |
|---|---|---|---|
| model_name | Yes | ||
| method_name | Yes | ||
| addons_paths | No | ||
| project_path | Yes | ||
| exclude_modules | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the transparency burden. It discloses the return structure (modules in MRO order with source locations) and key behaviors like auto-detection of addons paths and the ability to exclude modules. It does not mention error conditions or performance, but for a read-only tool this is sufficient.
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 concise: a single clear sentence followed by a structured list of parameters. There is no redundancy or fluff.
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?
With an output schema present and a clear parameter list, the description provides all necessary context: what it returns, how to specify inputs, and optional behaviors. It is complete for this 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%, but the description's Args section explains every parameter, including examples for model_name and method_name, and clarifies optionality for addons_paths and exclude_modules. This fully compensates for the schema's lack of descriptions.
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 clearly states the tool's function with a specific verb ('Get') and resource ('all modules that override a method'), and adds distinct details ('in MRO order, with source locations') that differentiate it from siblings focused on models/fields.
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 provides clear context: it is for finding method overrides in an Odoo project. It does not explicitly mention alternatives or exclusions, but the purpose is unambiguous enough to guide when to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
model_graphA
Get the inheritance graph for a model: extending modules, mixin parents, children.
Args: project_path: Path to the Odoo project root model_name: Dotted model name, e.g. 'sale.order' addons_paths: Optional explicit addons paths (auto-detected if omitted) exclude_modules: Optional list of module names to skip loading
| Name | Required | Description | Default |
|---|---|---|---|
| model_name | Yes | ||
| addons_paths | No | ||
| project_path | Yes | ||
| exclude_modules | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | 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 discloses that addons paths are auto-detected and exclude_modules can skip loading, which are helpful behavioral hints. However, it does not explicitly state that the operation is read-only, mention potential performance costs of loading modules, or describe error behavior (e.g., missing model or invalid project path). This is a significant gap for a tool with no safety annotations.
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 concise and front-loaded: a one-sentence summary of the tool's purpose followed by a structured parameter list. Every sentence provides necessary information, and the format is clean and easy to scan.
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?
With an output schema present, return-value documentation is not needed. The description covers the tool's purpose and all input parameters sufficiently, including optionality and default behaviors. However, it lacks edge-case context such as what happens if the model is not found or how the inheritance graph is structured, but given the simplicity and output schema, the description is fairly complete.
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 fully compensates with a clear Args block. Each of the four parameters has a meaningful explanation, including the dotted model name format, optional addons paths with auto-detection behavior, and the purpose of exclude_modules for skipping loading. This adds substantial value beyond the schema's minimal titles.
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 uses a specific verb ('Get') and a clear resource ('inheritance graph for a model'), and enumerates graph contents (extending modules, mixin parents, children). This distinguishes it from sibling tools like model_info or field_info, making its purpose unambiguous.
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 the tool is for exploring inheritance relationships, and the parameter context (project path, model name) suggests when it would be used. However, it does not explicitly contrast this tool with alternatives like model_info or method_overrides, nor does it state when not to use it, so usage guidance remains implicit rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
model_infoA
Get full metadata for an Odoo model: fields, inheritance, methods.
Args: project_path: Path to the Odoo project root model_name: Dotted model name, e.g. 'sale.order' addons_paths: Optional explicit addons paths (auto-detected if omitted) exclude_modules: Optional list of module names to skip loading
| Name | Required | Description | Default |
|---|---|---|---|
| model_name | Yes | ||
| addons_paths | No | ||
| project_path | Yes | ||
| exclude_modules | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations, so the description carries the full burden. It clearly indicates a read-like operation ('Get') and lists the returned metadata, but it does not disclose potential side effects, performance implications, or prerequisites (e.g., needing a valid Odoo project, whether it scans filesystem). The behavior is understandable but not deeply transparent.
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 compact: a one-line summary followed by a structured Args list. It front-loads the core purpose and each argument earns its place with brief, relevant context. No redundancy or filler.
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?
Given the tool's moderate complexity, the description covers the essential aspects: what the tool does, what the parameters are, and what is returned (fields, inheritance, methods). The presence of an output schema means return semantics need not be elaborated. However, it could mention that it inspects the codebase and may be affected by excluded modules, which is a minor 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%, so the description's Args block is essential. It provides meaningful explanations for each parameter, including the crucial detail that addons_paths is optional and auto-detected if omitted. This goes beyond the bare schema titles and effectively compensates for the lack of schema descriptions, though it could add examples or value formats.
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 uses a specific verb 'Get' and names the exact resource: 'full metadata for an Odoo model'. It further enumerates the contents (fields, inheritance, methods), making its function unambiguous. This distinguishes it from sibling tools that focus on narrower aspects like 'field_info' or 'method_overrides', positioning this as the comprehensive metadata tool.
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 usage when a complete model overview is needed, but it does not explicitly state when to choose this over sibling tools like field_info or method_overrides. No alternatives or exclusions are mentioned, so guidance is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_modelsA
Search models by name or description.
Args: project_path: Path to the Odoo project root query: Search string to match against model names and descriptions addons_paths: Optional explicit addons paths (auto-detected if omitted) exclude_modules: Optional list of module names to skip loading
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | ||
| addons_paths | No | ||
| project_path | Yes | ||
| exclude_modules | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must disclose behavioral traits. It only says 'Search models by name or description' and lists args. It does not mention side effects, read-only nature, module loading behavior, or any performance implications. The mention of 'loading' in addons_paths is only about path configuration, not operational behavior.
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 concise and well-structured: a one-sentence purpose statement followed by a compact list of arguments with brief explanations. No redundant or filler content; every line adds value.
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 4 params, no annotations, but an output schema, so return value details are covered elsewhere. The description adequately covers purpose and parameter semantics, but lacks usage guidelines in relation to sibling tools and behavioral transparency (e.g., does it load all modules? is it safe/read-only?). These gaps make it only partially complete.
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?
Although the schema has 0% description coverage, the description includes an explicit Args list that explains each parameter's purpose (e.g., query matches names/descriptions, addons_paths auto-detected if omitted). This adds meaning beyond the bare schema definitions, covering all four parameters clearly.
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 clearly states the tool's purpose with a specific verb ('Search') and resource ('models'), and specifies the matching criteria ('by name or description'). It distinguishes itself from siblings like list_models (which likely lists all models) by indicating a filtering/search behavior.
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 usage context (search with a query) but does not explicitly state when to prefer this tool over alternatives like list_models or model_info. No exclusions or alternative tool mentions are provided, leaving the selection mostly to inference.
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. Dates show when Glama detected each change.
8 tool updates
v0.1.0- First observed
detect_project_info - First observed
dump_registry - First observed
field_info - First observed
list_models - First observed
method_overrides - First observed
model_graph - First observed
model_info - First observed
search_models
TDQS
Each tool targets a distinct aspect of Odoo model introspection: listing vs searching, model-level vs field-level vs method-level detail, graph relationships, bulk export, and project detection. No overlap or ambiguity between tools.
All tool names follow a consistent snake_case pattern with either verb_noun (list_models, search_models, dump_registry, detect_project_info) or noun_info/noun_graph (model_info, field_info, model_graph, method_overrides). The style is uniform and predictable.
8 tools is well-scoped for an Odoo model introspection server. Each tool addresses a clear need without redundancy, and the count is within the ideal 3-15 range.
The tool surface covers the full lifecycle of model exploration: discover (list_models, search_models, detect_project_info), inspect (model_info, field_info, method_overrides), understand relationships (model_graph), and bulk ingest (dump_registry). No obvious gaps for the stated domain.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Versioned documentation registry and semantic search for AI tools and coding assistants.
Read-only U.S. lab-test catalog, collection-site search, and reference-range context.
Code intelligence for LLMs. Analyze, search, and retrieve code from any public git repository.
Query and audit AppSheet apps in natural language via Knotrik's pre-scanned definitions.
Related MCP Servers
- AlicenseAqualityFmaintenanceA bridge server that provides access to an Odoo shell environment, allowing execution of Python code within an Odoo database context for model introspection and database operations.4MIT
- AlicenseNot gradedqualityDmaintenanceEnables AI assistants to interact with Odoo databases via XML-RPC and JSON-RPC for performing CRUD operations and managing modules. It supports advanced features like domain-based searching, field metadata inspection, and administrative task execution.16MIT
- AlicenseNot gradedqualityDmaintenanceEnables seamless interaction with Odoo instances through the Model Context Protocol, supporting CRUD operations, custom method execution, and real-time updates. It offers versatile communication via stdio and HTTP protocols, including support for streaming and Server-Sent Events.8MIT
- FlicenseNot gradedqualityDmaintenanceEnables interaction with Odoo instances via XML-RPC, supporting CRUD operations and custom model queries through natural language.-
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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/bemade/odoo-model-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server