Skip to main content
Glama
ai-zar

odoo-sh-readonly-mcp

by ai-zar

odoo-sh-readonly-mcp 🔒

MCP solo lectura para Odoo.sh: builds, entornos, logs y estado del sistema — consultable por una AI sin entrar a la web.

Sin tools de escritura: no hay git push, ni shell arbitrario, ni escritura de archivos. SSH via execFile (sin shell → sin command injection) con comandos whitelisted. El smoke test de CI falla el build si alguna vez aparece una tool con nombre de escritura o sin readOnlyHint.


📑 Tabla de contenidos


Related MCP server: readonly-mcp-akamai

🧰 Tools

Tool

Fuente

Qué da

odoo_sh_overview

Web API

Repos + branches con stage (production/staging/dev) y último build

odoo_sh_list_builds

Web API

Builds recientes con status real (success/failed/testing)

odoo_sh_model_fields

Web API

Introspección de campos de modelos paas.*

odoo_sh_search_read

Web API

Query genérica read-only (whitelist paas.*)

odoo_sh_logs

SSH

tail de odoo.log / install.log / pip.log (+ filtro)

odoo_sh_system_info

SSH

Hostname, uptime, disco, memoria, versiones

odoo_sh_databases

SSH

DBs PostgreSQL y tamaños

odoo_sh_status

Diagnóstico de configuración (sin exponer secretos)


🐳 Instalación via imagen GHCR (recomendado)

Cada push a main publica una imagen multi-arch (amd64/arm64) en GitHub Container Registry:

ghcr.io/ai-zar/odoo-sh-readonly-mcp:latest

1. Autenticarse contra GHCR

El repo es privado, así que la imagen también. Necesitás un PAT con scope read:packages:

echo $GITHUB_PAT | docker login ghcr.io -u TU_USUARIO --password-stdin
docker pull ghcr.io/ai-zar/odoo-sh-readonly-mcp:latest

2. Configurar el cliente MCP

Solo builds/entornos (sin SSH):

{
  "mcpServers": {
    "odoo-sh": {
      "command": "docker",
      "args": [
        "run", "-i", "--rm",
        "-e", "ODOO_SH_SESSION_ID",
        "-e", "ODOO_SH_PROJECT",
        "ghcr.io/ai-zar/odoo-sh-readonly-mcp:latest"
      ],
      "env": {
        "ODOO_SH_SESSION_ID": "tu_session_id",
        "ODOO_SH_PROJECT": "mi-proyecto"
      }
    }
  }
}

Con SSH (logs / system / DBs) — montá la clave privada read-only:

{
  "mcpServers": {
    "odoo-sh": {
      "command": "docker",
      "args": [
        "run", "-i", "--rm",
        "-v", "/home/usuario/.ssh/odoo_sh:/keys/id:ro",
        "-e", "ODOO_SH_SESSION_ID",
        "-e", "ODOO_SH_SSH_HOST",
        "-e", "ODOO_SH_SSH_USER",
        "-e", "ODOO_SH_SSH_KEY_PATH",
        "ghcr.io/ai-zar/odoo-sh-readonly-mcp:latest"
      ],
      "env": {
        "ODOO_SH_SESSION_ID": "tu_session_id",
        "ODOO_SH_SSH_HOST": "mi-proyecto.dev.odoo.com",
        "ODOO_SH_SSH_USER": "BUILD_ID",
        "ODOO_SH_SSH_KEY_PATH": "/keys/id"
      }
    }
  }
}

⚠️ En Windows usá rutas estilo C:\\Users\\usuario\\.ssh\\odoo_sh:/keys/id:ro en el -v. ODOO_SH_SSH_KEY_PATH siempre apunta a la ruta dentro del contenedor (/keys/id).

3. Probar la imagen a mano

docker run -i --rm -e ODOO_SH_SESSION_ID=xxx \
  ghcr.io/ai-zar/odoo-sh-readonly-mcp:latest

