Skip to main content
Glama

Odoo Claude MCP

Production-grade Model Context Protocol (MCP) server suite for Odoo ERP

Odoo MCP server for Claude Code and Claude.ai — turn any self-hosted Odoo instance (15 → 19) into an AI assistant via the Model Context Protocol. 197+ tools, multi-tenant, Bulgaria localization (НАП, ДДС, ЕИК) included.

Connect Claude, Claude Code, and any MCP-compatible client to Odoo, GitHub, filesystem, Portainer, Teams, and more — through a unified, authenticated gateway.

License: AGPL-3.0 Odoo MCP Docker Made by Terraros Commerce

Quick Start · Why this vs alternatives? · Use Cases · Architecture · MCP Servers · Companion Modules · Deployment

Two tracks. You are on branch 2.0 — the stable track, current release v2.31.0. The preview track for integrators is branch 3.0, current v3.3.8. All releases: Releases · details in Two Tracks.

🇧🇬 Български README


See Claude editing a live Odoo sale order — real CRUD, real auto-recalculation

Claude Code editing Odoo sale order in real time

▶ Watch the full 4-minute demo: Running Odoo 18 Entirely Through AI — Claude Code + MCP Server


🎯 What is odoo-claude-mcp?

odoo-claude-mcp is a self-hosted MCP server suite that turns any Odoo instance into a first-class citizen in the Claude ecosystem. It exposes Odoo data and operations through the Model Context Protocol, while bundling complementary MCP servers for everything an Odoo developer, consultant, or business user needs — GitHub, OCA modules, Kubernetes/Portainer, Microsoft Teams, and a full Claude Code terminal running in the browser.

Unlike single-purpose MCP wrappers, this stack is built for real production use:

  • 🔐 Unified authentication across all MCP endpoints via token-based auth

  • 🏢 Multi-connection, multi-tenant — one stack serves dozens of Odoo databases

  • 🌐 Claude.ai connector ready — public HTTPS endpoint with token auth

  • ☸️ K3s / Kubernetes native with Kustomize overlays for dev and prod

  • 🐳 Docker Compose for solo developers and small teams

  • 🖥️ Web-based terminal — xterm.js + tmux + Claude Code in the browser

  • 📦 Odoo module deployment via direct RPC (no filesystem access needed)

  • 🔍 Qdrant vector store integration for semantic search across records

  • 🤖 Ollama integration for local LLMs and privacy-first deployments


Related MCP server: MCP Server for Odoo

🚀 Quick Start

Option 1: Docker Compose (local dev)

git clone https://github.com/rosenvladimirov/odoo-claude-mcp.git
cd odoo-claude-mcp

# Configure
cp .env.example .env
nano .env                    # set ODOO_URL, DB, credentials, tokens

# Create the shared Cloudflare tunnel network (one-time per host)
docker network create cloudflare-net

# Start the stack
docker compose up -d

# Verify
docker compose ps
curl http://localhost:8084/health

No Cloudflare tunnel? If you're deploying locally without a Cloudflare sidecar, use the override file instead of creating the external network:

docker compose -f docker-compose.yml -f docker-compose.local.yml up -d

This turns cloudflare-net into a regular Docker bridge network created on demand.

Optional services (Portainer / Teams). The default docker compose up -d starts only the core stack (Odoo RPC, Filesystem, OCA, EE, GitHub, Qdrant, Ollama, Claude Terminal). To also enable the Portainer MCP or Microsoft Teams MCP, opt in with a Compose profile:

docker compose --profile portainer up -d        # core + Portainer
docker compose --profile teams     up -d        # core + Teams
docker compose --profile full      up -d        # everything

Each optional service has its own required env vars (see .env.example). Without them the service container would crash-loop, so they're skipped by default.

First-run troubleshooting. If docker compose ps shows mcp-odoo-rpc in Restarting state, it means the values in .env (ODOO_URL, ODOO_DB, ODOO_USERNAME, ODOO_API_KEY/ODOO_PASSWORD) don't point to a reachable Odoo instance. Edit .env to match a real Odoo and re-run docker compose up -d. The healthcheck curl http://localhost:8084/health will succeed only after mcp-odoo-rpc is Up.

Option 2: Quick installer script

Linux / macOS:

curl -fsSL https://raw.githubusercontent.com/rosenvladimirov/odoo-claude-mcp/2.0/install.sh | bash

Windows (PowerShell as Administrator):

iwr -useb https://raw.githubusercontent.com/rosenvladimirov/odoo-claude-mcp/2.0/install.ps1 | iex

Option 3: Connect to Claude Code

After the stack is running, add it to Claude Code:

claude mcp add odoo-mcp \
  --url https://your-domain.com/mcp \
  --header "Authorization: Bearer YOUR_TOKEN"

Or use the included .mcp.json:

cp claude-terminal/.mcp.json ~/.config/claude-code/mcp.json

⚖️ Why this vs alternatives?

Capability

Raw XML-RPC

Single-purpose MCP-Odoo wrappers

odoo-claude-mcp

Auth

Per-call password

Single shared token

✅ Bearer + per-user profiles + OAuth

Multi-tenant

❌ One DB per process

⚠️ Single connection

✅ N tenants per stack

Tools available

~6 RPC verbs

20–40

197+ (92 native + 105 proxied)

Memory / context layer

✅ Qdrant vector + Ollama embeddings, per-user + shared

Skills / orchestration

ai.skill records + memory packs

Web terminal in browser

✅ xterm.js + tmux + Claude Code

GitHub / Portainer / Teams / OCA

✅ 8 federated MCP servers

Bulgaria localization

✅ НАП-ready, fiscal positions, VAT

Production deployment

DIY

Docker only

✅ Docker Compose + K3s/Kustomize

Audit logging / rate limit

⚠️

✅ Per-user logs, Cloudflare AI Gateway

License

LGPL (client lib)

Mixed (some MIT, some commercial)

✅ AGPL-3.0 (open, share-alike)

The shorter version: most other MCP-Odoo bridges are great for "one developer wants to talk to one Odoo." odoo-claude-mcp is for teams, agencies, and SaaS providers that need multi-user, multi-database, audited deployments with a unified AI surface.


🎨 Use Cases

For Odoo Developers

  • Live module development with Claude assisting directly on your running instance

  • RPC-based module deployment — update code, views, data without filesystem access

  • Multi-environment workflows — dev, staging, production from a single Claude session

  • OCA contribution flows — clone, search, test, submit PRs through Claude

For Odoo Consultants

  • Manage multiple client databases from one authenticated session

  • Per-client memory — Claude remembers context for each customer

  • Shared team knowledgememory_share distributes institutional know-how

  • НАП / Bulgaria localization — built-in tools for fiscal positions, VAT compliance

For Business Users

  • "Ask Claude about our sales data" — natural language queries against real Odoo records

  • Document extraction workflows — vision LLMs parse invoices into account.move

  • Semantic search — find similar records, contracts, tickets across the whole database

  • Email & calendar integration — Claude coordinates work across Odoo, Gmail, Calendar

For Platform Operators (SaaS / MSP)

  • Multi-tenant hosting — each client gets an isolated MCP endpoint

  • Billing integration — usage tracking per tenant via Cloudflare AI Gateway

  • White-label terminals — brand claude-terminal for your customers

  • Kubernetes scaling — scale MCP replicas independently based on load


🏗 Architecture

flowchart TD
    A["🧑 Claude.ai · Claude Code · Claude Desktop · IDE"]
    A -->|HTTPS + Bearer token| B
    subgraph GW["odoo-claude-mcp gateway"]
        B["Unified MCP Router · server.py<br/>• Proxies to 7 backend MCP servers<br/>• Per-user profiles &amp; connections<br/>• Shared memory store · audit log"]
    end
    B --> C1["odoo-rpc-mcp<br/>(core, 100+ tools)"]
    B --> C2["ee-mcp<br/>(Odoo EE)"]
    B --> C3["oca-mcp<br/>(OCA repos)"]
    B --> C4["github-mcp"]
    B --> C5["portainer-mcp"]
    B --> C6["filesystem-mcp"]
    B --> C7["teams-mcp"]
    B --> C8["claude-terminal<br/>(xterm.js + tmux)"]
    C1 --> D1["Odoo 15→19<br/>(N tenants)"]
    C1 --> D2["Qdrant<br/>(vector DB)"]
    C1 --> D3["Ollama<br/>(local LLMs)"]

    classDef gw fill:#e0e7ff,stroke:#4338ca,color:#1e1b4b;
    classDef be fill:#f3f4f6,stroke:#6b7280,color:#111827;
    classDef st fill:#fef3c7,stroke:#d97706,color:#451a03;
    class B gw;
    class C1,C2,C3,C4,C5,C6,C7,C8 be;
    class D1,D2,D3 st;

🧰 MCP Servers

Core: odoo-rpc-mcp

The flagship MCP server. 197+ MCP tools (92 native + 105 proxied across Portainer, GitHub, Teams, EE, OCA, filesystem) covering every aspect of Odoo development and operations.

Capabilities:

  • CRUD & Search: odoo_search_read, odoo_create, odoo_write, odoo_unlink, odoo_execute

  • Introspection: odoo_fields_get, odoo_list_models, odoo_module_info

  • Multi-connection: Switch between databases on the fly — odoo_connect, user_connection_activate

  • Web session support: odoo_web_login, odoo_web_call, odoo_web_export, odoo_web_report

  • File operations: odoo_attachment_upload, odoo_attachment_download, public_access_download

  • Reporting: odoo_report, public_access_report_pdf, public_access_report_xlsx

  • Portal access: public_access_portal_orders, public_access_portal_invoices, public_access_portal_tickets

  • Bulgaria l10n: odoo_fp_configure, odoo_fp_list, odoo_fp_details — fiscal positions tailored for НАП compliance

  • Translations ★ 2.10: odoo_list_translatable_fields, odoo_get_field_translations, odoo_translate_field (simple translate=True), odoo_translate_html (html_translate / xml_translate with extract/terms/replace modes). Version-aware (Odoo 16+ native JSONB API, <16 ir.translation fallback). Auto-ZWSP marks identical translations as "kept intentionally" so the website editor stops flagging them as untranslated.

  • Website snippets ★ 2.10: odoo_website_list_snippets, odoo_website_list_page_snippets, odoo_website_add_snippet, odoo_website_update_snippet, odoo_website_remove_snippet. Lxml-based HTML parsing with xpath substitutions — covers blog posts, website pages (via arch_db), product descriptions, mega-menus. Supports background image swaps, CTA insertions, position-relative placement (end/begin/after/before/replace).

  • AI integration: ai_tokenize_record, ai_search_similar, ai_collection_info — Qdrant vector embeddings per Odoo record

  • Memory system: Per-user and shared memory with memory_read, memory_write, memory_share, memory_pull

  • Google services: OAuth, Gmail search/read/send, Calendar CRUD

  • Telegram: MTProto client — send messages, search contacts, read dialogs

  • SSH & Git: Remote command execution, git operations

ee-mcp — Odoo Enterprise Tools

Tools specific to Odoo Enterprise workflows:

  • License validation & status checks

  • EE module repository management

  • Dependency analysis (CE + EE)

  • Selective EE module linking into CE addons paths

  • Conflict detection between Enterprise and OCA modules

oca-mcp — OCA Module Management

Deep integration with the Odoo Community Association ecosystem:

  • Clone individual OCA repos or oca-clone-everything

  • Search across all local OCA repos

  • Generate READMEs, icons, requirements.txt via oca-gen-*

  • Version migration via oca-migrate-branch

  • Changelog generation from newsfragments

claude-terminal — Browser-based Claude Code

A complete xterm.js + tmux + Claude Code setup running in a Docker container:

  • WebSocket gateway (gateway.js) with session isolation

  • Per-user tmux sessions that persist across reconnects

  • Themable terminal (see themes.json — includes Catppuccin, Dracula, Tokyo Night, Gruvbox, etc.)

  • Landing page (landing.html) for public deployments

  • Authenticated via the same token system as other MCP servers

Infrastructure MCPs

  • github-mcp — GitHub API wrapper (search code, issues, PRs, repos)

  • portainer-mcp — Docker/Kubernetes environment management

  • teams-mcp — Microsoft Teams messaging integration

  • filesystem-mcp — Scoped filesystem operations for AI agents


📦 Companion Odoo Modules & Theme

The MCP stack is paired with several Odoo modules and a website theme. Together they turn any Odoo instance into a fully MCP-aware, multi-tenant, billing-ready AI workstation — with an optional editorial website skin on top.

l10n_bg_claude_terminal — Odoo ↔ MCP integration (free / LGPL-3)

Odoo module that exposes MCP + Claude Terminal configuration as user preferences and company settings. Works on Odoo 16, 18 and 19 (each major series has a dedicated branch).

Repos:

🌍 Non-Bulgarian deployments? Use the international fork rosenvladimirov/odoo-mcp-terminal — same module, redistributed without the BG localization dependencies (no НАП fields, no Bulgarian transliteration mixin). Branches 16.0 / 18.0 / 19.0, AGPL-3.0. Recommended for any Odoo instance outside Bulgaria.

