Odoo MCP Server
Odoo MCP
Odoo MCP は、Odoo データベースを Model Context Protocol サーバーに変えます。手書きのスクリプトや安全でない直接的な書き込みアクセスを必要とせず、実際の Odoo コンテキストを必要とするローカルエージェント、IDE、自動化ツール向けに構築されています。
Odoo 16-18 用の XML-RPC と、Odoo 19 用の External JSON-2 に対応しています。読み取りツール、診断、スキーマ検出、移行ヘルパー、ローカルアドオンスキャン、およびゲート付き書き込みワークフローを備えたコンパクトな MCP インターフェースを提供します。
ハイライト
機能 | 提供内容 |
22 個の MCP ツール | レコードの読み取り、スキーマの調査、ドメインの構築、アドオンスキャン、呼び出し診断、アクセスルール、書き込み検証。 |
5 個のエージェントプロンプト | 失敗した呼び出し、フィット/ギャップワークショップ、JSON-2 移行、安全な書き込み、モジュール監査のための再利用可能なワークフロー。 |
Odoo 16-19 対応 | デフォルトで XML-RPC、Odoo 19 では JSON-2 を選択可能。 |
ストリーミング可能な HTTP | stdio を使用しないクライアント向けのローカル HTTP/SSE サポート。 |
安全な書き込み | 直接的な |
リアルなスモークテスト | Docker Compose 検証により、制限付きユーザー、カスタムレコードルール、パッケージ化されたアドオンの XML インストール/更新を含む、使い捨ての Odoo 16.0、17.0、18.0、19.0 スタックを起動します。 |
Related MCP server: odoo-mcp
インストール
pip install odoo-mcpローカル開発用:
git clone https://github.com/tuanle96/mcp-odoo.git
cd mcp-odoo
uv sync --extra dev設定
環境変数に接続値を設定します:
export ODOO_URL="https://your-odoo-instance.com"
export ODOO_DB="your-database"
export ODOO_USERNAME="your-user"
export ODOO_PASSWORD="your-password-or-api-key"
export ODOO_TRANSPORT="xmlrpc"Odoo 19 JSON-2 の場合:
export ODOO_TRANSPORT="json2"
export ODOO_API_KEY="your-odoo-api-key"
export ODOO_JSON2_DATABASE_HEADER="1"ODOO_JSON2_DATABASE_HEADER=1 は JSON-2 呼び出しで X-Odoo-Database を送信します。ホストまたは dbfilter ルーティングによって目的のデータベースが既に選択されている場合にのみ 0 に設定してください。
odoo_config.json を使用することもできます:
{
"url": "https://your-odoo-instance.com",
"db": "your-database",
"username": "your-user",
"password": "your-password-or-api-key"
}実行
stdio 経由で MCP サーバーを起動:
odoo-mcpまたは:
python -m odoo_mcpローカルクライアント用にストリーミング可能な HTTP を起動:
odoo-mcp --transport streamable-http --host 127.0.0.1 --port 8000 --path /mcp--allow-remote-http を渡すか MCP_ALLOW_REMOTE_HTTP=1 を設定しない限り、ローカル以外の HTTP バインドは拒否されます。このサーバーには組み込みの HTTP 認証は含まれていません。リモート HTTP デプロイメントは、独自の認証、TLS、およびネットワークポリシーの背後に配置してください。
サーバーループを開始せずにランタイムの状態を確認:
odoo-mcp --healthMCP ツール
ツール | 目的 |
| レビュー済みのモデルメソッドを実行します。直接的な |
| Odoo モデルの技術名とラベルを一覧表示します。 |
| 1 つのモデルのフィールドメタデータを読み取ります。 |
| 制限付きの読み取り専用 |
| モデルと ID で 1 つのレコードを読み取ります。 |
| 名前で従業員を検索します。 |
| 日付範囲で休暇レコードを検索します。 |
| 実行せずにモデル呼び出しを診断します。 |
| 現在の Odoo 資格情報の ACL およびレコードルールの可視性を診断します。 |
| リレーションシップフィールド、必須フィールド、作成/書き込みのヒントをグループ化します。 |
| XML-RPC 形式の入力を JSON-2 エンドポイント、ヘッダー、名前付きボディに変換します。 |
| Odoo バージョン間のトランスポート、メソッド、移行のリスクを表面化させます。 |
| 要件を標準、構成、Studio、カスタムモジュール、回避、または不明に分類します。 |
| サーバーバージョン、ユーザーコンテキスト、トランスポート、データベース、インストール済みモジュールの概要を読み取ります。 |
| オプションのフィールドメタデータを含む制限付きモデルカタログを構築します。 |
|
|
| 信頼できるライブ |
|
|
| アドオンコードをインポートせずにローカルアドオンソースをスキャンします。 |
| 構造化された条件から Odoo ドメインを構築および検証します。 |
| 販売、CRM、在庫、会計、または人事向けの期待されるモジュール、モデル、検出呼び出しを報告します。 |
| 非機密の MCP ランタイム状態を報告します。 |
リソース
URI | 説明 |
| 利用可能なモデルを一覧表示します。 |
| モデルのメタデータとフィールドを読み取ります。 |
| 1 つのレコードを読み取ります。 |
| 制限付きドメインでレコードを検索します。 |
プロンプト
プロンプト | 用途 |
| 再試行する前に失敗した Odoo 呼び出しの根本原因を特定します。 |
| 未加工の要件を Odoo のフィット/ギャップバケットに変換します。 |
| XML-RPC または JSON-RPC から External JSON-2 への移行を計画します。 |
| 提案された |
| スキャン、リスク、ビジネス上の証拠を用いてローカルアドオンソースを監査します。 |
安全な書き込みモデル
書き込みは意図的に退屈な手順になっています。
preview_writeが標準的で非実行のペイロードを作成します。validate_writeがモデルメタデータ、必須フィールド、読み取り専用フィールド、リレーションヒント、レコード ID、およびペイロードの形状をチェックします。execute_approved_writeは、すべてのゲートを通過した場合にのみ実行されます:承認が同じサーバープロセス内の
validate_writeからのものであること、検証に信頼できる空ではないライブ Odoo
fields_getメタデータが使用されていること、トークンが期限切れになっておらず、消費されていないこと、
confirm=trueが渡されていること、ODOO_MCP_ENABLE_WRITES=1が設定されていること。
Odoo のアクセスルール、レコードルール、およびサーバー側の制約が最終的な結果を決定します。
sale.order.action_confirm などのレビュー済みの副作用のあるメソッドは、1 つずつ有効にできます:
export ODOO_MCP_ALLOWED_SIDE_EFFECT_METHODS="sale.order.action_confirm,res.partner.message_post"ODOO_MCP_ALLOW_UNKNOWN_METHODS=1 は信頼できるデプロイメントでは引き続きサポートされますが、health_check はこれをブロードモードとして報告します。少数のレビュー済みメソッドのみが必要な場合は、正確な許可リストエントリを優先してください。
クライアント設定
macOS 上の Claude Desktop は、以下の場所から MCP 設定を読み取ります:
~/Library/Application Support/Claude/claude_desktop_config.jsonGUI アプリはシェルの PATH を継承しない可能性があるため、絶対的な Python パスを使用してください:
{
"mcpServers": {
"odoo": {
"command": "/opt/homebrew/bin/python3",
"args": ["-m", "odoo_mcp"],
"env": {
"ODOO_URL": "https://your-odoo-instance.com",
"ODOO_DB": "your-database",
"ODOO_USERNAME": "your-user",
"ODOO_PASSWORD": "your-password-or-api-key",
"ODOO_TRANSPORT": "xmlrpc"
}
}
}
}その他の例は docs/client-configs.md にあります。
Docker
イメージをビルドします:
docker build -t mcp/odoo:latest -f Dockerfile .MCP クライアントから stdio 経由で実行します:
{
"mcpServers": {
"odoo": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-e", "ODOO_URL",
"-e", "ODOO_DB",
"-e", "ODOO_USERNAME",
"-e", "ODOO_PASSWORD",
"-e", "ODOO_TRANSPORT",
"-e", "ODOO_API_KEY",
"mcp/odoo:latest"
]
}
}
}ストリーミング可能な HTTP をローカルで実行します:
docker run --rm \
-p 127.0.0.1:8000:8000 \
-e ODOO_URL \
-e ODOO_DB \
-e ODOO_USERNAME \
-e ODOO_PASSWORD \
-e ODOO_TRANSPORT \
-e ODOO_API_KEY \
mcp/odoo:latest \
--transport streamable-http \
--host 0.0.0.0 \
--port 8000 \
--allow-remote-httpテスト
通常の品質ゲートを実行します:
uv run python -m ruff check .
uv run python -m mypy src
uv run python -m pytest実際の Odoo スモークテストを実行します:
uv run --python 3.12 --with-editable . scripts/odoo_compose_smoke.py \
--versions 16.0 17.0 18.0 19.0 \
--timeout 360 \
--inspector-smokeスモークハーネスは、使い捨ての Docker Compose スタックを起動し、直接的な Odoo アクセスを検証し、MCP stdio を検証し、Odoo 19 の場合は JSON-2 とストリーミング可能な HTTP も検証します。
互換性
XML-RPC は、幅広い互換性のためにデフォルトのトランスポートとして維持されます。Odoo 19 は ODOO_TRANSPORT=json2 を通じて External JSON-2 をサポートしています。Odoo は Odoo 20 で XML-RPC と JSON-RPC の非推奨を文書化しているため、新しい統合は JSON-2 を計画する必要があります。
貢献
問題報告、プルリクエスト、互換性レポートを歓迎します。CONTRIBUTING.md から始めて、Odoo のバージョン、トランスポート、クライアントタイプ、および実行した検証を含めてください。
セキュリティ
Odoo の資格情報、API キー、プライベート環境のデータベース名、または完全な Odoo デバッグトレースを含むログを公開しないでください。脆弱性は SECURITY.md を通じて報告してください。
ライセンス
MIT。LICENSE を参照してください。
Available Tools
41 toolsaccounting_health_across_instancesCRead-onlyIdempotent
AR/AP aging fanned out across instances — the partner-network sweep
| Name | Required | Description | Default |
|---|---|---|---|
| as_of | No | Optional ISO date used as the aging reference date. | |
| direction | No | Aging direction: 'receivable' or 'payable'. | receivable |
| instances | No | Optional instance selector; defaults to all eligible instances. | |
| top_partners | No | Maximum top partners to include in each aging report; capped at 100. |
Output Schema
| Name | Required | Description |
|---|---|---|
| tool | No | Reporting tool name. |
| as_of | No | |
| error | No | Sanitized error message when success is false. |
| errors | No | |
| results | No | |
| success | Yes | False when the call failed; see error. |
| direction | No | |
| elapsed_ms | No | |
| instance_count | No | |
| skipped_opt_out | No | |
| combined_buckets | No | |
| instances_queried | No | |
| unknown_instances | No | |
| combined_total_outstanding | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering the safety profile. The description adds a vague hint of multi-instance scope ('fanned out across instances') but doesn't disclose additional behaviors like output aggregation or performance implications. It doesn't contradict annotations, and the annotation coverage reduces the burden, so a middling score is appropriate.
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 extremely concise (one phrase), but it's cryptic and lacks structure. It doesn't front-load a clear purpose; instead, it uses jargon ('partner-network sweep') that obscures meaning. Conciseness is present but at the expense of clarity, making it only minimally acceptable.
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 (multi-instance, aging direction, top-partner filtering) and the availability of an output schema, the description should explain the aggregation behavior and scope. It fails to describe what 'fanned out' means operationally, how instances are selected, or what the response contains. The schema and annotations help, but the description leaves critical gaps for correct 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?
Schema coverage is 100% — all four parameters (as_of, direction, instances, top_partners) have detailed descriptions. The description adds no extra meaning about parameters, so the baseline of 3 applies; it neither enriches nor harms parameter understanding.
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 cryptic language like 'fanned out across instances' and 'the partner-network sweep' without specifying that it's a read-only AR/AP aging query across multiple instances. It doesn't clearly state the resource or action, making it hard to distinguish from sibling tools like receivable_payable_aging or accounting_health_summary.
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?
No guidance is provided on when to use this tool versus alternatives (e.g., single-instance aging tools or other cross-instance queries). The description gives no context for selecting it based on use case, prerequisites, or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
accounting_health_summaryCRead-onlyIdempotent
Open receivable/payable item counts and draft invoice backlog
| Name | Required | Description | Default |
|---|---|---|---|
| instance | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| tool | No | Reporting tool name. |
| error | No | Sanitized error message when success is false. |
| success | Yes | False when the call failed; see error. |
| draft_invoices | No | |
| open_payable_items | No | |
| open_receivable_items | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint, so the safety profile is covered. The description adds no extra behavioral context, such as the meaning of 'open' or that it only returns counts without detail, and it says nothing about the optional 'instance' parameter's effect on results.
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 that conveys the core purpose without padding. It is appropriately terse and front-loaded, though it could benefit from a bit more structure or a second sentence for context.
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 presence of an output schema, the return format may be documented there, but the description remains incomplete in core areas: it does not explain the 'instance' parameter, does not clarify the tool's single-instance scope versus siblings, and offers no usage guidance. The description is too minimal to be fully self-sufficient.
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 optional parameter 'instance' with no description, and the schema description coverage is 0%. The tool description also fails to explain what 'instance' refers to or how it affects the output, leaving the agent without essential information for correct invocation.
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 provides receivable/payable item counts and draft invoice backlog, identifying its resource and action. However, it does not explicitly distinguish it from sibling tools like 'receivable_payable_aging' or 'accounting_health_across_instances', which likely cover related but different scopes.
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 guidance on when to use this tool versus alternatives. It does not mention that it is likely for a single instance versus across instances, nor does it note any prerequisites or exclusions. The user is left to infer usage from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
aggregate_across_instancesBRead-onlyIdempotent
Read-only aggregate fanned out across instances with combined grand totals
| Name | Required | Description | Default |
|---|---|---|---|
| model | Yes | ||
| domain | No | ||
| group_by | Yes | ||
| measures | No | ||
| instances | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| tool | No | Reporting tool name. |
| error | No | Sanitized error message when success is false. |
| model | No | |
| errors | No | |
| results | No | |
| success | Yes | False when the call failed; see error. |
| elapsed_ms | No | |
| combined_count | No | |
| instance_count | No | |
| skipped_opt_out | No | |
| combined_measures | No | |
| instances_queried | No | |
| unknown_instances | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description says 'Read-only', which is consistent with the annotations (readOnlyHint=true, destructiveHint=false, idempotentHint=true). It adds behavioral context by stating the operation 'fans out across instances' and produces 'combined grand totals', which is beyond what annotations provide. However, it does not disclose other behavioral aspects like potential latency, failure semantics, or how 'instances' is interpreted by default.
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 concise sentence with no filler words. It front-loads the key qualifier 'Read-only' and immediately conveys the core behavior. It is appropriately sized for the information it delivers, though it sacrifices detail for brevity.
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 tool with cross-instance fan-out, five parameters, and no parameter descriptions, the one-line description is insufficient. It does not mention how instances are specified, what measures or group_by mean, or how domains are applied. An output schema exists, but the description alone leaves too many operational gaps for an agent to use the tool 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 description coverage is 0% and the description does not explain any of the five parameters (model, domain, group_by, measures, instances). The only hint is the phrase 'across instances', but it does not clarify parameter formats, defaults, or relationships. With no parameter documentation in either schema or description, the agent is left to guess semantics.
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 indicates the tool performs an aggregation operation ('aggregate') that is 'fanned out across instances' with 'combined grand totals', distinguishing it from single-instance aggregation tools like aggregate_records and from cross-instance search tools like search_across_instances. However, it is phrased as a noun phrase rather than an explicit verb+resource construction, which slightly reduces clarity.
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 is for cross-instance aggregation scenarios ('across instances', 'combined grand totals'), but it does not explicitly state when to use this tool instead of alternatives or when not to use it. Sibling tool names provide context, but the description itself offers no direct comparison or exclusion.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
aggregate_recordsARead-onlyIdempotent
Aggregate Odoo records server-side using Postgres groupby/sum/count. Uses formatted_read_group on Odoo 19+ and read_group on earlier versions.
| Name | Required | Description | Default |
|---|---|---|---|
| lazy | No | ||
| limit | No | ||
| model | Yes | ||
| order | No | ||
| domain | No | ||
| offset | No | ||
| group_by | Yes | ||
| instance | No | ||
| measures | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| rows | No | Aggregated group rows. |
| tool | No | Reporting tool name. |
| error | No | Sanitized error message when success is false. |
| model | No | |
| method | No | formatted_read_group (19+) or read_group. |
| success | Yes | False when the call failed; see error. |
| group_by | No | |
| measures | No | |
| row_count | No | |
| major_version | No | |
| fallback_reason | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, destructiveHint as false. Description adds version-specific implementation details but does not disclose additional behavioral traits beyond what annotations provide.
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 sentences, front-loaded with purpose, second sentence adds concise implementation detail. No redundant or irrelevant information.
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?
Though output schema exists, the description is too brief for a 9-parameter aggregation tool. It does not explain how to use domain, measures, order, or lazy parameters. Adequate for basic understanding but incomplete for effective usage.
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 has 0% description coverage for 9 parameters. Description mentions 'groupby/sum/count' but does not explain any parameter meanings or usage. Does not compensate for lack of 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?
Description clearly states it aggregates Odoo records using Postgres groupby/sum/count, which is a specific verb+resource. It distinguishes from siblings like search_records (raw data) and aggregate_across_instances (cross-instance). The mention of Odoo versions adds specificity.
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?
No explicit guidance on when to use vs alternatives. Implied usage is for server-side aggregation rather than fetching individual records, but no exclusions or alternative tool references are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
analyze_upgrade_logARead-onlyIdempotent
Classify Odoo install/update log errors into a migration worklist (no_action / needs_review / needs_script) with fix suggestions
| Name | Required | Description | Default |
|---|---|---|---|
| log_text | Yes | ||
| source_version | No | ||
| target_version | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the tool as read-only, idempotent, and non-destructive. The description adds no further behavioral context (e.g., limitations, performance considerations). With annotations present, this is adequate but not exemplary.
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, well-structured sentence that efficiently conveys purpose and outcomes. No unnecessary words or repetition.
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 three parameters (one required, two optional) and an output schema, the description provides a high-level goal but omits practical details like input constraints, expected version values, or output format. It is barely adequate for agent 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?
Schema description coverage is 0%, so the description must compensate. However, it only mentions 'log errors' without defining 'log_text' or explaining optional version parameters. The agent lacks details on expected input format or version syntax, which is insufficient for 0% 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 clearly states the tool's purpose: classifying Odoo upgrade log errors into three categories with fix suggestions. It uses a specific verb ('classify') and resource ('Odoo install/update log errors'), differentiating it from siblings like 'health_check' or 'upgrade_risk_report' which cover other aspects.
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 for analyzing upgrade logs, but provides no guidance on when to use this tool versus alternatives like 'upgrade_risk_report' or 'scan_addons_source'. No explicit when-not or context for selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
build_domainBRead-onlyIdempotent
Build a validated Odoo domain from structured conditions
| Name | Required | Description | Default |
|---|---|---|---|
| conditions | Yes | ||
| fields_metadata | No | ||
| logical_operator | No | and |
Output Schema
| Name | Required | Description |
|---|---|---|
| tool | No | Reporting tool name. |
| error | No | Sanitized error message when success is false. |
| domain | No | Validated Odoo domain expression. |
| issues | No | Validation errors and warnings. |
| success | Yes | False when the call failed; see error. |
| conditions | No | Normalized field/operator/value conditions. |
| metadata_used | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering safety expectations. The description adds 'validated,' implying some checking of conditions, but does not explain other behavioral aspects like whether it returns a string or list, or any constraints. Since annotations cover the key safety traits, the description adds minimal extra behavioral clarity.
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, compact sentence with no filler. It efficiently conveys the core action and input. Every word contributes meaning, making it appropriately concise.
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 three parameters, one required, and an output schema, yet the description does not explain any of the parameters beyond a vague reference to conditions. It lacks details on how the logical operator or fields metadata influence the output. Even with annotations and an output schema, the description is incomplete for a tool that constructs complex domains.
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 for explaining parameters. It only mentions 'structured conditions,' which vaguely maps to the 'conditions' parameter, but completely omits the 'fields_metadata' and 'logical_operator' parameters. Without any elaboration on how these parameters affect domain construction, parameter semantics are severely under-explained.
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: 'Build a validated Odoo domain from structured conditions.' The verb 'build' and resource 'Odoo domain' are specific, and the mention of 'validated' adds a unique aspect. It distinguishes from sibling tools like search_records, which perform queries, whereas this constructs a domain filter.
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 no guidance on when to use this tool versus alternatives. It does not mention prerequisites, when it is appropriate to build a domain, or suggest any alternative tools. The single sentence is purely declarative without usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
business_pack_reportARead-onlyIdempotent
Report expected modules, models, and safe discovery calls for a business pack
| Name | Required | Description | Default |
|---|---|---|---|
| pack | Yes | Business pack to report, such as sales, crm, inventory, accounting, or hr. | |
| instance | No | Optional configured Odoo instance name; uses the default if omitted. | |
| use_live_metadata | No | Whether to inspect live models and installed modules. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint, providing a clear safety profile. The description adds minimal behavioral context beyond stating the purpose; it does not discuss performance, caching, or 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 description is a single concise sentence that is front-loaded with the verb and resource. It is efficient and avoids 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?
With 3 parameters, an output schema, and clear annotations, the description provides adequate context. It covers the primary purpose but could mention the output structure or typical use cases briefly.
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 100%, so the input schema already documents all parameters. The description does not add meaning beyond the schema; it merely restates the tool's purpose.
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 'Report' and the resource 'expected modules, models, and safe discovery calls for a business pack'. It distinguishes this tool from siblings like health checks or search tools by its specific reporting scope.
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?
No guidance is provided on when to use this tool versus alternatives, when not to use it, or any prerequisites. The description simply states what it does without contextual usage advice.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cancel_async_taskCRead-onlyIdempotent
Cancel a pending or running background task
| Name | Required | Description | Default |
|---|---|---|---|
| task_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| name | No | |
| note | No | |
| tool | No | Reporting tool name. |
| error | No | Sanitized error message when success is false. |
| result | No | |
| status | No | |
| success | Yes | False when the call failed; see error. |
| task_id | No | |
| created_at | No | |
| started_at | No | |
| finished_at | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description directly contradicts the annotation readOnlyHint: true. Cancelling a task is a mutating action, not read-only. The description adds no behavioral context beyond the basic action, and it does not explain side effects like whether cancellation is irreversible or what happens to the task's status. This is a serious inconsistency with the 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 a single concise sentence with no unnecessary words. It is front-loaded with the core action and resource. There is 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 simplicity (one parameter) and the existence of an output schema, the description could be minimal, but it omits critical usage context and contradicts the annotations. It fails to provide guidance on when to cancel tasks or what the expected outcome is, making it incomplete for an agent to use reliably.
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 description provides no information about the task_id parameter beyond its name. Schema description coverage is 0%, so the description must compensate, but it does not explain how to obtain a task_id or what format is expected. The single parameter is self-explanatory by name, but the description adds zero semantic value.
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: cancel a pending or running background task. It uses a specific verb ('cancel') and a specific resource ('background task'), and it distinguishes itself from sibling tools like submit_async_task, get_async_task, and list_async_tasks by being the cancellation action.
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 guidance on when to use this tool versus alternatives. It does not mention checking task status first (e.g., via get_async_task), nor does it state that tasks should be cancelled only when they are no longer needed. There is no discussion of prerequisites or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
chatter_postADestructive
Post a chatter message on a mail.thread record. Default mode requires an approval token returned from a preview call; set MCP_CHATTER_DIRECT=1 to bypass and post immediately.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | ||
| model | Yes | ||
| confirm | No | ||
| approval | No | ||
| instance | No | ||
| record_id | Yes | ||
| partner_ids | No | ||
| message_type | No | comment | |
| subtype_xmlid | No | ||
| attachment_ids | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds value beyond annotations by detailing the approval token requirement and the env variable toggle. Description aligns with annotations (readOnlyHint false, destructiveHint true).
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 succinct sentences front-loading the primary action and usage variants, with no wasted 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?
Despite moderate complexity (10 params, no param descriptions), the description omits critical parameter details and does not leverage the existing output schema to explain behavior. Agent would struggle to correctly populate all fields.
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?
With 0% schema description coverage, the description fails to explain most parameters (body, model, record_id, etc.), only mentioning 'approval'. Leaves agent with insufficient parameter-level understanding.
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 'Post', resource 'chatter message', and target 'mail.thread record', distinguishing it from siblings like preview_write.
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?
Provides explicit guidance on two modes: default requires approval token from preview, direct mode bypasses with environment variable. Does not compare to alternative tools but gives clear usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
data_quality_reportARead-onlyIdempotent
Run read-only data-quality checks on one Odoo model: duplicates, missing required values, orphaned references, format anomalies
| Name | Required | Description | Default |
|---|---|---|---|
| model | Yes | ||
| checks | No | ||
| instance | No | ||
| key_fields | No | ||
| sample_limit | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| tool | No | Reporting tool name. |
| error | No | Sanitized error message when success is false. |
| model | No | |
| results | No | |
| success | Yes | False when the call failed; see error. |
| summary | No | |
| instance | No | |
| checks_run | No | |
| sample_limit | No | |
| skipped_restricted_fields | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnly, idempotent, non-destructive. The description adds meaningful behavioral context by listing specific check types and stating it operates on one Odoo model. However, it does not explain potential resource impact or return format limitations.
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 front-loaded with the core verb and resource. It is concise, includes essential details, and has no wasted 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?
With 5 parameters and no schema descriptions, the description provides high-level purpose but insufficient detail for correct invocation. The output schema exists but is not provided; however, the description does not explain return values. The tool's full usage context is incomplete.
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 parameter description coverage is 0%. The description mentions check types (duplicates, missing required, etc.) which likely correspond to the 'checks' parameter, but does not explain other parameters (instance, key_fields, sample_limit) or their formats. The agent must infer from parameter names.
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 runs read-only data-quality checks on one Odoo model and lists specific check types (duplicates, missing required values, orphaned references, format anomalies). This distinguishes it from sibling tools like search_records or aggregate_records.
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 for data-quality inspection but does not provide explicit when-to-use or when-not-to-use guidance compared to alternatives like diagnose_odoo_call or inspect_model_relationships. Usage is inferred but not clarified.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
diagnose_accessARead-onlyIdempotent
Diagnose ACL and record-rule visibility for an Odoo model
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum metadata rows to inspect; capped at 500. | |
| model | Yes | Technical Odoo model name to inspect. | |
| domain | No | Optional Odoo domain used for the visibility check. | |
| instance | No | Optional configured Odoo instance name; uses the default if omitted. | |
| operation | No | Access operation to diagnose, such as read or write. | read |
| record_ids | No | Optional record IDs to check directly. | |
| include_rules | No | Whether to include matching record-rule metadata. | |
| expected_count | No | Optional expected visible record count for comparison. | |
| observed_error | No | Optional error text or structured error to classify. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and non-destructiveness; the description confirms the diagnostic nature but adds no further behavioral details (e.g., output volume, execution cost).
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 single-sentence description is concise, front-loaded with the verb and resource, and contains no redundant information.
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 9-parameter tool with full schema and an output schema, the brief description is mostly adequate, though it could briefly mention the nature of the diagnostic output (e.g., 'returns ACL analysis').
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 100%, so the description does not need to explain parameters; it adds no extra meaning beyond what the schema already provides, meeting the baseline.
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 'diagnose' and the resource 'ACL and record-rule visibility for an Odoo model', making the tool's specific purpose distinct from sibling diagnostic tools.
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?
No guidance is provided on when to use this tool versus alternatives like diagnose_odoo_call or when to avoid it; the description lacks context for decision-making.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
diagnose_odoo_callARead-onlyIdempotent
Diagnose an Odoo model call without executing it
| Name | Required | Description | Default |
|---|---|---|---|
| args | No | Optional positional call arguments. | |
| model | Yes | Technical Odoo model name to diagnose. | |
| kwargs | No | Optional keyword call arguments. | |
| method | Yes | Odoo model method name to diagnose. | |
| metadata | No | Optional model or method metadata used by the diagnosis. | |
| transport | No | Transport to assess, such as 'auto', 'xmlrpc', or 'json2'. | auto |
| include_debug | No | Whether to include additional diagnostic details. | |
| observed_error | No | Optional error text or structured error to classify. | |
| target_version | No | Optional target Odoo version for compatibility checks. | |
| use_live_metadata | No | Whether to request live metadata; this preview tool does not fetch it. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false. The description adds 'without executing it', reinforcing safety but providing no additional behavioral details beyond what annotations convey.
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, concise sentence that immediately conveys the tool's purpose. No unnecessary words or information.
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 has 10 parameters and an output schema, the description is brief but sufficient to understand the core functionality. However, it could briefly mention that the tool analyzes potential issues without side effects, which would improve completeness.
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 100%, so baseline is 3. The tool description adds no extra meaning beyond the parameter descriptions in the schema (e.g., it doesn't explain how 'metadata' or 'transport' affect diagnosis).
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 explicitly states 'Diagnose an Odoo model call without executing it', clearly defining the action (diagnose), the resource (Odoo model call), and the key constraint (no execution). This distinguishes it from sibling tools like 'execute_method' which performs actual execution.
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 for diagnosis, but does not provide explicit guidance on when to use this tool versus alternatives (e.g., 'execute_method', 'preview_write'). There is no mention of use cases or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
execute_approved_writeBDestructive
Execute a previously previewed and confirmed standard write
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No | ||
| approval | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Description adds no behavioral context beyond what annotations already provide (destructiveHint: true). No mention of side effects, reversibility, or permissions. Annotation covers destructiveness, so description adds minimal value.
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?
Single sentence, very concise and front-loaded. However, the brevity sacrifices necessary detail, making it less useful than a slightly longer but more informative description.
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?
Despite having an output schema (not provided here) and annotations, the description is too minimal. For a destructive operation with a complex parameter (approval object), it should explain what the approval object is (e.g., from preview_write response) and confirm's function.
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% and the description provides no explanation of parameters (confirm and approval). The approval object is not described, nor is the role of the confirm boolean. Critical gap for a tool with nested objects.
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: executing a previously previewed and confirmed write. It uses specific verb 'execute' and resource 'standard write', and distinguishes from siblings like preview_write and validate_write.
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?
Implies prerequisite of a previewed and confirmed write, but does not explicitly state when to use this tool versus alternatives or provide exclusion criteria. Lacks guidance on required prior steps.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
execute_methodCDestructive
Execute a custom method on an Odoo model
| Name | Required | Description | Default |
|---|---|---|---|
| args | No | Optional positional method arguments. | |
| model | Yes | Technical Odoo model name, for example 'res.partner'. | |
| kwargs | No | Optional keyword method arguments. | |
| method | Yes | Odoo model method to call; direct create, write, and unlink are blocked. | |
| instance | No | Optional configured Odoo instance name; uses the default if omitted. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag destructiveHint: true and readOnlyHint: false, indicating the tool can modify data. The description adds no behavioral context beyond the annotations—no mention of side effects, permissions required, or safety considerations. Given the annotations, the description should at least reinforce the destructive nature or clarify when destruction might occur.
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 short sentence, which is concise but not optimally structured. It could be expanded with key information (use case, restrictions) without becoming verbose. Front-loads the core action but omits important guidance.
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?
Despite having an output schema, the description fails to explain return values, error behaviors, or side effects. For a destructive, open-world tool with 5 parameters and many siblings, this is insufficient. The description should at least mention safety warnings or when to prefer this over similar tools.
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 input schema has 100% description coverage, with each parameter (model, method, args, kwargs, instance) already described. The tool description adds no additional meaning beyond what the schema provides. Per the rubric, baseline is 3 since schema coverage is high.
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 'Execute a custom method on an Odoo model' clearly identifies the action (execute) and the resource (custom method on Odoo model). It distinguishes from siblings like 'execute_approved_write' (specific to writes) and 'diagnose_odoo_call' (testing). However, it could be more precise about what constitutes a 'custom method' versus blocked methods (create/write/unlink), which are noted only in the parameter schema.
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?
No guidance is provided on when to use this tool versus alternatives. The description does not mention prerequisites, comparable tools (e.g., 'execute_approved_write' for safe writes, 'read_record' for reading), or scenarios where this tool is inappropriate. The blocked methods are only stated in a parameter description, not in the tool description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fit_gap_reportCRead-onlyIdempotent
Classify Odoo requirements into fit/gap implementation buckets
| Name | Required | Description | Default |
|---|---|---|---|
| requirements | Yes | ||
| available_fields | No | ||
| available_models | No | ||
| business_context | No | ||
| installed_modules | No | ||
| use_live_metadata | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the agent knows it's a safe, non-mutating operation. The description adds no further behavioral context, but with the annotations present, the baseline is acceptable. No contradiction observed.
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 with no redundancy. Every word contributes to the purpose. It is efficiently front-loaded and concise.
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?
Despite having an output schema (not shown), the description fails to provide essential context about input format (e.g., what should 'requirements' look like), optional parameters' effect, or expected behavior when optional params are omitted. For a tool with 6 parameters and a specific analysis purpose, this is incomplete.
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%, meaning no parameter descriptions in the schema. The description does not elaborate on any parameter, including the required 'requirements'. Parameters like 'available_fields', 'available_models', and others have names that hint at meaning, but the agent gets no format, constraints, or examples. This is a critical 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 clearly states the tool's action ('classify') and resource ('Odoo requirements'). It specifies the output as 'fit/gap implementation buckets', which is specific. However, it does not differentiate from siblings like 'data_quality_report' or 'upgrade_risk_report', which could also analyze requirements in different ways.
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?
No guidance is provided on when to use this tool versus alternatives. It does not mention prerequisites, context, or typical scenarios. The single-sentence description lacks any usage recommendations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_json2_payloadARead-onlyIdempotent
Build a JSON-2 request preview without network access
| Name | Required | Description | Default |
|---|---|---|---|
| args | No | ||
| model | Yes | ||
| kwargs | No | ||
| method | Yes | ||
| base_url | No | ||
| database | No | ||
| include_database_header | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint, idempotentHint, and non-destructive. The description adds 'without network access', clarifying local execution. It does not contradict annotations. Additional context like auth needs or rate limits is not needed given the 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 a single concise sentence that effectively communicates the tool's purpose and key behavioral trait (no network access). It is well front-loaded with no 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?
Despite having an output schema, the description lacks context about what JSON-2 is, what fields the preview includes, and how to correctly fill the 7 input parameters. The agent may struggle to invoke the tool correctly without additional guidance.
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 provides no information about parameter meanings, leaving the agent to infer from names alone. Generic parameters like 'args' and 'kwargs' are particularly ambiguous.
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 'Build', the resource 'JSON-2 request preview', and the constraint 'without network access'. It distinguishes the tool from siblings, none of which mention JSON-2 or payload preview.
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 used to generate a preview of a request payload, but it does not explicitly state when to use it vs alternatives or provide guidance on prerequisites or conflicts. Usage context is implied by the tool name and description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_async_taskARead-onlyIdempotent
Poll a background task's status and result
| Name | Required | Description | Default |
|---|---|---|---|
| task_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| name | No | |
| note | No | |
| tool | No | Reporting tool name. |
| error | No | Sanitized error message when success is false. |
| result | No | |
| status | No | |
| success | Yes | False when the call failed; see error. |
| task_id | No | |
| created_at | No | |
| started_at | No | |
| finished_at | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is known. The description adds the behavioral context of polling a background task's status and result, but it does not disclose any additional traits such as behavior when the task is not found, retry logic, or output specifics. Since annotations carry the safety burden, the description provides minimal but adequate transparency beyond the 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 a single concise sentence that is front-loaded with the action 'Poll' and clearly states the resource. It contains no unnecessary words and is easy to parse.
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 simple structure (one parameter), the presence of an output schema, and annotations covering safety, the description is largely complete. It accurately conveys the tool's purpose and operation. It lacks explicit workflow context (e.g., referencing submit_async_task), but for a simple polling tool, the description is sufficiently comprehensive for an agent to understand and invoke it.
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% and the description does not mention parameters at all. The only parameter, task_id, is self-explanatory from its name and type, but the description does not compensate for the lack of schema descriptions by explaining how to obtain or use the task_id, leaving the agent to infer its meaning from context.
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 "Poll a background task's status and result" uses the specific verb 'Poll' and clearly identifies the resource (background task's status and result). It distinguishes from sibling tools like submit_async_task, cancel_async_task, and list_async_tasks by indicating a targeted retrieval of a single task's status and result.
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 for checking the status of an asynchronous background task, but it does not explicitly state when to use this tool versus alternatives such as list_async_tasks, nor does it mention exclusions. It provides no direct guidance on the workflow (e.g., after submitting a task) or when to prefer another tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_model_fieldsCRead-onlyIdempotent
Get field metadata for a specific Odoo model
| Name | Required | Description | Default |
|---|---|---|---|
| model | Yes | ||
| instance | No | ||
| relevance | No | ||
| max_fields | No | ||
| field_names | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| tool | No | Reporting tool name. |
| count | No | |
| error | No | Sanitized error message when success is false. |
| result | No | Mapping of field name to fields_get metadata. |
| ranking | No | Relevance scores when relevance="top". |
| success | Yes | False when the call failed; see error. |
| relevance_applied | No | |
| restricted_fields | No | Fields marked restricted by the field ACL. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only, idempotent, and non-destructive behavior. The description adds no additional behavioral context (e.g., pagination, filtering behavior, or performance implications).
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, which is concise but lacks necessary detail. It is appropriately front-loaded but underinformative.
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 five parameters and no schema descriptions, the description is incomplete. It fails to explain parameters, output schema, or usage nuances, leaving agents without essential 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%. The description does not explain any of the five parameters (model, instance, relevance, max_fields, field_names), providing no added meaning beyond the schema's field names.
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 resource ('field metadata for a specific Odoo model'), clearly distinguishing it from sibling tools like list_models or search_records.
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?
No guidance on when to use this tool versus alternatives such as inspect_model_relationships or schema_catalog. No context about prerequisites or when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_odoo_profileARead-onlyIdempotent
Read a bounded profile of the connected Odoo environment
| Name | Required | Description | Default |
|---|---|---|---|
| instance | No | Optional configured Odoo instance name; uses the default if omitted. | |
| module_limit | No | Maximum installed modules to include; capped at 500. | |
| include_modules | No | Whether to include installed-module metadata. |
Output Schema
| Name | Required | Description |
|---|---|---|
| tool | No | Reporting tool name. |
| error | No | Sanitized error message when success is false. |
| profile | No | Server, user-context, transport, and module metadata. |
| success | Yes | False when the call failed; see error. |
| metadata_used | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and idempotentHint=true. The description adds minimal behavioral context beyond 'bounded', leaving the precise scope unclear. No contradiction with 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?
A single, concise sentence front-loads the core action. No extraneous text, and every word is meaningful.
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?
While the output schema exists (reducing need to describe returns), the term 'bounded profile' is vague. The description could clarify what is included (e.g., version, user info). Adequate but not excellent.
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?
All three parameters have descriptions in the input schema, achieving 100% coverage. The tool description does not add extra meaning beyond what the schema already provides.
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 ('Read') and resource ('bounded profile of the connected Odoo environment'), clearly distinguishing this tool from sibling tools like 'get_model_fields' or 'list_instances'.
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?
No guidance is provided on when to use this tool versus alternatives such as 'health_check' or 'list_models'. An agent receives no context about prerequisites or preference conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
health_checkARead-onlyIdempotent
Report this MCP server's non-secret runtime safety posture
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| tool | No | Reporting tool name. |
| error | No | Sanitized error message when success is false. |
| server | No | Server name, instructions, surface counts. |
| plugins | No | Opt-in plugin load state and tool filtering. |
| runtime | No | Non-secret runtime security posture. |
| success | Yes | False when the call failed; see error. |
| rate_limits | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint=true, idempotentHint=true, and destructiveHint=false. The description adds value by clarifying that it reports 'non-secret' runtime safety posture, which helps the agent understand what information it will get. No contradictions.
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, concise sentence that states the tool's purpose without unnecessary words. It is front-loaded with the action and resource.
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 simplicity (no parameters, presence of output schema), the description provides complete context: it reports the server's non-secret runtime safety posture. No additional details are needed.
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 tool has 0 parameters, and the input schema is fully descriptive (100% coverage). Per guidelines, baseline is 4 for 0 parameters; the description does not need to add parameter info.
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 ('Report') and clearly identifies the resource ('this MCP server's non-secret runtime safety posture'). It distinguishes from sibling tools like 'accounting_health_summary' by focusing on general server safety rather than accounting-specific 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 lacks any guidance on when to use this tool versus alternatives (e.g., when to use 'health_check' vs 'accounting_health_across_instances'). No explicit context or exclusions are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
index_knowledgeBRead-onlyIdempotent
Fetch a bounded slice of records and build a local BM25 knowledge index
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| model | Yes | ||
| domain | No | ||
| fields | No | ||
| replace | No | ||
| instance | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| tool | No | Reporting tool name. |
| error | No | Sanitized error message when success is false. |
| model | No | |
| fetched | No | |
| indexed | No | |
| success | Yes | False when the call failed; see error. |
| instance | No | |
| max_documents | No | |
| indexed_fields | No | Explicit field list or 'smart selection'. |
| redacted_fields | No | |
| documents_in_index | No | |
| skipped_over_budget | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With annotations readOnlyHint=true, idempotentHint=true, and destructiveHint=false, the description adds context by specifying the operation is 'local' and builds a BM25 index, suggesting side effects are confined to the local session. This clarifies that while it's a read operation, it sets up a searchable structure. It does not contradict any annotation and adds useful nuance about scope, though it could mention memory/performance implications.
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, front-loaded sentence of 13 words, free of fluff. Every word earns its place, immediately conveying the action and outcome. It is perfectly sized for quick consumption.
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 6 parameters (moderate complexity) and an output schema exists. The description covers the overall purpose but omits any detail about parameters, return value structure, or edge cases like what happens with replace=true. Given the annotations already declare safety, this is adequate for a basic understanding but leaves gaps in knowing how to set up the index correctly, making it minimally 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% and the description makes no mention of any parameters. All six parameters (limit, model, domain, fields, replace, instance) are left unexplained. Since the schema provides no defaults or descriptions, the description needed to compensate but entirely fails to clarify what these parameters do or how they interact. This leaves the agent guessing on parameter usage.
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 'fetch' and 'build' with concrete resources: 'a bounded slice of records' and 'a local BM25 knowledge index'. This clearly distinguishes it from sibling tools like search_knowledge and knowledge_stats, as it focuses on indexing rather than querying. It tells exactly what the tool does.
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 guidance on when to use this tool instead of alternatives. It does not mention exclusions, prerequisites, or compare to similar tools like search_knowledge or list_instances. The description only states the action without contextual 'when' or 'when not to use', so it fails to help an agent decide between this and related tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
inspect_model_relationshipsBRead-onlyIdempotent
Inspect model relationships and required field metadata
| Name | Required | Description | Default |
|---|---|---|---|
| model | Yes | ||
| instance | No | ||
| fields_metadata | No | ||
| include_computed | No | ||
| include_readonly | No | ||
| use_live_metadata | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint, covering the safety profile. The description adds no additional behavioral context (e.g., that it returns relationships, no side effects). With rich annotations, a 3 is appropriate as the description complements but doesn't expand.
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, short sentence with no wasted words. It is concise, though it sacrifices completeness. It could benefit from a brief explanation of parameters or usage context.
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 has 6 parameters (1 required) and no parameter documentation in the description, the description is incomplete. Although an output schema exists, the parameter semantics gap is significant for a tool with many parameters.
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%. The description does not explain any of the six parameters (e.g., instance, fields_metadata, include_computed). Parameter names alone are insufficient for accurate usage; e.g., 'instance' is ambiguous without explanation.
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 'Inspect model relationships and required field metadata' clearly states the verb 'inspect' and the specific resources 'model relationships and required field metadata'. It distinguishes from siblings like 'get_model_fields' which focuses on fields, not relationships.
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 no guidance on when to use this tool versus alternatives. Among siblings, there are tools like 'get_model_fields', 'schema_catalog', and 'lookup_model_history', but no comparisons or exclusions are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
knowledge_statsARead-onlyIdempotent
Report local knowledge index sizes and document budget
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| tool | No | Reporting tool name. |
| error | No | Sanitized error message when success is false. |
| indexes | No | |
| success | Yes | False when the call failed; see error. |
| max_documents | No | |
| total_documents | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint, which already cover safety. The description adds that it reports 'local' knowledge index, which is useful context, but does not elaborate on what exactly is included (e.g., budget specifics, whether it aggregates across instances). No contradiction.
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 concise sentence that states exactly what the tool does. No fluff, perfectly front-loaded.
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?
Complexity is low with 0 parameters and a clear purpose. The output schema exists, so return values are presumably documented there. The description covers the main function (sizes and budget) but could mention whether it's instance-specific or aggregated, though 'local' hints at instance-level. Overall complete enough.
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 tool has 0 parameters, so schema coverage is 100% trivially. The description adds no parameter details because none exist. Baseline for 0 params is 4, and the description is adequate.
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 reports local knowledge index sizes and document budget, which is specific and distinguishes it from siblings like index_knowledge and search_knowledge. It lacks a verb like 'get' but the purpose is clear.
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 for checking knowledge index stats, but does not explicitly state when to use this tool versus alternatives (e.g., index_knowledge or search_knowledge). No exclusions or contextual triggers are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_async_tasksARead-onlyIdempotent
List recent background tasks newest-first
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| tool | No | Reporting tool name. |
| error | No | Sanitized error message when success is false. |
| tasks | No | |
| success | Yes | False when the call failed; see error. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is established. The description adds the newest-first ordering, which is useful, but it does not disclose other behaviors like result limits, pagination, or what 'recent' means. This goes slightly beyond annotations but is minimal.
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, concise sentence that states the action, resource, and ordering. It is front-loaded and contains no redundant information.
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 zero-parameter list tool with an output schema and good annotations, the description is adequate. The only slight gap is the vague term 'recent' without a defined limit, but the overall simplicity and existing structured data make it sufficiently 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?
The tool has zero parameters, so the baseline is 4. The description does not need to add parameter meaning, and since there are no params, no additional info is required.
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 identifies the action (list), the resource (background tasks), and the ordering (newest-first). It distinguishes from siblings like get_async_task (fetch specific) and cancel_async_task (cancel), so the purpose is 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?
No guidance is provided on when to use this tool versus alternatives such as get_async_task or cancel_async_task. The description simply states what it does without context for selection or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_instancesARead-onlyIdempotent
List configured Odoo instance names without credentials
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| tool | No | Reporting tool name. |
| error | No | Sanitized error message when success is false. |
| default | No | Name of the default instance. |
| success | Yes | False when the call failed; see error. |
| instances | No | Instance entries (never credentials). |
| instance_count | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint. The description adds the key behavioral trait 'without credentials,' which implies no authentication is required and no sensitive data is exposed. This complements annotations effectively without contradiction.
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?
A single, concise sentence that conveys the entire purpose without unnecessary words. It is optimally front-loaded for quick comprehension.
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 sufficient for a simple, parameterless tool. It states what the tool returns (instance names) and that it is safe. An output schema exists, so return format details are covered there. Could be more complete by noting that the list is static or cached, but overall adequate.
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?
No parameters exist, so schema coverage is 100%. The description does not need to elaborate. Baseline for zero parameters is 4, as no additional parameter meaning is required.
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 'List configured Odoo instance names without credentials,' specifying the verb (List) and resource (Odoo instance names). It distinguishes from sibling tools like list_models or list_async_tasks by focusing on instances and emphasizing 'without credentials'.
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?
No guidance on when to use this tool vs alternatives. It does not mention scenarios like listing instances for monitoring or comparison, nor does it exclude cases where credential info is needed. Sibling tools exist for broader operations (e.g., aggregate_across_instances), but no differentiation provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_modelsBRead-onlyIdempotent
List Odoo models with optional name filtering
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | No | ||
| instance | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| tool | No | Reporting tool name. |
| count | No | |
| error | No | Sanitized error message when success is false. |
| result | No | |
| success | Yes | False when the call failed; see error. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, openWorldHint=true, idempotentHint=true, and destructiveHint=false, covering safety. The description adds no behavioral traits beyond the filtering behavior implied by the query parameter, and does not mention latency, auth requirements, or pagination.
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?
A single, clear sentence with no wasted words. The core action and optional filter are front-loaded, making it 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?
Given the tool's simplicity (3 optional params, output schema present), the description is adequate but minimal. It does not clarify what the output contains (e.g., model names only vs. full details) or how 'limit' and 'instance' affect results, leaving some ambiguity.
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 explain all parameters. It only hints at 'query' for name filtering but provides no explanation for 'limit' or 'instance'. The output schema exists but is not described, so the agent cannot infer return structure from this description.
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 'List' and clearly identifies the resource 'Odoo models', with the optional name filtering hint. It distinguishes the tool from siblings like 'search_records' or 'get_model_fields' by focusing on listing models themselves.
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?
No guidance is provided on when to use this tool versus alternatives such as 'search_records' or 'get_model_fields'. The description implies a use case (listing models with optional filtering) but does not specify exclusions or preferred contexts.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lookup_model_historyARead-onlyIdempotent
Look up Odoo model rename/removal history by old or new model name (e.g. account.invoice -> account.move)
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and idempotentHint=true, so the description confirms a safe lookup. It adds the detail of looking up history, which is consistent. No contradictions, but could mention limitations if any.
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?
Single sentence, front-loaded with action and resource. No wasted words. Example enhances understanding without bloating.
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 simple tool with one required parameter, clear annotations, and an existing output schema, the description is complete. No need to explain 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 schema has 0% description coverage, so the description fully compensates by explaining that the 'name' parameter can be an old or new model name, with a concrete example. Adds significant semantic value.
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 action (look up), the resource (Odoo model rename/removal history), and the method (by old or new model name). An example is provided, and it distinguishes from sibling tools like list_models or get_model_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 implies when to use (to find rename/removal history) but does not explicitly state when not to use or provide alternatives. It gives a clear use context but lacks exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
preview_writeARead-onlyIdempotent
Preview create, write, or unlink without executing it
| Name | Required | Description | Default |
|---|---|---|---|
| model | Yes | ||
| values | No | ||
| context | No | ||
| instance | No | ||
| operation | Yes | ||
| record_ids | No | ||
| values_list | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false. The description adds the key behavioral trait 'without executing it,' which aligns with annotations but does not provide additional details like authorization needs or rate limits. This is adequate given the annotation coverage.
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 that is front-loaded and contains no unnecessary words. Every element serves a purpose, making it highly concise.
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?
Despite having an output schema (not shown), the description lacks guidance on parameter usage and return values. With 7 parameters and no schema descriptions, the description is insufficient for correct tool invocation, especially for an agent unfamiliar with the 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?
The input schema has 7 parameters with 0% schema description coverage, and the tool description provides no explanation of any parameter. Without compensating information, the agent cannot understand the meaning or proper usage of parameters like 'model,' 'operation,' 'values,' etc.
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 "Preview create, write, or unlink without executing it" clearly states the tool's purpose with a specific verb ('preview') and resource scope ('create, write, or unlink'). It distinguishes itself from sibling tools like 'execute_approved_write' and 'validate_write' that perform actual execution or validation.
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 you want to see the effect of a write operation without committing. It is clear from the context, but it does not explicitly mention alternatives or when not to use this tool, which would make it a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
read_attachmentARead-onlyIdempotent
Read an ir.attachment's metadata and size-capped base64 content
| Name | Required | Description | Default |
|---|---|---|---|
| instance | No | ||
| include_data | No | ||
| attachment_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| tool | No | Reporting tool name. |
| error | No | Sanitized error message when success is false. |
| success | Yes | False when the call failed; see error. |
| warnings | No | |
| max_bytes | No | |
| attachment | No | ir.attachment metadata row. |
| data_base64 | No | Base64 content when under the size cap. |
| data_included | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and non-destructive, so safety is clear. The description adds value by specifying that content is 'size-capped', which is crucial behavioral information not captured in annotations. It could be improved by noting the cap size or behavior when exceeded, but overall adds 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 that efficiently conveys the tool's purpose and key behavioral details. It is front-loaded with the verb and resource, and every word contributes meaning. No superfluous information.
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 has 3 parameters, an output schema, and sibling tools that also read data, the description is minimally complete for a simple read tool. However, it lacks parameter explanations and does not clarify the return structure (though output schema may cover that). The size-cap info is good, but overall could be more thorough.
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?
With 0% schema description coverage, the description should explain what the three parameters (instance, include_data, attachment_id) mean and how they affect the operation. It does not do so. The description only mentions the overall action, leaving parameter semantics completely undocumented.
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 'Read' and a precise resource 'ir.attachment', and it clearly states what is returned (metadata and size-capped base64 content). This distinguishes it from sibling tools like read_record or execute_method, which have different purposes.
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 for reading attachments, but it does not provide explicit when-to-use or when-not-to-use guidance, nor does it mention alternatives among the many sibling tools. The context is clear but lacks direct directives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
read_recordBRead-onlyIdempotent
Read a single Odoo record by model and ID
| Name | Required | Description | Default |
|---|---|---|---|
| model | Yes | ||
| fields | No | ||
| instance | No | ||
| record_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| tool | No | Reporting tool name. |
| error | No | Sanitized error message when success is false. |
| result | No | The record (field-ACL redacted). |
| success | Yes | False when the call failed; see error. |
| fields_used | No | |
| redacted_fields | No | |
| smart_fields_applied | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint=true, idempotentHint=true, destructiveHint=false, so safety and idempotency are covered. The description adds no extra behavioral context beyond stating it reads a record. With annotations, the burden is lower, but no additional details like return format or error cases are given.
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, concise sentence that gets straight to the point. It is front-loaded with the main action and resource, and contains no 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?
The description is minimal but for a simple read tool with annotations covering behavior, it is fairly complete. However, the absence of parameter descriptions and usage guidance leaves gaps, especially given multiple sibling tools and optional parameters.
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%, meaning no parameter descriptions exist in the schema. The overall description does not explain any of the four parameters (model, record_id, fields, instance). For clarity, each parameter should be described; the description completely fails to do so.
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 reads a single Odoo record by model and ID. This distinguishes it from siblings like search_records (multiple records) and get_model_fields (metadata). The verb 'read' and resource 'single Odoo record' are specific.
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 no guidance on when to use this tool versus alternatives. It does not mention prerequisites, context, or that it is best for known record ID lookups. Sibling tools like search_records are not contrasted.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
receivable_payable_agingARead-onlyIdempotent
Aged receivable/payable report bucketed by days overdue
| Name | Required | Description | Default |
|---|---|---|---|
| as_of | No | Optional ISO date used as the aging reference date. | |
| limit | No | Maximum open-item lines to inspect. | |
| instance | No | Optional configured Odoo instance name; uses the default if omitted. | |
| direction | No | Aging direction: 'receivable' or 'payable'. | receivable |
| top_partners | No | Maximum top partners to include; capped at 100. |
Output Schema
| Name | Required | Description |
|---|---|---|
| tool | No | Reporting tool name. |
| as_of | No | |
| error | No | Sanitized error message when success is false. |
| buckets | No | |
| success | Yes | False when the call failed; see error. |
| partners | No | |
| direction | No | |
| truncated | No | |
| line_count | No | |
| partner_count | No | |
| skipped_lines | No | |
| total_outstanding | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnly, openWorld, idempotent, non-destructive, so the description doesn't contradict them. The description provides a good high-level behavior ('bucketed by days overdue') that complements annotations. However, it doesn't elaborate on side effects (though readOnly implies none) or specific data aggregation behavior, but given the annotations, this is adequate.
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 one sentence, concise and to the point. It communicates the core function without fluff. It could maybe expand on the output, but for a report tool, this is appropriately short.
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 minimal but an output schema is present, so return values don't need explanation. However, it doesn't mention the meaning of 'open-item lines' or the purpose of the 'limit' parameter, which could be ambiguous. The tool complexity is moderate (5 params, all documented), so more context would help. Given the output schema exists, it's acceptable but could be slightly more 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?
All parameters have descriptive schema descriptions: as_of (ISO date), limit (max lines), instance (optional Odoo instance), direction (receivable/payable), top_partners (max partners, capped). The description adds context by saying the report is 'bucketed by days overdue', which helps understand what 'as_of' and 'direction' mean. Since schema coverage is 100%, the parameter semantics are already well-covered, but the description reinforces the purpose.
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 produces an 'Aged receivable/payable report' with a specific structure (bucketed by days overdue). It effectively conveys the core purpose and distinguishes it from general reporting tools. However, it doesn't explicitly differentiate from sibling tools like `accounting_health_summary` or `business_pack_report`, which might also involve financial reports.
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 for generating aging reports but provides no guidance on when to choose this over alternatives or prerequisites (e.g., configured Odoo connection, instance). Given sibling tools like `accounting_health_summary`, explicit when-to-use guidance is missing. The schema mentions 'instance' and 'direction', but the description doesn't clarify typical use cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
scan_addons_sourceBRead-onlyIdempotent
Scan local Odoo addon source without importing addon code
| Name | Required | Description | Default |
|---|---|---|---|
| max_files | No | ||
| addons_paths | No | ||
| max_file_bytes | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark the tool as read-only and idempotent. The description adds a key behavioral trait: 'without importing addon code', explaining it avoids side effects of importing modules.
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?
Single sentence that is concise and directly states the tool's purpose without extraneous text.
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 but no parameter details in the description, the tool is incomplete for effective use. The description should at least list what the returned data looks like or mention key parameters.
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%, yet the description provides no explanation of the three parameters (max_files, addons_paths, max_file_bytes). Users cannot infer their meaning or usage from the description.
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?
Description clearly states the tool scans local Odoo addon source files without importing, using a specific verb and resource. It distinguishes from sibling tools that focus on data records or other operations.
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?
No guidance on when to use this tool vs alternatives like read_record or inspect_model_relationships. The description lacks context for appropriate usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
schema_catalogARead-onlyIdempotent
Build and cache a bounded Odoo model schema catalog
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum catalog models to return; capped at 500. | |
| query | No | Optional text used to filter catalog models. | |
| models | No | Optional technical model names to include in the catalog. | |
| refresh | No | Whether to bypass and refresh the cached catalog. | |
| instance | No | Optional configured Odoo instance name; uses the default if omitted. | |
| include_fields | No | Whether to include field metadata for each model. |
Output Schema
| Name | Required | Description |
|---|---|---|
| tool | No | Reporting tool name. |
| count | No | |
| error | No | Sanitized error message when success is false. |
| result | No | Model entries; fields included when requested. |
| success | Yes | False when the call failed; see error. |
| metadata_used | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint false. The description adds value by stating that the tool builds and caches the catalog, implying that it is a read operation that may return cached data, and that it is bounded. This context enriches the understanding beyond 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 a single, front-loaded sentence with no unnecessary words. Every word contributes to the purpose, making it highly concise and efficient.
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 that an output schema exists and annotations cover safety, the description is mostly complete. However, it does not explain the caching behavior in detail or mention the bounded nature explicitly, which could be helpful for an agent to understand the tool's scope. Still, it is sufficient for a tool with well-documented parameters and 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?
Schema description coverage is 100%, so the schema documents all parameters fully. The description does not add any additional meaning or constraints beyond what the schema provides, meeting the baseline expectation.
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 action ('Build and cache') and the resource ('bounded Odoo model schema catalog'), which is specific and informative. It distinguishes from sibling tools like 'list_models' or 'get_model_fields' by emphasizing caching and boundedness, but does not explicitly contrast with 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 description gives no guidance on when to use this tool versus alternatives such as 'list_models', 'get_model_fields', or 'search_records'. No usage context, prerequisites, or exclusions are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_across_instancesARead-onlyIdempotent
Read-only search fanned out across configured Odoo instances, merged and attributed
| Name | Required | Description | Default |
|---|---|---|---|
| model | Yes | ||
| domain | No | ||
| fields | No | ||
| instances | No | ||
| limit_per_instance | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| tool | No | Reporting tool name. |
| error | No | Sanitized error message when success is false. |
| model | No | |
| errors | No | |
| merged | No | |
| results | No | |
| success | Yes | False when the call failed; see error. |
| elapsed_ms | No | |
| merged_count | No | |
| instance_count | No | |
| skipped_opt_out | No | |
| instances_queried | No | |
| unknown_instances | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint=false. The description adds useful behavioral grounding with 'fanned out... merged and attributed', which explains the cross-instance orchestration and result attribution. It does not go into detail about attribution semantics or edge cases, but it complements the annotations well.
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?
This is a single, well-structured sentence that front-loads the key idea ('Read-only') and packs in scope and behavior without waste. It is concise while still being information-dense.
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?
Within its parent object schema and annotations, this description is reasonably effective, and an output schema covers return value semantics. However, main gaps are the lack of parameter semantics and no explicit guidance around when to select this instead of related search_records or aggregate_across_instances. It is minimally complete but not richly enough for a complex fan-out 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%, and the description provides essentially no parameter guidance. Parameter names like model, domain, instances, and limit_per_instance are somewhat self-explanatory, but the semantics of null defaults, the format of domain/instances, and how limit is applied are left unexplained.
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 ('search'), names the resource (Odoo instances), and conveys a precise scope ('fan out across configured instances', 'merged and attributed'). It clearly distinguishes this from single-instance search_records and aggregate_across_instances.
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 'fanned out across configured Odoo instances' clearly indicates the main use case is multi-instance search. It does not explicitly name alternatives or list when not to use it, but the context is clear enough for an agent to choose it over search_records or aggregate_across_instances.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_employeeBRead-onlyIdempotent
Search for employees by name
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| limit | No | ||
| instance | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| error | No | Error message, if any |
| result | No | List of employee search results |
| success | Yes | Indicates if the search was successful |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint, covering the safety profile. The description adds no additional behavioral context such as search behavior (e.g., partial matching, case sensitivity) or result structure.
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, which is concise but lacks structure for a tool with multiple parameters. A more structured format (e.g., listing parameters briefly) would improve clarity without adding much length.
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 is simple with one required parameter and an output schema, but the description does not mention the output schema or return format. It adequately addresses the core purpose but lacks details on optional parameters and results.
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. It adds meaning for the 'name' parameter implicitly but provides no details on 'limit' or 'instance'. The description only partially explains the parameters.
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 action ('Search') and the resource ('employees') with a specific filter ('by name'). It distinguishes from sibling tools like search_records and search_across_instances by targeting employees specifically.
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 for searching employees by name but does not explicitly state when to use this tool versus alternatives like search_records or search_across_instances. No exclusions or when-not-to-use guidance is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_holidaysARead-onlyIdempotent
Search for holidays within a date range
| Name | Required | Description | Default |
|---|---|---|---|
| end_date | Yes | End date in YYYY-MM-DD format. | |
| instance | No | Optional configured Odoo instance name; uses the default if omitted. | |
| start_date | Yes | Start date in YYYY-MM-DD format. | |
| employee_id | No | Optional employee ID used to filter holidays. |
Output Schema
| Name | Required | Description |
|---|---|---|
| error | No | Error message, if any |
| result | No | List of holidays found |
| success | Yes | Indicates if the search was successful |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint. The description does not add any behavioral context beyond what annotations provide, such as pagination or filtering 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 a single short sentence that is front-loaded with the key action and resource, containing no 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?
Given the tool's simplicity, presence of an output schema, and comprehensive annotations, the description is sufficient for understanding the tool's purpose. It could mention that it returns a list of holidays, but the output schema likely covers that.
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 100% with each parameter adequately described. The tool description adds no additional parameter meaning beyond the 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?
The description clearly states the tool searches for holidays within a date range. The verb 'Search' and resource 'holidays' are specific, and it distinguishes from sibling search tools like search_records or search_employee.
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 for date-range holiday searches but provides no explicit guidance on when to use this tool versus alternatives, nor any exclusions or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_knowledgeCRead-onlyIdempotent
Relevance-ranked local BM25 search over previously indexed records
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| model | Yes | ||
| query | Yes | ||
| instance | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| tool | No | Reporting tool name. |
| error | No | Sanitized error message when success is false. |
| model | No | |
| query | No | |
| results | No | BM25-ranked snippets from the local index. |
| success | Yes | False when the call failed; see error. |
| instance | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark the tool as read-only, idempotent, and non-destructive. The description adds algorithmic detail (BM25, local) without contradicting annotations, but does not elaborate on side effects or scope.
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, focused sentence with no redundancy or unnecessary details.
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?
While an output schema exists (so return values need not be explained), the description lacks parameter semantics and usage guidance, making it incomplete for effective 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 schema includes four parameters (query, model, limit, instance), but the description provides no explanation for any of them. This is a significant gap, and no compensation is made.
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?
Description clearly states it performs a search over indexed records with BM25 relevance ranking. The term 'local' distinguishes it from cross-instance search tools, though it could be more explicit about the scope.
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?
No guidance is given on when to use this tool versus alternative search tools like search_records or search_across_instances. The 'local' hint is implicit but not elaborated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_recordsARead-onlyIdempotent
Search Odoo records with read-only search_read; optional free-text query matches across name/ref/email-like fields
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| model | Yes | ||
| order | No | ||
| query | No | ||
| domain | No | ||
| fields | No | ||
| offset | No | ||
| instance | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| tool | No | Reporting tool name. |
| count | No | |
| error | No | Sanitized error message when success is false. |
| result | No | Matched records (field-ACL redacted). |
| success | Yes | False when the call failed; see error. |
| fields_used | No | |
| redacted_fields | No | |
| query_fields_used | No | Fields matched by the free-text query shortcut. |
| smart_fields_applied | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint, openWorldHint, idempotentHint, and non-destructive behavior. Description adds that it uses the search_read method and that query matches name/ref/email-like fields, providing context beyond 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?
Single, front-loaded sentence efficiently conveys purpose and key feature (free-text query). No extraneous text; every word contributes.
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 8 parameters and existing output schema, description covers core search intent but omits details on filtering with domain, field selection, ordering, and pagination. Adequate but incomplete for complex use.
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 description must compensate. Only 'query' parameter receives partial description (matches across fields). Other seven parameters (limit, order, domain, etc.) are not described, leaving significant gaps.
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 'Search Odoo records with read-only search_read', specifying verb and resource. It distinguishes from sibling tools like search_across_instances by focusing on single-instance search.
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?
Description mentions optional free-text query but does not specify when to use this tool versus alternatives such as search_across_instances or model-specific searches. No explicit when-not or usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
submit_async_taskARead-onlyIdempotent
Run an allowlisted long-running read operation in the background
| Name | Required | Description | Default |
|---|---|---|---|
| params | No | ||
| instance | No | ||
| operation | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| name | No | |
| note | No | |
| tool | No | Reporting tool name. |
| error | No | Sanitized error message when success is false. |
| result | No | |
| status | No | |
| success | Yes | False when the call failed; see error. |
| task_id | No | |
| created_at | No | |
| started_at | No | |
| finished_at | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the description reinforces that by saying 'read operation'. It adds context beyond annotations by specifying 'allowlisted' (implying restrictions), 'long-running' (performance characteristics), and 'background' (execution model). No contradiction exists, and the extra detail is valuable though it does not cover error handling or cancellation 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 a single, concise sentence with no redundant words. It delivers the core purpose effectively and is appropriately sized for a straightforward submission tool.
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, the return value might be covered elsewhere, but the description fails to provide essential context about the operation allowlist, how to construct parameters, or whether an instance is required. For a tool that submits long-running tasks, users need to know what operations are permitted and how to structure inputs, which is missing. This makes the description incomplete for a 3-parameter tool with 0% schema coverage.
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 carries full responsibility for explaining parameters. However, it only mentions 'operation' implicitly via the word 'operation' in the text, without defining what an operation is, how to specify parameters (params), or what instance refers to. The schema shows three parameters, but none are explained, making param semantics weak.
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 verb ('Run') and resource ('operation'), and adds qualifiers ('allowlisted', 'long-running', 'read', 'background') that distinguish it from sibling async tools like get_async_task, cancel_async_task, and list_async_tasks. It unambiguously communicates that this tool submits a background read task.
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 'long-running read operation' implies when to use it (for reads that take time), but it does not explicitly state when not to use it, mention alternatives like synchronous reads, or explain that results should be retrieved via get_async_task. The guidance is 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.
upgrade_risk_reportBRead-onlyIdempotent
Report Odoo upgrade and JSON-2 migration risks
| Name | Required | Description | Default |
|---|---|---|---|
| methods | No | Optional model method metadata to assess for compatibility. | |
| modules | No | Optional module metadata to assess for upgrade risks. | |
| include_debug | No | Whether to include additional diagnostic details. | |
| source_version | No | Optional current Odoo version. | |
| target_version | No | Optional target Odoo version. | |
| observed_errors | No | Optional observed upgrade or migration errors to classify. | |
| source_findings | No | Optional source-code findings to include in the risk report. | |
| use_live_metadata | No | Whether to request live metadata; this preview tool does not fetch it. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the description's statement 'Report...risks' is consistent but adds no new behavioral traits beyond confirming it is a report. No side effects, authentication needs, or response details are disclosed.
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, clear sentence with no unnecessary words. It effectively communicates the tool's purpose without redundancy.
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?
Despite having an output schema, the description is too terse for a tool with 8 optional parameters. It does not explain how the parameters affect the risk report, what the output contains, or typical usage patterns, leaving gaps for an AI agent.
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 100%, with each parameter having a clear description. The tool description does not elaborate on parameter usage or relationships, so it adds no value beyond the schema. Baseline score of 3 is appropriate.
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 reports Odoo upgrade and JSON-2 migration risks, specifying the resource and action. It distinguishes from siblings like 'analyze_upgrade_log' by focusing on a comprehensive risk report rather than log analysis, but could be more explicit about the scope.
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 no guidance on when to use this tool versus alternatives such as 'analyze_upgrade_log' or 'generate_json2_payload'. No context on prerequisites, typical use cases, or exclusions is given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
validate_writeCRead-onlyIdempotent
Validate a standard write payload against optional fields_get metadata
| Name | Required | Description | Default |
|---|---|---|---|
| model | Yes | ||
| values | No | ||
| context | No | ||
| instance | No | ||
| operation | Yes | ||
| record_ids | No | ||
| values_list | No | ||
| fields_metadata | No | ||
| use_live_metadata | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the description's 'validate' is consistent. It adds minimal behavioral context beyond what annotations provide.
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 concise sentence, but it is overly minimal given the tool's complexity and number of parameters. It could be better structured with more detail.
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 tool with 9 parameters and 0% schema coverage, the description is insufficient. Annotations help but do not provide enough context for correct 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?
With 0% schema description coverage and 9 parameters, the description fails to add meaning to any parameter. It does not compensate for the lack of 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 states the tool validates a standard write payload against optional metadata, which is clear and specific. However, it does not differentiate from siblings like execute_approved_write or preview_write.
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?
No explicit guidance on when to use this tool versus alternatives. The description implies validation use but lacks context or exclusion criteria.
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.
13 tool updates
v1.3.1- Changed
accounting_health_across_instances18 fields changed- added
Output schema / additionalPropertiesAdded value: +true - added
Output schema / properties / as_ofAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "As Of" +} - added
Output schema / properties / combined_bucketsAdded value: +{ + "anyOf": [ + { + "additionalProperties": { + "type": "number" + }, + "type": "object" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Combined Buckets" +} - added
Output schema / properties / combined_total_outstandingAdded value: +{ + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Combined Total Outstanding" +} - added
Output schema / properties / directionAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Direction" +} - added
Output schema / properties / elapsed_msAdded value: +{ + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Elapsed Ms" +} - added
Output schema / properties / errorAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Sanitized error message when success is false.", + "title": "Error" +} - added
Output schema / properties / errorsAdded value: +{ + "anyOf": [ + { + "additionalProperties": { + "type": "string" + }, + "type": "object" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Errors" +} - added
Output schema / properties / instance_countAdded value: +{ + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Instance Count" +} - added
Output schema / properties / instances_queriedAdded value: +{ + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Instances Queried" +} - removed
Output schema / properties / resultRemoved value: -{ - "additionalProperties": true, - "title": "Result", - "type": "object" -} - added
Output schema / properties / resultsAdded value: +{ + "anyOf": [ + { + "additionalProperties": true, + "type": "object" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Results" +} - added
Output schema / properties / skipped_opt_outAdded value: +{ + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Skipped Opt Out" +} - added
Output schema / properties / successAdded value: +{ + "description": "False when the call failed; see error.", + "title": "Success", + "type": "boolean" +} - added
Output schema / properties / toolAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Reporting tool name.", + "title": "Tool" +} - added
Output schema / properties / unknown_instancesAdded value: +{ + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Unknown Instances" +} - changed
Output schema / requiredPrevious value: -[ - "result" -]New value: +[ + "success" +] - changed
Output schema / titlePrevious value: -"accounting_health_across_instancesOutput"New value: +"AccountingHealthAcrossInstancesResponse"
- Changed
accounting_health_summary10 fields changed- added
Output schema / additionalPropertiesAdded value: +true - added
Output schema / properties / draft_invoicesAdded value: +{ + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Draft Invoices" +} - added
Output schema / properties / errorAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Sanitized error message when success is false.", + "title": "Error" +} - added
Output schema / properties / open_payable_itemsAdded value: +{ + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Open Payable Items" +} - added
Output schema / properties / open_receivable_itemsAdded value: +{ + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Open Receivable Items" +} - removed
Output schema / properties / resultRemoved value: -{ - "additionalProperties": true, - "title": "Result", - "type": "object" -} - added
Output schema / properties / successAdded value: +{ + "description": "False when the call failed; see error.", + "title": "Success", + "type": "boolean" +} - added
Output schema / properties / toolAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Reporting tool name.", + "title": "Tool" +} - changed
Output schema / requiredPrevious value: -[ - "result" -]New value: +[ + "success" +] - changed
Output schema / titlePrevious value: -"accounting_health_summaryOutput"New value: +"AccountingHealthSummaryResponse"
- Changed
aggregate_across_instances17 fields changed- added
Output schema / additionalPropertiesAdded value: +true - added
Output schema / properties / combined_countAdded value: +{ + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Combined Count" +} - added
Output schema / properties / combined_measuresAdded value: +{ + "anyOf": [ + { + "additionalProperties": { + "type": "number" + }, + "type": "object" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Combined Measures" +} - added
Output schema / properties / elapsed_msAdded value: +{ + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Elapsed Ms" +} - added
Output schema / properties / errorAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Sanitized error message when success is false.", + "title": "Error" +} - added
Output schema / properties / errorsAdded value: +{ + "anyOf": [ + { + "additionalProperties": { + "type": "string" + }, + "type": "object" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Errors" +} - added
Output schema / properties / instance_countAdded value: +{ + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Instance Count" +} - added
Output schema / properties / instances_queriedAdded value: +{ + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Instances Queried" +} - added
Output schema / properties / modelAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Model" +} - removed
Output schema / properties / resultRemoved value: -{ - "additionalProperties": true, - "title": "Result", - "type": "object" -} - added
Output schema / properties / resultsAdded value: +{ + "anyOf": [ + { + "additionalProperties": true, + "type": "object" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Results" +} - added
Output schema / properties / skipped_opt_outAdded value: +{ + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Skipped Opt Out" +} - added
Output schema / properties / successAdded value: +{ + "description": "False when the call failed; see error.", + "title": "Success", + "type": "boolean" +} - added
Output schema / properties / toolAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Reporting tool name.", + "title": "Tool" +} - added
Output schema / properties / unknown_instancesAdded value: +{ + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Unknown Instances" +} - changed
Output schema / requiredPrevious value: -[ - "result" -]New value: +[ + "success" +] - changed
Output schema / titlePrevious value: -"aggregate_across_instancesOutput"New value: +"AggregateAcrossInstancesResponse"
- Changed
build_domain11 fields changed- added
Output schema / additionalPropertiesAdded value: +true - added
Output schema / properties / conditionsAdded value: +{ + "anyOf": [ + { + "items": { + "items": {}, + "type": "array" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Normalized field/operator/value conditions.", + "title": "Conditions" +} - added
Output schema / properties / domainAdded value: +{ + "anyOf": [ + { + "items": {}, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Validated Odoo domain expression.", + "title": "Domain" +} - added
Output schema / properties / errorAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Sanitized error message when success is false.", + "title": "Error" +} - added
Output schema / properties / issuesAdded value: +{ + "anyOf": [ + { + "items": { + "additionalProperties": true, + "type": "object" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Validation errors and warnings.", + "title": "Issues" +} - added
Output schema / properties / metadata_usedAdded value: +{ + "anyOf": [ + { + "additionalProperties": true, + "type": "object" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Metadata Used" +} - removed
Output schema / properties / resultRemoved value: -{ - "additionalProperties": true, - "title": "Result", - "type": "object" -} - added
Output schema / properties / successAdded value: +{ + "description": "False when the call failed; see error.", + "title": "Success", + "type": "boolean" +} - added
Output schema / properties / toolAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Reporting tool name.", + "title": "Tool" +} - changed
Output schema / requiredPrevious value: -[ - "result" -]New value: +[ + "success" +] - changed
Output schema / titlePrevious value: -"build_domainOutput"New value: +"BuildDomainResponse"
- Changed
cancel_async_task17 fields changed- added
Output schema / additionalPropertiesAdded value: +true - added
Output schema / properties / created_atAdded value: +{ + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Created At" +} - added
Output schema / properties / errorAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Sanitized error message when success is false.", + "title": "Error" +} - added
Output schema / properties / finished_atAdded value: +{ + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Finished At" +} - added
Output schema / properties / nameAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Name" +} - added
Output schema / properties / noteAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Note" +} - removed
Output schema / properties / result / additionalPropertiesRemoved value: -true - added
Output schema / properties / result / anyOfAdded value: +[ + { + "additionalProperties": true, + "type": "object" + }, + { + "type": "null" + } +] - added
Output schema / properties / result / defaultAdded value: +null - removed
Output schema / properties / result / typeRemoved value: -"object" - added
Output schema / properties / started_atAdded value: +{ + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Started At" +} - added
Output schema / properties / statusAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Status" +} - added
Output schema / properties / successAdded value: +{ + "description": "False when the call failed; see error.", + "title": "Success", + "type": "boolean" +} - added
Output schema / properties / task_idAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Task Id" +} - added
Output schema / properties / toolAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Reporting tool name.", + "title": "Tool" +} - changed
Output schema / requiredPrevious value: -[ - "result" -]New value: +[ + "success" +] - changed
Output schema / titlePrevious value: -"cancel_async_taskOutput"New value: +"AsyncTaskResponse"
- Changed
get_async_task17 fields changed- added
Output schema / additionalPropertiesAdded value: +true - added
Output schema / properties / created_atAdded value: +{ + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Created At" +} - added
Output schema / properties / errorAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Sanitized error message when success is false.", + "title": "Error" +} - added
Output schema / properties / finished_atAdded value: +{ + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Finished At" +} - added
Output schema / properties / nameAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Name" +} - added
Output schema / properties / noteAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Note" +} - removed
Output schema / properties / result / additionalPropertiesRemoved value: -true - added
Output schema / properties / result / anyOfAdded value: +[ + { + "additionalProperties": true, + "type": "object" + }, + { + "type": "null" + } +] - added
Output schema / properties / result / defaultAdded value: +null - removed
Output schema / properties / result / typeRemoved value: -"object" - added
Output schema / properties / started_atAdded value: +{ + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Started At" +} - added
Output schema / properties / statusAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Status" +} - added
Output schema / properties / successAdded value: +{ + "description": "False when the call failed; see error.", + "title": "Success", + "type": "boolean" +} - added
Output schema / properties / task_idAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Task Id" +} - added
Output schema / properties / toolAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Reporting tool name.", + "title": "Tool" +} - changed
Output schema / requiredPrevious value: -[ - "result" -]New value: +[ + "success" +] - changed
Output schema / titlePrevious value: -"get_async_taskOutput"New value: +"AsyncTaskResponse"
- Changed
index_knowledge16 fields changed- added
Output schema / additionalPropertiesAdded value: +true - added
Output schema / properties / documents_in_indexAdded value: +{ + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Documents In Index" +} - added
Output schema / properties / errorAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Sanitized error message when success is false.", + "title": "Error" +} - added
Output schema / properties / fetchedAdded value: +{ + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Fetched" +} - added
Output schema / properties / indexedAdded value: +{ + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Indexed" +} - added
Output schema / properties / indexed_fieldsAdded value: +{ + "anyOf": [ + {}, + { + "type": "null" + } + ], + "default": null, + "description": "Explicit field list or 'smart selection'.", + "title": "Indexed Fields" +} - added
Output schema / properties / instanceAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Instance" +} - added
Output schema / properties / max_documentsAdded value: +{ + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Max Documents" +} - added
Output schema / properties / modelAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Model" +} - added
Output schema / properties / redacted_fieldsAdded value: +{ + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Redacted Fields" +} - removed
Output schema / properties / resultRemoved value: -{ - "additionalProperties": true, - "title": "Result", - "type": "object" -} - added
Output schema / properties / skipped_over_budgetAdded value: +{ + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Skipped Over Budget" +} - added
Output schema / properties / successAdded value: +{ + "description": "False when the call failed; see error.", + "title": "Success", + "type": "boolean" +} - added
Output schema / properties / toolAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Reporting tool name.", + "title": "Tool" +} - changed
Output schema / requiredPrevious value: -[ - "result" -]New value: +[ + "success" +] - changed
Output schema / titlePrevious value: -"index_knowledgeOutput"New value: +"IndexKnowledgeResponse"
- Changed
knowledge_stats10 fields changed- added
Output schema / additionalPropertiesAdded value: +true - added
Output schema / properties / errorAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Sanitized error message when success is false.", + "title": "Error" +} - added
Output schema / properties / indexesAdded value: +{ + "anyOf": [ + { + "items": { + "additionalProperties": true, + "type": "object" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Indexes" +} - added
Output schema / properties / max_documentsAdded value: +{ + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Max Documents" +} - removed
Output schema / properties / resultRemoved value: -{ - "additionalProperties": true, - "title": "Result", - "type": "object" -} - added
Output schema / properties / successAdded value: +{ + "description": "False when the call failed; see error.", + "title": "Success", + "type": "boolean" +} - added
Output schema / properties / toolAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Reporting tool name.", + "title": "Tool" +} - added
Output schema / properties / total_documentsAdded value: +{ + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Total Documents" +} - changed
Output schema / requiredPrevious value: -[ - "result" -]New value: +[ + "success" +] - changed
Output schema / titlePrevious value: -"knowledge_statsOutput"New value: +"KnowledgeStatsResponse"
- Changed
list_async_tasks8 fields changed- added
Output schema / additionalPropertiesAdded value: +true - added
Output schema / properties / errorAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Sanitized error message when success is false.", + "title": "Error" +} - removed
Output schema / properties / resultRemoved value: -{ - "additionalProperties": true, - "title": "Result", - "type": "object" -} - added
Output schema / properties / successAdded value: +{ + "description": "False when the call failed; see error.", + "title": "Success", + "type": "boolean" +} - added
Output schema / properties / tasksAdded value: +{ + "anyOf": [ + { + "items": { + "additionalProperties": true, + "type": "object" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Tasks" +} - added
Output schema / properties / toolAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Reporting tool name.", + "title": "Tool" +} - changed
Output schema / requiredPrevious value: -[ - "result" -]New value: +[ + "success" +] - changed
Output schema / titlePrevious value: -"list_async_tasksOutput"New value: +"ListAsyncTasksResponse"
- Changed
receivable_payable_aging16 fields changed- added
Output schema / additionalPropertiesAdded value: +true - added
Output schema / properties / as_ofAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "As Of" +} - added
Output schema / properties / bucketsAdded value: +{ + "anyOf": [ + { + "additionalProperties": true, + "type": "object" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Buckets" +} - added
Output schema / properties / directionAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Direction" +} - added
Output schema / properties / errorAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Sanitized error message when success is false.", + "title": "Error" +} - added
Output schema / properties / line_countAdded value: +{ + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Line Count" +} - added
Output schema / properties / partner_countAdded value: +{ + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Partner Count" +} - added
Output schema / properties / partnersAdded value: +{ + "anyOf": [ + { + "items": { + "additionalProperties": true, + "type": "object" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Partners" +} - removed
Output schema / properties / resultRemoved value: -{ - "additionalProperties": true, - "title": "Result", - "type": "object" -} - added
Output schema / properties / skipped_linesAdded value: +{ + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Skipped Lines" +} - added
Output schema / properties / successAdded value: +{ + "description": "False when the call failed; see error.", + "title": "Success", + "type": "boolean" +} - added
Output schema / properties / toolAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Reporting tool name.", + "title": "Tool" +} - added
Output schema / properties / total_outstandingAdded value: +{ + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Total Outstanding" +} - added
Output schema / properties / truncatedAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Truncated" +} - changed
Output schema / requiredPrevious value: -[ - "result" -]New value: +[ + "success" +] - changed
Output schema / titlePrevious value: -"receivable_payable_agingOutput"New value: +"ReceivablePayableAgingResponse"
- Changed
search_across_instances17 fields changed- added
Output schema / additionalPropertiesAdded value: +true - added
Output schema / properties / elapsed_msAdded value: +{ + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Elapsed Ms" +} - added
Output schema / properties / errorAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Sanitized error message when success is false.", + "title": "Error" +} - added
Output schema / properties / errorsAdded value: +{ + "anyOf": [ + { + "additionalProperties": { + "type": "string" + }, + "type": "object" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Errors" +} - added
Output schema / properties / instance_countAdded value: +{ + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Instance Count" +} - added
Output schema / properties / instances_queriedAdded value: +{ + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Instances Queried" +} - added
Output schema / properties / mergedAdded value: +{ + "anyOf": [ + { + "items": { + "additionalProperties": true, + "type": "object" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Merged" +} - added
Output schema / properties / merged_countAdded value: +{ + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Merged Count" +} - added
Output schema / properties / modelAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Model" +} - removed
Output schema / properties / resultRemoved value: -{ - "additionalProperties": true, - "title": "Result", - "type": "object" -} - added
Output schema / properties / resultsAdded value: +{ + "anyOf": [ + { + "additionalProperties": true, + "type": "object" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Results" +} - added
Output schema / properties / skipped_opt_outAdded value: +{ + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Skipped Opt Out" +} - added
Output schema / properties / successAdded value: +{ + "description": "False when the call failed; see error.", + "title": "Success", + "type": "boolean" +} - added
Output schema / properties / toolAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Reporting tool name.", + "title": "Tool" +} - added
Output schema / properties / unknown_instancesAdded value: +{ + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Unknown Instances" +} - changed
Output schema / requiredPrevious value: -[ - "result" -]New value: +[ + "success" +] - changed
Output schema / titlePrevious value: -"search_across_instancesOutput"New value: +"SearchAcrossInstancesResponse"
- Changed
search_knowledge11 fields changed- added
Output schema / additionalPropertiesAdded value: +true - added
Output schema / properties / errorAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Sanitized error message when success is false.", + "title": "Error" +} - added
Output schema / properties / instanceAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Instance" +} - added
Output schema / properties / modelAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Model" +} - added
Output schema / properties / queryAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Query" +} - removed
Output schema / properties / resultRemoved value: -{ - "additionalProperties": true, - "title": "Result", - "type": "object" -} - added
Output schema / properties / resultsAdded value: +{ + "anyOf": [ + { + "items": { + "additionalProperties": true, + "type": "object" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "description": "BM25-ranked snippets from the local index.", + "title": "Results" +} - added
Output schema / properties / successAdded value: +{ + "description": "False when the call failed; see error.", + "title": "Success", + "type": "boolean" +} - added
Output schema / properties / toolAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Reporting tool name.", + "title": "Tool" +} - changed
Output schema / requiredPrevious value: -[ - "result" -]New value: +[ + "success" +] - changed
Output schema / titlePrevious value: -"search_knowledgeOutput"New value: +"SearchKnowledgeResponse"
- Changed
submit_async_task17 fields changed- added
Output schema / additionalPropertiesAdded value: +true - added
Output schema / properties / created_atAdded value: +{ + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Created At" +} - added
Output schema / properties / errorAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Sanitized error message when success is false.", + "title": "Error" +} - added
Output schema / properties / finished_atAdded value: +{ + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Finished At" +} - added
Output schema / properties / nameAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Name" +} - added
Output schema / properties / noteAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Note" +} - removed
Output schema / properties / result / additionalPropertiesRemoved value: -true - added
Output schema / properties / result / anyOfAdded value: +[ + { + "additionalProperties": true, + "type": "object" + }, + { + "type": "null" + } +] - added
Output schema / properties / result / defaultAdded value: +null - removed
Output schema / properties / result / typeRemoved value: -"object" - added
Output schema / properties / started_atAdded value: +{ + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Started At" +} - added
Output schema / properties / statusAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Status" +} - added
Output schema / properties / successAdded value: +{ + "description": "False when the call failed; see error.", + "title": "Success", + "type": "boolean" +} - added
Output schema / properties / task_idAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Task Id" +} - added
Output schema / properties / toolAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Reporting tool name.", + "title": "Tool" +} - changed
Output schema / requiredPrevious value: -[ - "result" -]New value: +[ + "success" +] - changed
Output schema / titlePrevious value: -"submit_async_taskOutput"New value: +"AsyncTaskResponse"
10 tool updates
v1.2.1- Changed
accounting_health_across_instances4 fields changed- added
Input schema / properties / as_of / descriptionAdded value: +"Optional ISO date used as the aging reference date." - added
Input schema / properties / direction / descriptionAdded value: +"Aging direction: 'receivable' or 'payable'." - added
Input schema / properties / instances / descriptionAdded value: +"Optional instance selector; defaults to all eligible instances." - added
Input schema / properties / top_partners / descriptionAdded value: +"Maximum top partners to include in each aging report; capped at 100."
- Changed
business_pack_report3 fields changed- added
Input schema / properties / instance / descriptionAdded value: +"Optional configured Odoo instance name; uses the default if omitted." - added
Input schema / properties / pack / descriptionAdded value: +"Business pack to report, such as sales, crm, inventory, accounting, or hr." - added
Input schema / properties / use_live_metadata / descriptionAdded value: +"Whether to inspect live models and installed modules."
- Changed
diagnose_access9 fields changed- added
Input schema / properties / domain / descriptionAdded value: +"Optional Odoo domain used for the visibility check." - added
Input schema / properties / expected_count / descriptionAdded value: +"Optional expected visible record count for comparison." - added
Input schema / properties / include_rules / descriptionAdded value: +"Whether to include matching record-rule metadata." - added
Input schema / properties / instance / descriptionAdded value: +"Optional configured Odoo instance name; uses the default if omitted." - added
Input schema / properties / limit / descriptionAdded value: +"Maximum metadata rows to inspect; capped at 500." - added
Input schema / properties / model / descriptionAdded value: +"Technical Odoo model name to inspect." - added
Input schema / properties / observed_error / descriptionAdded value: +"Optional error text or structured error to classify." - added
Input schema / properties / operation / descriptionAdded value: +"Access operation to diagnose, such as read or write." - added
Input schema / properties / record_ids / descriptionAdded value: +"Optional record IDs to check directly."
- Changed
diagnose_odoo_call10 fields changed- added
Input schema / properties / args / descriptionAdded value: +"Optional positional call arguments." - added
Input schema / properties / include_debug / descriptionAdded value: +"Whether to include additional diagnostic details." - added
Input schema / properties / kwargs / descriptionAdded value: +"Optional keyword call arguments." - added
Input schema / properties / metadata / descriptionAdded value: +"Optional model or method metadata used by the diagnosis." - added
Input schema / properties / method / descriptionAdded value: +"Odoo model method name to diagnose." - added
Input schema / properties / model / descriptionAdded value: +"Technical Odoo model name to diagnose." - added
Input schema / properties / observed_error / descriptionAdded value: +"Optional error text or structured error to classify." - added
Input schema / properties / target_version / descriptionAdded value: +"Optional target Odoo version for compatibility checks." - added
Input schema / properties / transport / descriptionAdded value: +"Transport to assess, such as 'auto', 'xmlrpc', or 'json2'." - added
Input schema / properties / use_live_metadata / descriptionAdded value: +"Whether to request live metadata; this preview tool does not fetch it."
- Changed
execute_method5 fields changed- added
Input schema / properties / args / descriptionAdded value: +"Optional positional method arguments." - added
Input schema / properties / instance / descriptionAdded value: +"Optional configured Odoo instance name; uses the default if omitted." - added
Input schema / properties / kwargs / descriptionAdded value: +"Optional keyword method arguments." - added
Input schema / properties / method / descriptionAdded value: +"Odoo model method to call; direct create, write, and unlink are blocked." - added
Input schema / properties / model / descriptionAdded value: +"Technical Odoo model name, for example 'res.partner'."
- Changed
get_odoo_profile3 fields changed- added
Input schema / properties / include_modules / descriptionAdded value: +"Whether to include installed-module metadata." - added
Input schema / properties / instance / descriptionAdded value: +"Optional configured Odoo instance name; uses the default if omitted." - added
Input schema / properties / module_limit / descriptionAdded value: +"Maximum installed modules to include; capped at 500."
- Changed
receivable_payable_aging5 fields changed- added
Input schema / properties / as_of / descriptionAdded value: +"Optional ISO date used as the aging reference date." - added
Input schema / properties / direction / descriptionAdded value: +"Aging direction: 'receivable' or 'payable'." - added
Input schema / properties / instance / descriptionAdded value: +"Optional configured Odoo instance name; uses the default if omitted." - added
Input schema / properties / limit / descriptionAdded value: +"Maximum open-item lines to inspect." - added
Input schema / properties / top_partners / descriptionAdded value: +"Maximum top partners to include; capped at 100."
- Changed
schema_catalog6 fields changed- added
Input schema / properties / include_fields / descriptionAdded value: +"Whether to include field metadata for each model." - added
Input schema / properties / instance / descriptionAdded value: +"Optional configured Odoo instance name; uses the default if omitted." - added
Input schema / properties / limit / descriptionAdded value: +"Maximum catalog models to return; capped at 500." - added
Input schema / properties / models / descriptionAdded value: +"Optional technical model names to include in the catalog." - added
Input schema / properties / query / descriptionAdded value: +"Optional text used to filter catalog models." - added
Input schema / properties / refresh / descriptionAdded value: +"Whether to bypass and refresh the cached catalog."
- Changed
search_holidays4 fields changed- added
Input schema / properties / employee_id / descriptionAdded value: +"Optional employee ID used to filter holidays." - added
Input schema / properties / end_date / descriptionAdded value: +"End date in YYYY-MM-DD format." - added
Input schema / properties / instance / descriptionAdded value: +"Optional configured Odoo instance name; uses the default if omitted." - added
Input schema / properties / start_date / descriptionAdded value: +"Start date in YYYY-MM-DD format."
- Changed
upgrade_risk_report8 fields changed- added
Input schema / properties / include_debug / descriptionAdded value: +"Whether to include additional diagnostic details." - added
Input schema / properties / methods / descriptionAdded value: +"Optional model method metadata to assess for compatibility." - added
Input schema / properties / modules / descriptionAdded value: +"Optional module metadata to assess for upgrade risks." - added
Input schema / properties / observed_errors / descriptionAdded value: +"Optional observed upgrade or migration errors to classify." - added
Input schema / properties / source_findings / descriptionAdded value: +"Optional source-code findings to include in the risk report." - added
Input schema / properties / source_version / descriptionAdded value: +"Optional current Odoo version." - added
Input schema / properties / target_version / descriptionAdded value: +"Optional target Odoo version." - added
Input schema / properties / use_live_metadata / descriptionAdded value: +"Whether to request live metadata; this preview tool does not fetch it."
12 tool updates
v1.1.0- Changed
aggregate_records15 fields changed- added
Output schema / additionalPropertiesAdded value: +true - added
Output schema / properties / errorAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Sanitized error message when success is false.", + "title": "Error" +} - added
Output schema / properties / fallback_reasonAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Fallback Reason" +} - added
Output schema / properties / group_byAdded value: +{ + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Group By" +} - added
Output schema / properties / major_versionAdded value: +{ + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Major Version" +} - added
Output schema / properties / measuresAdded value: +{ + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Measures" +} - added
Output schema / properties / methodAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "formatted_read_group (19+) or read_group.", + "title": "Method" +} - added
Output schema / properties / modelAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Model" +} - removed
Output schema / properties / resultRemoved value: -{ - "additionalProperties": true, - "title": "Result", - "type": "object" -} - added
Output schema / properties / row_countAdded value: +{ + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Row Count" +} - added
Output schema / properties / rowsAdded value: +{ + "anyOf": [ + { + "items": { + "additionalProperties": true, + "type": "object" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Aggregated group rows.", + "title": "Rows" +} - added
Output schema / properties / successAdded value: +{ + "description": "False when the call failed; see error.", + "title": "Success", + "type": "boolean" +} - added
Output schema / properties / toolAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Reporting tool name.", + "title": "Tool" +} - changed
Output schema / requiredPrevious value: -[ - "result" -]New value: +[ + "success" +] - changed
Output schema / titlePrevious value: -"aggregate_recordsOutput"New value: +"AggregateRecordsResponse"
- Added
analyze_upgrade_log - Added
data_quality_report - Changed
get_model_fields15 fields changed- added
Output schema / additionalPropertiesAdded value: +true - added
Output schema / properties / countAdded value: +{ + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Count" +} - added
Output schema / properties / errorAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Sanitized error message when success is false.", + "title": "Error" +} - added
Output schema / properties / rankingAdded value: +{ + "anyOf": [ + { + "items": { + "additionalProperties": true, + "type": "object" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Relevance scores when relevance=\"top\".", + "title": "Ranking" +} - added
Output schema / properties / relevance_appliedAdded value: +{ + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Relevance Applied" +} - added
Output schema / properties / restricted_fieldsAdded value: +{ + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Fields marked restricted by the field ACL.", + "title": "Restricted Fields" +} - removed
Output schema / properties / result / additionalPropertiesRemoved value: -true - added
Output schema / properties / result / anyOfAdded value: +[ + { + "additionalProperties": true, + "type": "object" + }, + { + "type": "null" + } +] - added
Output schema / properties / result / defaultAdded value: +null - added
Output schema / properties / result / descriptionAdded value: +"Mapping of field name to fields_get metadata." - removed
Output schema / properties / result / typeRemoved value: -"object" - added
Output schema / properties / successAdded value: +{ + "description": "False when the call failed; see error.", + "title": "Success", + "type": "boolean" +} - added
Output schema / properties / toolAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Reporting tool name.", + "title": "Tool" +} - changed
Output schema / requiredPrevious value: -[ - "result" -]New value: +[ + "success" +] - changed
Output schema / titlePrevious value: -"get_model_fieldsOutput"New value: +"GetModelFieldsResponse"
- Changed
get_odoo_profile9 fields changed- added
Output schema / additionalPropertiesAdded value: +true - added
Output schema / properties / errorAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Sanitized error message when success is false.", + "title": "Error" +} - added
Output schema / properties / metadata_usedAdded value: +{ + "anyOf": [ + { + "additionalProperties": true, + "type": "object" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Metadata Used" +} - added
Output schema / properties / profileAdded value: +{ + "anyOf": [ + { + "additionalProperties": true, + "type": "object" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Server, user-context, transport, and module metadata.", + "title": "Profile" +} - removed
Output schema / properties / resultRemoved value: -{ - "additionalProperties": true, - "title": "Result", - "type": "object" -} - added
Output schema / properties / successAdded value: +{ + "description": "False when the call failed; see error.", + "title": "Success", + "type": "boolean" +} - added
Output schema / properties / toolAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Reporting tool name.", + "title": "Tool" +} - changed
Output schema / requiredPrevious value: -[ - "result" -]New value: +[ + "success" +] - changed
Output schema / titlePrevious value: -"get_odoo_profileOutput"New value: +"GetOdooProfileResponse"
- Changed
health_check11 fields changed- added
Output schema / additionalPropertiesAdded value: +true - added
Output schema / properties / errorAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Sanitized error message when success is false.", + "title": "Error" +} - added
Output schema / properties / pluginsAdded value: +{ + "anyOf": [ + { + "additionalProperties": true, + "type": "object" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Opt-in plugin load state and tool filtering.", + "title": "Plugins" +} - added
Output schema / properties / rate_limitsAdded value: +{ + "anyOf": [ + { + "additionalProperties": true, + "type": "object" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Rate Limits" +} - removed
Output schema / properties / resultRemoved value: -{ - "additionalProperties": true, - "title": "Result", - "type": "object" -} - added
Output schema / properties / runtimeAdded value: +{ + "anyOf": [ + { + "additionalProperties": true, + "type": "object" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Non-secret runtime security posture.", + "title": "Runtime" +} - added
Output schema / properties / serverAdded value: +{ + "anyOf": [ + { + "additionalProperties": true, + "type": "object" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Server name, instructions, surface counts.", + "title": "Server" +} - added
Output schema / properties / successAdded value: +{ + "description": "False when the call failed; see error.", + "title": "Success", + "type": "boolean" +} - added
Output schema / properties / toolAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Reporting tool name.", + "title": "Tool" +} - changed
Output schema / requiredPrevious value: -[ - "result" -]New value: +[ + "success" +] - changed
Output schema / titlePrevious value: -"health_checkOutput"New value: +"HealthCheckResponse"
- Changed
list_instances10 fields changed- added
Output schema / additionalPropertiesAdded value: +true - added
Output schema / properties / defaultAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Name of the default instance.", + "title": "Default" +} - added
Output schema / properties / errorAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Sanitized error message when success is false.", + "title": "Error" +} - added
Output schema / properties / instance_countAdded value: +{ + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Instance Count" +} - added
Output schema / properties / instancesAdded value: +{ + "anyOf": [ + { + "items": { + "additionalProperties": true, + "type": "object" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Instance entries (never credentials).", + "title": "Instances" +} - removed
Output schema / properties / resultRemoved value: -{ - "additionalProperties": true, - "title": "Result", - "type": "object" -} - added
Output schema / properties / successAdded value: +{ + "description": "False when the call failed; see error.", + "title": "Success", + "type": "boolean" +} - added
Output schema / properties / toolAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Reporting tool name.", + "title": "Tool" +} - changed
Output schema / requiredPrevious value: -[ - "result" -]New value: +[ + "success" +] - changed
Output schema / titlePrevious value: -"list_instancesOutput"New value: +"ListInstancesResponse"
- Changed
list_models12 fields changed- added
Output schema / $defsAdded value: +{ + "ModelSummary": { + "additionalProperties": true, + "description": "One model entry from list_models / schema_catalog.", + "properties": { + "model": { + "description": "Technical model name, e.g. res.partner.", + "title": "Model", + "type": "string" + }, + "name": { + "default": "", + "description": "Human display name.", + "title": "Name", + "type": "string" + } + }, + "required": [ + "model" + ], + "title": "ModelSummary", + "type": "object" + } +} - added
Output schema / additionalPropertiesAdded value: +true - added
Output schema / properties / countAdded value: +{ + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Count" +} - added
Output schema / properties / errorAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Sanitized error message when success is false.", + "title": "Error" +} - removed
Output schema / properties / result / additionalPropertiesRemoved value: -true - added
Output schema / properties / result / anyOfAdded value: +[ + { + "items": { + "$ref": "#/$defs/ModelSummary" + }, + "type": "array" + }, + { + "type": "null" + } +] - added
Output schema / properties / result / defaultAdded value: +null - removed
Output schema / properties / result / typeRemoved value: -"object" - added
Output schema / properties / successAdded value: +{ + "description": "False when the call failed; see error.", + "title": "Success", + "type": "boolean" +} - added
Output schema / properties / toolAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Reporting tool name.", + "title": "Tool" +} - changed
Output schema / requiredPrevious value: -[ - "result" -]New value: +[ + "success" +] - changed
Output schema / titlePrevious value: -"list_modelsOutput"New value: +"ListModelsResponse"
- Changed
read_attachment12 fields changed- added
Output schema / additionalPropertiesAdded value: +true - added
Output schema / properties / attachmentAdded value: +{ + "anyOf": [ + { + "additionalProperties": true, + "type": "object" + }, + { + "type": "null" + } + ], + "default": null, + "description": "ir.attachment metadata row.", + "title": "Attachment" +} - added
Output schema / properties / data_base64Added value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Base64 content when under the size cap.", + "title": "Data Base64" +} - added
Output schema / properties / data_includedAdded value: +{ + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Data Included" +} - added
Output schema / properties / errorAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Sanitized error message when success is false.", + "title": "Error" +} - added
Output schema / properties / max_bytesAdded value: +{ + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Max Bytes" +} - removed
Output schema / properties / resultRemoved value: -{ - "additionalProperties": true, - "title": "Result", - "type": "object" -} - added
Output schema / properties / successAdded value: +{ + "description": "False when the call failed; see error.", + "title": "Success", + "type": "boolean" +} - added
Output schema / properties / toolAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Reporting tool name.", + "title": "Tool" +} - added
Output schema / properties / warningsAdded value: +{ + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Warnings" +} - changed
Output schema / requiredPrevious value: -[ - "result" -]New value: +[ + "success" +] - changed
Output schema / titlePrevious value: -"read_attachmentOutput"New value: +"ReadAttachmentResponse"
- Changed
read_record14 fields changed- added
Output schema / additionalPropertiesAdded value: +true - added
Output schema / properties / errorAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Sanitized error message when success is false.", + "title": "Error" +} - added
Output schema / properties / fields_usedAdded value: +{ + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Fields Used" +} - added
Output schema / properties / redacted_fieldsAdded value: +{ + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Redacted Fields" +} - removed
Output schema / properties / result / additionalPropertiesRemoved value: -true - added
Output schema / properties / result / anyOfAdded value: +[ + { + "additionalProperties": true, + "type": "object" + }, + { + "type": "null" + } +] - added
Output schema / properties / result / defaultAdded value: +null - added
Output schema / properties / result / descriptionAdded value: +"The record (field-ACL redacted)." - removed
Output schema / properties / result / typeRemoved value: -"object" - added
Output schema / properties / smart_fields_appliedAdded value: +{ + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Smart Fields Applied" +} - added
Output schema / properties / successAdded value: +{ + "description": "False when the call failed; see error.", + "title": "Success", + "type": "boolean" +} - added
Output schema / properties / toolAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Reporting tool name.", + "title": "Tool" +} - changed
Output schema / requiredPrevious value: -[ - "result" -]New value: +[ + "success" +] - changed
Output schema / titlePrevious value: -"read_recordOutput"New value: +"ReadRecordResponse"
- Changed
schema_catalog14 fields changed- added
Output schema / $defsAdded value: +{ + "ModelSummary": { + "additionalProperties": true, + "description": "One model entry from list_models / schema_catalog.", + "properties": { + "model": { + "description": "Technical model name, e.g. res.partner.", + "title": "Model", + "type": "string" + }, + "name": { + "default": "", + "description": "Human display name.", + "title": "Name", + "type": "string" + } + }, + "required": [ + "model" + ], + "title": "ModelSummary", + "type": "object" + } +} - added
Output schema / additionalPropertiesAdded value: +true - added
Output schema / properties / countAdded value: +{ + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Count" +} - added
Output schema / properties / errorAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Sanitized error message when success is false.", + "title": "Error" +} - added
Output schema / properties / metadata_usedAdded value: +{ + "anyOf": [ + { + "additionalProperties": true, + "type": "object" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Metadata Used" +} - removed
Output schema / properties / result / additionalPropertiesRemoved value: -true - added
Output schema / properties / result / anyOfAdded value: +[ + { + "items": { + "$ref": "#/$defs/ModelSummary" + }, + "type": "array" + }, + { + "type": "null" + } +] - added
Output schema / properties / result / defaultAdded value: +null - added
Output schema / properties / result / descriptionAdded value: +"Model entries; fields included when requested." - removed
Output schema / properties / result / typeRemoved value: -"object" - added
Output schema / properties / successAdded value: +{ + "description": "False when the call failed; see error.", + "title": "Success", + "type": "boolean" +} - added
Output schema / properties / toolAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Reporting tool name.", + "title": "Tool" +} - changed
Output schema / requiredPrevious value: -[ - "result" -]New value: +[ + "success" +] - changed
Output schema / titlePrevious value: -"schema_catalogOutput"New value: +"SchemaCatalogResponse"
- Changed
search_records16 fields changed- added
Output schema / additionalPropertiesAdded value: +true - added
Output schema / properties / countAdded value: +{ + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Count" +} - added
Output schema / properties / errorAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Sanitized error message when success is false.", + "title": "Error" +} - added
Output schema / properties / fields_usedAdded value: +{ + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Fields Used" +} - added
Output schema / properties / query_fields_usedAdded value: +{ + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Fields matched by the free-text query shortcut.", + "title": "Query Fields Used" +} - added
Output schema / properties / redacted_fieldsAdded value: +{ + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Redacted Fields" +} - removed
Output schema / properties / result / additionalPropertiesRemoved value: -true - added
Output schema / properties / result / anyOfAdded value: +[ + { + "items": { + "additionalProperties": true, + "type": "object" + }, + "type": "array" + }, + { + "type": "null" + } +] - added
Output schema / properties / result / defaultAdded value: +null - added
Output schema / properties / result / descriptionAdded value: +"Matched records (field-ACL redacted)." - removed
Output schema / properties / result / typeRemoved value: -"object" - added
Output schema / properties / smart_fields_appliedAdded value: +{ + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Smart Fields Applied" +} - added
Output schema / properties / successAdded value: +{ + "description": "False when the call failed; see error.", + "title": "Success", + "type": "boolean" +} - added
Output schema / properties / toolAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Reporting tool name.", + "title": "Tool" +} - changed
Output schema / requiredPrevious value: -[ - "result" -]New value: +[ + "success" +] - changed
Output schema / titlePrevious value: -"search_recordsOutput"New value: +"SearchRecordsResponse"
32 tool updates
v1.0.0- Added
accounting_health_across_instances - Added
accounting_health_summary - Added
aggregate_across_instances - Changed
aggregate_records1 field changed- added
Input schema / properties / instanceAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Instance" +}
- Changed
business_pack_report1 field changed- added
Input schema / properties / instanceAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Instance" +}
- Added
cancel_async_task - Changed
chatter_post1 field changed- added
Input schema / properties / instanceAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Instance" +}
- Changed
diagnose_access2 fields changed- added
Input schema / properties / instanceAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Instance" +} - added
Input schema / properties / observed_errorAdded value: +{ + "anyOf": [ + {}, + { + "type": "null" + } + ], + "default": null, + "title": "Observed Error" +}
- Changed
execute_approved_write2 fields changed- changed
Input schema / titlePrevious value: -"execute_approved_writeArguments"New value: +"execute_approved_write_toolArguments" - changed
Output schema / titlePrevious value: -"execute_approved_writeOutput"New value: +"execute_approved_write_toolOutput"
- Changed
execute_method1 field changed- added
Input schema / properties / instanceAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Instance" +}
- Added
get_async_task - Changed
get_model_fields3 fields changed- added
Input schema / properties / instanceAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Instance" +} - added
Input schema / properties / max_fieldsAdded value: +{ + "default": 30, + "title": "Max Fields", + "type": "integer" +} - added
Input schema / properties / relevanceAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Relevance" +}
- Changed
get_odoo_profile1 field changed- added
Input schema / properties / instanceAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Instance" +}
- Added
index_knowledge - Changed
inspect_model_relationships1 field changed- added
Input schema / properties / instanceAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Instance" +}
- Added
knowledge_stats - Added
list_async_tasks - Added
list_instances - Changed
list_models1 field changed- added
Input schema / properties / instanceAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Instance" +}
- Added
lookup_model_history - Changed
preview_write2 fields changed- added
Input schema / properties / instanceAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Instance" +} - added
Input schema / properties / values_listAdded value: +{ + "anyOf": [ + { + "items": { + "additionalProperties": true, + "type": "object" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Values List" +}
- Added
read_attachment - Changed
read_record1 field changed- added
Input schema / properties / instanceAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Instance" +}
- Added
receivable_payable_aging - Changed
schema_catalog1 field changed- added
Input schema / properties / instanceAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Instance" +}
- Added
search_across_instances - Changed
search_employee1 field changed- added
Input schema / properties / instanceAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Instance" +}
- Changed
search_holidays1 field changed- added
Input schema / properties / instanceAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Instance" +}
- Added
search_knowledge - Changed
search_records2 fields changed- added
Input schema / properties / instanceAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Instance" +} - added
Input schema / properties / queryAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Query" +}
- Added
submit_async_task - Changed
validate_write2 fields changed- added
Input schema / properties / instanceAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Instance" +} - added
Input schema / properties / values_listAdded value: +{ + "anyOf": [ + { + "items": { + "additionalProperties": true, + "type": "object" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Values List" +}
2 tool updates
v0.3.0- Added
aggregate_records - Added
chatter_post
22 tool updates
v0.2.0- First observed
build_domain - First observed
business_pack_report - First observed
diagnose_access - First observed
diagnose_odoo_call - First observed
execute_approved_write - First observed
execute_method - First observed
fit_gap_report - First observed
generate_json2_payload - First observed
get_model_fields - First observed
get_odoo_profile - First observed
health_check - First observed
inspect_model_relationships - First observed
list_models - First observed
preview_write - First observed
read_record - First observed
scan_addons_source - First observed
schema_catalog - First observed
search_employee - First observed
search_holidays - First observed
search_records - First observed
upgrade_risk_report - First observed
validate_write
TDQS
Scored across 41 tools
Most tools have distinct purposes, but there are overlapping boundaries among search_records, search_employee, search_holidays, and search_across_instances, as well as among schema-discovery tools like list_models, get_model_fields, and schema_catalog. The write-related tools also require careful reading: preview_write, validate_write, execute_approved_write, and execute_method have related but different roles.
The majority of tools follow a clear verb_noun pattern such as list_models, read_record, build_domain, and diagnose_access. A few report-style names like data_quality_report, upgrade_risk_report, and health_check break the pattern, but the names remain predictable and descriptive.
With 41 tools, the surface is much larger than the recommended range for a typical MCP server. Many report, diagnosis, and analysis tools could be grouped or consolidated. The broad scope may be intentional for Odoo consulting, but it feels heavy and harder to navigate.
The set covers read, search, schema introspection, write preview/approval, custom method execution, diagnostics, upgrade analysis, and async tasks well. However, there is no direct named create/update/delete operation besides preview/execute paths, and attachment handling is read-only, leaving obvious record lifecycle gaps.
Maintenance
Related MCP Connectors
MCP server unifying ERPs, CRMs, APIs and knowledge base for Claude, ChatGPT and Gemini.
A comprehensive Model Context Protocol (MCP) server that enables AI assistants to interact with yo…
- ZapierOAuthcom.zapier
Hosted MCP server connecting AI assistants to 9,000+ apps and 40,000+ actions via Zapier.
The Mercado Pago MCP Server implements the Model Context Protocol to provide AI agents and LLMs with access to Mercado Pago's APIs and tools within compatible development environments. It acts as an intermediary that translates Mercado Pago resources into executable functions (tools) that AI applications can invoke to perform actions and automate flows. The server simplifies integration, enables using documentation to implement or improve code, and optimizes operations through natural language interactions without manual implementations.
Related MCP Servers
- AlicenseBqualityDmaintenanceAn MCP server that enables AI assistants to interact with Odoo ERP apps like Inventory, CRM, Sales, and Manufacturing. It allows users to read, create, and manage Odoo records and workflows using natural language commands.256 npm1ISC
- AlicenseNot gradedqualityDmaintenanceAn MCP server that connects AI assistants to Odoo ERP instances via the built-in XML-RPC API without requiring any additional addons. It enables users to search, create, update, and manage Odoo records and models through natural language.28 npmMIT
- AlicenseNot gradedqualityCmaintenanceAn MCP server that enables AI assistants to interact with Odoo ERP, allowing natural language queries, record creation, updates, and deletions.LGPL 3.0
- AlicenseNot gradedqualityAmaintenanceAn MCP server that enables AI assistants to interact with Odoo ERP systems, allowing natural language access to business data, CRUD operations, and instance management without requiring Odoo module installation.1MIT