Pegá esto en stdin para ver las tools:

{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"cli","version":"1"}}}
{"jsonrpc":"2.0","id":2,"method":"tools/list"}

💻 Instalación local (Node)

git clone https://github.com/ai-zar/odoo-sh-readonly-mcp.git
cd odoo-sh-readonly-mcp
npm install
npm run smoke      # verifica que arranca y expone las 8 tools
{
  "mcpServers": {
    "odoo-sh": {
      "command": "node",
      "args": ["C:\\ruta\\absoluta\\odoo-sh-readonly-mcp\\index.js"],
      "env": { "ODOO_SH_SESSION_ID": "tu_session_id" }
    }
  }
}

⚙️ Configuración

Variable

Requerida

Descripción

ODOO_SH_SESSION_ID

✅ (web)

Cookie session_id de www.odoo.sh

ODOO_SH_PROJECT

Repo por defecto para filtrar

ODOO_SH_BASE_URL

Default https://www.odoo.sh

ODOO_SH_SSH_HOST

✅ (ssh)

<proyecto>.dev.odoo.com

ODOO_SH_SSH_USER

✅ (ssh)

BUILD_ID o nombre de branch

ODOO_SH_SSH_KEY_PATH

✅ (ssh)

Ruta a la clave privada

ODOO_SH_SSH_PORT

Default 22

ODOO_SH_SSH_TIMEOUT_MS

Default 30000

Odoo.sh no expone API pública; su panel web es un Odoo estándar. Se usa tu propia sesión:

  1. Logueate en https://www.odoo.sh

  2. F12 → Application → Cookies → www.odoo.sh → copiá session_id

La cookie expira: cuando las llamadas fallen con error de sesión, repetí el paso. Los permisos son exactamente los de tu usuario — ni más ni menos.


💬 Ejemplos de uso con AI

  • "¿Cómo están los builds de staging?"

  • "¿Falló algún build esta semana en main?"

  • "Mostrame los últimos errores del log de producción"

  • "¿Cuánto pesa la DB de producción?"

  • "Listame todos los entornos y en qué commit está cada uno"


🔬 Nota técnica: modelos paas.*

Los modelos internos de Odoo.sh (paas.build, paas.branch, ...) no están documentados y sus campos pueden cambiar. Por eso:

  • resilientSearchRead: si un campo no existe, reintenta pidiendo todos los campos legibles

  • odoo_sh_model_fields: la AI puede autodescubrir el schema y después consultar con precisión via odoo_sh_search_read

Primera vez, pedile a la AI:

"Usá odoo_sh_model_fields sobre paas.build y después listá los builds con los campos correctos"


🛡️ Seguridad

Riesgo

Mitigación

Command injection

SSH via execFile (argv, sin shell). Comandos remotos son templates fijos; solo enteros validados y un filtro con whitelist de caracteres se interpolan

Escritura accidental

No existen tools de escritura. Whitelist de modelos + de métodos (search_read, read, search_count, fields_get, name_search)

Prompt injection → acción destructiva

Superficie de ataque = solo lectura. Lo peor que puede pasar es leer datos a los que ya tenés acceso

MITM en SSH

StrictHostKeyChecking=accept-new (TOFU) en vez de no

Secretos en la imagen

Nada hardcodeado; todo por env vars. Clave SSH se monta read-only en runtime

Supply chain

Imagen con attestation de provenance (actions/attest-build-provenance) firmada por GitHub


MIT — ver LICENSE.

Available Tools

8 tools
odoo_sh_databasesList databases (SSH)A
Read-only

List PostgreSQL databases and sizes on the configured Odoo.sh build container. Read-only.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.2/5.0
Behavior4/5

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

Explicitly declares 'Read-only', which aligns with the readOnlyHint annotation. No additional side effects are described, but for a read-only listing tool 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?

Very concise and to the point. Every word adds meaning; no filler 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 tool with no parameters and a simple read-only action, the description is complete. It does not explain output format, but the lack of output schema and the simplicity of the action make this 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?