What it adds to Odoo:

  • Per-user MCP endpoint + Bearer token config (Odoo UI → Preferences)

  • Per-user Odoo RPC connector (URL, DB, API key, protocol, verify_ssl flag with TOFU cert pinning)

  • Per-user Web Session credentials (for MCP's web session support)

  • Per-user Anthropic API key / OAuth token passthrough (billing account or Claude Pro/Teams/Max)

  • Telegram + Viber MTProto / bot token config

  • 18 terminal themes (Catppuccin, Dracula, Tokyo Night, Gruvbox, …)

  • Claude.ai OAuth login button → one-click auth to Claude API

  • Live refresh bus — MCP odoo_create / odoo_write triggers open form / list views to update in real time (no full reload)

  • Test Connections button — smoke-tests Odoo RPC + MCP + Web Session

    • Qdrant + Ollama in one click (sticky notifications)

  • Save to MCP button — register the user's Odoo alias into the MCP connection store without touching /data/connections.json manually

  • Dynamic XML-RPC db list — populates the Database dropdown from the Odoo instance's list_dbs() (multi-tenant friendly)

l10n_bg_ai_billing — SaaS billing module (OPL-1, paid)

Odoo module for hosting providers and tier management. Tracks per-user MCP usage, calculates bills, provisions Portainer stacks per tenant, ships licensed memory packs.

Repo:

What it adds:

  • 8 models: ai.billing.{bundle, tenant, usage.line, invoice.batch, skill.catalog, memory.pack, memory.deployment, tenant.addon}

  • Bundle pricing — Starter €49 / Business €129 / Professional €299 / Enterprise €599 tiers with per-user / per-call / per-skill usage meters

  • Millicents precision ($0.00001) on usage lines — prevents the 30–40% rounding loss common on cent-based billing

  • Portainer client wrapperportainer.client wizard creates a per-tenant MCP stack with auto-provisioned port, env, and network

  • AES-256 encrypted ZIP export (via pyzipper) of tenant config bundles for offline demos or DR backups

  • Skill catalogai.skill records with L1/L2/L3 disclosure tiers

  • Memory packs — versioned markdown playbooks distributable to tenants via MCP /admin/memory/upload endpoint

  • BG Trade Registry integration — fetches EIK / VAT / legal form from portal.registryagency.bg for tenant bootstrap

  • sale.order integration — selling a bundle SKU auto-provisions the tenant + deploys memory + activates skills

  • MCP Terminal addons — extra per-tenant features (dedicated subdomain, white-label branding)

Dependency on the MCP stack: uses the MCP_ADMIN_TOKEN endpoint family (/admin/memory/*) added in odoo-rpc-mcp 2.8.0.

odoo-mcp-theme — Custom Odoo website theme (free / AGPL-3)

Editorial "paper" theme purpose-built for the MCP Works landing site and any Odoo website that wants a clean, content-first presentation.

Repo: rosenvladimirov/odoo-mcp-theme · branch 19.0 · current: 19.0.x

What it ships:

  • OKLCH paper/ink + indigo colour system — perceptually-uniform palette that prints well, scans well, and adapts to dark mode without losing contrast

  • Custom snippets — pricing cards (5-tier layout), feature grids, setup-wizard CTAs, demo-link blocks, MCP architecture diagrams

  • Vertical timeline language switcher — replaces Odoo's default language dropdown with a sidebar timeline (works well for trilingual EN / BG / RU sites)

  • Editorial typography — measured for long-form posts, runs ≤ 70 chars per line, optimised vertical rhythm

  • Fully #wrapwrap-scoped — no leakage into Odoo backend or Website Builder editor (avoids the $o-color-palettes-name global leak that breaks editor UI in older themes)

Installable on any Odoo 19 instance. Drop it into your addons path, install via Apps, then assign in Website → Configuration → Themes.

Installation order

odoo-mcp-theme            ← optional: editorial website skin
l10n_bg_claude_terminal   ← every user of the MCP terminal
       ↓
l10n_bg_ai_billing        ← hosting providers / resellers / BL-tier ops

l10n_bg_ai_billing depends on l10n_bg_claude_terminal — installing the billing module auto-pulls the terminal integration. odoo-mcp-theme is independent and can be used with or without the MCP stack.


☸️ Deployment

Full Kustomize-based deployment in k3s/:

k3s/
├── base/                    # Base manifests
│   ├── namespace.yaml
│   ├── configmaps.yaml
│   ├── secrets.example.yaml
│   ├── pvcs.yaml
│   ├── odoo-rpc-mcp.yaml
│   ├── ee-mcp.yaml
│   ├── oca-mcp.yaml
│   ├── github-mcp.yaml
│   ├── teams-mcp.yaml
│   ├── portainer-mcp.yaml
│   ├── filesystem-mcp.yaml
│   ├── claude-terminal.yaml
│   ├── qdrant.yaml
│   ├── ollama.yaml
│   └── ingress.yaml
└── overlays/
    ├── direct/              # NodePort + cert-manager-example
    └── prod/                # Ingress with TLS for public endpoints

Deploy:

cd k3s/overlays/prod
cp .env.example .env
cp ../../base/secrets.example.yaml secrets.yaml
# edit secrets.yaml with real values

kubectl apply -k .
kubectl -n odoo-claude-mcp get pods

See k3s/README.md for complete deployment guide including cert-manager, Cloudflare tunnels, and horizontal scaling.

Public deployment pattern

For Claude.ai connector access, the recommended production topology is:

Internet → Cloudflare (DNS + WAF) → Nginx reverse proxy → MCP gateway
                                                              │
                                                              ▼
                                                    Backend MCP servers

Token-based authentication on the gateway ensures only authorized Claude sessions connect. Cloudflare's Zero Trust or simple tunnel setup both work.


🔌 Claude.ai Connector

The stack is designed to be registered as a Custom Connector in Claude.ai (Team/Enterprise) or via the API.

Configuration:

  1. Deploy the stack with a public HTTPS endpoint (e.g., https://mcp.yourdomain.com)

  2. Generate a user token (see odoo_connect_cli.py or Qt GUI)

  3. In Claude.ai Settings → Connectors → Add Custom Connector:

    • URL: https://mcp.yourdomain.com/mcp

    • Auth: Bearer token

  4. The gateway will expose all MCP tools to your Claude conversations

Security features:

  • Per-user profile isolation (/data/users/{username}/)

  • Shared memory vs. personal memory separation

  • Connection-level access control (users only see their own Odoo connections)

  • All tool calls logged per user


🛠 Developer Tools

Beyond MCP servers, the repo includes standalone desktop and CLI tools:

Connection Manager

tools/odoo_connect_qt.py — PyQt6 desktop GUI for managing Odoo connections, SSH keys, and MCP endpoints. Cross-platform (Linux/Windows/macOS).

tools/odoo_connect.py — GTK4/Adwaita alternative for Linux/GNOME users.

odoo-rpc-mcp/odoo_connect_cli.py — Terminal CLI for CI/CD and scripting.

Module Analyzer

tools/odoo_module_analyzer.py — Analyzes Odoo module source for:

  • Manifest validation

  • Dependency graph extraction

  • Model relationships

  • View definitions

  • Security rules

GLB Viewer

tools/glb_viewer.py — 3D model inspection tool for the MRP Design Matrix workflows.

Windows Installer

Pre-packaged NSIS installer (packaging/windows/) produced automatically via GitHub Actions (.github/workflows/build-windows.yml).


📚 Documentation


🔐 Security

  • No credentials in code — all secrets via environment variables or Kubernetes secrets

  • Token-based MCP auth — no shared passwords

  • Per-user data isolation — filesystem and memory scoped to authenticated user

  • OAuth for third-party services — Google, GitHub, Telegram all use standard OAuth flows

  • Connection encryption — HTTPS/WSS everywhere in production deployments

  • Rate limiting — via Cloudflare AI Gateway or ingress controller

  • Audit logging — all MCP tool calls logged with user context

Reporting security issues: please email vladimirov.rosen@gmail.com rather than opening a public issue.


🌍 Bulgaria Localization

This project is maintained by the OCA l10n-bulgaria maintainer. Bulgarian-specific features are first-class:

  • НАП integration — fiscal position tax action maps, VAT reports

  • l10n_bg_* module family support — fiscal positions, VAT reports, payroll, HR

  • Образец 1 — monthly NAP declaration (Наредба №Н-13/2019)

  • Bulgarian partner identification — UIC/ЕИК, legal forms, NACE activity codes

  • Transliteration — BG ⇄ EN ⇄ GR mixin for partner names

  • НАП справка-декларация — SQL-engine based audit reports

See the Bulgaria-specific OCA modules for the complete ecosystem.


❓ FAQ

Does it work with Odoo Enterprise? Yes. Odoo 15→19 (Community + Enterprise) are all supported via XML-RPC + JSON-RPC. EE-specific tools (license check, EE module discovery, dependency analysis) live in the dedicated ee-mcp server. No Odoo SH-specific hooks — works on any self-hosted Odoo (bare metal, Docker, K3s, Odoo SH outbound).

Is this OCA-approved / on the Odoo Apps Store? The companion modules (l10n_bg_claude_terminal, the broader l10n-bulgaria family) are maintained by the OCA l10n-bulgaria maintainer. The MCP server itself is an independent project (not an Odoo app), AGPL-3.0, distributed via Docker Hub + GitHub. Track 3.x will publish a SaaS billing module on the Odoo Apps Store separately.

BYOK (bring your own Anthropic key) — is it safe? Yes. Each authenticated user can configure their own Anthropic API key via the Odoo UI (Preferences → Claude Terminal). Keys are stored encrypted in the per-user profile (/data/users/{username}/) and never leak to other tenants. The server never bundles a shared Anthropic key into multi-tenant deployments.

Can one stack serve multiple Odoo databases? Yes — that's the core design. One MCP server instance proxies to N Odoo connections, each with its own credentials, language, and timezone. odoo_connect / user_connection_activate switch the active database mid-session. Per-user memory namespaces keep context isolated.

Does it require Cloudflare? No. Cloudflare is the recommended production topology (Tunnel + WAF + AI Gateway), but the stack runs fine behind any reverse proxy (Nginx, Traefik, Caddy) or directly on a LAN/VPN. The docker-compose.local.yml override removes the Cloudflare network requirement for local dev.

What's the difference between this and Rutger Klabbers's odoo-mcp-pro? Different scope. odoo-mcp-pro is a focused single-user/single-DB Odoo MCP wrapper. odoo-claude-mcp is a multi-tenant gateway with 7+ federated MCP servers (Odoo + GitHub + OCA + Portainer + filesystem + Teams + claude-terminal), per-user authentication, audit logging, and a companion Odoo billing module for SaaS providers. Both projects are open source — pick the one that matches your deployment shape.

Can I run only the parts I need? Yes. Compose profiles gate optional services: docker compose up -d starts only the core (no Portainer, no Teams). Use --profile portainer / --profile teams / --profile full to add them. K3s overlays are similarly modular.


🛤 Two Tracks — Which Branch Do You Want?

This project ships on two parallel branches, each targeting a different audience. Most users want Track 2.x; the 3.x track is for integrators building hosted offerings on top of the stack.

🧑‍💼 Track 2.x — End Users (current stable, branch 2.0)

Who: Odoo end-users, accountants, Bulgarian SMEs, developers who work with a single Odoo stack, content teams managing website/blog.

What you get:

  • All 188+ MCP tools for day-to-day Odoo work (CRUD, search, RPC, introspection, attachments, reports, web session)

  • Multi-language field management (odoo_translate_field + odoo_translate_html + 2 helpers — covers blog.post, product descriptions, website pages, arch_db) ★ new in 2.10

  • Website snippet management (list / add / update / remove snippets on blog posts and pages, with background image swaps and substitutions) ★ new in 2.10

  • Bulgaria localization (fiscal positions, VAT, НАП integration)

  • AI tokenizer (Qdrant + Ollama embeddings per Odoo record)

  • Memory system (shared + per-user + licensed memory packs)

  • Google / Telegram / Teams integration

  • Claude.ai connector — Bearer-token HTTPS endpoint ready

Docker tags: :latest, :stable, :2.x.y (current: 2.31.0)

Documentation: this README

🔧 Track 3.x — Implementers / Integrators (preview, branch 3.0)

Who: Odoo implementation partners, OCA community contributors, SaaS MSPs running multiple client instances, integrator agencies.

What's planned (development — not production yet):

  • Admin lifecycle toolsodoo_module_install/upgrade/uninstall/ diff, odoo_config_apply, odoo_health_check, odoo_backup_db / restore_db

  • Industry skill packs — Manufacturing, Retail, Services, BG Localization, AI Accounting Assistant. Each pack = modules + ai.skill records + memory packs + pipeline steps.

  • Demo builder — one-command generator of fresh demo environments (mcp demo create --industry=... --seed=...). Tenant + Odoo DB + demo data + skills + memory in < 5 minutes.

  • Module dev + test toolkitodoo_module_scaffold / lint / test / install_from_path / explain, odoo_xml_validate.

Docker tags: :next, :3.x.y

Documentation: docs/integrator-platform.md (coming soon — see project memory roadmap_integrator_platform.md for the full 4-track spec)

Positioning: the 3.x track shifts buyer persona from the final Odoo user to the integrator / partner / agency — giving them the tools to deploy, configure, and demo Odoo + AI workflows for their own clients at scale.


🗺 Roadmap

  • Billing modulel10n_bg_ai_billing 19.0.1.3.0 shipped (4 tiers, millicents precision, Portainer auto-provisioning)

  • Invoice AI integrationl10n_bg_ai_pipeline + l10n_bg_ai_invoice_glue shipped (98.5% conf EAD OCR, Odoo 18+19, end-to-end tokenize)

  • Self-service tenant provisioning — v3 /provision endpoint LIVE on mcp.odoo-shell.space (Apr 2026)

  • Multi-tenant admin dashboard — admin UI for managing hosted MCP instances

  • Skills marketplace — publish and subscribe to pre-built Odoo workflows (ai.skill records + memory packs)

  • Audit log UI — searchable web UI for MCP tool call history

  • Self-healing connections — automatic retry with token refresh on auth failures


🤝 Contributing

Contributions welcome! This project follows OCA conventions:

  1. Fork the repo

  2. Create a feature branch (git checkout -b feature/amazing-thing)

  3. Follow PEP 8 / Odoo coding guidelines

  4. Add tests where applicable

  5. Submit a PR with a clear description

For large changes, please open an issue first to discuss approach.


📜 License

This project is licensed under the AGPL-3.0 license. See LICENSE for details.


🙏 Credits & Acknowledgements


⭐ Star History

Star History Chart

If this project helps you, please consider starring the repo — it helps others discover the work and motivates further development.


👤 Maintainer

Rosen Vladimirov — Terraros Commerce Ltd. Odoo Silver Partner · OCA l10n-bulgaria maintainer · 10+ years of Odoo specialization

📧 Email: vladimirov.rosen@gmail.com 🐙 GitHub: @rosenvladimirov 🏢 Company: Terraros Комерс ЕООД · Bulgaria


Made with ❤️ and ☕ in Bulgaria 🇧🇬

Available Tools

138 tools
ai_collection_infoB

Return info about the per-database Qdrant collection: vector size, distance metric, point count, indexed-vectors count, plus Odoo-side indexed-document count for cross-check.

ParametersJSON Schema
NameRequiredDescriptionDefault
connectionNodefault

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must carry the full burden. It indicates the tool returns information and hints at a cross-check feature, but does not explicitly state it is read-only, mention any side effects, auth requirements, or rate limits. It is adequate but not rich.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence that front-loads the main purpose and lists specific metrics. There is no wasted text, and it is appropriately concise.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple info tool, the description covers what data is returned. However, it lacks details on error handling, connection requirements, and does not compensate for the lack of parameter documentation. It is minimally complete but with gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has one parameter ('connection') with a default but no description. Schema coverage is 0%. The description does not explain the parameter or how to use it, leaving the agent without guidance on what 'connection' refers to.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool returns info about a Qdrant collection, listing specific metrics (vector size, distance metric, point count, indexed-vectors count, plus Odoo-side count). It uses a specific verb 'Return info' and distinguishes from siblings like ai_list_documents which list documents, not collection metadata.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

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, no prerequisites, and no context about when to call it. Given sibling tools like ai_search_similar or ai_pipeline_run, the tool's use case is implied but not explicitly stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ai_invoice_extractA

Extract structured invoice data from an Odoo attachment via Anthropic Vision. Auto-routes to haiku/sonnet/opus based on pages+size. Writes extract_prefill_data back to account.move (if write_back). Logs usage to the billing ledger with token counts + cost in millicents.

ParametersJSON Schema
NameRequiredDescriptionDefault
sourceNoupload
move_idNoaccount.move id (target for write-back). 0 = skip write-back.
connectionNodefault
write_backNoWrite extracted data to account.move.extract_prefill_data.
tenant_tierNobusiness
attachment_idYesir.attachment id
model_overrideNoForce a specific model, bypassing routing. Leave empty for auto.
source_message_idNoGmail Message-ID for dedup. Only used when source='gmail'.

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries full burden. It discloses auto-routing based on pages+size, write-back behavior, and billing logging. However, it omits what happens when write_back is false or error handling details.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three concise, front-loaded sentences with no fluff. Each sentence adds critical info: purpose, auto-routing, and side effects (write-back, logging).

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Missing output schema and description does not mention return value or error scenarios. Incomplete for a tool with no output schema, especially regarding behavior when write_back is false.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 63%, so description should compensate for undocumented parameters. It explains write_back and auto-routing (related to model_override) but does not clarify connection, source, or tenant_tier. Baseline 3 is appropriate as description adds some but not full value.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool extracts structured invoice data from an Odoo attachment using Anthropic Vision. This specific verb+resource combination distinguishes it from sibling tools like ai_invoice_pipeline_run or ai_invoice_scan_pending.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage through auto-routing and write-back behavior but lacks explicit guidance on when to use this tool versus alternatives like ai_invoice_pipeline_run. It does not mention prerequisites or excluded scenarios.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ai_invoice_pipeline_runB

Execute the full registered step pipeline for one move+attachment. Steps: probe_move → guard_already_extracted → extract_vision → log_usage → write_back_move → invoke_posting_skill + any loaded plugins. Returns step-by-step audit trail.

ParametersJSON Schema
NameRequiredDescriptionDefault
sourceNoupload
move_idYes
connectionNodefault
tenant_codeNo
tenant_tierNobusiness
attachment_idNoSpecific attachment id. 0 = auto-pick from move.
source_message_idNo

TDQS

B3.3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so the description must disclose behavioral traits. It lists steps and return type, but fails to mention side effects like writing to database, invoking posting skill (which may be destructive), or idempotency. For a mutation tool, this is insufficient transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is very concise: two sentences, first states purpose, second lists steps and return. No unnecessary words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (7 parameters, no annotations, no output schema), the description is incomplete. It lacks parameter details, behavioral transparency, and usage guidance, making it insufficient for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is low (14%), and the description does not add meaning to parameters beyond the schema. It mentions 'one move+attachment' but does not explain how move_id and attachment_id relate or the meaning of other parameters like source, tenant_tier, etc.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool executes the full registered step pipeline for one move+attachment, listing the specific steps and return type. This is very specific and distinguishes from siblings like ai_invoice_extract which only does extraction.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies the tool is for running the entire pipeline, but does not explicitly state when to use it versus alternatives (e.g., ai_invoice_pipeline_steps for listing steps, ai_pipeline_step_execute for individual steps) or provide exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ai_invoice_pipeline_stepsA

List currently registered pipeline steps with sequence, description, and plugin vs built-in provenance. Useful for debugging which steps will run against a move.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so description carries full burden. It describes a read operation and the data returned, but doesn't mention authorization needs or side effects, which are minimal for a list tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, efficient, with key details upfront.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no parameters or output schema, description sufficiently covers what the tool returns. Could mention if there are any limits or pagination, but not required.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

No parameters exist, so baseline 4 applies. Description adds no parameter info, but none needed.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it lists pipeline steps with sequence, description, and provenance. The inclusion of 'ai_invoice' prefix differentiates it from generic ai_pipeline_steps_list.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Mentions usefulness for debugging steps against a move, providing context. Lacks explicit alternatives or when-not-to-use, but implication is sufficient.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ai_invoice_pipeline_summaryB

Dashboard aggregation: counts of vendor bill moves by next_step across the last 60 days. Use for header KPI cards.

ParametersJSON Schema
NameRequiredDescriptionDefault
connectionNodefault
tenant_codeNo

TDQS

B3.4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries full burden. It only states the aggregation behavior but does not disclose any side effects, permissions needed, data freshness, or limitations. Minimal transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences that are clear, front-loaded, and to the point. No wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (aggregation without output schema or nested objects), the description is moderately complete. However, it lacks parameter explanations and behavioral details, which would be helpful for an agent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

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 the two parameters (connection and tenant_code). It adds no meaning beyond what the schema provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool aggregates counts of vendor bill moves by next_step over the last 60 days, and specifies its use for header KPI cards. This distinguishes it from sibling tools that focus on pipeline steps or runs.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly says 'Use for header KPI cards,' providing clear context. It does not explicitly mention when not to use it or alternatives, but the purpose is well-defined.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ai_invoice_plugins_reloadA

Reload plugin steps from the plugins directory (default /data/plugins/ai_invoice). Called after uploading a new plugin without restarting the server.

ParametersJSON Schema
NameRequiredDescriptionDefault
plugins_dirNoOverride default plugins directory.

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries full burden. It states that it reloads plugin steps from a directory and avoids server restart, but does not disclose potential side effects like whether existing steps are cleared or merged, or if permissions are needed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences long, front-loaded with the action, and contains no unnecessary words. Every sentence is informative.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple one-parameter tool with no output schema, the description covers the main use-case and parameter. It could mention what the tool returns (e.g., success indication) but is otherwise adequate.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema already describes the parameter with 'Override default plugins directory.' The description adds the default path '/data/plugins/ai_invoice' and the context of usage (after uploading a plugin), which adds value beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb (Reload) and resource (plugin steps from plugins directory), and distinguishes itself from siblings by specifying it is used after uploading a new plugin without restarting the server.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly says 'Called after uploading a new plugin without restarting the server', providing clear context for when to use this tool. However, it does not mention alternatives or when not to use it, so it loses a point.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ai_invoice_scan_pendingA

List vendor-bill drafts that have an attachment and no successful extraction yet. Oldest first (FIFO). Feeds batch processing. Set requested_only=true to return only moves explicitly queued by the l10n_bg_ai_invoice_glue attachment auto-trigger (ai_pipeline_requested=True) — recommended for cron drivers.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
connectionNodefault
tenant_codeNo
requested_onlyNo

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It discloses the filtering criteria, ordering, and parameter behavior, but does not explicitly state that the tool is read-only or has no side effects. Given the lack of annotations, the description is adequate but could be more transparent about safety.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences long, front-loaded with the core purpose, and then provides the key parameter detail. Every sentence is informative without any redundant or vague phrasing.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool has 4 parameters, no output schema, and no nested objects. The description explains the core functionality and one parameter well, but lacks details on the return format, expected output fields, and the meaning of 'Feeds batch processing'. This leaves some gaps for an AI agent needing full context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must add meaning. It explains 'requested_only' in detail, but does not describe 'connection', 'tenant_code', or 'limit' (though limit is somewhat self-explanatory). This partial coverage means the description adds value but not fully compensates for the schema gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'list', the resource 'vendor-bill drafts that have an attachment and no successful extraction yet', and the ordering 'Oldest first (FIFO)'. It also mentions its role in batch processing and cron drivers, distinguishing it from sibling tools like ai_invoice_extract or generic list tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides specific guidance on using the 'requested_only' parameter for cron drivers. However, it does not explicitly state when not to use this tool versus alternatives, such as ai_list_documents or ai_invoice_extract, leaving some ambiguity for the agent.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ai_invoice_stack_inspectA

Cross-layer snapshot for a single account.move: Odoo state + attachments + extraction history + skill status + decided next_step with blockers and hints. Read-only.

ParametersJSON Schema
NameRequiredDescriptionDefault
move_idYes
connectionNodefault
tenant_codeNo

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It states 'Read-only' and describes a snapshot, indicating no side effects. However, it lacks details on error handling (e.g., missing move_id), authorization requirements, rate limits, or whether it performs multiple API calls. The description is adequate but could disclose more behavioral characteristics.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence fragment plus 'Read-only.' It conveys the essential information without waste. The colon list is somewhat informal but readable. Could be slightly improved with clearer formatting, but it earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (3 parameters, no output schema, no annotations), the description is incomplete. It doesn't explain the output format, prerequisites (e.g., active Odoo connection), or whether the snapshot is expensive. For a cross-layer snapshot, more context would help the agent anticipate invocation behavior and result structure.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description should explain parameters but only implies move_id is the identifier via 'single account.move'. It does not describe connection or tenant_code, nor their defaults. The description adds minimal meaning for move_id but ignores the other two parameters, leaving the agent partially informed.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool does a cross-layer snapshot for a single account.move, listing specific components (Odoo state, attachments, extraction history, skill status, next_step with blockers and hints) and declares it read-only. This is highly specific and distinguishes it from sibling tools like ai_invoice_extract or ai_invoice_pipeline_summary.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for inspecting a single move's comprehensive state but does not explicitly state when to use it versus alternatives or when not to use it. No exclusions or alternative tools are mentioned, relying on the tool name and context for differentiation.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ai_list_documentsC

List ai.composite.document records (tokenized records tracked by Odoo). Useful for monitoring tokenization progress / errors.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
modelNoFilter by model_name
stateNo
connectionNodefault

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden for behavioral disclosure. It only states listing records, missing details on read-only nature, side effects, authentication needs, or rate limits.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise with two sentences and no unnecessary content. It could be slightly expanded without losing conciseness.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema, low parameter info, and no annotations, the description lacks details on return format, pagination, error handling, and complete parameter behavior.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is only 25% (only 'model' has a description). The description adds no parameter information beyond the resource type, failing to compensate for the low coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'List' and the resource 'ai.composite.document records', with a specific use case of monitoring tokenization progress/errors. However, it does not differentiate from sibling tools like ai_tokenize_collection or ai_search_similar.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for monitoring tokenization progress/errors but provides no explicit guidance on when to use this tool versus alternatives or any exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ai_pipeline_runA

Execute an Odoo-defined pipeline (ai.pipeline.step records for the given pipeline name, ordered by sequence). Respects skill_id + trigger_domain + on_error. MCP-native steps (model starts with 'mcp') are dispatched to the local registry; other steps are invoked via RPC on the configured Odoo model.method. Writes back last_run_state/message per step.

ParametersJSON Schema
NameRequiredDescriptionDefault
pipelineYesPipeline name as defined in Odoo (tokenize, post, refresh, ...).
extra_ctxNoAdditional key/value pairs merged into the runtime context.
source_idYes
connectionNodefault
tenant_codeNo
tenant_tierNobusiness
source_modelYesOdoo model of the triggering record (e.g. account.move).
update_step_statsNoWrite last_run_state/message back to ai.pipeline.step.

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description must carry the behavioral burden. It describes dispatching logic and state writing but does not disclose potential side effects, authentication requirements, or error behavior, which are critical for a multi-step execution tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three sentences, front-loaded with the main purpose, and each sentence provides meaningful information about the tool's behavior without redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity (8 parameters, no output schema, no annotations), the description omits details on parameter usage, return value, and error handling, making it incomplete for an agent to use effectively.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 50%, but the description only adds minimal context for the pipeline parameter and update_step_stats. Parameters like connection, source_model, source_id, tenant_code, tenant_tier, and extra_ctx are not explained, leaving the agent without guidance on their use.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool executes an Odoo-defined pipeline, explains the step ordering, and distinguishes from similar tools like ai_pipeline_step_execute by detailing the orchestration logic.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for executing a full pipeline but lacks explicit guidance on when to use this tool over alternatives like ai_pipeline_step_execute or ai_invoice_pipeline_run, and no when-not-to-use instructions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ai_pipeline_step_executeA

Execute a single ai.pipeline.step by name via Odoo RPC. Looks up the step in Odoo by name, builds a ctx from the supplied parameters, calls env[step.model].step.method(ctx), and returns the updated ctx (with composite_fields populated by the step). Use ai_pipeline_steps_list to discover available step names.

ParametersJSON Schema
NameRequiredDescriptionDefault
extra_ctxNoAdditional top-level ctx keys merged before executing the step.
source_idYesDatabase ID of the source record.
step_nameYesThe step 'name' field in Odoo (e.g. 'resolve_partner_bg', 'post_vendor_bill_bg').
connectionNodefault
source_modelYesOdoo model of the triggering record (e.g. 'account.move').
composite_fieldsNoctx['composite_fields'] dict — pass extracted invoice fields: partner_vat, partner_name, partner_eik, invoice_date, ref, amount_total, lines, etc.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It fully discloses the internal mechanism: lookup, context building, method call, and return of updated ctx. It also notes that composite_fields are populated by the step. While it does not detail potential side effects, the explanation is transparent about the operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is very concise: two sentences with no unnecessary words. The first sentence states the core purpose, the second explains the process and includes a useful hint to a sibling tool. Front-loaded and efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 6 parameters (3 required) and no output schema, the description adequately explains the process and return value. It references the sibling tool for step discovery. It does not cover error handling or prerequisites like connection, but overall it is complete for an execution tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 83%, so the baseline is 3. The description does not add significant new information beyond what is in the schema for parameters. It mentions the return value (updated ctx with populated composite_fields) but that relates to output, not parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Execute a single ai.pipeline.step'), the resource ('by name via Odoo RPC'), and outlines the internal process. It distinguishes itself from sibling tools like ai_pipeline_steps_list by explicitly referencing it for discovering step names.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description advises using ai_pipeline_steps_list to discover step names before execution, providing clear guidance. However, it does not mention when to use ai_pipeline_run instead (batch vs single step), which is a minor omission.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ai_pipeline_steps_listA

List ai.pipeline.step records in Odoo for a given pipeline name. Shows sequence, model.method, skill_id, on_error, last run state — mirrors the Odoo Settings view.

ParametersJSON Schema
NameRequiredDescriptionDefault
pipelineNoPipeline name (tokenize/post/refresh/...)tokenize
connectionNodefault
include_inactiveNo

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so description carries burden. 'List' implies read-only but not explicitly stated. No disclosure of side effects or safety characteristics. Adequate but could be clearer.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with purpose, no redundant information. Efficient and clear.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple list tool with 3 parameters and no output schema, description covers core purpose and return fields. Missing details on connection and include_inactive parameters, but overall sufficient.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 33%; only pipeline has schema description. Description reinforces pipeline parameter but does not clarify connection or include_inactive parameters. It does mention return fields, adding some value.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states it lists ai.pipeline.step records for a given pipeline name and mentions specific fields shown (sequence, model.method, etc.), distinguishing it from sibling tools like ai_pipeline_run or ai_pipeline_step_execute.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Implicit usage context but no explicit when-to-use or when-not-to-use. No mention of alternatives like ai_pipeline_step_execute for running steps. Could be improved with a note about not modifying data.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ai_search_similarA

Semantic search across tokenized Odoo records. Embeds the query with the configured provider, searches the per-DB Qdrant collection. Filterable by model, view_type, company. Returns ranked hits with score + snippet.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
modelNoRestrict to one model (optional)
queryYesNatural-language query
view_typeNo
company_idNoRestrict to one company (optional)
connectionNodefault
score_thresholdNo

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It explains the embedding process, the per-DB Qdrant collection, and return format (ranked hits with score+snippet). It lacks details on error cases, rate limits, or behavior with empty results but is fairly transparent for a search tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with critical information front-loaded: tool purpose, mechanism, filters, and output. Every phrase adds value, and the structure is efficient and easy to parse.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 7 parameters and no output schema or annotations, the description covers the core search functionality and return format. It lacks details on pagination, error handling, and interpretation of score_threshold, which would be helpful but not critical for this type of tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is only 43%, with only query, model, and company_id described. The description mentions filtering by model, view_type, and company, adding meaning for view_type which has no schema description. However, connection, limit, and score_threshold are not addressed, leaving gaps.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool performs semantic search across tokenized Odoo records. It distinguishes from sibling tools focused on tokenization (ai_tokenize_collection) or document listing (ai_list_documents) by explicitly stating the search functionality and ranking.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description mentions filtering by model, view_type, and company, giving usage context but does not explicitly state when to use this tool over alternatives. No when-not-to-use guidance is provided, and sibling tools that might serve similar purposes are not referenced.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ai_tokenize_collectionA

Tokenize ALL records of a model via the registry entry. Heavy operation — for large models prefer the nightly cron. Returns count of processed records.

ParametersJSON Schema
NameRequiredDescriptionDefault
modelYesModel name
view_typeNoform
connectionNodefault

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description bears full responsibility. It mentions the operation is heavy and returns a count, but does not disclose permissions needed, whether data is modified, or if repeated tokenization is idempotent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise sentences, front-loaded with purpose and behavioral notes. No wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers purpose, usage guidance, and return value, but lacks details on parameters and behavioral side effects. For a tool with 3 parameters and no output schema, more context is needed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 33% (only 'model' has a description). The description does not explain the 'connection' or 'view_type' parameters, nor does it clarify how they affect behavior. The phrase 'via the registry entry' is ambiguous.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool tokenizes ALL records of a model, using the registry entry. It distinguishes from siblings like ai_tokenize_record by emphasizing 'ALL' and mentioning alternatives for large models.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly warns that the operation is heavy and advises using the nightly cron for large models, indicating when not to use it. However, it does not list alternative tools explicitly beyond the nightly cron.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ai_tokenize_recordB

Tokenize a single Odoo record: build composite document, embed via configured provider, upsert to Qdrant. Synchronous — returns final state.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesRecord id
modelYesModel name (e.g. 'res.partner')
view_typeNoform
connectionNodefault

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Description mentions synchronous behavior and returns final state, which adds transparency beyond annotations. However, no information about destructive potential, authorization, or error conditions. With no annotations, it partially covers behavioral traits.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single sentence with clear action sequence. Front-loaded with purpose 'Tokenize a single Odoo record'. No redundant words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with 4 parameters and no output schema, the description is adequate but incomplete. Lacks details on error handling, side effects, or interaction with configured provider. Given complexity, more behavioral context is expected.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 50% with only model and id described. The description does not add meaning to the undocumented parameters (connection, view_type). It fails to compensate for missing schema details.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool tokenizes a single Odoo record with specific steps (build, embed, upsert). It distinguishes from siblings like ai_tokenize_collection and ai_search_similar by focusing on single record tokenization.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

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 like ai_tokenize_collection. No prerequisites or context for usage. The tool is described as synchronous but lacks when-not-to-use indicators.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ai_usage_budget_statusB

Current month's vision spend vs configured cap. Reads res.company.ai_monthly_budget_eur (requires l10n_bg_ai_invoice_glue) and sums billed ai_usage_log rows. Returns spent, limit, remaining, % used. limit_eur=0 means no cap configured.

ParametersJSON Schema
NameRequiredDescriptionDefault
connectionNodefault
tenant_codeNo

TDQS

B3.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. It discloses reading from specific tables, summing logs, and the special case of limit_eur=0. It does not mention side effects, but the read-only nature is clear. The dependency on l10n_bg_ai_invoice_glue is noted.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise, with three sentences that front-load the main purpose and provide key details without redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema and a simple status tool, the description is fairly complete: it covers source, computed fields, and a special case. However, lack of parameter explanation is a gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

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 does not explain the 'connection' or 'tenant_code' parameters. The logic explanation does not clarify how these parameters affect behavior.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it reads budget and usage logs and returns spent, limit, remaining, and percentage used. It distinguishes itself from sibling tools like ai_usage_log_query by focusing on status vs. raw log queries, but does not explicitly name alternatives.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

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 siblings like ai_usage_log_query or ai_usage_log_stats. The context provides sibling names but the description does not offer selection criteria.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ai_usage_log_exportA

Export billing ledger rows as CSV for a tenant + date range. Used for month-end invoice generation and audit trails.

ParametersJSON Schema
NameRequiredDescriptionDefault
date_toNoISO-8601 UTC (inclusive).
date_fromNoISO-8601 UTC (inclusive).
connectionNodefault
tenant_codeNoTenant slug. Derived from connection if omitted.

TDQS

A3.5/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must disclose behavioral traits. While 'Export' implies a non-destructive read operation, the description does not explicitly state that the tool is read-only, that it does not modify data, or any authentication/rate limit constraints. This leaves ambiguity about 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise sentences: the first clearly defines what the tool does, and the second provides the intended use case. No redundant information; every sentence adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool without an output schema, the description does not specify how the CSV output is delivered (e.g., as a download URL, raw data in response). It also lacks details on execution limits or error conditions, leaving some gaps for the agent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 75% description coverage, with parameters for tenant, date range, and connection. The description reinforces the purpose of tenant and date range but does not add new meaning beyond the schema, nor does it explain the 'connection' parameter (which lacks a schema description).

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description specifies the exact action (export), the resource (billing ledger rows), and the format (CSV), with a clear scope (tenant + date range). It distinguishes itself from sibling tools like ai_usage_log_query and ai_usage_log_stats by focusing on export for invoice generation and audits.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides a usage context ('month-end invoice generation and audit trails') that implies when to use, but does not explicitly state when not to use or name alternatives. An agent would need to infer usage from context rather than direct guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ai_usage_log_queryA

Query the AI usage billing ledger. Filter by tenant, state, source, date range. Returns detailed rows for audit + monthly reconciliation.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
stateNo
offsetNo
sourceNo
date_toNoISO-8601 UTC (inclusive).
date_fromNoISO-8601 UTC (inclusive).
connectionNodefault
billed_onlyNo
tenant_codeNoTenant slug. Derived from connection if omitted.

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so description carries full burden. Mentions 'returns detailed rows' but does not disclose pagination behavior, side effects (presumably read-only), auth requirements, or rate limits. Basic transparency but incomplete.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences: first states action, second specifies filters and return type. No redundant words, front-loaded with purpose. Highly concise.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With 9 parameters, no output schema, and no annotations, the description is too minimal. Omits details on pagination (limit/offset), billing filter (billed_only), connection handling, and result format. Incomplete for a complex query tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is low (33%), and description adds value by listing filterable fields (tenant, state, source, date range) but does not explain all 9 parameters (e.g., connection, billed_only, limit, offset). Partially compensates but not fully.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states 'Query the AI usage billing ledger' with specific filterable dimensions (tenant, state, source, date range) and return type ('detailed rows for audit + monthly reconciliation'). Distinguishes from siblings like ai_usage_log_export and ai_usage_log_stats by focusing on querying detailed rows.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Description implies usage for 'audit + monthly reconciliation' but does not explicitly contrast with sibling tools (e.g., when to use this vs ai_usage_log_export or ai_usage_log_stats). No when-to-use or when-not-to-use guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ai_usage_log_statsA

Dashboard KPIs for the billing ledger: totals, per-model breakdown, 30-day timeseries, recent errors, derived metrics (cache hit rate, avg cost per billed doc, monthly €).

ParametersJSON Schema
NameRequiredDescriptionDefault
periodNomonth
connectionNodefault
tenant_codeNoTenant slug. Derived from connection if omitted.

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Without annotations, the description carries full burden. It correctly indicates a read-only operation (stats), but doesn't disclose potential behaviors like required permissions, rate limits, or data refresh semantics. The derived metrics detail adds some transparency, but safety aspects are missing.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single, well-structured sentence that front-loads the key value ('Dashboard KPIs') and lists specific outputs. Every word earns its place—no fluff, high information density.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema, the description adequately covers return values by listing metric categories. However, it could specify the time window for '30-day timeseries' more precisely and mention if totals are aggregated across all time. Still, it's largely complete for its purpose.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is only 33% (period has description). The description does not add meaning to 'connection' or 'tenant_code' parameters. The overall tool description helps but doesn't compensate for the low per-parameter documentation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool provides 'Dashboard KPIs for the billing ledger' and enumerates specific metrics (totals, per-model breakdown, timeseries, errors, derived metrics), making the purpose explicit and distinguishing it from sibling tools like ai_usage_log_query.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for aggregate stats, but lacks explicit guidance on when to use versus alternatives like ai_usage_budget_status or ai_usage_log_query. However, the mention of 'Dashboard KPIs' provides clear context for data exploration.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

github_apiA

Call GitHub REST API directly. Uses the GitHub token from local_profile.json. For operations not covered by the GitHub MCP server, or when it's not running.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyNoRequest body (for POST/PATCH/PUT)
methodNoHTTP methodGET
paramsNoQuery parameters
endpointYesAPI endpoint (e.g. /user/repos, /repos/owner/repo/issues)

TDQS

A4.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations exist; the description notes token usage but omits important traits like potential destructive actions (DELETE method), error behavior, rate limits, or response format. Fails to fully disclose behavioral implications for a tool that can mutate resources.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences: first states purpose, second provides context. No wasted words, front-loaded, and easy to parse. Efficient for agent consumption.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite no output schema, the tool is a generic API caller; return values vary by endpoint. However, missing details on error handling, authentication failures, and response structure. Annotations could supplement, but absent. Adequate but incomplete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema covers all parameters with descriptions (100% coverage). The description adds only token context ('Uses the GitHub token from local_profile.json'), which is helpful but not extensive. Baseline 3 applies as schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's function: 'Call GitHub REST API directly.' It specifies the resource (GitHub API) and the action (call), leaving no ambiguity. With no sibling GitHub tools, differentiation is not needed.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly says when to use: 'For operations not covered by the GitHub MCP server, or when it's not running.' This provides clear context and alternatives, guiding the agent effectively.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

git_remoteB

Run git commands on a remote server via SSH. Shortcut for common git operations (pull, status, log, branch, diff) on remote repositories. Provide the connection alias and repo path.

ParametersJSON Schema
NameRequiredDescriptionDefault
argsNoAdditional git arguments (e.g. '--oneline -10' for log, branch name for checkout)
operationYesGit operation to perform
repo_pathYesPath to git repo on remote server (e.g. /opt/odoo/odoo-19.0)
connectionYesConnection alias (uses its SSH config)
forward_agentNoForward SSH agent for GitHub auth (auto-enabled for pull/fetch/clone)
custom_commandNoFull git command (only when operation=custom)

TDQS

B3.3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must disclose all behavioral traits. It fails to mention potential destructive actions (e.g., pull), authentication needs, or error handling, leaving significant gaps.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise at two sentences, front-loaded with the core purpose. It is efficient but could include a bit more context without becoming verbose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With 6 parameters and no output schema, the description lacks important context about return values, error scenarios, and usage of custom commands, making it incomplete for an agent to fully understand the tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3. The description adds no extra meaning beyond the schema, merely restating that connection alias and repo path are needed.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool runs git commands on a remote server via SSH, specifying common operations like pull, status, log, branch, and diff. It distinguishes itself from the sibling ssh_execute by being git-specific.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies the tool is for common git operations but does not explicitly state when to use it over alternatives like ssh_execute, nor does it mention prerequisites or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

google_authA

Authenticate with Google OAuth2 for Gmail and Calendar access. Requires credentials.json from Google Cloud Console (Desktop app type). First call opens browser for consent. Token is saved for reuse.

ParametersJSON Schema
NameRequiredDescriptionDefault
credentials_fileNoPath to Google OAuth credentials.json (default: /data/google_credentials.json)

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Discloses key behaviors: first call opens browser, token saved for reuse. No annotations provided, so description carries full burden. Could mention token expiration or re-authorization.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, no fluff. Front-loaded with purpose, then prerequisites and behavior.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Adequate for a simple auth tool. Covers purpose, prerequisite, and side effects. Could explain return value or token usage in other tools.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Only one parameter with schema coverage 100% and description already covers path and default. Tool description adds little beyond schema, so baseline 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clear verb 'Authenticate' with specific resource 'Google OAuth2 for Gmail and Calendar access'. Distinguishes from siblings like google_auth_status.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

States prerequisite (credentials.json) and first-call behavior (browser consent). Lacks explicit when-not-to-use or alternative tools like google_auth_status.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

google_auth_statusB

Check Google authentication status.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided and description does not disclose what the status output contains or its format.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single sentence is concise but misses essential behavioral details, making it under-specified.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema and minimal description, agent lacks understanding of return value or behavior.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

No parameters exist in schema; description adds nothing but also does not need to. Baseline 4 for zero-param tool.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states verb 'Check' and resource 'Google authentication status', distinguishing from sibling tools like 'google_auth'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

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; lacks context or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

google_calendar_create_eventC

Create a new calendar event.

ParametersJSON Schema
NameRequiredDescriptionDefault
endYesEnd time ISO 8601 (e.g. '2026-04-05T11:00:00')
startYesStart time ISO 8601 (e.g. '2026-04-05T10:00:00')
summaryYesEvent title
locationNo
timezoneNoEurope/Sofia
attendeesNoList of attendee emails
calendar_idNoprimary
descriptionNo

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries full burden. It only states creation but does not disclose return behavior, error handling, or side effects (e.g., does it return the created event? does it require a valid auth token?).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single concise sentence with no fluff. However, given the tool's complexity (8 parameters), it could be slightly expanded without harming conciseness.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Without output schema or annotation, the description lacks completeness. It does not explain what the tool returns, error scenarios, or how it interacts with Google Calendar (e.g., timezone handling, attendee invites).

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 50% (4 of 8 parameters have descriptions). The description does not add any meaning beyond the schema; it fails to compensate for the missing parameter descriptions or clarify usage of optional fields.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description 'Create a new calendar event.' clearly states the verb (create) and resource (calendar event), distinguishing it from sibling tools that update, delete, or list events.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No usage guidelines are provided. The description does not indicate when to use this tool versus alternatives like update or delete, nor any prerequisites such as authentication status.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

google_calendar_delete_eventC

Delete a calendar event.

ParametersJSON Schema
NameRequiredDescriptionDefault
event_idYes
calendar_idNoprimary

TDQS

C2.5/5.0
Behavior1/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It fails to mention that deletion is irreversible, whether authentication is required, or what happens if the event doesn't exist.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence with no wasted words. However, it could benefit from a slight expansion to include essential details without losing conciseness.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given two parameters, no output schema, and no annotations, the description is too minimal. It does not explain what the tool returns, whether confirmation is needed, or any side effects, leaving the agent underinformed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 0% description coverage, and the description adds no additional meaning beyond parameter names. While 'event_id' and 'calendar_id' are somewhat self-explanatory, the description does not clarify that 'calendar_id' is optional or what 'primary' means.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Delete') and the resource ('calendar event'), making it distinct from sibling tools like create, update, or list. However, it does not mention the calendar scope or default behavior.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

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 (e.g., update event to cancel) or prerequisites (e.g., need event_id). The description provides no 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.

google_calendar_eventsB

List upcoming calendar events. Supports time range and text search.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryNoText search in events
time_maxNoEnd time ISO 8601. E.g. '2026-04-30T23:59:59+03:00'
time_minNoStart time ISO 8601 (default: now). E.g. '2026-04-01T00:00:00+03:00'
calendar_idNoprimary
max_resultsNo

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must fully disclose behavior. It only states it lists events and supports filters, but omits traits like authentication needs, rate limits, pagination, or behavior when no events found. Very minimal.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, 13 words, no fluff. Every word earns its place. Efficient and front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple list tool, the description covers the basics. However, it lacks details on sorting, defaults, and behavior for empty results. Given no output schema and moderate schema coverage, it is minimally adequate but not thorough.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 60% (3 of 5 parameters documented). The description adds that 'time range and text search' are supported, aligning with time_min/time_max and query, but adds nothing about calendar_id or max_results. Some added value but incomplete.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'List upcoming calendar events,' which is a specific verb-resource pair. It distinguishes from sibling tools like create/delete/update, though there is a sibling 'google_calendar_list' which might be ambiguous but likely lists calendars, not events. Still, 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.

Usage Guidelines2/5

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. It implies usage for reading events with time range and text search, but no exclusions or comparisons to siblings like create_event or delete_event. Lacks when-not context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

google_calendar_listA

List all available Google calendars.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the burden. It only says 'list all available Google calendars' without disclosing authentication needs, rate limits, or what 'available' means. The description is minimal and lacks behavioral details.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

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; it is well front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple list tool with no parameters and no output schema, the description is adequate but lacks details on scope (e.g., does it return only primary calendars or all subscribed?) and output format. Could be more complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has 0 parameters and the schema coverage is 100% (empty). With no parameters, the description does not need to add parameter meaning. Baseline is 4 for 0-param tools.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'List all available Google calendars' with a specific verb and resource. It distinguishes itself from sibling tools like google_calendar_create_event and google_calendar_events, which are for creating events and listing events respectively.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidelines on when to use vs alternatives are provided. The tool is straightforward (no parameters) and its purpose implies usage for obtaining a list of calendars, but explicit guidance is absent.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

google_calendar_update_eventB

Update an existing calendar event. Only provided fields are changed.

ParametersJSON Schema
NameRequiredDescriptionDefault
endNoNew end time ISO 8601
startNoNew start time ISO 8601
summaryNo
event_idYes
locationNo
timezoneNoEurope/Sofia
attendeesNo
calendar_idNoprimary
descriptionNo

TDQS

B3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations exist, so description must disclose behavioral traits. It mentions 'update' (mutation) and partial update behavior, but omits details like required permissions, idempotency, rate limits, or impact on calendar.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise sentences, no redundant information. The key behavior ('Only provided fields are changed') is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With 9 parameters, low schema coverage, no output schema, and no annotations, the description is too brief. It does not explain return values, prerequisites, error conditions, or edge cases.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 22% (2 of 9 parameters have descriptions). The tool description does not explain what any parameter does beyond what's in the schema, failing to compensate for low coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Update an existing calendar event', specifying the verb and resource. It distinguishes from sibling tools like create, delete, or list, though it 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.

Usage Guidelines2/5

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 (e.g., create vs update). The only hint is 'Only provided fields are changed', which implies partial update behavior but lacks explicit usage context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

google_gmail_labelsA

List all Gmail labels (folders).

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.6/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are present, so the description must convey behavioral traits. It only states 'list all Gmail labels' without indicating that it is a read-only operation, whether authentication is required, or any potential side effects. This is insufficient for an agent to assess the tool's safety.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence that is front-loaded and efficient. It contains no unnecessary words. However, it could be slightly expanded within the same structure to include return type information without losing conciseness.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no parameters, no output schema, and a simple operation, the description indicates the tool's basic function. However, it does not describe the format of the returned data (e.g., label IDs, names, system labels), which leaves the agent uncertain about the output structure.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has zero parameters, which is trivial. With no parameters to document, the description does not need to add parameter semantics. The baseline of 4 is appropriate as there is no burden to compensate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool lists all Gmail labels, using the verb 'List' and the resource 'Gmail labels'. Adding '(folders)' clarifies terminology. Among sibling tools, no other tool targets labels, making its purpose distinct.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit when-to-use or when-not-to-use guidance is provided. The context of sibling tools (e.g., google_gmail_read, google_gmail_search) implies that this tool is for listing labels, but no alternatives 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.

google_gmail_readA

Read a specific Gmail message by ID. Returns full body, headers, and labels.

ParametersJSON Schema
NameRequiredDescriptionDefault
message_idYesGmail message ID

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so description carries full burden. It discloses that the tool returns full body, headers, and labels, which is appropriate for a read operation. No hidden side effects or additional behavioral info needed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with verb and resource, no redundant words. Every part adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given low complexity (single required param, no output schema, no nested objects), the description covers all necessary information: input, action, and returned data.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Single parameter with 100% schema coverage. Description adds context by explaining the tool's purpose and output, going beyond the bare 'Gmail message ID' description in the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description uses specific verb 'Read', identifies resource 'specific Gmail message by ID', and lists return contents (full body, headers, labels). Clearly distinguishes from sibling tools like google_gmail_search and google_gmail_send.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Implies usage when message ID is available but provides no explicit context on when to prefer this over alternatives or when not to use it. No mention of prerequisites or conditions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

google_gmail_sendB

Send an email or reply to an existing message.

ParametersJSON Schema
NameRequiredDescriptionDefault
ccNo
toYesRecipient email(s), comma-separated
bccNo
bodyYesEmail body (plain text or HTML)
htmlNoSend as HTML
subjectYes
reply_to_message_idNoMessage ID to reply to (keeps thread)

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided; description only states basic action. Missing behavioral traits like auth requirements, error handling, or side effects (e.g., sent message stored).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single sentence, no fluff, immediately conveys core purpose. Perfectly concise.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With 7 parameters, no output schema, and no prerequisites mentioned, the description is insufficient. Lacks details on return value, required authentication, or thread behavior.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 57%, leaving parameters like cc, bcc, and subject undocumented in schema. Description adds no additional parameter-level meaning beyond what the schema provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states 'Send an email or reply' with a specific verb and resource. Distinguishes from sibling tools like google_gmail_read and google_gmail_search by focusing on sending.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

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 (e.g., when to use google_gmail_send vs other email methods). No context or exclusion criteria provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

identifyA

Identify yourself to load your personal settings and connections. Call this at the start of a session. Returns your saved connections.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesYour name (e.g. 'Rosen', 'Ivan')

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations exist, so description carries full burden. It discloses that it loads settings, connections, and returns saved connections. However, it does not specify behavior for unrecognized names or whether it creates profiles, leaving some gaps.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with purpose, no redundant words. Every sentence adds value: purpose, usage timing, return value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple one-parameter tool with no output schema, the description covers purpose, invocation timing, and return value. Lacks clarification on what happens if name is unknown, but overall adequate.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with parameter description 'Your name (e.g. 'Rosen', 'Ivan')'. Description adds only that the name is used for identification, which is implied. Baseline 3 is appropriate as schema already adequately documents the parameter.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states the verb 'Identify', the resource 'yourself', and the outcome 'load your personal settings and connections'. It distinguishes itself from siblings like 'who_am_i' by focusing on loading settings rather than just returning identity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly instructs 'Call this at the start of a session', providing clear usage context. Does not include when-not-to-use or alternatives, but given the tool's straightforward purpose, this is sufficient.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

mcp_terminal_get_configA

Generate a password-protected ZIP archive with the Claude Terminal configuration keys (MCP, Qdrant, Embeddings) for the requesting tenant. Anthropic API key is NOT included by default (set include_anthropic=true to embed it). Returns base64-encoded ZIP + a temporary password (shown ONCE — copy it now). Use the password in the Odoo Setup Wizard (Settings → Technical → Настройка с ZIP конфигурация) to apply the config across res.company + res.users records in 5 guided steps.

ParametersJSON Schema
NameRequiredDescriptionDefault
connectionNodefault
tenant_codeNoOverride tenant slug. Defaults to caller's db/alias.
include_anthropicNoWhether to embed the Anthropic API key in the bundle.

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden. It discloses that the password is shown once, the ZIP is base64-encoded, and the Anthropic key is optionally included. It does not specify potential side effects or permission requirements, but the key behaviors are well covered.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three sentences long, front-loaded with the main purpose. It is well-structured but contains a somewhat lengthy sentence about the setup wizard path. Every sentence adds value, though brevity could be slightly improved.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the moderate complexity (3 parameters, no output schema), the description covers the purpose, output format (base64 ZIP + temporary password), and how to apply the config. The 'connection' parameter is not addressed, but overall the information is sufficient for an agent to invoke the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 67% (two of three parameters have descriptions). The description clarifies 'tenant_code' as an override for the caller's db/alias and 'include_anthropic' for embedding the key. The 'connection' parameter defaults to 'default' but is not explained in the description, leaving a gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description explicitly states the verb ('generate'), the resource ('password-protected ZIP archive with Claude Terminal configuration keys'), and the scope ('for the requesting tenant'). It clearly defines what the tool does, distinguishing it from the unrelated sibling tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains when to use the tool: to generate config for applying via the Odoo Setup Wizard. It also notes that the Anthropic key is excluded by default, guiding parameter choice. However, it does not explicitly discuss alternatives or situations where the tool should not be used.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

memory_deleteC

Delete a memory file from personal or shared storage.

ParametersJSON Schema
NameRequiredDescriptionDefault
scopeNopersonal
filenameYesFile name to delete

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, and the description fails to disclose behavioral traits such as whether deletion is permanent, if confirmation is required, or how scope='shared' behaves. The description adds minimal behavioral insight beyond the tool name.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence that is concise and front-loaded. While it is efficient, it could be slightly more informative without sacrificing brevity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the presence of many sibling memory tools, the description lacks completeness about error cases, consequences, and integration context. No output schema exists, and the description does not cover what happens after deletion.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The parameter descriptions in the schema are basic (filename type and scope enum). The tool description adds no additional meaning or usage context for the parameters, leaving the agent to infer from the schema alone.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action 'delete' and resource 'memory file', and specifies the storage scopes 'personal or shared'. This distinguishes it from sibling tools like memory_read, memory_write, or memory_list which involve different operations.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

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, nor does it mention prerequisites, irreversibility, or error conditions. It simply states what it does without contextual advice.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

memory_listA

List memory files. Shows personal files (for current user) and shared files. Use scope='personal', 'shared', or 'all' (default).

ParametersJSON Schema
NameRequiredDescriptionDefault
scopeNoWhich memories to listall

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the burden. It discloses that the tool shows personal and shared files. It doesn't mention any side effects or limitations, but as a read-only list, 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences long, efficiently conveying purpose and usage with no unnecessary words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple list tool with one parameter and no output schema, the description provides sufficient information. It covers what the tool does and how to filter, meeting completeness needs.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with parameter description 'Which memories to list.' The tool description adds usage guidance: 'Use scope='personal', 'shared', or 'all' (default).' This adds value beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'List memory files.' It distinguishes between personal and shared files, and the scope parameter differentiates it from sibling tools like memory_read or memory_delete.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains how to use the scope parameter to filter results ('personal', 'shared', or 'all'). While it doesn't explicitly state when not to use it, the context is clear for a list operation.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

memory_pullA

Pull shared memory file(s) into your personal storage. Use filename='*' to pull ALL shared files at once. If a file already exists locally, it gets overwritten with the shared version.

ParametersJSON Schema
NameRequiredDescriptionDefault
filenameYesShared file to pull, or '*' for all

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description discloses key behavior: overwriting existing local files. This is critical for a copy operation. Does not discuss permissions or size limits, but adequate for a simple tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the action, no unnecessary words. Every sentence adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple tool with one parameter and no output schema, the description covers purpose, usage, and side effects. It is complete and self-contained.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description adds significant value beyond the schema: explains the wildcard usage and overwrite side effect. Schema coverage is 100%, and the description enriches the single parameter's meaning.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'pull' and the resource 'shared memory file(s)', and distinguishes from sibling tools like memory_read (which reads local) and memory_share (which shares to others).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit usage guidance: use filename='*' to pull all files and warns about overwriting. Does not explicitly state when not to use or mention alternatives, but the sibling tools provide that context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

memory_readA

Read a memory file by filename. Searches personal first, then shared.

ParametersJSON Schema
NameRequiredDescriptionDefault
scopeNoForce scope (default: search personal first, then shared)
filenameYesFile name (e.g. 'module_l10n_bg.md')

TDQS

A4.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so description must cover all behavioral aspects. It mentions default search order and optional scope force, but does not specify error handling or return value format, which is acceptable for a simple read operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise sentences with all essential information front-loaded. No redundant text.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity, full schema coverage, and no output schema, the description adequately covers the tool's purpose and behavior. Context is sufficient for an agent to use it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, yet description adds value by explaining the default behavior of searching personal then shared, and giving an example filename format.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states 'Read a memory file by filename', specifying the action and resource. It distinguishes itself from siblings like memory_delete, memory_list, memory_write by focusing on reading a single file.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Implies usage through description but does not explicitly state when to use or when not to use. No alternatives mentioned, though the search behavior is described.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

memory_shareA

Share personal memory file(s) — copies to shared storage so colleagues can pull. Use filename='*' to share ALL personal files.

ParametersJSON Schema
NameRequiredDescriptionDefault
filenameYesPersonal file to share, or '*' for all

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations; description clarifies copy operation and sharing intent but omits details on permissions, overwrite behavior, or retrieval mechanism.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Extremely concise with two front-loaded sentences, no fluff, and every word adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Adequate for a simple single-parameter tool; mentions wildcard and basic action. Could be more complete with reference to retrieval via memory_pull or error handling.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema already describes the parameter well (100% coverage). Description adds value by demonstrating the '*' wildcard usage, raising the score above baseline of 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states verb (share), resource (personal memory files), and the action (copies to shared storage) with the purpose of making files accessible to colleagues.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides specific usage hint with filename='*' to share all files, but lacks explicit when-not-to-use or alternative sibling tools like memory_pull.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

memory_writeA

Write/update a memory file. Saves to personal storage by default. Content should be markdown with YAML frontmatter (name, description, type).

ParametersJSON Schema
NameRequiredDescriptionDefault
scopeNoWhere to save: personal (default) or sharedpersonal
contentYesFull file content (markdown with frontmatter)
filenameYesFile name (e.g. 'module_overview.md')

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. It discloses the write/update action, default scope ('personal'), and content format. However, it omits details like overwrite behavior, file creation vs. update, and any side effects (e.g., loss of previous content). The expected behavioral traits are partially covered but not comprehensively.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences long, front-loads the core action, and packs essential details (default scope, content format) without waste. Each sentence earns its place, making it easy to parse quickly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (3 parameters, no output schema), the description covers purpose, default behavior, and content requirements. It lacks explicit mention of return values or error states, but for a straightforward write tool, the provided context is sufficient for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 100% coverage with descriptions for all three parameters. The description adds value by specifying that content should include YAML frontmatter with specific keys (name, description, type), which is not fully detailed in the schema. This extra guidance helps the agent construct correct inputs.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Write/update a memory file') and identifies the resource ('memory file'). It distinguishes this tool from sibling tools like memory_read, memory_delete, and memory_list by focusing on creation/modification. The format requirement ('markdown with YAML frontmatter') further specifies its use case.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description does not explicitly indicate when to use this tool versus alternatives (e.g., memory_create, memory_update) or when not to use it. No exclusion criteria or context about prerequisites are provided, leaving the agent to infer usage from the tool name alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

odoo_attachment_downloadA

Download an ir.attachment from Odoo by ID. Returns filename, mimetype, size, and base64-encoded content.

ParametersJSON Schema
NameRequiredDescriptionDefault
save_pathNoOptional local path to save the file (instead of returning base64)
connectionNodefault
attachment_idYesir.attachment record ID

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It discloses that the tool returns metadata and base64 content, or optionally saves to a local path. However, it does not mention any side effects, error conditions, or access restrictions, which is adequate but not excellent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, well-structured sentence that immediately conveys the action and output. Every word earns its place; no redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema, the description adequately hints at return values. It covers the tool's core function and optional behaviour. Minor omissions (e.g., error handling) do not significantly detract from completeness for a simple retrieval tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema covers 67% of parameters with descriptions. The description adds the return format (base64) as context but does not deepen parameter semantics beyond what the schema already states. Schema coverage is high enough that the description's contribution is marginal.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description explicitly states the action ('Download an ir.attachment') and the resource ('from Odoo by ID'), with clear output details (filename, mimetype, size, base64 content). This distinguishes it from the sibling tool 'odoo_attachment_upload'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies use when you need to download an attachment by ID, but lacks explicit when-not or alternative guidance. No sibling comparison or exclusion criteria are provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

odoo_attachment_uploadA

Upload a file as an ir.attachment on an Odoo record. Returns the attachment ID which can be used with odoo_message_post (attachment_ids parameter) or linked to any record.

ParametersJSON Schema
NameRequiredDescriptionDefault
modelYesModel name (e.g. 'sale.order')
res_idYesRecord ID to attach to
filenameYesFile name (e.g. 'report.pdf')
mimetypeNoMIME type (optional, auto-detected)
connectionNodefault
content_base64YesBase64-encoded file content

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must convey behavioral traits. It states the operation is a file upload (creating an attachment) and returns the ID, but it omits details on permissions, file size limits, or side effects. This is adequate but not thorough, scoring a 3.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, efficiently conveying the purpose, return value, and integration with another tool. It is front-loaded and every word adds value, meeting the highest standard for conciseness.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has 6 parameters, no output schema, and no annotations, the description covers the core purpose and return value. It lacks details on error handling or constraints but is reasonably complete for a file upload tool, scoring a 4.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 83%, high, so baseline is 3. The description adds no information about parameters beyond what the schema already provides (model, res_id, etc.). It focuses on output usage instead, so no extra semantic value for parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'Upload', the resource 'file as an ir.attachment', and the target 'on an Odoo record'. It also specifies the return value (attachment ID) and its usage with odoo_message_post, distinguishing it from the sibling odoo_attachment_download.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides context on using the tool to upload files for later use with odoo_message_post, but does not explicitly state when not to use it or contrast with alternative methods. It gives a clear usage scenario, earning a 4.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

odoo_cert_infoA

Return the pinned SSL certificate details (issuer, subject, notAfter, fingerprint) for a connection. Useful to verify which self-signed cert MCP has trusted. Requires verify_ssl=False on the connection.

ParametersJSON Schema
NameRequiredDescriptionDefault
aliasNodefault

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It discloses the read-only nature implicitly and highlights a configuration requirement. However, it does not mention side effects, error handling, or what happens if no pinned cert exists. This is moderate transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, directly stating purpose and a key requirement. It is concise with no unnecessary words. The structure is front-loaded, making the tool's function immediately clear.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple tool with one optional parameter and no output schema, the description covers the purpose and a requirement. However, the missing parameter explanation and lack of error behavior details prevent full completeness. It is adequate but has clear gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has one parameter ('alias') with 0% description coverage. The description does not explain this parameter at all, leaving the agent to infer its role (likely the connection alias). Since coverage is low, the description should have compensated but did not.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool returns pinned SSL certificate details (issuer, subject, notAfter, fingerprint) for a connection. It also explains the use case for verifying self-signed certs. However, it does not explicitly differentiate from the sibling tool 'odoo_cert_refresh', which could cause confusion.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides a clear usage scenario (verify which self-signed cert is trusted) and a prerequisite ('Requires verify_ssl=False on the connection'). This helps the agent decide when to use it. It lacks explicit exclusions or alternatives, but the guidance is sufficient for typical use.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

odoo_cert_refreshA

Re-fetch the peer SSL certificate for a connection and overwrite the pinned copy. Use after the server's self-signed cert was rotated. Fails if the connection has verify_ssl=True (standard CA verification does not need pinning).

ParametersJSON Schema
NameRequiredDescriptionDefault
aliasNodefault

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Discloses a failure condition (verify_ssl=True) and implies destructive behavior ('overwrite the pinned copy'), though no annotation provides safety cues. Could be more explicit about authorization 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise sentences with no redundant information; each sentence adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple tool with one parameter and no output schema, the description provides essential usage context and a failure mode, though it omits the return behavior.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The sole parameter 'alias' is not described in the description; schema coverage is 0%, so the description fails to explain which connection is targeted, leaving ambiguity.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Re-fetch the peer SSL certificate') and the resource ('for a connection'), and distinguishes from sibling odoo_cert_info by specifying 'overwrite the pinned copy'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly says when to use ('after the server's self-signed cert was rotated') and when it fails (if verify_ssl=True), providing clear guidance and an alternative scenario.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

odoo_connectA

Add/update an Odoo connection. Auth via password or API key. Protocol: xmlrpc (Odoo 8+) or jsonrpc (Odoo 14+).

ParametersJSON Schema
NameRequiredDescriptionDefault
dbYesDatabase name
urlYesOdoo URL (e.g. http://localhost:8069)
aliasNoConnection name (e.g. 'production', 'staging')default
api_keyNoAPI key (Odoo 14+, alternative to password)
passwordNoPassword (or leave empty if using api_key)
protocolNoxmlrpc
usernameYesLogin username
verify_sslNoTrue = standard CA verification (default). False = allow self-signed. On first use the peer cert is fetched and pinned under /data/ssl_certs/<alias>.pem for subsequent calls (trust-on-first-use). Set False for on-prem clients with private CA or self-issued certs.

TDQS

A3.5/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description should fully disclose behavioral traits. It mentions add/update but lacks details on overwrite behavior, validation, side effects, or whether it tests the connection. The agent is left guessing about important operational semantics.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, immediately stating the main purpose and key options. It is front-loaded and contains no superfluous information, earning every sentence it uses.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 8 parameters and no output schema, the description covers the basic purpose and auth/protocol options. However, it omits details about output (what is returned), workflow integration (how connections are used by other tools), and update mechanism (role of alias).

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is high (88%). The description adds value beyond the schema by clarifying the mutual exclusivity of password vs. API key and the protocol version implications. This compensates for the slight lack of explicit parameter documentation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'Add/update' and the resource 'Odoo connection', with specifics about authentication methods and protocol versions, distinguishing it from sibling tools like odoo_connections or odoo_disconnect.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

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, such as needing an existing connection for update, or suggest using odoo_connections to list existing connections first.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

odoo_connectionsA

List all configured Odoo connections.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must disclose behavioral traits. It states 'List', implying a read-only operation, but does not explicitly confirm non-destructiveness or mention any 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, clear sentence that states the tool's function without any extraneous words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple list tool with no parameters and no output schema, the description is adequate. It could be improved by indicating the format of the output, but it is sufficient for an agent to understand its purpose.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

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%. The description adds no parameter info, which is acceptable given the baseline of 4 for zero-parameter tools.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('List') and resource ('all configured Odoo connections'), clearly distinguishing it from sibling tools like 'odoo_connect' or 'odoo_disconnect'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

While no explicit when-to-use or alternative guidance is given, the tool's simple parameterless nature and distinct purpose make its usage obvious; there is no overlap with siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

odoo_createB

Create one or more records. Returns list of new IDs.

ParametersJSON Schema
NameRequiredDescriptionDefault
modelYes
valuesYesField values dict, or list of dicts for batch create
connectionNodefault

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. It mentions returning IDs but does not disclose behavioral traits such as whether the operation is destructive, authentication requirements, error handling, or rate limits. 'Create' implies mutation, but lacks further context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is highly concise with one sentence. It efficiently conveys the core function and return value. However, it could benefit from slightly more detail without becoming verbose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema, the description does explain return values (list of IDs), but it omits key contextual information such as error handling, connection usage, and model constraints. The tool is simple but incomplete for an agent to use confidently.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is only 33% (only 'values' has a description). The tool description adds no additional meaning for 'connection' or 'model' parameters. For a 3-parameter tool with low schema coverage, the description should compensate, but it does not.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'Create' and the resource 'records', and specifies it can create one or more records. It also indicates the return value (list of new IDs). This distinguishes it from sibling tools like odoo_read, odoo_write, etc. which have different actions.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies the tool is for creating records, but it does not provide explicit guidance on when to use it versus alternatives (e.g., when to use odoo_execute instead). No context on prerequisites or when not to use is given.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

odoo_disconnectC

Remove an Odoo connection.

ParametersJSON Schema
NameRequiredDescriptionDefault
aliasNodefault

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided. The description only says 'Remove', but does not disclose side effects, permanence, or authentication requirements. The description carries the burden but provides minimal behavioral info.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Extremely concise single sentence, but it is under-specified, missing critical details about the parameter and usage.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (1 param, no output schema), the description is still incomplete. It does not explain the alias parameter or the behavior when alias is not provided.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description does not explain the 'alias' parameter. With 0% schema description coverage, the description fails to add any meaning to the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action (Remove) and the resource (Odoo connection). It distinguishes from siblings like odoo_connect and odoo_connections.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit when-to-use or when-not-to-use guidance. The purpose is implied, but no alternatives or prerequisites are mentioned.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

odoo_executeA

Execute any model method via execute_kw. Use for workflow actions (action_confirm, action_done), custom methods, or anything not covered by CRUD tools.

ParametersJSON Schema
NameRequiredDescriptionDefault
argsNoPositional arguments
modelYes
kwargsNoKeyword arguments
methodYesMethod name (e.g. 'action_confirm', 'button_validate')
connectionNodefault

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must convey behavioral traits. It discloses that it can call any model method, but does not explain side effects (e.g., data modification), error handling, or return values. While the potential for mutation is implied, more clarity on safety would improve transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences with no wasted words. It front-loads the core action and adds usage context efficiently. Could be slightly more structured with separate sections, but it is very concise and readable.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has 5 parameters, no output schema, and no annotations, the description is somewhat incomplete. It does not explain the return value format, the purpose of the 'connection' parameter, or how arguments should be structured beyond the schema. It covers usage but lacks operational details needed for safe invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema covers 60% of parameters with descriptions (method, args, kwargs), leaving 'connection' and 'model' undocumented. The description adds context by explaining the tool's purpose and giving method examples, but does not elaborate on parameter details like the role of 'connection'. It provides marginal added value beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it executes any model method via execute_kw, with specific examples like workflow actions. It explicitly distinguishes from CRUD tools by stating 'anything not covered by CRUD tools', making it easy for an AI to understand its unique role.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides guidance on when to use the tool ('workflow actions, custom methods, or anything not covered by CRUD tools'), implicitly excluding standard CRUD operations. However, it lacks explicit 'when not to use' or alternative tool names, and no prerequisites are mentioned.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

odoo_fields_getB

Get field definitions for an Odoo model. Returns field names, types, labels, and attributes.

ParametersJSON Schema
NameRequiredDescriptionDefault
modelYesModel name (e.g. 'res.partner')
attributesNoField attributes to return (e.g. ['string', 'type', 'required', 'relation'])
connectionNodefault

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations exist, so the description must cover behavioral traits. It does not disclose read-only nature, error handling, permission requirements, or limits. The return value is vaguely described without details on structure 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences efficiently convey the purpose and output. No redundant information, and the structure is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple metadata tool with three parameters, the description is somewhat complete but lacks usage context, error handling, and output format. Sibling tools are not referenced, reducing completeness.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 67%, but the description adds no extra meaning beyond repeating 'field definitions'. The 'connection' parameter is not explained, and the description does not clarify attribute filtering or default behavior.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool retrieves field definitions for an Odoo model, specifying fields returned (names, types, labels, attributes). This distinguishes it from sibling tools like odoo_list_models (lists models) and odoo_get_field_translations (field translations).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

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 odoo_get_field_translations. Prerequisites like an active Odoo connection are not mentioned, and no exclusion criteria are provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

odoo_fp_configureA

Add or update a tax action map entry for a fiscal position (l10n_bg_tax_admin). Provide action_id to update existing entry, or position_id to create new. Use odoo_fp_types for available selection values.

ParametersJSON Schema
NameRequiredDescriptionDefault
action_idNoExisting action entry ID (for update). Omit to create.
move_typeNoType of move
account_idNoAccount ID for base amount of tax
connectionNodefault
partner_idNoPartner ID for generated tax lines
position_idNoFiscal position ID (required for create)
dest_move_typeNoReplacement move type for auto-generated documents
factor_percentNoFactor percentage (default 100)
l10n_bg_type_vatNoVAT type code (use odoo_fp_types for values)
position_dest_idNoReplacement fiscal position ID
l10n_bg_move_typeNoBulgarian move type
l10n_bg_narrationNoNarration for audit report (required for create)
l10n_bg_document_typeNoDocument type code (use odoo_fp_types for values)

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It implies mutation ('Add or update') but doesn't disclose side effects, authentication needs, or rate limits. It does specify the create/update branching logic, which adds some transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with no fluff. First sentence states purpose and logic, second provides a helpful reference. Every word earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 13 parameters, create/update logic, and no output schema, the description is fairly complete. It covers the core logic but could mention that l10n_bg_narration is required for create (though present in schema). Still adequate for an AI agent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 92%, so baseline is 3. The description adds value by explaining the create/update logic and pointing to odoo_fp_types for selection values, which goes beyond the parameter descriptions in the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it 'Add or update a tax action map entry for a fiscal position', distinguishing between create and update via action_id or position_id. It also references the related tool odoo_fp_types for selection values, making it easy to understand the tool's specific function.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives explicit guidance: use action_id to update existing entry, position_id to create new. It points to odoo_fp_types for selection values. While it doesn't contrast with sibling tools, the purpose is distinct enough that no further differentiation is needed.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

odoo_fp_detailsB

Get detailed fiscal position with all tax action map entries (l10n_bg_tax_admin). Returns position info plus full action mappings: move types, BG move types, VAT types, document types, narrations, replacement rules, etc.

ParametersJSON Schema
NameRequiredDescriptionDefault
connectionNodefault
position_idYesFiscal position ID

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so description carries burden. It states return content but does not explicitly declare read-only status, side effects, or authorization requirements. Some transparency but incomplete.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single sentence with key info front-loaded. Lists many fields, but is not overly verbose. Could be more structured but remains efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema, so description must explain return values; it lists several fields but lacks details on error conditions or completeness. Adequate but not thorough.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 50% (only 'position_id' described). Description does not elaborate on parameters beyond schema; 'connection' lacks description. Fails to compensate for low coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states it retrieves detailed fiscal position with tax action map entries, specifying return fields like move types and VAT types. It distinguishes from siblings like odoo_fp_list (lists) and odoo_fp_configure (configures), but no explicit differentiation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Description implies use for getting details of a specific fiscal position, but no explicit when-to-use or when-not-to-use guidance. No mention of alternatives or prerequisites.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

odoo_fp_listA

List fiscal positions with tax action map summary (l10n_bg_tax_admin). Shows position name, auto_apply, country, company, and action mapping count.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoFilter by name (ilike)
limitNo
company_idNoFilter by company ID
connectionNodefault
country_idNoFilter by country ID

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided. The description indicates a read operation but does not disclose any behavioral traits beyond listing. No mention of side effects, pagination, or ordering. Adequate but not detailed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence with no wasted words. It efficiently communicates the tool's purpose and output.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema, the description explains the return fields (name, auto_apply, country, company, action mapping count). However, it does not mention pagination or how the limit parameter affects results. Still reasonably complete for a simple list tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description mentions filtering capabilities but does not add significant meaning beyond the input schema. Schema coverage is 60% (3 of 5 parameters have descriptions), and the description does not elaborate on the missing ones or provide additional context.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'list' and the resource 'fiscal positions', and specifies the context 'l10n_bg_tax_admin' and what fields are returned. It is distinct from sibling tools like odoo_fp_configure, odoo_fp_details, etc.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

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 or when not to use it. The purpose is clear, but no context for selection among related tools is provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

odoo_fp_remove_actionC

Remove a tax action map entry from a fiscal position (l10n_bg_tax_admin).

ParametersJSON Schema
NameRequiredDescriptionDefault
action_idYesTax action map entry ID to remove
connectionNodefault

TDQS

C2.8/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description only says 'Remove' without disclosing side effects, reversibility, permissions, or return behavior. With no annotations provided, the burden falls entirely on the description, which is insufficient.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence with no fluff, conveying the core purpose efficiently and front-loading the key information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the presence of sibling fiscal position tools and no output schema, the description lacks context about what happens after removal, what a tax action map entry is, and how it relates to other operations. The information is insufficient for an agent to fully understand the tool's role.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 50%; action_id has a description but connection does not. The description does not add any additional meaning beyond the schema for the parameters, failing to compensate for the missing connection description.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it removes a tax action map entry from a fiscal position, referencing the module l10n_bg_tax_admin. The verb 'Remove' and the resource are explicit, distinguishing it from sibling tools like odoo_fp_list or odoo_fp_configure.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

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, and does not mention prerequisites or the context of a tax action map entry, leaving the agent unclear about appropriate usage.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

odoo_fp_typesA

Get available selection values for fiscal position configuration (l10n_bg_tax_admin). Returns move_types, bg_move_types, doc_types, and type_vat. Use as reference when calling odoo_fp_configure. Set live=true to fetch current values from Odoo instead of cached.

ParametersJSON Schema
NameRequiredDescriptionDefault
liveNoFetch from Odoo fields_get instead of cached values
connectionNodefault

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description discloses caching behavior (cached vs live) and implies a read-only operation. However, without annotations, it lacks explicit statements about safety (non-destructive), authentication requirements, or potential side effects. The information is adequate but not comprehensive.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise with two sentences that front-load the purpose and add valuable usage advice. Every word serves a purpose, and no unnecessary information is included.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema, the description usefully lists the four return types and explains caching behavior. It covers the tool's purpose, usage context, and parameter behavior (live). It lacks details on return structure or error handling, but for a simple 2-param tool with no required fields, it is largely complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema covers 2 parameters with 50% description coverage (live has a description, connection does not). The tool description explains the live parameter further and adds value by listing return types, but does not elaborate on the connection parameter. This provides moderate enhancement beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: getting available selection values for fiscal position configuration. It specifies the return types (move_types, bg_move_types, doc_types, type_vat) and differentiates itself from sibling tools like odoo_fp_configure by indicating it serves as a reference for configuration.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear usage guidance: use as reference when calling odoo_fp_configure, and set live=true for fresh values instead of cached. It implicitly tells when to use the tool (before configuration) but does not explicitly discuss when not to use it or provide alternative tools for similar purposes.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

odoo_get_field_translationsA

Read current translations for a translatable field on a record. For simple translate=True fields returns {lang: value}. For html_translate/xml_translate fields returns {lang: {term: value}}. Auto-detects the translate type via fields_get. Works on blog.post.content, blog.post.name, product.template.website_description, ir.ui.view.arch_db, any res.partner.name with translate=True, etc.

ParametersJSON Schema
NameRequiredDescriptionDefault
modelYes
res_idYesRecord ID
connectionNodefault
field_nameYes

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries full burden. It discloses that the tool auto-detects translate type via fields_get and returns language-keyed values in specific formats, which is transparent about its behavior. No side effects mentioned, but it's a read operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise with two sentences, front-loaded with the main purpose. Every sentence adds value without redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 4-parameter tool with no annotations and no output schema, the description explains return formats, auto-detection, and example fields. It is mostly complete, though it could mention error cases like non-translatable fields.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is low (25%), and the description only adds context for field_name (translatable) and gives examples. It does not explain connection or model meaning beyond basic names. The examples help but do not fully compensate for missing parameter descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool reads translations for a translatable field, distinguishing it from sibling write tools like odoo_translate_field. It includes specific verb 'Read' and resource 'translations for a translatable field on a record'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains when to use (to read translations) and provides examples of fields, but does not explicitly mention when not to use it or compare with alternatives like odoo_translate_context_aware.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

odoo_list_modelsC

List available Odoo models (ir.model). Optionally filter by name pattern.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
patternNoFilter by model name (e.g. 'sale', 'account')
connectionNodefault

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the burden falls on the description. It does not disclose that this is a read-only operation, whether authentication is required, if results are paginated, or what the limit parameter does behaviorally beyond the schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence, which is concise but too brief. While it has no fluff, it misses opportunities to add useful context within a compact structure.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema and no annotations, the description lacks completeness. It does not describe the return format (e.g., list of model names), pagination behavior, or any prerequisites. Users would need to infer tool behavior from the name alone.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 33% (only pattern has a description). The tool description adds minimal value: 'Optionally filter by name pattern' merely restates the pattern parameter. It does not explain 'connection' or 'limit', leaving parameters poorly documented.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it lists Odoo models (ir.model) with optional filtering by name. This uniquely identifies the tool's purpose among many sibling odoo_* tools like odoo_search, odoo_fields_get, etc.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description only notes optional filtering but provides no guidance on when to use this tool versus alternatives like odoo_search or odoo_read. No when-to-use or when-not-to-use context is given.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

odoo_list_translatable_fieldsA

List all translatable fields on an Odoo model. Returns per-field: translate type ('simple' for translate=True, 'html' for html_translate, 'xml' for xml_translate, 'callable' for other), field type, label, help. Use this to discover which fields on blog.post, product.template, website.page, res.partner, etc. can be translated.

ParametersJSON Schema
NameRequiredDescriptionDefault
modelYesModel name (e.g. 'blog.post', 'product.template')
connectionNodefault

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It discloses the output structure (translate type, field type, label, help) but does not explicitly state that it is read-only or mention potential side effects. The behavior as a listing tool is generally safe, but more explicit transparency would improve this score.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise sentences: first states purpose and output, second provides usage guidance. No redundant information, well-structured for quick comprehension.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the simple input schema (2 params, 1 required) and no output schema, the description adequately explains what the tool does and returns. It could mention error handling or non-existent models, but for its complexity it is fairly complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 50% (only 'model' described). The description adds value by explaining the model parameter context (e.g., 'blog.post') and the overall purpose, but does not add information for the 'connection' parameter. It partially compensates for the schema gap but not fully.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool lists translatable fields on an Odoo model, specifies the per-field return values (translate type, field type, label, help), and provides model examples, distinguishing it from sibling tools like odoo_fields_get (all fields) and odoo_get_field_translations (existing translations).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly says 'Use this to discover which fields...can be translated,' giving clear usage guidance with concrete model examples. It does not mention when not to use or alternative tools, but the context of sibling tools provides differentiation.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

odoo_message_postA

Post a message or internal note on any Odoo record (chatter). Body supports Markdown formatting (headers, bold, italic, tables, code blocks) — automatically converted to HTML. Use message_type='note' for internal notes (employees only) or 'comment' for public messages (visible to followers).

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyYesMessage body in Markdown format
modelYesModel name (e.g. 'sale.order')
res_idYesRecord ID to post on
subjectNoMessage subject (optional)
connectionNodefault
partner_idsNoPartner IDs to notify (optional)
message_typeNonote = internal (employees only), comment = public (all followers)note
attachment_idsNoExisting ir.attachment IDs to attach (optional)

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Discloses key behavioral traits: Markdown support with conversion to HTML, visibility differences between message_type values. No annotations provided, so description carries full burden and does it well.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with main purpose. No redundant information. Every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Sufficient for an 8-parameter tool without output schema. Covers purpose, key parameters, and behavioral aspects. Lacks details on return value, but not essential for invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Adds meaning beyond schema for body (Markdown formatting) and message_type (note vs. comment semantics). Schema already describes most params (88% coverage), so description adds value.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states the action (post) and resource (message/internal note on any Odoo record chat) with specific verb and resource. Differentiates from siblings like odoo_create/odoo_write by focusing on chatter.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly describes when to use the tool (posting on chatter) and distinguishes between note (internal) and comment (public). Lacks explicit when-not or alternative tools, but context from siblings makes it clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

odoo_module_infoA

Get detailed information about an Odoo module: Odoo RPC state + filesystem locations (OCA, EE, custom repos). Shows where the module physically exists, its manifest, dependencies, and installation status.

ParametersJSON Schema
NameRequiredDescriptionDefault
moduleYesTechnical module name (e.g. 'account_asset')
connectionNodefault

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must disclose behavioral traits. It mentions Odoo RPC state and filesystem locations, but does not explicitly state that a connection (via odoo_connect) is required, or the error behavior if the module does not exist. The safety profile (read-only vs. destructive) is not clarified.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, front-loading the main action and then elaborating on the returned information. Every sentence adds value with no redundant or vague language.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema, the description hints at return fields (manifest, dependencies, etc.) but omits structure, error conditions (e.g., module not found), or relationship to connection state. For a detailed info tool, this is adequate but lacks completeness.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 50% ( 'module' parameter has a description, 'connection' does not). The overall description does not add extra meaning to either parameter beyond the schema, such as explaining the 'default' connection value. It does not compensate for the missing parameter description.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'Get detailed information about an Odoo module' and specifies the exact information retrieved (RPC state, filesystem locations, manifest, dependencies, installation status). It distinguishes itself from sibling tools like odoo_cert_info and odoo_read by focusing on module-specific metadata.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage when module details are needed but provides no explicit guidance on when to use this tool versus alternatives (e.g., odoo_read for generic records) or prerequisites (e.g., established connection). No 'when not to use' or alternative tool recommendations are given.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

odoo_readB

Read specific records by IDs.

ParametersJSON Schema
NameRequiredDescriptionDefault
idsYesRecord IDs to read
modelYes
fieldsNoFields to return (empty = all)
connectionNodefault

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries full burden but only states the generic 'Read' action. It does not disclose behavioral traits such as required authentication, error handling on missing IDs, or read-only nature beyond the verb.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise at 5 words, with no wasted or redundant text. It front-loads the core purpose effectively.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool has 4 parameters, no output schema, and no annotations. The description omits crucial details like return value structure, error behavior, and the role of the 'model' parameter, making it incomplete for safe invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 50% (ids and fields have descriptions, model and connection do not). The description adds no parameter-specific details and does not compensate for the undocumented parameters like 'model' or 'connection'.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description 'Read specific records by IDs' clearly states the verb (read), resource (records), and method (by IDs). It effectively differentiates from sibling tools like odoo_search (search with filters) and odoo_search_read (search and read combined).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

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 odoo_search_read or odoo_search. The description does not mention context, prerequisites, or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

odoo_record_backupA

Read full field snapshot of one or more records (any model) and return as a JSON structure. Use BEFORE destructive operations to capture state for possible rollback. Returns a dict with metadata (date, connection alias, model, ids, field count) plus the records themselves. Does NOT write to disk — caller decides what to do with the JSON.

ParametersJSON Schema
NameRequiredDescriptionDefault
idsYesRecord IDs to snapshot
modelYesOdoo model (e.g. 'mrp.production')
connectionNodefault
include_relatedNoOptional list of related queries. Each: {model, domain, fields}. Example: [{model: 'stock.move', domain: [['raw_material_production_id', 'in', <mo_ids>]], fields: [...]}] (use placeholders manually).

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so description carries full burden. It discloses read-only behavior (no disk write, returns JSON) and metadata structure. However, it could be more explicit about being non-destructive and safe. Adequate but not exhaustive.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, front-loaded with purpose, then usage, then behavior. No redundancy, efficient and clear. Each sentence adds distinct value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema, description explains return value (dict with metadata and records). Covers key behavior (not writing to disk). Missing error handling or rate limits, but sufficient for a backup tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 75%, and description adds value beyond schema, especially for 'include_related' with example and placeholder clarification. It explains the purpose of each parameter and how to use them, improving agent understanding.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it reads a full field snapshot of records from any model and returns JSON. It distinguishes from siblings like odoo_read by specifying the snapshot/backup purpose and metadata return. Verb (read/snapshot) and resource (records) are specific.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly says 'Use BEFORE destructive operations to capture state for possible rollback.' Provides clear context but does not list alternative tools or explicitly state when not to use.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

odoo_refreshA

Send a refresh notification to the user's Odoo browser tab. Call this after creating, updating, or deleting records so the user's list/form/kanban view reloads automatically. Requires l10n_bg_claude_terminal module installed on the Odoo instance.

ParametersJSON Schema
NameRequiredDescriptionDefault
modelNoModel name to refresh (e.g. 'sale.order'). Empty = refresh any view.
res_idNoSpecific record ID (0 = refresh all records in the view).
connectionNodefault

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. It discloses the main effect (send refresh notification) and the module requirement. However, it does not detail potential failure modes, rate limits, or what happens if the module is absent. The behavioral disclosure is adequate but not exhaustive.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences long, front-loads the action, and contains no superfluous information. Every sentence serves a purpose: stating the action and the prerequisite.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's low complexity, no output schema, and no annotations, the description provides adequate information: what it does, when to use it, and a prerequisite. It could mention that the user must have the Odoo tab open, but overall it is sufficiently complete for an agent to use correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema already provides descriptions for two of three parameters (model, res_id), giving 67% coverage. The description does not add new semantics beyond what the schema offers; it repeats or implies the same. The 'connection' parameter lacks description in both schema and description, but the default value hints its purpose. Overall, no significant value added beyond schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Send a refresh notification... after creating, updating, or deleting records so the user's view reloads automatically.' This specifies the verb (send refresh), resource (user's Odoo browser tab), and context (post-mutation). It effectively distinguishes from sibling tools, none of which offer similar refresh functionality.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly states when to call: 'after creating, updating, or deleting records.' It also mentions a prerequisite: requires the 'l10n_bg_claude_terminal' module. While it does not explicitly exclude other scenarios or name alternatives, the guidance is clear and helpful for an agent.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

odoo_reportC

Generate a PDF report for records. Returns base64-encoded PDF.

ParametersJSON Schema
NameRequiredDescriptionDefault
idsYes
connectionNodefault
report_nameYesReport technical name (e.g. 'account.report_invoice')

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided. The description only states the tool generates a PDF and returns base64, without disclosing side effects, permissions, or safety implications. This is insufficient for a tool that likely requires read access to records.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise sentences, no fluff. Efficiently communicates the core purpose and return format.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description is minimal. Given three parameters (two required) and no output schema, it lacks details on how to use the returned PDF, what report names are valid, or how the 'connection' parameter influences behavior. Basic but acceptable for a straightforward tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 33% (only 'report_name' has a description). The tool description does not add meaning for 'ids' or 'connection'. With low coverage, the description should compensate but fails to clarify that 'ids' are record IDs or how 'connection' affects operation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool generates a PDF report for records and returns base64-encoded PDF. It distinguishes from some siblings by specifying the return format, but does not explicitly differentiate from similar tools like 'odoo_web_report'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

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. The description lacks context about prerequisites, suitable report types, or exclusion criteria.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

odoo_search_countC

Count records matching a domain.

ParametersJSON Schema
NameRequiredDescriptionDefault
modelYes
domainNo
connectionNodefault

TDQS

C2.8/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description must cover behavioral traits. It only states the basic action. It does not disclose that the tool is read-only, whether it has performance implications, or that it returns a single integer. The description lacks important behavioral context beyond the core function.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence, directly stating the tool's purpose with no extraneous words. It is well-structured and front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the Odoo context and numerous sibling tools, the description is incomplete. It does not explain the return value (a count number), the expected domain format, or how it differs from similar tools. Without an output schema, the description should at least clarify what the tool returns, but it does not.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description should explain parameter meanings. While 'domain' is mentioned in the description, there is no explanation of what a domain is (e.g., Odoo domain syntax) or details about 'model' and 'connection'. The description adds minimal value over the parameter names alone.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action: count records based on a domain. It is specific and uses a verb+resource format. However, it does not distinguish from sibling tools like odoo_search or odoo_search_read, which might perform similar but different operations.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

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 that this is purely for counting, while odoo_search retrieves records, or that it should be used when only the count is needed. No when-not-to-use or context is given.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

odoo_search_readC

Search and read records in one call. Most common operation.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
modelYes
orderNo
domainNo
fieldsNo
offsetNo
connectionNodefault

TDQS

C2.6/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are present, so the description must fully explain behavior. It only states 'Search and read records in one call', omitting details like default limit/offset, pagination, error handling, or authentication requirements. This is insufficient for safe invocation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is very concise at two sentences, which is efficient, but it sacrifices necessary detail. It earns its place with minimal text but does not adequately inform the agent.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 7 parameters, no output schema, and many sibling tools, the description is too brief. It does not explain the domain filter syntax, default field selection, ordering, or how results are returned, leaving gaps for effective use.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, meaning parameters like 'domain', 'fields', and 'order' have no explanations. The description adds no parameter-level information, leaving the agent to infer meaning from schema names alone, which is risky for correct usage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool does 'Search and read records in one call', which indicates its combined functionality. However, it does not explicitly differentiate from sibling tools like odoo_search and odoo_read, though the combination is implied.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

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 odoo_search, odoo_read, or other record-operating tools. The description lacks any context about prerequisites, when-not-to-use, or alternative approaches.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

odoo_stock_close_unaccounted_valueA

Create an Inventory Valuation journal entry (Dr stock valuation / Cr GRNI/stock-input) for a stocked movement that was valued but not accounted (account_move_id=false), then bind the new account.move back to the record. Version-aware: works on stock.valuation.layer (Odoo 14-18) OR stock.move (Odoo 19+). GRNI account auto-detection order: (a) v14-18 → category.property_stock_account_input_categ_id; (b) v19 with l10n_bg_stock_account → category.l10n_bg_stock_input_account_id; (c) v19 vanilla → category.account_stock_variation_id (fallback). User can override via grni_account_id parameter. Refuses if record is already accounted or category is not real_time. ALWAYS use dry_run=true first.

ParametersJSON Schema
NameRequiredDescriptionDefault
dateNoJournal entry date (ISO). Defaults to record's date/create_date.
dry_runNoIf true, only preview. Set false to execute.
record_idYesID of stock.valuation.layer (v14-18) or stock.move (v19+)
connectionNodefault
source_modelNoSource model override; 'auto' detects from Odoo version.auto
grni_account_idNoOverride GRNI/stock-input account. If omitted, auto-detected from category.

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description fully discloses all behavioral traits: creates and binds a journal entry, version-aware model detection, GRNI account auto-detection with fallback logic, override parameter, refusal conditions, and the dry_run requirement. This is comprehensive.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense but well-structured, with each sentence providing essential information. It is appropriately sized for the tool's complexity and avoids unnecessary words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (6 parameters, version-awareness, auto-detection, refusal conditions, dry_run), the description is quite complete. A minor gap is not specifying what the tool returns (e.g., the created account move ID), but this is acceptable.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 83%, already high. The description adds significant context beyond the schema: explains auto-detection for source_model, GRNI account override purpose, date default, and the dry_run default. This adds meaningful value.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: creating an inventory valuation journal entry for unaccounted valued movements, with version-aware behavior and GRNI account auto-detection. It distinguishes itself from sibling tools by its specific function.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description advises using dry_run=true first, explains when the tool refuses (already accounted or non-real-time category), and implicitly guides usage by detailing auto-detection and overrides. It does not explicitly name alternatives, but no similar stock accounting tools exist among siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

odoo_stock_initial_deleteA

Delete wrong opening stock balances — cascade-removes stock.move (is_inventory=TRUE) records, their stock.move.line, and (v14-v18) stock.valuation.layer; then zeros out stock.quant on affected (product, location, lot). Bypasses Odoo's ORM guard 'You can not delete product moves if the picking is done' via raw SQL in an ir.actions.server + env.cr.commit(). Version-aware: v14-v18 DELETEs SVL→SML→SM; v19 DELETEs SML→SM (SVL doesn't exist). PRE-FLIGHT: refuses if any affected SVL/stock.move has account_move_id set (orphan journal entries would remain). Caller must reverse those first. ALWAYS writes a full JSON backup to /backups// BEFORE any delete. ALWAYS use dry_run=true first to see the impact scope.

ParametersJSON Schema
NameRequiredDescriptionDefault
tzYesIANA timezone of the caller. Used to interpret date_from/date_to (start_of_day / end_of_day in this tz → UTC).
date_toNoOptional YYYY-MM-DD, end-of-day in tz. Filters stock.move.date <= UTC(date_to 23:59:59 tz).
dry_runNoIf true, only preview + backup preview. Set false to execute (backup is still written).
date_fromNoOptional YYYY-MM-DD, start-of-day in tz. Filters stock.move.date >= UTC(date_from 00:00 tz).
company_idYesCompany scope — only records with this company_id are touched
connectionNodefault
location_idsNoOptional list of stock.location IDs to filter by (either src or dst). If omitted, all locations in company.

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries full burden and excels by detailing cascade behavior, version differences, pre-flight checks, backup writing, and raw SQL usage. It fully discloses the tool's behavioral traits.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense but well-organized with key points. Slightly verbose but every sentence adds value, earning a high score.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (cascade deletes, version awareness, backup, pre-flight), the description is complete and covers all necessary context for safe and correct usage.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 86%, so the input schema already describes parameters well. The description does not add significant parameter-specific meaning beyond reinforcing dry_run usage, meeting the baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it deletes wrong opening stock balances with specific details on cascade removal, version awareness, and bypassing ORM guards. It is distinguished from siblings like odoo_stock_initial_import and odoo_stock_mo_delete_draft by its specific purpose and actions.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear usage context: always use dry_run=true first, pre-flight checks, and required reversal of account_move_id. It does not explicitly name alternatives but the context implies when to use this tool (wrong opening stock balances).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

odoo_stock_initial_importA

Import opening stock balances (initial inventory) via direct SQL INSERT, bypassing ORM overrides (e.g. custom modules that null out stock.move.name). Version-aware: v14-v18 creates stock.move + stock.move.line + stock.valuation.layer + stock.quant; v19 creates stock.move (with value/price_unit/remaining_qty/remaining_value/is_valued=true/is_in=true fields — SVL does not exist) + stock.move.line + stock.quant. All datetimes anchored at 23:59:59 in the caller's timezone, converted to UTC before INSERT. Writes a JSON snapshot to /backups// before execution. ALWAYS use dry_run=true first to preview the plan and catch category/location/product errors. For real_time valuation, follow up with odoo_stock_initial_opening_journal to book the account entry (SQL INSERT does NOT create account.move).

ParametersJSON Schema
NameRequiredDescriptionDefault
tzYesIANA timezone of the caller (e.g. 'Europe/Sofia', 'UTC'). 23:59:59 in this tz is converted to UTC for INSERT.
itemsYesOpening balance rows. One entry per (product, location, lot).
dry_runNoIf true, only preview + pre-flight checks. Set false to execute.
company_idYesTarget company for the opening balance
connectionNodefault
accounting_dateYesYYYY-MM-DD — accounting date (usually last day of prior fiscal year, e.g. '2025-12-31')
reference_prefixNoPrefix for stock.move name/reference. Final form: '<prefix> [Accounted on YYYY-MM-DD]'.Product Quantity Updated

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Discloses version-specific behavior (v14-18 vs v19), timezone handling with UTC conversion, backup creation, and the fact that it does NOT create account moves. All behavioral aspects are clearly explained.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Dense single paragraph effectively covers all key points without unnecessary verbosity. Could benefit from bullet points for readability, but remains clear and front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 7-parameter import tool with no output schema, the description thoroughly explains the operation, prerequisites, version differences, and post-import steps, making it complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 86% schema coverage, description adds meaningful context for parameters like accounting_date format, tz, items structure, and reference_prefix, enhancing understanding beyond schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states it imports opening stock balances via direct SQL INSERT, bypassing ORM overrides. It distinguishes from siblings like odoo_stock_initial_delete and odoo_stock_initial_opening_journal.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly instructs to use dry_run=true first, and for real_time valuation to follow up with odoo_stock_initial_opening_journal. Provides context for when to use this tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

odoo_stock_initial_opening_journalA

Book the opening-balance journal entry for a previous SQL-inserted initial stock (complements odoo_stock_initial_import — SVL/stock.move written via raw SQL do NOT auto-create account.move even for real_time valuation). Creates ONE account.move (MISC journal, state=posted) with: DR lines grouped by category.property_stock_valuation_account_id (e.g. 302 Materials, 303 Products); CR contra account (default: code '122000' Retained earnings from prior years). Version-aware: v14-v18 reads stock.valuation.layer for the date; v19 reads stock.move (is_inventory=true, is_valued=true) for the same date — totals the 'value' column. DUPLICATE GUARD: before create, scans account.move.line for the same accounts on the same date — if any posted lines found, refuses and returns them (Alpinter lesson: comprehensive opening entries often already include the stock lines). ALWAYS use dry_run=true first.

ParametersJSON Schema
NameRequiredDescriptionDefault
tzYesIANA timezone of the caller (used to bracket the date for UTC query).
refNoaccount.move.ref value. Default: 'Opening balance initial stock <date>'.
dry_runNoIf true, only preview the lines + duplicate check. Set false to create + post.
company_idYes
connectionNodefault
journal_idNoJournal for the entry. If omitted, searches for first general-type journal (MISC) in this company.
accounting_dateYesYYYY-MM-DD — date of the opening balance (matches the SQL-inserted stock records)
contra_account_idNoContra account (CR side). If omitted, searches for account with code '122000' in this company.
skip_if_exists_on_dateNoIf true, refuse when posted account.move.line exist on accounting_date for any of the stock valuation accounts.

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Discloses key behaviors: creates one posted account.move, version-aware handling, duplicate guard logic. Provides ample detail for a mutation tool without annotations. Could mention error handling or permissions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with purpose, information-dense but concise. Could benefit from bullet points for readability, but every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers complex behavior (version-aware, duplicate guard) and parameter usage. No output schema, so missing full return value specification, but the description mentions returning duplicates.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Adds meaningful context beyond schema: explains purpose of accounting_date, default contra account, dry_run effect. Schema coverage is 78%, so baseline 3; description adds value.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Explicitly states it 'books the opening-balance journal entry for a previous SQL-inserted initial stock' and distinguishes from sibling 'odoo_stock_initial_import'. Clear verb+resource+scope.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear context: complements initial import, always use dry_run first. Also describes duplicate guard behavior. However, does not explicitly state when not to use it or mention alternative tools beyond the sibling.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

odoo_stock_mo_delete_draftA

Safely DELETE a draft or cancelled mrp.production with cascade (raw stock.moves, finished stock.moves, procurement.group if orphaned). Bypasses Odoo's ORM 'cannot be deleted' constraint by forcing state='cancel' via raw SQL, then using DELETE statements inside an ir.actions.server. Refuses if MO has any SVL, stock.move with quantity > 0, or an already-done state. ALWAYS use dry_run=true first.

ParametersJSON Schema
NameRequiredDescriptionDefault
mo_idYesmrp.production ID to delete
dry_runNoIf true, only preview (no writes).
connectionNodefault

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Describes bypassing Odoo's ORM constraints via raw SQL and ir.actions.server. Details cascade deletion of stock.moves and procurement.group. With no annotations, this description fully informs about destructive behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Concise single paragraph, every sentence adds value. No redundancy, front-loaded with action and key conditions.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers behavior, preconditions, and safety advice. Lacks output/return value description, though for a delete tool the action itself is primary. Reasonably complete given the complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema covers 2 of 3 params with descriptions; connection lacks description. The description adds value by emphasizing dry_run usage, but could be more explicit about connection parameter meaning.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states the verb (DELETE) and specific resource (draft or cancelled mrp.production) with cascade deletion details. Distinguishes from generic siblings like odoo_unlink.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly advises to use dry_run=true first, and lists refusal conditions (has SVL, stock.move with qty>0, already-done state). Provides clear when-to and when-not-to use.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

odoo_stock_product_flip_to_storableA

Flip a product from consumable (is_storable=false) to storable (is_storable=true) when the product ALREADY has stock.move records. Bypasses Odoo's ORM constraint 'You can not change the inventory tracking of a product that was already used' via raw SQL in an ir.actions.server. Then inserts a stock.quant DIRECTLY (not through an inventory adjustment wizard) so no duplicate SVL is created — existing SVLs stay intact. Use when a GRN/bill was recorded for a product that was mistakenly set as consu. ALWAYS use dry_run=true first to preview impact. Returns full pre/post snapshot.

ParametersJSON Schema
NameRequiredDescriptionDefault
dry_runNoIf true, only preview actions (no writes). Set false to execute.
in_dateYesISO datetime for stock.quant.in_date (e.g. '2026-04-20 14:40:34'). Should match GRN date.
quantityYesQuantity to set as on-hand (must match existing SVL remaining_qty for consistency)
company_idYesCompany ID — scope of the operation
connectionNodefault
product_idYesproduct.product ID to flip
location_idYesstock.location ID where the quant will be created (usually GRN destination)

TDQS

A4.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Describes key behaviors: bypasses ORM constraint via raw SQL, inserts stock.quant directly without duplicate SVL, existing SVLs stay intact, returns full pre/post snapshot. Since no annotations exist, description carries full burden and covers critical traits, though it could detail the snapshot structure or error conditions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a focused paragraph that front-loads purpose, then explains mechanism, use case, and precaution. No unnecessary words; every sentence adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity, detailed parameters, and lack of output schema, the description sufficiently covers purpose, behavior, usage, parameters, and return value. It is complete for an agent to select and invoke correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is high (86%), and description adds extra context for parameters like location_id ('usually GRN destination'), quantity ('must match existing SVL remaining_qty'), and in_date ('Should match GRN date'). This goes beyond the schema definitions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Flip') and resource ('product from consumable to storable'), and distinguishes from siblings by detailing a unique operation (bypassing ORM constraint, direct quant insertion). No sibling tool performs this action.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit usage context: 'Use when a GRN/bill was recorded for a product that was mistakenly set as consu.' Includes a mandatory precaution: 'ALWAYS use dry_run=true first to preview impact.' This gives clear guidance on when and how to use.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

odoo_translate_context_awareA

Translate Odoo records using Claude with rich domain context for natural, fluent results (not literal). AUTO-DETECTS field kind and handles both: (1) simple char/text fields (e.g. ir.ui.menu.name, account.account.name) → batch translate via update_field_translations; (2) HTML/XML fields (e.g. ir.ui.view.arch_db, website.page, product.template.website_description) → extracts canonical terms via get_field_translations, translates each term preserving inline HTML tags (, , ...), writes back in terms mode. Context to LLM: Odoo model, parent chain for menus, existing translations, user-supplied domain hint, field kind (simple/html/xml). Requires Odoo 16+. Requires ANTHROPIC_API_KEY env var (per-tenant override: ANTHROPIC_API_KEY_). Recommended models: 'claude-haiku-4-5' (menu labels, fast), 'claude-sonnet-4-6' (balanced, website pages), 'claude-opus-4-7' (complex legal/accounting terminology). ALWAYS use dry_run=true first to review proposals.

ParametersJSON Schema
NameRequiredDescriptionDefault
idsYesRecord IDs to translate
modelYesOdoo model (e.g. 'ir.ui.menu', 'account.account', 'product.template')
dry_runNoIf true, only preview (no writes).
connectionNodefault
max_tokensNo
field_namesNoTranslatable fields (default: ['name'])
source_langNoSource language (usually 'en_US')en_US
target_langYesTarget language code (e.g. 'bg_BG', 'de_DE')
claude_modelNoClaude model IDclaude-haiku-4-5
context_hintNoFree-form domain hint ('accounting terms', 'manufacturing', 'Bulgarian NRA terminology', etc.)

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so description carries full burden. Explains auto-detection, translation strategies, context sent to LLM, requirements (Odoo 16+, API key), and recommended models. Missing details on error handling, permissions, 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Efficiently packed with essential information in a structured, front-loaded format. Every sentence adds value without redundancy. The section on field kinds and model recommendations is well-organized.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a complex tool with 10 parameters and no output schema, the description is thorough. It covers the dual-mode behavior, context provisioning, and prerequisites. Missing explicit statement about return format or error scenarios, but overall sufficient.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 80%, but description adds value by explaining the field kind auto-detection and the two processing modes. Provides context on how parameters like context_hint influence translation, which goes beyond schema descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Specifically describes translation of Odoo records with rich domain context, auto-detects field kind, and distinguishes two modes (simple vs HTML/XML). Clearly differentiates from sibling tools like odoo_translate_field and odoo_translate_html.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides clear guidelines: use for context-aware translation, recommends models based on complexity, advises dry_run first. Lacks explicit exclusions or direct comparison with siblings, but the context hints and recommendations are helpful.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

odoo_translate_fieldA

Write translations for a simple translate=True field (Char/Text/Selection). Use for: blog.post.name/subtitle/teaser, product.template.name, res.partner.name, account.account.tag.name — any short/plain field. Format: translations = {lang_code: value, ...}. Pass value=null/'' to remove a language's translation (falls back to source_lang). Errors if field.translate is not True (use odoo_translate_html for HTML). Auto-detects Odoo version: v16+ uses update_field_translations() native API, older falls back to ir.translation.

ParametersJSON Schema
NameRequiredDescriptionDefault
modelYes
res_idYes
dry_runNoIf true, only validates and reports what would change without writing
connectionNodefault
field_nameYes
source_langNoSource language for fallback (default 'en_US')en_US
translationsYesMap of language code to new value: {'en_US': 'Name', 'bg_BG': 'Име', 'de_DE': 'Name'}. Supports null/empty to clear.
mark_identical_as_translatedNoWhen True (default), a value that equals the source gets a U+200B (zero-width-space) prefix so Odoo keeps it as an explicit 'translated, kept identical' entry (avoids the 'untranslated' flag in the website editor).

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries full burden. It discloses write operation, version auto-detection, fallback handling, dry_run mode, and mark_identical_as_translated behavior. Slightly lacks permissions or side-effect details.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Description is concise with multiple sentences each adding information; front-loaded with purpose and examples. Could be more structured but efficient for its density.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 8 parameters and no output schema, the description covers key aspects: usage, error, version, dry_run, and mark_identical. Missing return format and partial failure behavior, but sufficient for an action tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 50%, and the description adds value by explaining the translations format and null handling, but does not explain 'connection', 'model', 'res_id', or 'field_name' beyond implicit context from examples.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool writes translations for simple translate=True fields, lists example fields like blog.post.name and product.template.name, and distinguishes from odoo_translate_html by noting errors for non-translate fields.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly tells when to use (simple translate=True fields) and when not (use odoo_translate_html for HTML), includes examples of valid fields, and explains how to remove translations with null/''.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

odoo_translate_htmlA

Write/read translations for translate=html_translate / translate=xml_translate fields. Use for: blog.post.content, product.template.website_description, hr.job.description, ir.ui.view.arch_db (covers website.page), website.menu.mega_menu_content, event.track.description, forum.forum.guidelines, res.partner.website_description. Three modes: (a) mode='extract' — READ-ONLY. translations arg ignored. Returns the list of translatable terms that Odoo's html_translate engine extracts from source_lang. Each term is an HTML-serialised translatable block (preserves inline tags like ). Use this to see what must be translated before writing. (b) mode='terms' — translations = {lang: {source_term: translated_term, ...}} Direct term map. Terms must match exactly those from mode='extract'. Calls update_field_translations() with JSONB payload. (c) mode='replace' — translations = {lang: full_html_string}. The tool writes each language's HTML through Odoo's native ORM with {'lang': } context. Odoo's html_translate engine aligns terms automatically — no manual term extraction required. This is what Odoo's Website editor does internally. Errors if field.translate is not callable. Requires Odoo 16+.

ParametersJSON Schema
NameRequiredDescriptionDefault
modeNoterms
modelYes
res_idYes
dry_runNo
connectionNodefault
field_nameYes
source_langNoen_US
translationsNoEither {lang: {term: translation}} (mode='terms') or {lang: 'full html'} (mode='replace'). Ignored for mode='extract'.
mark_identical_as_translatedNoWhen True (default), terms whose target-lang value equals the source get prefixed with U+200B (zero-width-space) so Odoo stores them as explicit 'translated, kept identical' entries. Otherwise Odoo dedups them as 'untranslated', which flags technical terms (URLs, brand names, code) as needing translation in the website editor.

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description fully discloses behavioral traits: extract is read-only, terms and replace are write modes, replace uses ORM with lang context, dry_run behavior, and mark_identical_as_translated handling. It also notes Odoo 16+ requirement and error conditions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is fairly long but well-structured with a clear purpose statement, enumerated modes, and parameter explanations. It avoids redundancy and each section adds value, though it could be slightly more concise.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (3 modes, 9 parameters, no output schema), the description is thorough: it covers mode behavior, parameter formats, Odoo version requirement, field examples, and edge cases like dry_run and mark_identical_as_translated. No gaps remain for effective use.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has low coverage (22%), but the description adds substantial meaning for key parameters like translations (format for each mode) and mark_identical_as_translated (explains why to use it). Other parameters like model, res_id, field_name are standard and well-defined by context.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool writes/reads translations for Odoo's html_translate/xml_translate fields, lists specific field examples, and details three distinct modes. It distinguishes itself from sibling tools like odoo_translate_field by focusing on HTML-specific translation handling.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly explains when to use each mode (extract for preview, terms for term-by-term mapping, replace for full HTML rewrite like Odoo's editor). It mentions errors for non-callable fields and Odoo version requirement but does not explicitly compare to sibling tools like odoo_translate_context_aware, leaving some implicit guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

odoo_versionC

Get Odoo server version info.

ParametersJSON Schema
NameRequiredDescriptionDefault
connectionNodefault

TDQS

C2.8/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description lacks any behavioral disclosure beyond the basic action. With no annotations present, it does not specify whether the operation is read-only, safe, or has any side effects. The minimal text adds no transparency beyond the name.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is very concise at one sentence. However, it could be restructured to include more useful context without increasing length significantly, such as what the output contains.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the lack of output schema and annotations, the description is too sparse. It does not specify the return format (e.g., version string, object) or any usage nuances, making it incomplete for an agent to fully understand the tool's behavior.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

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 the 'connection' parameter or its default value. The agent receives no semantic help for this optional but potentially important parameter.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it retrieves Odoo server version info, with a specific verb ('Get') and resource. It is distinct from sibling tools, which are focused on other operations like data manipulation or authentication.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

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 preconditions, selection criteria, or exclusion cases, leaving the agent to infer that it is simply for fetching version info.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

odoo_web_callB

Call any Odoo model method via web session (JSON-RPC /web/dataset/call_kw). Works like odoo_execute but uses cookie session instead of XML-RPC.

ParametersJSON Schema
NameRequiredDescriptionDefault
argsNo
modelYesModel name
kwargsNo
methodYesMethod name
connectionNodefault

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided. Description lacks disclosure of side effects, authentication needs, rate limits, or error behavior. Only mentions protocol and session type.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise sentences with no redundancy. Could benefit from structure but effective for quick understanding.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Generic tool with no output schema, no return value description, and missing parameter details. Inadequate for a flexible, potentially complex tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema only describes 'model' and 'method'. Description adds no details on 'args', 'kwargs', or 'connection'. With 40% coverage, description fails to compensate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clear verb 'Call any Odoo model method' and resource 'model method via web session'. Differentiates from sibling 'odoo_execute' by specifying cookie session vs XML-RPC.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Mentions similarity to odoo_execute but with cookie session, implying usage context. No explicit when/not-to-use or prerequisites.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

odoo_web_exportC

Export records to structured data via web session (Odoo export_data).

ParametersJSON Schema
NameRequiredDescriptionDefault
modelYesModel name
domainNo
fieldsYesField paths (e.g. 'partner_id/name')
connectionNodefault
import_compatNo

TDQS

C2.7/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must carry the full burden. It does not disclose whether the operation is read-only, requires permissions, or triggers a download. Minimal behavioral info.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single concise sentence with no wasted words. However, it may be too brief for the tool's complexity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 5 parameters, no output schema, and no annotations, the description is too incomplete. It does not explain return value, export format, or any side effects.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 40%, and the description adds no additional meaning beyond the schema. Key parameters like connection, domain, and import_compat are not explained in the description.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it exports records to structured data via web session, using the Odoo export_data method. It distinguishes from sibling read/report tools, but lacks specificity on export format.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

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 like odoo_read, odoo_report, or public export tools. No exclusion criteria or context provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

odoo_web_loginA

Login to Odoo web interface with user/password. Creates a persistent cookie session for accessing web controllers, exports, reports, and any frontend URL. Session is reused until logout or expiry.

ParametersJSON Schema
NameRequiredDescriptionDefault
dbNoDatabase (default: from connection)
urlNoOdoo URL (default: from connection)
loginNoUsername/email
passwordNoPassword or API key
connectionNodefault

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries full burden. It discloses creation of a persistent cookie session, reuse, and lifecycle (until logout or expiry). It does not mention security considerations like credential handling, but covers key behavioral traits.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, each conveying essential information: action, session benefits, and reuse behavior. No wasted words, well-structured and easy to parse.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description explains input and behavior but does not describe the output (e.g., success/failure, session token) or error conditions. Given no output schema, this leaves the agent guessing about return values. Adequate but with clear gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 80% (4 of 5 parameters have descriptions). The description adds little beyond stating 'user/password' and does not provide additional details for parameters like connection, url, or db. Baseline 3 is appropriate as schema does most of the work.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool logs into the Odoo web interface with user/password and creates a persistent cookie session. It differentiates from sibling tools like odoo_connect and odoo_web_logout by specifying that this session is for accessing web controllers, exports, reports, and frontend URLs.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for scenarios requiring persistent web access to Odoo, and mentions session reuse until logout/expiry. However, it does not explicitly state when to use this tool versus alternatives like odoo_connect, 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.

odoo_web_logoutC

Destroy web session and logout.

ParametersJSON Schema
NameRequiredDescriptionDefault
connectionNodefault

TDQS

C2.7/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description must disclose behavioral traits. It only states 'Destroy web session and logout', implying a destructive action, but fails to mention side effects, return values, or whether an active session is required. This is insufficient for safe invocation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise (4 words), which could be efficient, but it sacrifices necessary detail. It is not front-loaded with critical information beyond the basic action.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has one parameter, no output schema, and no annotations, the description is insufficient. It does not explain the parameter, the expected state before/after logout, or how it relates to sibling tools like odoo_web_login.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The sole parameter 'connection' is not described at all in the description, and the input schema has no description. The 0% schema description coverage compounds the lack of clarity. Users cannot infer what 'connection' refers to or its valid values.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description explicitly states the tool's action ('Destroy web session and logout'). It uses a specific verb and resource, clearly distinguishing it from siblings like odoo_web_login or odoo_connect.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

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. There is no mention of prerequisites, such as requiring an active session, or when to prefer this over odoo_disconnect or other session management tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

odoo_web_readB

Search and read records via web session (frontend web_search_read format). Supports field specification, domain, limit, offset, order.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
modelYesModel name
orderNo
domainNo
fieldsYes
offsetNo
connectionNodefault

TDQS

B3.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the burden. It indicates a read operation (search and read) and lists supported features (field specification, domain, limit, offset, order), but omits details like authentication requirements, performance implications, or response format.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise (one sentence) and front-loaded with the primary purpose. It efficiently conveys core functionality without fluff, though a slightly more structured format could improve readability.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 7 parameters, no output schema, and low schema coverage, the description is incomplete. It does not explain the 'connection' parameter, return format, or how this tool differs from similar siblings like odoo_search_read.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is low (14%), so the description should compensate. It mentions 'field specification, domain, limit, offset, order', which maps to some parameters, but adds no format or usage details beyond the schema. The 'connection' parameter is not addressed.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Search and read records via web session' with specific verb and resource. However, it does not differentiate from the sibling tool 'odoo_search_read', which likely has similar functionality.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

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 alternatives like odoo_read, odoo_search, or odoo_search_read. The agent has no basis for choosing this tool over others.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

odoo_web_reportC

Download PDF report via web session. Returns base64-encoded PDF.

ParametersJSON Schema
NameRequiredDescriptionDefault
idsYes
save_pathNoSave to file instead of returning base64
connectionNodefault
report_nameYesReport technical name

TDQS

C2.8/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations exist, so the description carries the burden. It mentions downloading via web session and returning base64, but does not disclose side effects, authentication, rate limits, or error scenarios.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with no fluff, front-loaded with the action verb. Every word adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema, and the description only states base64-encoded PDF without structure. The tool has moderate complexity (4 params, 2 required) but the description is insufficiently complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema has 50% description coverage; two parameters (connection, ids) lack descriptions. The tool description adds no parameter information, failing to compensate for the missing schema descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states the action (download PDF report) and resource (via web session), and specifies the return format (base64-encoded PDF). However, it does not differentiate from the sibling 'odoo_report'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

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, no prerequisites or contextual hints provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

odoo_web_requestC

Raw HTTP request to any Odoo controller URL via web session. Access frontend pages, custom controllers, website routes, etc.

ParametersJSON Schema
NameRequiredDescriptionDefault
dataNoPOST body (JSON)
pathYesURL path (e.g. '/shop/cart', '/my/invoices')
methodNoGET
paramsNoQuery params
connectionNodefault

TDQS

C2.6/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided. Description lacks details on side effects (e.g., mutations), authentication requirements beyond 'via web session', rate limits, or error handling. For a raw HTTP tool, more behavioral disclosure is needed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single sentence is concise but omits critical details. Front-loading is acceptable, but the sentence tries to cover too much without structure.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema and many sibling odoo_web_* tools, the description is incomplete. It does not describe return values, error handling, or how it differs from similar tools with overlapping names.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Description adds no information about parameters beyond the schema. With 60% schema coverage and nested objects, the description should clarify usage of 'data' and 'params', but it does not.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states it is a 'raw HTTP request' to Odoo controllers, with examples of frontend pages and custom routes. However, it does not explicitly differentiate from sibling tools like odoo_web_call or odoo_web_read.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

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. Does not mention prerequisites, security considerations, or contrast with sibling tools like odoo_web_call or odoo_web_read.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

odoo_website_add_snippetA

Insert a snippet into a target HTML field. Fetches the snippet template from ir.ui.view by key, extracts its root HTML element, applies optional substitutions (text/attr/src changes before insertion), and places it at the specified position relative to an anchor. Positions: 'end' (after last element), 'begin' (before first), 'after' (after anchor_xpath), 'before' (before anchor_xpath), 'replace' (replace anchor_xpath). Substitutions format: {'relative_xpath': value} for text; {'relative_xpath/@attr': value} for attribute; {'relative_xpath/@style:background-image': 'url(...)'} for CSS property; {'relative_xpath/@src': 'https://...'} for image URL.

ParametersJSON Schema
NameRequiredDescriptionDefault
langNoLang context for write (default: en_US)
modelYes
res_idYes
dry_runNo
positionNoend
connectionNodefault
field_nameYes
snippet_keyYesSnippet template key (e.g. 'website.s_text_block', 'website.s_cta_card')
anchor_xpathNoRequired for position in (after, before, replace). Xpath to the anchor element in target.
substitutionsNoMap of relative xpath → value for pre-insertion customisation.

TDQS

A4.3/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description fully describes the behavior: fetching template, extracting root, applying substitutions with formats, and placement positions. It covers dry_run but not side effects, which is minor given the tool's nature.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is efficiently structured with a purpose statement followed by detailed steps. Every sentence is informative and front-loaded with the main action.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity (10 params, nested objects, no output schema), the description covers the process well but lacks output details, dry_run behavior, and permissions. It is adequate but incomplete for a complex tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is only 40%, and the description adds value by explaining substitution format and positions. However, it does not elaborate on core parameters like model, res_id, field_name, or dry_run, leaving gaps for the agent.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action 'Insert a snippet into a target HTML field' and explains the multi-step process, distinguishing it from sibling tools like update or remove.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The context of adding snippets is clear, and the description details positions and substitutions. However, it does not explicitly state when to use alternatives, though sibling names imply differentiation.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

odoo_website_list_page_snippetsA

List snippets currently embedded in a target HTML field. Target can be a blog.post (field=content), website.page (field=arch_db via view_id), product.template (field=website_description), or any HTML field. Parses the HTML with lxml, finds all elements bearing a data-snippet attribute. Returns per-snippet: index, data_snippet, data_name, xpath, text_preview, has_background (detects url() in style), background_url.

ParametersJSON Schema
NameRequiredDescriptionDefault
langNoRead lang context (default: current user lang)
modelYes
res_idYes
connectionNodefault
field_nameYesHTML field (e.g. 'content', 'arch_db', 'website_description')

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description details parsing method (lxml), attributes searched (data-snippet), and output fields (index, xpath, etc.). No annotations exist, so the description carries the full burden and does it well, though it could mention side effects or auth needs.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single paragraph with the core purpose front-loaded. It efficiently explains the tool without extraneous words, though the list of target fields could be structured.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity of parsing multiple models and no output schema, the description provides sufficient context about inputs and outputs. It does not cover error handling or limitations, but is complete for basic usage.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is only 40%, so the description should compensate. It adds meaning for field_name by listing valid values, but does not explain connection, model, res_id, or lang beyond the schema. The model and res_id are somewhat inferred but not explicit.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool lists snippets in an HTML field and specifies target models and fields. It distinguishes itself from sibling tools like odoo_website_add_snippet by focusing on listing, not modification.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

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 like odoo_website_list_snippets or when not to use it. The description lacks context on prerequisites or competing tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

odoo_website_list_snippetsA

List available Odoo website snippet templates (ir.ui.view records with key matching 'website.s_*' or similar). Returns per-snippet: key, name, module, category (structure|content|dynamic|effect|unknown), preview. Use this to discover what snippets can be added to a page. Categories inferred from snippet key patterns and modules.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
moduleNoFilter by module (e.g. 'website', 'website_blog', 'website_sale').
searchNoSubstring match on key or name (e.g. 'cta', 'text_block').
categoryNoFilter by category: structure, content, dynamic, effect.
connectionNodefault

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations exist, so the description carries full responsibility. It discloses the return structure and mentions inference logic for categories, adding some behavioral context. However, it does not mention read-only nature, authentication requirements, or any side effects, which are important for undisclosed behaviors.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise sentences, no redundant wording. Front-loaded with the core purpose and quickly covers return details, making it efficient for an agent to parse.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema, the description adequately explains return fields. It lacks mention of pagination or the effect of the 'limit' parameter, but overall provides sufficient context for a discovery tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema covers 60% of parameters with descriptions; the description itself adds no parameter-level detail beyond that baseline. It focuses on return fields rather than parameter meaning, so it does not compensate for the uncovered schema parameters significantly.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states the tool lists available Odoo website snippet templates, specifying the exact domain (ir.ui.view records with key matching 'website.s_*') and return fields. Distinguishes from sibling tools like odoo_website_add_snippet and odoo_website_list_page_snippets.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Briefly states 'use this to discover what snippets can be added to a page' but provides no explicit when-not-to-use guidance or comparison to alternatives. Lacks contrast with closely related sibling tools, leaving room for ambiguity.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

odoo_website_remove_snippetB

Remove a snippet block from a target HTML field. Locates via snippet_xpath (absolute). Writes back the reduced HTML.

ParametersJSON Schema
NameRequiredDescriptionDefault
langNoen_US
modelYes
res_idYes
dry_runNo
connectionNodefault
field_nameYes
snippet_xpathYes

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description discloses the core behavior: removes a snippet and writes back reduced HTML. This implies a destructive write operation. However, without annotations, it lacks details on side effects, permissions, or error handling. The presence of a 'dry_run' parameter is not mentioned in the description.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise sentences with no redundancy. The action, location method, and effect are clearly stated. Every word contributes value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite the concise purpose, the description is incomplete for a 7-parameter tool with no annotations and no output schema. It omits explanation of key parameters and usage context, making it hard for an AI agent to correctly invoke the tool without additional knowledge.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Only 'snippet_xpath' is partially described (absolute). The other 6 parameters (connection, model, res_id, field_name, lang, dry_run) are not explained in the description. With 0% schema description coverage, the description fails to add meaning to most parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Remove a snippet block') and the target resource ('from a target HTML field'). It is specific and distinct from sibling tools like add_snippet, update_snippet, or list_snippets.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

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. It does not mention prerequisites (e.g., obtaining snippet_xpath) or scenarios where removal is not advisable. The phrase 'Locates via snippet_xpath (absolute)' hints at known XPath requirement, but no explicit context provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

odoo_website_update_snippetA

Update an existing snippet on a target HTML field. Locates the snippet via snippet_xpath (absolute in target), applies substitutions to its descendants via relative xpaths, and writes back. Common use cases: swap background image, change H1/H2 text, update CTA button text+href, change card content. Substitution syntax identical to odoo_website_add_snippet.

ParametersJSON Schema
NameRequiredDescriptionDefault
langNoen_US
modelYes
res_idYes
dry_runNo
connectionNodefault
field_nameYes
snippet_xpathYesXpath to snippet root element in target (e.g. '//section[@data-snippet="s_text_block"][1]')
substitutionsYes

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description explains the update process (find, modify, write back) and mentions the substitution syntax, but lacks details on permissions, error scenarios (e.g., xpath not found), or side effects. Since no annotations are provided, the description carries the full burden and is only partly adequate.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is four sentences long, front-loaded with the primary action, and efficiently conveys the mechanism and use cases. It could potentially combine the common use cases sentence with the substitution syntax reference for even greater efficiency.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (8 parameters, nested object, no output schema), the description adequately covers the core operation but omits return value details, error handling, and clear guidance on the model/res_id/field_name triple. It is sufficient for basic use but not fully complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With only 13% schema description coverage, the description adds meaning for snippet_xpath and substitutions (with examples of use cases) but leaves critical parameters like connection, model, res_id, field_name, lang, and dry_run unexplained. The substitution object structure is not elaborated.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states that the tool 'Update[s] an existing snippet on a target HTML field' and explains the mechanism (locating via snippet_xpath, applying substitutions). It lists common use cases and distinguishes itself from siblings like odoo_website_add_snippet by noting identical substitution syntax.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides common use cases (e.g., changing text, swapping images) which imply when to use the tool. However, it does not explicitly contrast with alternatives like odoo_website_remove_snippet or odoo_website_add_snippet, nor does it state 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.

odoo_writeD

Update existing records.

ParametersJSON Schema
NameRequiredDescriptionDefault
idsYes
modelYes
valuesYesField values to update
connectionNodefault

TDQS

D1.8/5.0
Behavior1/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so the description must disclose behavioral traits. It only says 'Update', implying mutation, but provides no details on side effects, permissions, irreversibility, or response format.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise (one sentence), but this conciseness sacrifices necessary detail. It is not well-structured to convey key information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness1/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has 4 parameters (3 required), no output schema, many Odoo-specific sibling tools, and nested objects, the description is severely incomplete. It fails to provide essential context for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is only 25% (only 'values' has a description). The description adds no parameter meaning beyond the schema. For example, it doesn't explain what 'model' expects or how 'values' should be structured.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose2/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description 'Update existing records' states a basic verb+resource but is overly generic. It does not specify the domain (Odoo models) or differentiate from sibling tools like odoo_create, odoo_unlink, or odoo_read.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

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. Lacks context on prerequisites (e.g., required connection) or exclusions (e.g., when to use odoo_create instead).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

open_connection_managerA

Open the Connection Manager GUI (desktop app). Launches GTK4 version on Linux, Qt6 on Windows/macOS. Use this when the user wants to visually manage connections, configure Portainer/GitHub, manage SSH keys, or see active sessions.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Discloses platform-specific UI frameworks (GTK4 on Linux, Qt6 on others) but does not detail side effects, permissions, or return behavior. No annotations present, so description carries full burden.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three concise sentences, front-loaded with purpose, no redundant information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Adequately covers purpose, platform differences, and typical usage. Lacks detail on post-launch behavior but sufficient for a GUI-launch tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

No parameters exist; schema coverage is 100%. Baseline of 4 applies per guidelines for zero-parameter tools.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states it opens the Connection Manager GUI, specifies verb 'open' and resource. Mentions platform-specific versions and common use cases, distinguishing it from sibling tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit use cases (visually manage connections, configure Portainer/GitHub, etc.) but does not contrast with programmatic alternatives like user_connection_* tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

proxy_callA

Forward a tool call to an internal MCP sub-service. Available services: 'portainer' (Docker/K8s management, 38 tools), 'github' (repos/issues/PRs, 20 tools), 'teams' (MS Teams messaging, 6 tools). Use proxy_discover first to see available tools on each service.

ParametersJSON Schema
NameRequiredDescriptionDefault
toolYesTool name on the target service
serviceYesTarget MCP service
argumentsNoTool arguments (as JSON object)

TDQS

A3.7/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must bear the full burden. It discloses the forwarding action and service details but omits behavioral traits like side effects, authentication requirements, error handling, or whether it is destructive or read-only.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise, with two sentences front-loading the purpose. Every sentence provides value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity of forwarding calls to sub-services with many tools, the description is adequate but lacks details on argument formatting per service, error responses, or output format. With no output schema, more completeness would be beneficial.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the schema already documents each parameter. The description adds minimal extra meaning, only briefly mentioning services (already in enum) and that arguments are a JSON object.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool forwards a tool call to an internal MCP sub-service, lists the available services, and provides context on tool counts. It distinguishes itself from siblings like proxy_discover.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly advises using proxy_discover first to see available tools, guiding when to use this tool. However, it does not specify when not to use it or mention alternatives beyond proxy_discover.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

proxy_discoverA

List available tools on an internal MCP sub-service. Call this first to see what tools are available on portainer/github/teams.

ParametersJSON Schema
NameRequiredDescriptionDefault
serviceYesTarget MCP service

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must convey behavior. It indicates a read operation (listing tools) but does not mention authentication, rate limits, or side effects. The simplicity of the tool limits the need for extensive transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences are direct and front-loaded, with no extraneous information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple discovery tool with one parameter and no output schema, the description is mostly complete. It could mention the output format (list of tool names), but the general pattern is understandable.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with a single parameter 'service' having enum values. The description mentions portainer/github/teams, aligning with the enum, but adds no additional semantics beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool lists available tools on an internal MCP sub-service, with specific examples (portainer, github, teams). This distinguishes it from sibling tools like proxy_call and proxy_refresh.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'Call this first' provides clear usage guidance, implying it should be used before other tools on the sub-service. However, it lacks explicit when-not-to-use or alternative scenarios.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

proxy_refreshA

Re-discover tools from all internal MCP sub-services. Use after starting a new sub-service or if tools are missing.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, and the description lacks details on behavioral traits such as whether the tool is destructive, requires authentication, or what side effects occur (e.g., clearing previous tool cache). The description 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the action and then usage context. Every word earns its place. No fluff.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter tool with no output schema, the description is fairly complete. It could mention potential duration or side effects, but it's adequate for a simple refresh operation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

No parameters exist, and schema coverage is 100%. The description correctly implies no parameters needed. Baseline 4 for zero parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states the tool re-discovers tools from all internal MCP sub-services. It distinguishes from siblings like proxy_discover by specifying 'all internal MCP sub-services' vs potentially a specific service.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly states when to use: after starting a new sub-service or if tools are missing. However, it does not differentiate from the sibling proxy_discover, which may have a similar but more targeted purpose.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

public_access_barcodeC

Generate barcode image via /report/barcode/{type}/{value}.

ParametersJSON Schema
NameRequiredDescriptionDefault
valueYesBarcode value
widthNo
heightNo
save_pathNo
connectionNodefault
barcode_typeNoCode128

TDQS

C2.3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must disclose behaviors. It only states 'Generate barcode image' but does not mention output format, whether the image is returned or saved, or error handling. Behavioral traits are largely undisclosed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness2/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely brief (one sentence) but omits essential details such as parameter explanations and output behavior. This is under-specification rather than conciseness.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness1/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 6 parameters, no output schema, and no annotations, the description is severely insufficient. It fails to explain barcode type options, image dimensions behavior, or what the tool returns. The agent cannot fully understand the tool's capabilities from this description.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With only 17% schema description coverage, the description adds no significant meaning beyond the schema. The endpoint pattern hints at mapping {type} and {value}, but does not explain connection, width, height, save_path, or enum values. The agent must infer parameter semantics from the endpoint placeholder.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Generate barcode image' and provides the endpoint pattern '/report/barcode/{type}/{value}', which specifies the action and resource. It distinguishes from sibling public_access_* tools by focusing on barcode generation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

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 alternatives such as public_access_image or other report tools. The description lacks context for typical use cases or exclusionary conditions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

public_access_downloadB

Download attachment/binary content by ID via /web/content/{id}. Public route.

ParametersJSON Schema
NameRequiredDescriptionDefault
save_pathNo
connectionNodefault
content_idYesAttachment ID

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided. Description mentions 'public route' but lacks details on behavior such as response format, file size limits, error handling, or whether it returns binary data or a URL. The agent is left guessing about important behavioral traits.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single, concise sentence that contains essential information. No extraneous text. However, could be slightly longer to include parameter details without losing clarity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema and minimal description. For a download tool, the agent needs to know what the output is (e.g., file content or path). Missing details about save_path behavior and default connection. Incomplete for effective use.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 33% (only content_id described). Description adds that content_id is an attachment ID and mentions the endpoint pattern, but save_path and connection parameters are unexplained. Does not fully compensate for low schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states 'Download attachment/binary content by ID', specifying the action and resource. The mention of 'Public route' distinguishes it from authenticated download tools like odoo_attachment_download.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Implies usage for downloading attachments without authentication via the public route, but does not explicitly state when to use this vs. alternatives (e.g., odoo_attachment_download). No when-not or exclusion criteria provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

public_access_export_csvC

Export Odoo list data as CSV via web session.

ParametersJSON Schema
NameRequiredDescriptionDefault
modelYes
domainNo
fieldsYes
save_pathNo
connectionNodefault
import_compatNo

TDQS

C2.5/5.0
Behavior1/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description provides no behavioral details beyond the name. With no annotations, the description carries the full burden but fails to disclose whether the tool is read-only, destructive, requires authentication, or other behavioral traits.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, concise sentence with no redundant words. It is front-loaded with the key action. However, it could be expanded to include more detail without losing conciseness.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness1/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has 6 parameters, no output schema, and no annotations, the description is severely incomplete. It does not explain parameter roles, output format, or any side effects. Far from sufficient for correct tool invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 0% description coverage for its 6 parameters. The description does not explain any parameter meanings or usage, leaving the agent to infer from parameter names alone. Description adds no value beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description specifies the action (export), resource (Odoo list data), format (CSV), and method (via web session). It clearly distinguishes from sibling tools like public_access_export_xlsx (XLSX export) and public_access_download (file download).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

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, nor any prerequisites or context. It lacks explicit when-to-use or when-not-to-use instructions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

public_access_export_xlsxC

Export Odoo list data as XLSX file via web session. Returns base64.

ParametersJSON Schema
NameRequiredDescriptionDefault
modelYesModel name (e.g. 'sale.order')
domainNoSearch domain
fieldsYesField names to export
save_pathNo
connectionNodefault
import_compatNo

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided; description fails to disclose key behaviors (e.g., read-only, authentication, side effects). Only mentions return format.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Extremely concise (one sentence) but lacks critical details. Could be expanded without becoming verbose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 6 parameters, no output schema, and no annotations, the description is incomplete—missing usage context, behavioral traits, and parameter semantics.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 50% (3 of 6 params described). Description adds no parameter info, leaving half the parameters undocumented in both places.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states it exports Odoo list data as XLSX via web session, returns base64. Distinguishes from sibling 'public_access_export_csv' by format.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit guidance on when to use this vs alternatives like 'public_access_export_csv' or 'odoo_web_export'. Does not mention prerequisites or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

public_access_imageB

Download image field from record via /web/image/{model}/{id}/{field}.

ParametersJSON Schema
NameRequiredDescriptionDefault
fieldNoimage_1920
modelYes
record_idYes
save_pathNo
connectionNodefault

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so description shoulders transparency. It indicates a web-based download via /web/image/ endpoint, but lacks details on authentication, error behavior, or side effects (though likely read-only).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One concise sentence embedding the URL pattern. Could be improved by separating URL format and parameter hints, but it's efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Lacks detail on output format (image type, encoding), error handling, and behavior of save_path. For a download tool with 5 parameters, more context is needed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, but the URL pattern in the description implies the roles of model, record_id, and field. However, connection and save_path parameters are not explained, leaving gaps.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Download image field from record' with the URL pattern, specifying the verb and resource. It distinguishes from siblings like public_access_download or public_access_barcode by focusing on image fields.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

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 (e.g., public_access_download). No context about prerequisites, fallbacks, 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.

public_access_portal_homeC

Get portal home page content via web session (/my/home).

ParametersJSON Schema
NameRequiredDescriptionDefault
connectionNodefault

TDQS

C2.8/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Without annotations, the description only implies a read operation via 'Get' and mentions a web session, but does not disclose any behavioral details like rate limits, authentication requirements, 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.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single concise sentence that efficiently conveys the core purpose. However, it lacks structure like front-loading key details, though it remains appropriate for its length.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema and minimal parameters, the description is insufficient. It does not specify what the returned content looks like or any session handling details, leaving gaps for the agent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has one parameter 'connection' with no description, and the description does not explain its meaning or usage. With 0% schema description coverage, the description fails to add value.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'Get' and the resource 'portal home page content', and it is distinguishable from sibling tools like public_access_portal_invoices due to the specific endpoint reference.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

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 public_access_portal_invoices or public_access_portal_orders. The description lacks any context for selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

public_access_portal_invoicesC

Get list of portal invoices (/my/invoices). Returns HTML page content.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo
connectionNodefault

TDQS

C2.3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description only says it returns HTML page content but does not disclose authentication requirements, pagination behavior (though the page parameter hints at it), or what happens on error. No annotations exist to offset this lack of detail.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness2/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence but lacks essential information, making it under-specified rather than concise. It earns no value from brevity because it omits critical details.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness1/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no annotations, no output schema, and 0% parameter coverage, the description fails to provide a complete understanding of the tool's behavior. It ignores pagination, authentication, and return value details.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, and the description adds no meaning to the two parameters (connection and page). The agent must guess the purpose of these parameters from their names and defaults, which is insufficient.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool gets a list of portal invoices and returns HTML page content. It mentions the endpoint (/my/invoices) and distinguishes from sibling tools like public_access_portal_home by specifying invoices.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

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 like public_access_portal_orders or public_access_portal_purchases. No conditions or prerequisites are mentioned, leaving the agent to infer usage.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

public_access_portal_ordersC

Get list of portal sale orders (/my/orders). Returns HTML page content.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo
connectionNodefault

TDQS

C2.7/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must cover behavioral traits. It only mentions returning HTML content, but fails to disclose side effects, authentication needs, rate limits, or any state changes, which is inadequate for a tool with zero 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.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence that states the action and output format. It is concise but lacks depth, earning a middling score as it meets minimal viability without being overly verbose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the low complexity (2 parameters, no output schema), the description is incomplete. It omits details about pagination via 'page', the role of 'connection', and the structure of the HTML content, leaving gaps for effective tool invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, and the tool description does not explain the two parameters ('connection' and 'page'). The agent has no information about their meaning, allowed values, or behavior, making it difficult to use correctly.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool retrieves a list of portal sale orders and returns HTML page content. It is specific about the resource (portal sale orders) and the endpoint ('/my/orders'), distinguishing it from sibling tools like public_access_portal_home or public_access_portal_invoices.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

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 when not to use it, leaving the agent without decision support.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

public_access_portal_purchasesC

Get list of portal purchase orders (/my/purchase).

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo
connectionNodefault

TDQS

C2.6/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, and the description fails to disclose behavioral traits such as authentication requirements, error handling, or data scope beyond the basic read operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, short sentence without wasted words, but it lacks structured detail and could be more informative.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema and minimal parameter details, the description does not sufficiently explain return values, pagination behavior, or error scenarios, making it incomplete for an agent to use confidently.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

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 the 'connection' and 'page' parameters, leaving their purpose and usage ambiguous.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Get list') and resource ('portal purchase orders') with the endpoint path, but does not differentiate from the sibling 'public_access_portal_orders', which likely handles different order types.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool over alternatives; no prerequisites, context, or exclusions mentioned.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

public_access_portal_ticketsB

Get list of portal helpdesk tickets (/my/tickets).

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo
connectionNodefault

TDQS

B3.3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations exist, so description carries full burden. It only states 'Get list' (a read operation) without disclosing any behavioral details like pagination, authentication, rate limits, 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.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One short sentence that is front-loaded and to the point. However, it could be slightly longer to include parameter hints without losing conciseness.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description provides the core purpose but misses context about pagination via the 'page' parameter and how to set up a 'connection'. For a simple list tool, it is adequate but not fully complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

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 the 'connection' or 'page' parameters. Their names are somewhat self-explanatory, but the description adds no additional meaning beyond the schema field names.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Get list of portal helpdesk tickets' with a specific verb and resource, and the endpoint path distinguishes it from sibling tools like public_access_portal_invoices or public_access_portal_orders.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

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; usage is implied by the resource name. No explicit when-not or alternative tools mentioned, but the purpose is clear enough for basic selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

public_access_report_htmlC

Render report as HTML via web session.

ParametersJSON Schema
NameRequiredDescriptionDefault
idsYes
connectionNodefault
report_nameYes

TDQS

C2.7/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description fails to disclose key behaviors such as whether a web session must be active, potential side effects, or output characteristics. The term 'via web session' implies session dependency but does not elaborate.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence, making it concise, but it sacrifices necessary detail. It is front-loaded with the core action, but the structure is too minimal to be fully effective.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the lack of output schema and the presence of siblings, the description is incomplete. It does not explain what 'web session' means, what the output looks like, or how the parameters relate to each other, leaving significant gaps for an agent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% and the description adds no meaning to the three parameters. 'connection', 'report_name', and 'ids' are left entirely unexplained, leaving the agent to guess their purpose and constraints.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Render'), the resource ('report'), and the format ('HTML via web session'). It distinguishes from sibling tools like public_access_report_pdf and public_access_report_xlsx, which produce different formats.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

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., PDF or XLSX), nor are there any prerequisites or contextual cues like required session state. The description offers no usage heuristics.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

public_access_report_pdfC

Download PDF report via web session. Route: /report/pdf/{report_name}/{doc_ids}.

ParametersJSON Schema
NameRequiredDescriptionDefault
idsYes
save_pathNo
connectionNodefault
report_nameYesTechnical report name (e.g. 'account.report_invoice')

TDQS

C2.4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations are absent, so description must carry full burden. It says 'via web session' but does not explain if this is a read-only operation, whether it modifies state, or if any side effects occur (e.g., session creation). No disclosure about persisting the downloaded file.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Description is very concise with two sentences, no redundant text. The route is front-loaded. However, it could be expanded with parameter context without losing conciseness.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness1/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With 4 parameters, no output schema, and no annotations, the description is incomplete. It fails to explain the meaning of 'web session', how to specify the ids parameter, or what the tool returns (e.g., file path or bytes). This is insufficient for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is only 25% (only report_name has a description). The tool description adds no parameter information. It does not explain the route parameters (report_name, doc_ids) or the connection and save_path fields, which are critical for correct usage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description states 'Download PDF report' with a specific resource (PDF report) and verb (Download), and mentions the route. It distinguishes from related report tools like public_access_report_html by implying a PDF format, but does not explicitly differentiate from similar download tools like public_access_download.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

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 (e.g., public_access_report_html or public_access_report_xlsx). The description does not mention prerequisites, such as needing an active web session, or conditions like required authentication.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

public_access_report_xlsxC

Download XLSX report via OCA reporting-engine (/report/xlsx/{name}/{ids}).

ParametersJSON Schema
NameRequiredDescriptionDefault
idsYes
save_pathNo
connectionNodefault
report_nameYes

TDQS

C2.4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden. It mentions the download action and endpoint but does not disclose any side effects, authentication requirements, or limitations. The behavioral transparency is insufficient.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, concise sentence. It is not verbose, but it sacrifices informativeness for brevity. Every word earns its place, though more detail could be added without losing conciseness.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness1/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 4 parameters with 0% schema description coverage, no output schema, and no annotations, the description is severely incomplete. It fails to explain parameters, return values, or behavioral details, making it inadequate for an agent to use correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description adds no meaning beyond the input schema. Schema coverage is 0%, and the description does not explain any of the parameters (report_name, ids, connection, save_path), leaving the agent without crucial context for correct invocation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly indicates the action 'Download XLSX report' and references the OCA reporting-engine endpoint, distinguishing it from sibling tools for HTML or PDF reports. However, it could be more user-friendly by explicitly stating the purpose in simpler terms.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

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. There is no mention of prerequisites, filters, or conditions that would help an agent decide to invoke this tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

public_access_shopC

Get website shop product listing (/shop). Returns HTML.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo
searchNo
connectionNodefault

TDQS

C2.7/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries full burden for behavioral disclosure. It only reveals that output is HTML, but lacks information on safety (read-only?), side effects, access restrictions, or response details beyond format.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single sentence with clear verb, resource, and return type. No unnecessary words; front-loaded and efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with 3 optional parameters and no output schema, the description is too minimal. It fails to explain parameters or differentiate from many similar public_access_ siblings, leaving the agent underinformed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, meaning the description must explain parameters. However, the description does not mention 'connection', 'page', or 'search' parameters, leaving their purpose and usage entirely unspecified.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states the verb 'Get', resource 'website shop product listing', and endpoint '/shop'. It distinguishes the tool's purpose from siblings like public_access_portal_home by specifying 'shop product listing', though it does not explicitly contrast with other public_access_ tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

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 public_access_portal_home or other listing tools. Missing information on prerequisites, context, or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

public_access_sitemapC

Download sitemap.xml from Odoo website.

ParametersJSON Schema
NameRequiredDescriptionDefault
connectionNodefault

TDQS

C2.7/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries full burden. It only states the action but does not disclose behavioral traits like authentication requirements, read-only nature, error handling, or what happens if the connection parameter is changed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence, which is concise but too sparse; it could include key details (e.g., parameter usage) without increasing length significantly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's low complexity (one optional parameter, no output schema), the description is incomplete: it doesn't explain return value or when to adjust the connection parameter, requiring the agent to infer or test.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

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 the 'connection' parameter at all, leaving the agent without any semantic clues beyond the schema defaults.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action (Download) and the specific resource (sitemap.xml from Odoo website), distinguishing it from sibling tools like public_access_download or public_access_portal_home which target different resources.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

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 (e.g., other download tools), no context about prerequisites (e.g., needing a connection), and no exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

session_listA

List MCP session-store rows. Regular callers see their own sessions; admin principals (MCP_ADMIN_PRINCIPALS) see all.

ParametersJSON Schema
NameRequiredDescriptionDefault
principalNoAdmin only: filter by principal
include_orphanedNoInclude orphaned/revoked rows (default true)

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden of behavioral disclosure. It transparently notes that regular callers see only their own sessions and admins see all, and that include_orphaned defaults to true (as per schema). This is useful behavioral context, though it does not explicitly state read-only nature or potential large result sets.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, direct, and free of unnecessary detail. It effectively communicates the core function and key behavioral nuance without verbosity or structural issues.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple list tool without an output schema, the description is complete enough. It covers the primary action, visibility rules, and default behavior of the include_orphaned parameter. It omits potential details like return format or error conditions, but these are not critical given the tool's simplicity and lack of an output schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% (both parameters have descriptions). The tool description adds meaning by explaining that 'principal' is relevant only for admins and that regular callers are restricted to their own sessions. This goes beyond the schema's 'Admin only: filter by principal' to clarify the behavior for non-admin users.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's function: 'List MCP session-store rows'. It distinguishes itself from sibling session tools like session_revoke by focusing on listing. The verb 'List' and resource 'MCP session-store rows' are specific and unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides context about visibility (regular vs. admin) but does not explicitly state when to use this tool over alternatives such as session_revoke or user_connection_list. It implies usage for listing sessions but lacks explicit guidance or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

session_revokeA

Revoke one MCP session (admin, or your own): marks the row revoked and tears down its live resources (connection, web, telegram client when unreferenced).

ParametersJSON Schema
NameRequiredDescriptionDefault
session_keyYesSession key as shown by session_list

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the transparency burden. It discloses side effects: marking the row revoked and tearing down live resources (connection, web, telegram client when unreferenced). It does not mention error conditions or return behavior, but the key side effects are covered.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence with no redundant wording. It packs the action, scope, and side effects into a compact structure.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, so the description should indicate what happens. It does explain the immediate effect on the session and resources, but does not mention return values or failure modes. For a simple revoke action, this is adequate but not exhaustive.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% – the only parameter (session_key) has a clear description ('as shown by session_list'). The tool description does not add extra info beyond the schema, meeting the baseline for clear parameter semantics.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action (revoke), the target (MCP session), and the effect (marks row revoked, tears down live resources). It also specifies scope (admin or own), distinguishing it from session_list and other session-related tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It provides guidance on who can revoke (admin or own) and hints at the consequence (tearing down resources). However, it does not explicitly mention when to use this over alternatives like session_list or other revocation methods, so it lacks explicit exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ssh_executeA

Execute a command on a remote server via SSH. Uses SSH config from connections.json (connection's ssh section). Provide either a connection alias (to use saved SSH config) or explicit host/user.

ParametersJSON Schema
NameRequiredDescriptionDefault
hostNoSSH host (if not using connection alias)
portNoSSH port
userNoSSH user (if not using connection alias)
commandYesShell command to execute remotely
timeoutNoCommand timeout in seconds
connectionNoConnection alias (uses its SSH config)
forward_agentNoForward SSH agent to remote (for GitHub auth without storing keys)

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so description bears full burden. It mentions using connections.json and forward_agent for GitHub auth, but does not detail failure modes, permissions, or authentication methods. Adequate but not comprehensive.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences efficiently convey purpose and configuration. Front-loaded with the action, no wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With 7 parameters and no output schema, the description covers the essential usage modes. Missing error handling details but sufficient for typical use.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3. The description adds minimal parameter-specific information beyond schema; the general context about two modes is helpful but not per-parameter.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Execute a command on a remote server via SSH' with specific verb and resource. It distinguishes from sibling tools by mentioning SSH execution, which none of the siblings cover.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains two modes of providing target (connection alias or explicit host/user), guiding when to use each. No explicit when-not-to-use or alternatives, but it's clear enough.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

telegram_agent_create_quoteC

Create a DRAFT sale.order in the scenario's company. Returns a shareable summary. Honors quote_send (approve → confirm before sending; auto → may send).

ParametersJSON Schema
NameRequiredDescriptionDefault
linesYes[{product_id|default_code, qty, [price_unit]}]
chat_idYes
connectionNodefault
partner_idNo

TDQS

C2.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full disclosure burden. It does disclose meaningful behavior: the record is created as DRAFT (not final) and the tool may auto-send a message, which is a real side effect an agent must know about. However, the approve/confirm/auto send flow is undefined, and there is no mention of prerequisites, partner requirements, or reversibility.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the core purpose and return value, with no wasted words. The quote_send parenthetical is dense but economical; it could be clearer but it earns its place as a behavioral caveat.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with a send side effect and no annotations or output schema, the agent is left with gaps: the meaning of chat_id and partner_id is undocumented, the quote_send resolution flow is unexplained, and there is no guidance on what happens without a partner. The description covers creation and return but not enough for reliable invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 25% — only 'lines' is documented, and even that is a terse format string. chat_id, partner_id, and connection have no schema descriptions, and the tool description does not compensate by explaining what chat_id (target chat?) or partner_id (customer?) mean or how they affect the quote. Low coverage is not compensated.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb and resource — creates a DRAFT sale.order in the scenario's company — and clearly distinguishes it from the generic odoo_create sibling by being scenario-scoped and quote-specific. It loses one point because the 'Honors quote_send (approve → confirm before sending; auto → may send)' clause is cryptic: an agent cannot tell what approve vs auto mean or how they are configured.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

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 its nearest alternatives (odoo_create, telegram_send_message, telegram_agent_route). The description gives no when/when-not conditions and no exclusions, leaving the agent to infer the scenario-aware distinction on its own.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

telegram_agent_enrollA

Enroll a Telegram chat for agentic handling with a scenario. mode: auto (self-converse) | advisory (suggest, human sends) | notify. scenario (optional dict): persona, default_toolset, data_scope {models,fields,pricelist}, forbid[], company_id, quote_send (approve|auto), skills[] ({name,toolset,triggers[]}). Confidentiality is enforced by data_scope. Enrolments are per-principal — you never see or change another principal's.

ParametersJSON Schema
NameRequiredDescriptionDefault
modeNonotify
chat_idYesChat/group id (e.g. -100123...)
scenarioNoScenario policy (see description)

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description provides some transparency about side effects: it creates an enrollment and enforces per-principal data isolation. It does not mention whether enrollment overwrites existing configurations, requires authorization, or can be reverted, leaving some behavioral aspects opaque.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is brief and scannable, conveying the core purpose and key configuration options in a compact form. It could be slightly more structured (e.g., bullet points for mode and scenario), but it is not verbose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

It gives important contextual detail about per-principal isolation and data scope, which is relevant for safe use. It does not describe expected return values, error conditions, or post-enrollment behavior, leaving some gaps for a mutation operation without an output schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Two of the three parameters have schema-level descriptions (chat_id and scenario), and the main description explains the mode enum and the nested scenario structure. This gives good coverage of parameter meaning, though the mode parameter itself lacks a direct schema description.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Enroll a Telegram chat for agentic handling') and identifies the resource. It distinguishes itself from related tools like unenroll or set_scenario by using the specific verb 'enroll', but it does not explicitly name sibling alternatives.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explains the meanings of 'mode' and 'scenario' which helps in choosing appropriate values, and mentions per-principal isolation. However, it does not explicitly state when to use this tool versus alternatives like 'telegram_agent_set_scenario' or prerequisites such as authentication.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

telegram_agent_get_scenarioA

Get the full scenario for an enrolled chat.

ParametersJSON Schema
NameRequiredDescriptionDefault
chat_idYes

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The verb 'Get' clearly indicates a read-only operation with no side effects. Although no explicit statement about non-destructiveness is made, the name and description strongly imply it. With no annotations to rely on, the description carries the burden, and it is largely transparent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, concise sentence that directly conveys the tool's function without unnecessary detail or verbosity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simple getter nature and its context among sibling telegram_agent tools, the description provides enough information to understand its use. It does not specify the output format, but that is not essential for invoking the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The sole parameter chat_id is not described in the schema, but the tool description clarifies that it refers to an 'enrolled chat', giving it meaning and context. This is sufficient for an agent to infer its purpose.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Get') and the resource ('full scenario') for a specific subject ('an enrolled chat'). It is unambiguous and distinct from related tools like telegram_agent_set_scenario.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit guidance is provided on when to use this tool versus alternatives such as telegram_agent_set_scenario or other telegram_agent_* tools. The description does not mention any conditions or alternative tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

telegram_agent_listA

List enrolled chats with their mode/persona/skills.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The term 'List' clearly implies a read-only operation with no side effects. Since there are no annotations, the description carries the full burden, and it does so adequately, though it does not explicitly state 'read-only' or 'no changes are made.'

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, concise sentence with no redundancy. It effectively communicates the tool's purpose in minimal words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the zero-parameter input and simple output (a list), the description is complete for an agent to understand what the tool does. No further context is necessary.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, so no parameter descriptions are needed. The baseline for zero parameters is 4, and the description requires no additional parameter context.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action (List), the target (enrolled chats), and the included details (mode/persona/skills). It is distinct from sibling tools like telegram_agent_enroll or telegram_agent_unenroll.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description does not explicitly state when to use this tool versus alternatives, nor does it mention any preconditions or related tools. However, the name and description make its purpose straightforward, so the gap is minor.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

telegram_agent_product_lookupA

Search products for an enrolled chat, returning ONLY the scenario's allowlisted fields (confidential fields withheld by design). Uses the scenario's company + pricelist.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
queryYesProduct name or code fragment
chat_idYes
connectionNodefault

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It discloses key behaviors: filtering results to allowlisted fields and using scenario-specific company and pricelist. This gives the agent important expectations about data scope and confidentiality.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two concise sentences. It front-loads the primary action and result filtering, then adds contextual detail. Every word contributes meaning without redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite no output schema, the description explains the primary input context (enrolled chat, scenario) and output behavior (allowlisted fields). It is sufficiently complete for an agent to understand the tool's purpose and decide when to call it, though it omits potential error cases.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is only 25% (only 'query' has a description). The tool description sheds light on 'chat_id' (enrolled chat) and hints at 'connection' (scenario's company+pricelist) but does not explain 'limit' or fully clarify all parameters. It partially compensates for the sparse schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action (search products), the context (for an enrolled chat), and specific behaviors (returning only allowlisted fields, using scenario's company and pricelist). It is specific enough to distinguish from general product search tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies a specialized use case (enrolled chat, scenario-based) but does not explicitly mention alternative tools or when to prefer this over others. It provides contextual hints but lacks direct guidance on selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

telegram_agent_routeA

Classify the conversation direction for an enrolled chat and return the active TOOLSET to switch to (based on the scenario's skills), plus the data_scope/forbid guardrails and a memory_search_hint. Call this on each incoming message before acting.

ParametersJSON Schema
NameRequiredDescriptionDefault
textYesThe incoming message text
chat_idYes

TDQS

A3.7/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description bears full responsibility for disclosing side effects. It only states that it 'classifies' and 'returns', implying a read-only operation, but does not explicitly state that no state changes or side effects occur. This lack of explicit disclosure leaves behavior partially opaque.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise, consisting of two sentences that front-load the core purpose and output. Each sentence contributes essential information without unnecessary detail.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers the main aspects: what the tool does, what it returns (TOOLSET, guardrails, memory_search_hint), and when to call it. It does not specify output structure or error scenarios, but given the tool's role as a router, the description is sufficiently complete for a user to understand its function.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 50%: only 'text' has a description ('The incoming message text'), while 'chat_id' has none. The overall description references 'enrolled chat', making chat_id's purpose somewhat inferable, but it is not explicitly described, so parameter semantics are incomplete.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: to classify conversation direction for an enrolled chat and return the active TOOLSET, guardrails, and memory_search_hint. It also specifies when to call it, making the purpose unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides a clear when-to-use instruction: 'Call this on each incoming message before acting.' However, it does not mention when not to use the tool or alternative routing tools, leaving some inference needed.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

telegram_agent_set_scenarioB

Replace the scenario for an enrolled chat.

ParametersJSON Schema
NameRequiredDescriptionDefault
chat_idYes
scenarioYes

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

There are no annotations and the description only reveals that the tool replaces a scenario. It does not mention side effects, permissions, error conditions, idempotency, or any other behavioral details.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, concise sentence with no redundant wording or unnecessary detail. It is well-structured and easy to parse.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple setter this is minimally adequate, but it omits output expectations, error behavior, and the prerequisite that the chat must already be enrolled. It is not misleading, but it leaves some operational context unspecified.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description loosely maps 'enrolled chat' to chat_id and 'scenario' to the scenario value, but it provides no detail about the expected object structure for scenario. The input schema has no per-parameter descriptions, so the description does not fully compensate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Replace') and the resource ('the scenario for an enrolled chat'). It is unambiguous and distinguishes this tool from sibling operations like telegram_agent_get_scenario.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is given about when to use this tool versus alternatives such as get_scenario, enroll, or route. The phrase 'enrolled chat' implies a prerequisite, but there is no explicit instruction or condition for use.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

telegram_agent_unenrollC

Stop agentic handling for a chat.

ParametersJSON Schema
NameRequiredDescriptionDefault
chat_idYes

TDQS

C2.4/5.0
Behavior1/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations and no behavioral detail, the description provides only the surface-level intent. It does not disclose whether stopping is reversible, what state changes occur, whether it is idempotent, or what errors might be expected.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise and front-loaded, using a single clear sentence with no redundant or extraneous content.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Although the tool is simple, the description omits essential context such as how chat_id should be obtained, what 'agentic handling' entails, and what the expected result of stopping it is. The minimal text leaves too much to inference.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The only parameter, chat_id, has zero schema description and is not explained in the tool description. The agent is left to infer its meaning and format, which is insufficient for reliable invocation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Stop') and the resource ('agentic handling for a chat'), making the tool's basic purpose easy to identify. It does not explicitly contrast with the sibling telegram_agent_enroll, but the inverse relationship is apparent.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is given about when to use this tool versus alternatives such as telegram_agent_enroll or telegram_agent_set_scenario. The description only restates the action without explaining context, prerequisites, or consequences.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

telegram_authA

Authenticate with Telegram. Two-step process: 1) Call with phone → code is sent to Telegram. 2) Call with phone + code → authenticated. If 2FA enabled, provide password too.

ParametersJSON Schema
NameRequiredDescriptionDefault
codeNoVerification code from Telegram (step 2)
phoneYesPhone number with country code (e.g. +359886100204)
passwordNo2FA password if enabled

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description discloses the two-step process and the optional 2FA step, which is a key behavioral trait. No annotations are provided, so the description carries full burden. However, it omits details such as whether the tool sets a session or what happens on success/failure. It adequately explains the core behavior but lacks some edge cases.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise, using one sentence with enumerated steps. It wastes no words. However, it could benefit from clearer structuring (e.g., bullet points or separate lines) to improve readability, but overall it is efficient and front-loaded with the purpose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers the multi-step authentication process and all parameters adequately. However, it does not describe the return value or output of the tool after successful authentication, which is a gap. Given no output schema, the description should at least mention what to expect (e.g., 'returns session token'). It is complete for the process but incomplete regarding results.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema covers all three parameters with descriptions. The description adds value by explaining the role of each parameter in the authentication flow: phone for both steps, code for step 2, and password if 2FA enabled. Since schema coverage is 100%, baseline is 3, but the description provides meaningful ordering and conditions, earning a 4.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Authenticate with Telegram' and outlines the two-step process, distinguishing it from other Telegram tools like telegram_auth_status (checking status) or telegram_send_message (messaging). The specific verb 'Authenticate' combined with the step-by-step explanation makes the purpose unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context on when to use the tool: for authentication via two-step process. It explains the sequence of providing phone, then code, and optionally password for 2FA. However, it lacks explicit guidance on when not to use it (e.g., if already authenticated, use telegram_auth_status instead).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

telegram_auth_statusA

Check Telegram authentication status.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.5/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description must disclose behavior but only says 'Check'. No mention of side effects, error conditions, or what 'status' entails (e.g., logged in or not).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single, concise sentence with no wasted words. Front-loaded and efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple status check tool with no output schema, the description is somewhat complete but fails to hint at return format or behavior, leaving the agent uncertain about expected output.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

No parameters exist, so schema coverage is 100%. Baseline for 0 params is 4; description adds no further semantics but is adequate for the parameter-less case.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'Check' and resource 'Telegram authentication status', distinguishing it from sibling tools like telegram_auth and telegram_configure.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

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 when to check status before sending messages. Implied context is weak.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

telegram_configureA

Set Telegram API credentials (api_id and api_hash from my.telegram.org).

ParametersJSON Schema
NameRequiredDescriptionDefault
api_idYesAPI ID from my.telegram.org
api_hashYesAPI Hash from my.telegram.org

TDQS

A3.5/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must disclose behavioral traits. The description only states 'Set' without explaining side effects (e.g., overwriting existing credentials) or validation behavior. This is insufficient for a configuration tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, focused sentence that immediately conveys the action. No unnecessary words or structural issues.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple configuration tool with two parameters and no output schema, the description is adequate but lacks details like whether credentials are validated or if prior configuration is overwritten. Sibling tools list is large, but context is minimally sufficient.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, and the schema descriptions are clear ('API ID from my.telegram.org'). The description adds no new meaning beyond referencing 'from my.telegram.org', which is already in the schema. Baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's function: setting Telegram API credentials (api_id and api_hash). It distinguishes itself from sibling tools like telegram_auth or telegram_send_message which involve authentication or messaging, not credential configuration.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies the tool is used for initial setup but does not explicitly state when to use it versus alternatives, such as before authentication or other Telegram tools. No exclusions or alternative references are provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

telegram_download_mediaA

Download media/document from a Telegram message into the MCP download root (MCP_DOWNLOAD_ROOT, default /data/downloads). Returns the saved path.

ParametersJSON Schema
NameRequiredDescriptionDefault
chatYesChat identifier (@username, +phone, or numeric ID)
filenameYesDestination filename relative to the MCP download root
message_idYesMessage id holding the media

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations on the tool, the description must carry full disclosure. It mentions the destination root and that it returns the saved path, but does not mention side effects such as file overwriting, what happens if the message contains no media, or whether it creates directories. The behavior is partially transparent but not fully specified.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences and immediately states the primary action, destination, and return value. There is no filler or redundancy; every word earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the simplicity of the tool and no output schema, the description adequately covers the core context: what gets downloaded, where it goes, and what is returned. It lacks additional context about error handling or overwrite behavior, but for the tool's scope it is nearly complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema already provides complete descriptions for all three parameters (chat, message_id, filename), including the fact that filename is relative to the MCP download root. The description adds minimal extra semantic value beyond that, so it meets the baseline for high schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'Download' and the resource 'media/document from a Telegram message', and indicates the destination root. It distinguishes itself from sibling tools like telegram_send_file (which uploads) and telegram_get_messages (which lists messages) by focusing on downloading a specific message's media. However, it does not explicitly name those alternatives, so it is clear but not maximally distinctive.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage when a media/document from a specific Telegram message is needed, but it does not explicitly state when to use this tool versus alternatives like telegram_send_file or telegram_get_messages. There is no mention of preconditions (e.g., needing a message ID from another tool) or scenarios where this tool would not be appropriate. 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.

telegram_get_dialogsC

List recent Telegram chats (users, groups, channels).

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo

TDQS

C2.7/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided. The description does not disclose behavior such as what 'recent' means, authentication requirements, or rate limits. Minimal transparency beyond the basic function.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence, which is concise but lacks necessary details. It is front-loaded but too brief to fully inform the agent.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite the tool's simplicity (one optional parameter, no output schema), the description fails to explain what 'recent' means, ordering, or any constraints. It is incomplete for reliable tool selection and invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%. The only parameter 'limit' is not described in the description, and the tool text does not mention the parameter at all. The agent gets no additional meaning beyond the schema's default value.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool lists recent Telegram chats, specifying the types (users, groups, channels), which distinguishes it from sibling tools like telegram_get_messages.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

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 like telegram_get_messages or telegram_search_contacts. The description lacks context for choosing this tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

telegram_get_messagesA

Read messages from a Telegram chat. Chat can be @username, phone, or numeric ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
chatYesChat identifier (@username, +phone, or numeric ID)
limitNo
searchNoSearch text in messages

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, description correctly identifies read operation but does not explicitly state absence of side effects or rate limits, leaving behavioral traits partially uncovered.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single sentence is front-loaded with purpose and parameter clarification, containing no unnecessary words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Description covers basic purpose and chat format, but lacks details about return structure or pagination; absence of output schema increases need for such info.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Description clarifies chat parameter format beyond schema, but does not address limit or search parameters; schema coverage is 67%, so description only partially compensates.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description specifies verb 'Read' and resource 'messages' from a Telegram chat, clearly distinguishing from sibling tools like telegram_get_dialogs and telegram_send_message.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Description implies usage for reading messages but lacks explicit guidance on when to use vs alternatives, though tool name makes it straightforward.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

telegram_search_contactsC

Search Telegram contacts by name or username.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYesSearch query (name or username)

TDQS

C2.7/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description bears full responsibility for behavioral disclosure. It only states the basic action, omitting details like result limits, error behavior, or whether it searches local or server-side contacts. This is insufficient for safe agent use.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single concise sentence. However, it could include more context without becoming verbose, such as noting that it returns matching contacts or requires prior authentication.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity and lack of output schema, the description is too brief. It fails to mention authentication requirements, result format, or scope limitations, leaving the agent underinformed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, but the description adds no value beyond the schema's parameter description. It merely repeats 'by name or username' without clarifying format, partial matching, or case sensitivity.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool searches contacts by name or username, using a specific verb and resource. It distinguishes implicitly from sibling tools like telegram_get_dialogs or telegram_send_message, but does not explicitly differentiate.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

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, nor any prerequisites (e.g., authentication status) or exclusions. The agent has no context for appropriate invocation.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

telegram_send_fileA

Send a file/document to a Telegram chat. The file must live under the MCP download root (MCP_DOWNLOAD_ROOT, default /data/downloads) — pass a relative path or an absolute path inside it. Chat can be @username, phone, or numeric ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
chatYesChat identifier (@username, +phone, or numeric ID)
pathYesFile path relative to the MCP download root (or absolute within it)
captionNoOptional caption
reply_toNoMessage ID to reply to

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. It discloses the path restriction and acceptable chat formats but does not mention potential side effects, authentication requirements, or error behaviors. Basic transparency is present, but richer behavioral details are absent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, front-loaded with the primary action and directly follows with the key constraint. Every sentence serves a purpose; no fluff or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple tool with no output schema, the description adequately covers what it does, the file location constraint, and accepted chat identifiers. It does not explain optional parameters (caption, reply_to), but these are fully documented in the schema, so completeness is sufficient.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The tool description largely repeats the parameter descriptions (chat format, path relative to download root) rather than adding new semantic layers. No additional meaning beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool sends a file/document to a Telegram chat, using a specific verb and resource. It also distinguishes itself from the sibling telegram_send_message by explicitly focusing on file/document transmission.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains when to use the tool by specifying the file must be under the MCP download root and how to provide the path. It does not explicitly mention alternatives like telegram_send_message, but the core use case is self-evident and the path constraint provides practical guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

telegram_send_messageB

Send a Telegram message. Chat can be @username, phone, or numeric ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
chatYesChat identifier (@username, +phone, or numeric ID)
messageYesMessage text
reply_toNoMessage ID to reply to

TDQS

B3.3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description alone must disclose behavioral traits. It fails to mention authentication requirements, rate limits, error handling, or delivery guarantees. The brief description leaves key behaviors undocumented.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence, highly concise and front-loaded with the action. It could include more detail without being verbose, but it avoids unnecessary words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description lacks context on prerequisites (e.g., authentication via telegram_auth), failure modes, return values (no output schema), and overall flow. It is too minimal for a messaging tool with no annotations or output schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3. The description adds minimal extra meaning beyond the schema's parameter descriptions (e.g., '(@username, +phone, or numeric ID)' is helpful but already in schema).

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action (Send) and the resource (Telegram message). It specifies acceptable chat identifiers, distinguishing it from sibling tools like telegram_get_messages or telegram_search_contacts.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description does not explicitly guide when to use this tool over alternatives. It relies on the tool name and context, but lacks explicit when-to-use or when-not-to-use instructions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

telegram_sub_addA

Subscribe a principal's Telegram listener to a chat (admin allow-list). No subscriptions for a principal = listen to ALL (back-compat). Once a principal has any subscription, only those chats are pushed to its telegram: channel. Use 'principal' to assign for another user.

ParametersJSON Schema
NameRequiredDescriptionDefault
modeNoauto
noteNo
titleNo
chat_idYesTelegram chat id (negative for groups)
principalNoTarget principal/user (default: current)

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. It discloses key behavior: no subscriptions means listen to ALL, and once a principal has any subscription, only those chats are pushed. This covers important side effects, though it does not detail every edge case (e.g., duplicate subscriptions, overwrite semantics).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise and well-structured, covering the main behavior in a few sentences without excessive verbosity. The back-compat note and principal usage are included efficiently.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description provides sufficient context for the tool's primary use case and its behavioral implications. It does not include return value details, but with no output schema defined, that is not required. Overall, an agent can understand when and why to use this tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has 5 parameters but only chat_id and principal are described in the text. mode, note, and title have no explanation in the description, leaving their purpose and acceptable values unclear. With only 40% schema coverage, the description fails to add meaning for most parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action (subscribe a principal's Telegram listener to a chat) and the resource (chat with admin allow-list). It also explains the back-compat behavior and the use of 'principal' to assign for another user, making the purpose specific and unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains the core behavior and mentions 'Use principal to assign for another user,' but it does not explicitly contrast with sibling tools like telegram_sub_list or telegram_sub_remove. The guidance on when to use this tool versus alternatives is implied rather than stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

telegram_sub_listB

List a principal's Telegram chat subscriptions. allow_all=true means no filter (listens to all).

ParametersJSON Schema
NameRequiredDescriptionDefault
principalNoTarget principal/user (default: current)

TDQS

B3.3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are present, so the description carries full responsibility for transparency. It does not explicitly state that the operation is read-only, nor does it disclose side effects, permissions, or the behavior when allow_all is false or omitted.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise, with exactly two sentences and no redundant wording. It efficiently conveys the core function and a key parameter behavior.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers the primary action but omits details such as the return format, whether the operation is read-only, and the exact meaning of the default allow_all behavior. Given the simple listing nature, it is adequate but not fully complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema already describes the 'principal' parameter well ('Target principal/user (default: current)'), and the description adds no further meaning to it. However, the description introduces an 'allow_all' parameter not present in the schema, which could confuse agents about valid inputs.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: listing a principal's Telegram chat subscriptions. The verb 'List' and resource 'Telegram chat subscriptions' are specific, and it distinguishes from sibling tools like telegram_sub_remove.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

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 mention of allow_all=true gives a hint about filtering but does not explain when to set it or when to prefer this over other subscription-related tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

telegram_sub_removeC

Remove a chat from a principal's Telegram subscription allow-list.

ParametersJSON Schema
NameRequiredDescriptionDefault
chat_idYes
principalNoTarget principal/user (default: current)

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It only states the action ('Remove') and does not mention side effects, reversibility, error handling, or what happens if the chat is not in the allow-list.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, clear sentence with no redundant words or unnecessary detail, making it highly concise and well-structured.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description lacks essential context about the subscription allow-list semantics, expected return values, error conditions, or any post-conditions after removal. It is minimal and leaves the agent guessing about operational details.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description does not explain the parameters. 'chat_id' is left entirely undefined, and while 'principal' has a schema description ('Target principal/user'), the description adds no further meaning or clarification about their roles or constraints.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Remove'), names a precise resource ('a chat from a principal's Telegram subscription allow-list'), and clearly distinguishes this from sibling tools like telegram_sub_add and telegram_sub_list.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is given about when to use this tool versus alternatives (e.g., telegram_sub_add or telegram_sub_list), nor any mention of prerequisites or scenarios where removal is appropriate.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

user_connection_activateA

Activate one of your personal connections as the working connection.

ParametersJSON Schema
NameRequiredDescriptionDefault
aliasYesConnection name to activate

TDQS

A3.5/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided. The description does not disclose effects of activation (e.g., deactivates previous connection, whether it's idempotent, or any side effects). For a tool with no annotations, more transparency is needed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single, front-loaded sentence with no wasted words. The key action and object are immediately clear.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple activation tool with one parameter and no output schema, the description is minimally adequate but lacks mention of what happens on success or failure, or the return value.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with a single parameter. The description adds no extra meaning beyond the schema's 'Connection name to activate'. Baseline score applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool activates a personal connection as the working connection, which is a specific verb-resource pair. It distinguishes from sibling tools like user_connection_add, user_connection_delete, and user_connection_list.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

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 context implies it's for switching connections, but no when-not-to-use or mentions of other tools for managing connections.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

user_connection_addB

Add/update a personal Odoo connection (saved per-user). Supports Odoo, SSH, and Portainer settings.

ParametersJSON Schema
NameRequiredDescriptionDefault
dbYesDatabase name
urlYesOdoo URL
userYesOdoo username
aliasYesConnection name
api_keyNoAPI key
ssh_hostNo
ssh_portNo
ssh_userNo
web_loginNoWeb session login (user/email)
web_passwordNoWeb session password
portainer_urlNo
portainer_tokenNo

TDQS

B3.3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided. Description indicates mutation ('Add/update') and per-user scope, but does not disclose side effects, authentication needs, rate limits, or behavior on update (overwrite/merge). Insufficient for a tool with no 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, no fluff. Concise and front-loaded with key purpose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

12 parameters, no output schema, moderate schema coverage. Description does not explain return values, update vs add behavior, or connection type selection logic. Incomplete for a complex tool with many optional fields.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 58%. Description only hints at parameter groups ('Supports Odoo, SSH, and Portainer settings') without explaining each parameter's role or how connection types are determined. Does not compensate for schema gaps.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states 'Add/update a personal Odoo connection (saved per-user)', specifying verb, resource, and scope. It distinguishes from sibling tools like user_connection_list and user_connection_delete.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Implies usage for managing personal connections, but lacks explicit guidance on when to use Odoo vs SSH vs Portainer settings. No mention of prerequisites or when not to use.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

user_connection_deleteA

Delete a personal connection.

ParametersJSON Schema
NameRequiredDescriptionDefault
aliasYesConnection name to delete

TDQS

A3.5/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description merely states the action without disclosing behavioral traits such as permanence, required permissions, or potential side effects. No annotations are present, so the description should compensate but fails to do so.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence with no unnecessary words. It is front-loaded and effectively communicates the tool's purpose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is simple (one parameter, no output schema), and the description covers the core action. However, it lacks details about the response or any side effects, which would be beneficial for an agent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has 100% coverage with a single parameter 'alias' described as 'Connection name to delete'. The description adds no additional meaning beyond the schema, so baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Delete a personal connection', specifying the action (delete) and resource (personal connection). It is distinct from sibling tools like user_connection_add, user_connection_list, and user_connection_activate.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

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 vs alternatives is provided. However, the name and description imply it is for deleting connections, and sibling tools cover other operations, so the context is moderately clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

user_connection_listB

List your personal connections.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3/5.0
Behavior1/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are present, so the description bears full responsibility for disclosing behavioral traits. The description only states 'List your personal connections' with no mention of side effects, read-only nature, authentication requirements, or any other behavioral details.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise at one short sentence, with no redundant information. For a tool with no parameters, this level of brevity is appropriate.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

While the description is minimal, the tool is simple (no parameters, no output schema) and the sibling tools provide some context. However, the description does not explain what 'personal connections' are or what the output format looks like, leaving some ambiguity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, so the description does not need to explain parameter semantics. The input schema coverage is 100% (empty), and the description adequately indicates the tool's purpose.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'list' and the resource 'personal connections', making the tool's primary action unambiguous. However, it does not differentiate from sibling tools like user_connection_add or user_connection_delete, which are also connection-related but perform different actions.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

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., when to list vs. add or delete connections). The description does not include any contextual usage information.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

who_am_iA

Show current user identity and active connection.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the burden. It implies a read-only operation ('Show'), but does not disclose network calls, caching, or exact data returned. It adds minimal behavioral context beyond what the name suggests.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence with no wasted words. It is front-loaded and efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (no params, no output schema), the description adequately communicates its purpose. It could be slightly more specific about what 'active connection' refers to, but it is sufficient for an agent to understand the basic function.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters and schema coverage is 100%. The description does not need to add parameter info, and it correctly avoids superfluous details. Baseline of 4 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly uses the verb 'Show' with the resource 'current user identity and active connection', which is specific. However, it does not differentiate from the sibling tool 'identify', which might perform a similar function.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

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 like 'identify' or other authentication status tools. There is no mention of prerequisites or scenarios.

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.

  1. 15 tool updatesv2.31.0
    • Addedsession_list
    • Addedsession_revoke
    • Addedtelegram_agent_create_quote
    • Addedtelegram_agent_enroll
    • Addedtelegram_agent_get_scenario
    • Addedtelegram_agent_list
    • Addedtelegram_agent_product_lookup
    • Addedtelegram_agent_route
    • Addedtelegram_agent_set_scenario
    • Addedtelegram_agent_unenroll
    • Addedtelegram_download_media
    • Addedtelegram_send_file
    • Addedtelegram_sub_add
    • Addedtelegram_sub_list
    • Addedtelegram_sub_remove
  2. 123 tool updatesv0.1.0
    • First observedai_collection_info
    • First observedai_invoice_extract
    • First observedai_invoice_pipeline_run
    • First observedai_invoice_pipeline_steps
    • First observedai_invoice_pipeline_summary
    • First observedai_invoice_plugins_reload
    • First observedai_invoice_scan_pending
    • First observedai_invoice_stack_inspect
    • First observedai_list_documents
    • First observedai_pipeline_run
    • First observedai_pipeline_step_execute
    • First observedai_pipeline_steps_list
    • First observedai_search_similar
    • First observedai_tokenize_collection
    • First observedai_tokenize_record
    • First observedai_usage_budget_status
    • First observedai_usage_log_export
    • First observedai_usage_log_query
    • First observedai_usage_log_stats
    • First observedgit_remote
    • First observedgithub_api
    • First observedgoogle_auth
    • First observedgoogle_auth_status
    • First observedgoogle_calendar_create_event
    • First observedgoogle_calendar_delete_event
    • First observedgoogle_calendar_events
    • First observedgoogle_calendar_list
    • First observedgoogle_calendar_update_event
    • First observedgoogle_gmail_labels
    • First observedgoogle_gmail_read
    • First observedgoogle_gmail_search
    • First observedgoogle_gmail_send
    • First observedidentify
    • First observedmcp_terminal_get_config
    • First observedmemory_delete
    • First observedmemory_list
    • First observedmemory_pull
    • First observedmemory_read
    • First observedmemory_share
    • First observedmemory_write
    • First observedodoo_attachment_download
    • First observedodoo_attachment_upload
    • First observedodoo_cert_info
    • First observedodoo_cert_refresh
    • First observedodoo_connect
    • First observedodoo_connections
    • First observedodoo_create
    • First observedodoo_disconnect
    • First observedodoo_execute
    • First observedodoo_fields_get
    • First observedodoo_fp_configure
    • First observedodoo_fp_details
    • First observedodoo_fp_list
    • First observedodoo_fp_remove_action
    • First observedodoo_fp_types
    • First observedodoo_get_field_translations
    • First observedodoo_list_models
    • First observedodoo_list_translatable_fields
    • First observedodoo_message_post
    • First observedodoo_module_info
    • First observedodoo_read
    • First observedodoo_record_backup
    • First observedodoo_refresh
    • First observedodoo_report
    • First observedodoo_search
    • First observedodoo_search_count
    • First observedodoo_search_read
    • First observedodoo_stock_close_unaccounted_value
    • First observedodoo_stock_initial_delete
    • First observedodoo_stock_initial_import
    • First observedodoo_stock_initial_opening_journal
    • First observedodoo_stock_mo_delete_draft
    • First observedodoo_stock_product_flip_to_storable
    • First observedodoo_translate_context_aware
    • First observedodoo_translate_field
    • First observedodoo_translate_html
    • First observedodoo_unlink
    • First observedodoo_version
    • First observedodoo_web_call
    • First observedodoo_web_export
    • First observedodoo_web_login
    • First observedodoo_web_logout
    • First observedodoo_web_read
    • First observedodoo_web_report
    • First observedodoo_web_request
    • First observedodoo_website_add_snippet
    • First observedodoo_website_list_page_snippets
    • First observedodoo_website_list_snippets
    • First observedodoo_website_remove_snippet
    • First observedodoo_website_update_snippet
    • First observedodoo_write
    • First observedopen_connection_manager
    • First observedproxy_call
    • First observedproxy_discover
    • First observedproxy_refresh
    • First observedpublic_access_barcode
    • First observedpublic_access_download
    • First observedpublic_access_export_csv
    • First observedpublic_access_export_xlsx
    • First observedpublic_access_image
    • First observedpublic_access_portal_home
    • First observedpublic_access_portal_invoices
    • First observedpublic_access_portal_orders
    • First observedpublic_access_portal_purchases
    • First observedpublic_access_portal_tickets
    • First observedpublic_access_report_html
    • First observedpublic_access_report_pdf
    • First observedpublic_access_report_xlsx
    • First observedpublic_access_shop
    • First observedpublic_access_sitemap
    • First observedssh_execute
    • First observedtelegram_auth
    • First observedtelegram_auth_status
    • First observedtelegram_configure
    • First observedtelegram_get_dialogs
    • First observedtelegram_get_messages
    • First observedtelegram_search_contacts
    • First observedtelegram_send_message
    • First observeduser_connection_activate
    • First observeduser_connection_add
    • First observeduser_connection_delete
    • First observeduser_connection_list
    • First observedwho_am_i

TDQS

C2.9/5.0

Scored across 138 tools

Disambiguation3/5

Many tools have clear distinct purposes, but there are several overlapping pairs like odoo_search vs odoo_search_read vs odoo_search_count, odoo_report vs odoo_web_report vs public_access_report_pdf, and odoo_execute vs odoo_web_call. The separation between web-session and XML-RPC tools is subtle and could cause misselection. Some AI and stock tools are also highly specialized, but their descriptions help.

Naming Consistency4/5

Most tools follow a consistent snake_case prefix_domain_action pattern (e.g., odoo_read, telegram_send_message, google_calendar_list). Some outliers like identify, who_am_i, and open_connection_manager break the pattern but are still readable. Overall the naming is predictable and grouped by domain.

Tool Count1/5

138 tools is far beyond any reasonable scope for a single MCP server. Even for a multi-domain personal assistant, this is excessive and will overwhelm an agent's tool selection. The server would benefit from splitting into separate MCP servers per domain (Odoo, Telegram, Google, AI, etc.).

Completeness4/5

The tool surface covers a wide range of operations across Odoo (CRUD, web, reports, translations, website snippets, fiscal positions, stock), Telegram, Google (Gmail, Calendar), AI pipelines, and memory. Some minor gaps exist (e.g., no Gmail draft/delete, no Odoo user management), but core workflows are well covered. The sheer number suggests high coverage, though it could be more focused.

Maintenance

ActivityMaintained
ResponsivenessWithin a week

Related MCP Connectors

Related MCP Servers

  • A
    license
    B
    quality
    A
    maintenance
    An MCP server implementation that integrates with Odoo ERP systems, enabling AI assistants to interact with Odoo data and functionality through the Model Context Protocol.
    41
    656 PyPI
    408
    MIT
  • A
    license
    Not graded
    quality
    A
    maintenance
    An MCP server that enables AI assistants like Claude to interact with Odoo ERP systems through natural language, allowing users to search, create, update, and manage business data in their Odoo instance.
    1,571 PyPI
    384
    Mozilla Public 2.0
  • A
    license
    D
    quality
    C
    maintenance
    MCP server for Odoo 18 that provides 85 tools for CRUD operations, business actions, and migration workflows, enabling natural language interaction with Odoo ERP.
    85
    6
    MIT
  • F
    license
    Not graded
    quality
    D
    maintenance
    MCP server to connect Claude with Odoo 18, enabling CRUD operations on Odoo models via natural language.
    2
    -