No parameters exist, so the description naturally covers all there is to know. The description does not add extra semantics, but none 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?

Clearly states the action ('List') and the specific resource ('PostgreSQL databases and sizes on the configured Odoo.sh build container'). Distinct from sibling tools like odoo_sh_overview or odoo_sh_logs.

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 'Read-only' note provides some context, but no direct comparison to sibling tools or conditions for selection.

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

odoo_sh_list_buildsList Odoo.sh buildsA
Read-only

List recent builds with their REAL status/result (e.g. success, failed, testing) from the Odoo.sh platform API. Filter by branch name. Requires ODOO_SH_SESSION_ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax builds to return
branchNoBranch name to filter, e.g. 'main' or 'staging-x'

TDQS

A4/5.0
Behavior4/5

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

The description adds the requirement for ODOO_SH_SESSION_ID and emphasizes 'REAL' statuses, which goes beyond the readOnly/openWorld/destructive annotations. No contradictions exist, and it provides useful behavioral context.

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 with no redundancy. It efficiently conveys purpose, key details, and a requirement without any 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?

The description provides enough context for the expected output (builds with statuses), the source (Odoo.sh API), and a prerequisite (session ID). While there is no output schema, the description gives a reasonable idea of what the tool returns.

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 clear parameter descriptions for limit and branch. The description reinforces branch filtering but does not add significant meaning beyond the schema, so the 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 purpose: listing recent builds with their actual statuses (success, failed, testing). It distinguishes itself from sibling tools by focusing on builds and mentioning the Odoo.sh API and branch filtering.

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 says 'List recent builds' and mentions branch filtering, which implies when to use it. However, it does not explicitly contrast it with alternatives like odoo_sh_logs or odoo_sh_status, so usage guidance is only implicit.

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

odoo_sh_logsRead Odoo logs (SSH)C
Read-only

Tail Odoo logs (odoo.log, install.log or pip.log) from the configured Odoo.sh build container via SSH. Read-only.

ParametersJSON Schema
NameRequiredDescriptionDefault
grepNoOptional fixed-string filter (case-insensitive), e.g. 'ERROR'
linesNo
log_typeNoodoo

TDQS

C2.9/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false; description reinforces this with 'Read-only' and adds context about SSH and specific log files. It does not describe return format, whether the tail is continuous, or any operational caveats, but no contradiction exists.

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 short sentences with no redundant phrasing. The core action, target, and safety are 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?

Provides purpose and safety but omits parameter semantics and output expectations. Without an output schema or usage guidance, an agent cannot fully infer what the tool will return or when to prefer it.

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?

Only grep has a schema description; lines and log_type lack descriptions, and schema coverage is 33%. The description lists log file names but does not explain the parameters, defaults, or how log_type maps to the enumerated 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?

Clearly states the action (Tail/read), resource (Odoo logs), and scope (odoo.log, install.log, pip.log) from the configured build container via SSH. The read-only nature is explicit and it is distinguishable from sibling tools like system_info or search_read.

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

Usage Guidelines1/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 instead of siblings such as odoo_sh_status or odoo_sh_system_info. It does not mention prerequisites, exclusions, or typical scenarios, leaving selection entirely to inference.

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

odoo_sh_model_fieldsDiscover Odoo.sh model fieldsA
Read-only

Introspect available fields on an Odoo.sh platform model (paas.repository, paas.branch, paas.build, ...). Use this if odoo_sh_list_builds/odoo_sh_overview return unexpected data, then query precisely with odoo_sh_search_read.

ParametersJSON Schema
NameRequiredDescriptionDefault
modelYesModel to introspect

TDQS

A4.7/5.0
Behavior4/5

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

Annotations already establish read-only, open-world, and non-destructive behavior. The description aligns with these by using 'introspect', but adds no new side-effect or output behavior details. Given the annotations cover the key traits, this is acceptable, though slightly more detail on the response format would have been beneficial.

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 and tightly scoped. It leads with the action, provides context, and states the conditional trigger in two sentences without extraneous detail. All content is relevant and contributes to understanding.

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 simple interface (one parameter, no output schema), the description provides complete guidance: what it does, when to use it, and how it connects to downstream tools. It is self-sufficient for an agent to decide when and how to invoke it.

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 single parameter 'model' has full schema coverage with an enum and a basic description ('Model to introspect'). The main description enriches this by listing example values (paas.repository, paas.branch, etc.) and clarifying the domain (Odoo.sh platform model). Some additional semantics per enum value would be helpful, but the provided context is adequate for the tool's 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?

Clearly states the tool's function: introspecting available fields on an Odoo.sh platform model. Provides concrete examples (paas.repository, paas.branch) and differentiates from siblings by indicating it is a preliminary step before querying with odoo_sh_search_read.

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 conditionally recommends use: 'Use this if odoo_sh_list_builds/odoo_sh_overview return unexpected data'. Also guides the next step ('then query precisely with odoo_sh_search_read'), giving clear when-to-use and how-to-proceed instructions.

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

odoo_sh_overviewOdoo.sh project overviewA
Read-only

Get repositories, branches and their environment stage (production/staging/dev) with last build info from the Odoo.sh platform API. Use this first to understand the project layout. Requires ODOO_SH_SESSION_ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
projectNoRepository/project name to filter (default: ODOO_SH_PROJECT env or all)

TDQS

A4.8/5.0
Behavior5/5

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

The annotations already declare readOnlyHint=true and destructiveHint=false, and the description does not contradict these. It also mentions the required session ID, making the operational prerequisite transparent. No hidden side effects are implied.

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, using two sentences to convey the action, purpose, and prerequisite. There is no redundant information, and the key points are front-loaded: what it does and when to use it.

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 high-level overview purpose, the description sufficiently outlines the returned information (repositories, branches, environment stages, last build info). It also provides the essential prerequisite (session ID) and usage hint. Since no output schema is provided, the description does not need to specify return formats.

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 only parameter 'project' has a clear description in the schema: it is a filter with a default value derived from an environment variable or all projects. This fully explains the parameter's meaning and behavior, so no additional description is 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 specific action ('Get repositories, branches and their environment stage with last build info') and the resource (Odoo.sh platform API). It also adds a clear purpose ('Use this first to understand the project layout') that distinguishes it from more targeted sibling tools like odoo_sh_list_builds or odoo_sh_logs.

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 an explicit usage condition ('Use this first to understand the project layout') and a prerequisite ('Requires ODOO_SH_SESSION_ID'). However, it does not explicitly mention alternatives or specify when not to use this tool, though the 'first' guidance implies a certain ordering.

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

odoo_sh_search_readGeneric read-only query on Odoo.sh modelsA
Read-only

Run a search_read on a whitelisted Odoo.sh platform model with a custom domain and field list. Read-only escape hatch when the curated tools don't cover a need. Example domain: [["branch_id.name","=","main"]]

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
modelYesModel to query
orderNoSort order, e.g. 'id desc'
domainNoOdoo domain, e.g. [["stage","=","production"]]
fieldsNoFields to return (empty = all)

TDQS

A4.4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, and the description repeats read-only without adding safety details like auth, limits, or error behavior. It adds the whitelisted/escape-hatch framing but does not go beyond the annotations meaningfully.

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 tight sentences with no filler; the example is embedded compactly. Front-loads the verb and resource, then gives the when-to-use cue.

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?

Enough for a generic read-only escape hatch: model enum, domain example, field list, and limit default are available. It doesn't state return shape or error behavior, but that is less critical for a simple search_read.

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 most parameters; the description adds a concrete domain example and clarifies fields vs domain, but limit and order semantics are left to the schema. Since coverage is high, this is above baseline but not thorough.

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 runs a search_read on whitelisted Odoo.sh models and positions itself as a generic read-only escape hatch. The example domain makes the intended use concrete, and the contrast with curated tools distinguishes its purpose.

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 to use it when curated tools don't cover a need, which is a clear selection condition. The example domain also gives concrete usage guidance.

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

odoo_sh_statusMCP configuration statusA
Read-only

Show which data sources are configured (web API session, SSH) without exposing secrets. Use to diagnose setup issues.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare read-only and non-destructive behavior. The description adds a meaningful behavioral guarantee—'without exposing secrets'—which is practical and not implied by the annotations.

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

Conciseness5/5

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

Description is a single, focused sentence. No verbosity, no redundancy, and the key constraint (no secrets) is included without extra fluff.

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 status tool with no parameters and no output schema, the description fully covers what the tool does and when to use it. The lack of output details is acceptable given the tool's diagnostic nature.

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?

There are zero parameters, so there is nothing for the description to add. Baseline for 0 params is 4, and the description correctly avoids inventing unnecessary parameter 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?

Description clearly states the tool's purpose: showing which data sources are configured (web API session, SSH) without exposing secrets. The verb 'Show' and specific resource scope make it distinct from sibling tools like overview or logs.

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 'Use to diagnose setup issues,' providing clear guidance on when to invoke. It doesn't contrast with alternatives, but in context of sibling tools the intended use case is unambiguous.

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

odoo_sh_system_infoSystem info (SSH)A
Read-only

Hostname, uptime, disk, memory, Python and Odoo version of the configured Odoo.sh build container. Read-only.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.9/5.0
Behavior4/5

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

The description lists the specific data points returned and confirms no modifications. It aligns with the readOnlyHint annotation, and no side effects are implied. The information provided goes beyond the annotation by detailing the contents.

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 enumerates the key information without excessive 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.

Completeness4/5

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

The description is sufficient for a read-only system information tool. It does not require additional context about return format or error handling, as it is straightforward.

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 no parameters, and the schema coverage is complete. The description does not need to explain parameters, so the baseline score 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 states that the tool provides system information (hostname, uptime, disk, etc.) and is read-only. It is distinct from sibling tools by focusing on system-level details rather than data records or logs.

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 indicates it is read-only, suggesting it is safe to use for diagnostic purposes. However, it does not explicitly state when to prefer this over sibling tools like odoo_sh_status or odoo_sh_logs, leaving some ambiguity.

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. 8 tool updatesv1.0.0
    • First observedodoo_sh_databases
    • First observedodoo_sh_list_builds
    • First observedodoo_sh_logs
    • First observedodoo_sh_model_fields
    • First observedodoo_sh_overview
    • First observedodoo_sh_search_read
    • First observedodoo_sh_status
    • First observedodoo_sh_system_info

TDQS

A3.9/5.0

Scored across 8 tools

Disambiguation4/5

Tools are mostly distinct with clear purposes, though overview and list_builds overlap slightly in build-related information. Overall, each tool targets a specific function and confusion is unlikely.

Naming Consistency5/5

All tools use the consistent 'odoo_sh_' prefix followed by snake_case verbs/nouns, creating a uniform and predictable naming pattern.

Tool Count4/5

8 tools is a reasonable number for a read-only Odoo.sh management surface, covering key areas without being excessive or sparse.

Completeness4/5

The set covers critical read-only operations like builds, logs, system info, databases, and model search. It lacks some advanced operations (e.g., deployment history) but for a read-only utility it is well-rounded.

Maintenance

ActivitySlowing
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    D
    maintenance
    Read-only MCP server that allows AI assistants to query and monitor KVM Fleet devices, audit logs, and console sessions through the official REST API.
    5
    9 npm
    1
    MIT
  • F
    license
    Not graded
    quality
    D
    maintenance
    Read-only MCP server for Hevo Data API, enabling monitoring of pipelines, objects, destinations, models, and workflows with secure self-hosted credentials.
    -