Skip to main content
Glama

Odoo.sh MCP Server

šŸš€ SSH-based Model Context Protocol server for Odoo.sh - Build custom apps with AI assistance using Git workflow tools

License: MIT Node.js TypeScript GitHub Issues GitHub Stars PRs Welcome

✨ Features

Core Operations (v1.0)

  • šŸ” SSH-Based Access: Secure connection via SSH keys (no API token needed)

  • 🌿 Branch Operations: View branches, get current branch, commit history

  • šŸ—ļø Build Management: Trigger builds, monitor status, view logs

  • šŸ’¾ Database Access: List PostgreSQL databases and sizes

  • šŸ’» System Monitoring: Hostname, uptime, disk, memory, versions

  • šŸ Odoo Shell: Execute Python code in Odoo environment

šŸ†• Git Workflow & App Development (NEW in v1.0)

  • šŸ“ File Management: Create, read, update files with base64 encoding

  • šŸ“‚ Directory Operations: Create directory structures for modules

  • šŸ“– Git Status: Check modified, staged, and untracked files

  • āž• Git Add: Stage files for commit (single or multiple)

  • āœ… Git Commit: Commit changes with custom messages

  • šŸš€ Git Push: Push commits to remote Odoo.sh repository

  • 🌿 Git Checkout: Switch branches or create new feature branches

  • šŸ”„ Git Pull: Sync changes from remote

  • šŸ› ļø AI-Assisted Development: Let AI agents build complete Odoo modules

Related MCP server: Panda Odoo MCP Server

Table of Contents

Quick Start

# 1. Install dependencies
npm install

# 2. Configure environment
cp .env.example .env
# Edit .env and add your ODOO_SH_API_TOKEN

# 3. Build
npm run build

# 4. Add to your MCP client config (e.g., Claude Desktop)
# See Configuration section below

Installation

Prerequisites

  • Node.js >= 18.0.0

  • npm (comes with Node.js)

  • Odoo.sh Account with SSH access

  • OpenSSH client installed (included in Windows 10+, macOS, Linux)

  • MCP Client (Warp, Claude Desktop, Cline, Continue, etc.)

Steps

  1. Clone or download this repository

  2. Install dependencies:

    npm install
  3. Set up SSH access:

    • Add your SSH public key to Odoo.sh (Settings → Collaborators → SSH Keys)

    • Get your build ID and hostname from Odoo.sh (format: BUILD_ID@project-name.dev.odoo.com)

    • Save your private key to a secure location

  4. Build the project:

    npm run build

Configuration

Environment Variables

Create a .env file or set environment variables:

ODOO_SH_SSH_HOST=project-name.dev.odoo.com
ODOO_SH_SSH_USER=BUILD_ID              # e.g., 25357858
ODOO_SH_SSH_KEY_PATH=/path/to/ssh/key  # Absolute path to private key
ODOO_SH_SSH_PORT=22                    # Optional: default 22
ODOO_SH_SSH_PASSPHRASE=                # Optional: if key has passphrase
SSH_TIMEOUT=30000                      # Optional: milliseconds
LOG_LEVEL=info                         # Optional: debug, info, warn, error

šŸ” Security Tip: Never commit your private SSH key. Use absolute paths and secure permissions (chmod 600).

MCP Client Configuration

Claude Desktop

Edit claude_desktop_config.json:

{
  "mcpServers": {
    "odoo-sh": {
      "command": "node",
      "args": [
        "/absolute/path/to/Odoo.sh MCP/dist/index.js"
      ],
      "env": {
        "ODOO_SH_SSH_HOST": "project-name.dev.odoo.com",
        "ODOO_SH_SSH_USER": "BUILD_ID",
        "ODOO_SH_SSH_KEY_PATH": "/absolute/path/to/ssh/key"
      }
    }
  }
}

Cline (VSCode)

Add to VSCode settings:

{
  "cline.mcpServers": {
    "odoo-sh": {
      "command": "node",
      "args": ["/absolute/path/to/Odoo.sh MCP/dist/index.js"],
      "env": {
        "ODOO_SH_SSH_HOST": "${env:ODOO_SH_SSH_HOST}",
        "ODOO_SH_SSH_USER": "${env:ODOO_SH_SSH_USER}",
        "ODOO_SH_SSH_KEY_PATH": "${env:ODOO_SH_SSH_KEY_PATH}"
      }
    }
  }
}

Note: Use absolute paths to dist/index.js.

Usage

Once configured, your AI assistant can use Odoo.sh tools directly:

Example Interactions

Basic Operations

Check project info:

"Show me my Odoo.sh project information"

Check build status:

"What's the status of recent builds?"

View build logs:

"Show me the recent Odoo logs"

Building Custom Apps (NEW)

Create a new Odoo module:

"Create a new custom Odoo module called 'my_custom_app' with the basic structure"

The AI agent can:

  1. Create directory structure: my_custom_app/, my_custom_app/models/, etc.

  2. Create __init__.py, __manifest__.py files

  3. Create model files with Python code

  4. Create XML view files

  5. Stage all files with git add

  6. Commit with descriptive message

  7. Push to trigger Odoo.sh build

Modify existing module:

"Add a new field 'phone' to the Partner model in my_custom_app"

Complete development workflow example:

"I want to build a customer feedback module:
1. Create module structure for 'customer_feedback'
2. Add a Feedback model with fields: customer_id, rating, comment, date
3. Create list and form views
4. Add menu items
5. Commit and push to main branch"

Available Tools

The server provides 19 tools for Odoo.sh operations via SSH, including complete Git workflow support for building custom apps:

Project & Branches

  • get_project_info: Get project information including branch list

    • Returns: project name, repository, list of branches

    • šŸ’” Use this to list branches (recommended over list_branches)

  • get_current_branch: Get the currently checked out branch

    • Returns: current branch name

  • list_branches: List branches with commit info

    • Returns: branch names with last commit hash and message

    • āš ļø Known issue: May not work in some MCP clients (use get_project_info instead)

Builds

  • get_build_history: Get commit/build history for a branch

    • Parameters: branch (e.g., "main"), limit (default: 10)

    • Returns: commit hash, author, date, message

  • trigger_build: Trigger a new build by creating empty commit

    • Parameters: branch

    • Returns: git push output

Database

  • list_databases: List all PostgreSQL databases

    • Returns: database names and sizes

Logs & Shell

  • get_logs: Get Odoo logs from the server

    • Parameters: log_type ("odoo", "install", "pip"), lines (default: 100)

    • Returns: log entries with timestamps

  • execute_odoo_shell: Execute Python code in Odoo shell

    • Parameters: python_code

    • Returns: shell output

System

  • get_system_info: Get system information

    • Returns: hostname, uptime, disk usage, memory, Python version, Odoo version

Git Workflow & File Management (NEW - for building custom apps)

  • git_status: Get git status showing modified, staged, and untracked files

    • Returns: git status output

  • write_file: Create or update a file with given content

    • Parameters: filePath (relative to ~/src/user), content

    • Returns: success message

    • šŸ’” Uses base64 encoding to safely transfer file content via SSH

  • read_file: Read the contents of a file

    • Parameters: filePath (relative to ~/src/user)

    • Returns: file content

  • list_files: List files and directories in a path

    • Parameters: dirPath (optional, default: ., relative to ~/src/user)

    • Returns: ls -la output

  • create_directory: Create a directory (including parent directories)

    • Parameters: dirPath (relative to ~/src/user)

    • Returns: success message

  • git_add: Stage files for commit

    • Parameters: files (array of file paths or . for all)

    • Returns: git add output

  • git_commit: Commit staged changes

    • Parameters: message

    • Returns: git commit output

  • git_push: Push commits to remote repository

    • Parameters: branch (optional, defaults to current branch)

    • Returns: git push output

  • git_checkout: Switch to a branch or create a new branch

    • Parameters: branch, createNew (optional, default: false)

    • Returns: git checkout output

  • git_pull: Pull changes from remote repository

    • Returns: git pull output

Prompts

Guided workflows for common tasks:

check_build_status

Comprehensive build status check for a project:

  • Lists all branches

  • Shows recent builds

  • Highlights failures

  • Displays build trends

Usage: check_build_status with project_id

deploy_workflow

Step-by-step deployment guidance:

  • Checks current branch status

  • Verifies pending builds

  • Validates database backups

  • Guides through deployment

  • Provides verification steps

Usage: deploy_workflow with project_id and environment

Development

Scripts

# Build TypeScript
npm run build

# Development mode (auto-rebuild)
npm run dev

# Run tests
npm test

# Watch tests
npm test:watch

# Lint code
npm run lint

# Format code
npm run format

Project Structure

odoo-mcp-server/
ā”œā”€ā”€ src/
│   ā”œā”€ā”€ index.ts          # MCP server implementation
│   └── odoo-client.ts    # Odoo.sh API client
ā”œā”€ā”€ tests/                # Test files (to be added)
ā”œā”€ā”€ docs/
│   ā”œā”€ā”€ Runbook.md        # Setup and usage guide
│   ā”œā”€ā”€ DECISIONS.md      # Architectural decisions
│   ā”œā”€ā”€ Troubleshooting.md # Known issues
│   └── Docs-Index.md     # External references
ā”œā”€ā”€ dist/                 # Compiled JavaScript (generated)
ā”œā”€ā”€ package.json
ā”œā”€ā”€ tsconfig.json
└── .env.example

Testing

Tests are located in the tests/ directory. Run with:

npm test

Troubleshooting

Common Issues

1. SSH Connection Failed

Error: SSH connection error

Solution:

  • Verify SSH key path is correct and absolute

  • Check key permissions: chmod 600 /path/to/key (Unix) or icacls (Windows)

  • Verify hostname format: BUILD_ID@project-name.dev.odoo.com

  • Test manually: ssh -i /path/to/key BUILD_ID@host

2. list_branches Tool Not Working in Warp

Empty response from list_branches

Solution: Use get_project_info instead - it returns the branch list and works reliably in all MCP clients.

3. Antivirus Blocking SSH Commands (Windows)

Bitdefender: Malicious command line detected

Solution: Whitelist the SSH command or the project directory in your antivirus settings.

4. Server Not Appearing

  • Verify JSON syntax in MCP client config

  • Check absolute path to dist/index.js

  • Verify environment variables are set

  • Restart MCP client

5. Module Not Found

Error: Cannot find module '@modelcontextprotocol/sdk/server/index.js'

Solution: Run npm install and npm run build

See docs/Troubleshooting.md for more issues and solutions.

Architecture

Technology Stack

  • Runtime: Node.js >= 18.0.0

  • Language: TypeScript 5.3

  • Protocol: Model Context Protocol (MCP)

  • SSH Client: OpenSSH (subprocess)

  • Validation: Zod

  • Transport: stdio

Design Decisions

Key architectural decisions are documented in docs/DECISIONS.md and docs/SSH-MIGRATION.md:

  • dec-20251107T160000Z-ssh-over-api: SSH-based access instead of REST API

  • Why OpenSSH subprocess was chosen over Node.js ssh2 library

  • How Windows % escaping issues were resolved

  • Git command optimization for performance

Contributing

Contributions are welcome! Please:

  1. Follow existing code style (use npm run format)

  2. Add tests for new features

  3. Update documentation (README, Runbook, DECISIONS.md)

  4. Document issues in Troubleshooting.md

License

MIT License - see LICENSE file for details.


Maintained by: Odoo MCP Server Contributors
Version: 0.1.0

Available Tools

19 tools
create_directoryB

Create a directory (including parent directories)

ParametersJSON Schema
NameRequiredDescriptionDefault
dirPathYesDirectory path relative to ~/src/user

TDQS

B3.4/5.0
Behavior3/5

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

With no annotations, the description carries the behavioral burden. It does disclose the useful recursive trait that parent directories are created, but it omits what happens if the directory already exists (error vs. no-op), permission requirements, and the sandbox root implied by 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.

Conciseness5/5

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

One short sentence, front-loaded with the verb, and the parenthetical adds real information rather than padding. Nothing is wasted.

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 single-parameter filesystem operation with a fully documented schema, this is nearly sufficient. The only gaps are existing-directory behavior and permission/root assumptions, which is a minor omission for such a simple 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 100%, so the single parameter's meaning and its 'relative to ~/src/user' base are already fully documented in the schema. The description adds nothing about path syntax or constraints, so the baseline 3 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?

States a specific verb and resource ('Create a directory') and even distinguishes the recursive scope with '(including parent directories)'. No sibling tool also creates directories, so there is nothing to differentiate against, but the purpose is unambiguous.

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

Usage Guidelines2/5

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

The description gives no indication of when to use this versus alternatives such as write_file (which may implicitly create paths) or list_files. There are no stated prerequisites or conditions, so usage must be inferred entirely from the name.

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

execute_odoo_shellC

Execute Python code in the Odoo shell environment

ParametersJSON Schema
NameRequiredDescriptionDefault
python_codeYesPython code to execute in Odoo shell

TDQS

C2.6/5.0
Behavior1/5

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

No annotations are provided, so the description carries the full behavioral burden. It discloses only the bare action and says nothing about side effects, permissions, sandbox boundaries, irreversibility, or whether executed code can mutate Odoo data. For arbitrary code execution this is a critical omission.

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 with no filler, which is structurally clean. However, for a high-risk code execution tool this conciseness crosses into under-specification rather than optimal 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?

There is no output schema and no annotations. For an arbitrary Python execution tool in Odoo, the description omits return behavior, mutation potential, environment context, permissions, and safety boundaries. It provides only the bare action, leaving the agent without enough context to invoke it safely or predictably.

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%, and the single parameter 'python_code' is already documented in the schema. The description adds no syntax, formatting, or constraint details beyond what the schema provides, 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.

Purpose4/5

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

States a specific verb and resource: 'Execute Python code in the Odoo shell environment'. The operation is unambiguous and distinguishable from the sibling tools, none of which execute arbitrary Python. It does not explicitly contrast with alternatives, but none exist in the sibling 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 when-to-use, when-not-to-use, prerequisites, or alternative guidance is provided. Usage is only implied by the tool name and the phrase 'Odoo shell environment'. An agent receives no routing criteria.

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

get_build_historyC

Get commit/build history for a specific branch

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoNumber of commits to retrieve (default: 10)
branchYesBranch name (e.g., main, staging-1)

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 the full burden of behavioral disclosure. It implies a read-only lookup but does not state whether results are paginated, ordered, truncated by default, or what the return shape looks like. The limit default of 10 is only in the schema, not reflected in behavior narrative.

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?

A single sentence with no filler; the resource and scope are front-loaded. It is efficient, though the extreme brevity is arguably under-specification rather than disciplined 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?

For a two-parameter lookup tool with no nested objects and no output schema, the description is minimally adequate. It covers the core operation but leaves return format, ordering, and limits unexplained, which matters since no output schema or annotations fill those 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 100%, so both parameters (branch, limit) are already documented in the schema, establishing the baseline of 3. The description only reinforces the branch scoping and adds no format, syntax, or edge-case detail beyond the schema.

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?

States a specific verb ('Get') and resource ('commit/build history') scoped to a branch, which is clear enough for an agent to understand the operation. However, it does not distinguish itself from siblings like get_logs or git_status, so an agent must infer the boundary between this and similar history-oriented 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 versus alternatives such as get_logs or git_status, and no mention of prerequisites (e.g., branch must exist locally). The only contextual cue is the required branch parameter in the schema.

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

get_current_branchA

Get the currently checked out branch

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?

No annotations are provided, so the description carries the full burden, yet it says nothing about side effects, permissions, return format, or the detached-HEAD case. For a trivial read this is mostly self-evident, but the description adds no 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?

A single front-loaded sentence with zero filler — appropriately sized for a no-argument getter.

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-param, no-output-schema read of trivial complexity, the description is essentially complete; only edge cases (detached HEAD, failure modes) are unaddressed, which is minor here.

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?

Zero parameters, so there is nothing to document; baseline 4 applies. No parameter semantics are needed or missing.

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?

Specific verb ('Get') and resource ('currently checked out branch') — the phrase 'currently checked out' distinguishes it from list_branches, which enumerates all branches. It does not name a sibling explicitly, so it stops short of a 5.

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?

Usage is implied by the name and scope, but no when-to-use context or alternatives are given (e.g., when to prefer this over git_status or list_branches). Adequate but leaves routing to inference.

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

get_logsC

Get Odoo logs from the server

ParametersJSON Schema
NameRequiredDescriptionDefault
linesNoNumber of log lines to retrieve (default: 100)
log_typeNoType of log to retrieveodoo

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 description carries the full behavioral burden, and it discloses almost nothing: it does not say whether logs are read-only, where they come from, whether they are streamed or static, or what happens if a log type is unavailable. For a server-diagnostics tool the safety profile and return shape are left entirely to inference.

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?

A single front-loaded sentence with zero padding. It is efficient, though the extreme brevity leaves no room for the context an agent would need.

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 two-parameter read tool whose schema is fully documented, the description is minimally sufficient. It is missing any statement of return format (raw text lines vs. structured entries) and any note about log availability, which would help an agent interpret results.

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%, and the schema documents both 'lines' (with default 100) and 'log_type' (with an enum of odoo/install/pip). The description adds no meaning beyond that, 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.

Purpose4/5

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

The description names a specific verb (Get), resource (Odoo logs) and source (from the server), so the purpose is immediately clear. However, it offers no differentiation from siblings such as get_system_info or get_build_history, which an agent might weigh when choosing a diagnostics tool.

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?

There is no guidance on when to use this tool versus alternatives, nor any stated prerequisites (e.g., server must be running, permissions required). The agent must infer usage entirely from the name.

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

get_project_infoC

Get information about the connected Odoo.sh project (via SSH)

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

C2.8/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full disclosure burden. The '(via SSH)' note usefully hints at the connection mechanism, but nothing is said about whether SSH credentials must already be configured, what happens on failure, or what data is returned.

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?

A single compact sentence with the resource front-loaded and no wasted words. It is appropriately sized for the tool's simplicity, though it stops short of using the remaining space productively.

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 no annotations, the description is the only source of information, yet it never says what 'information' includes. For a read tool whose entire value is its return payload, that leaves a meaningful gap.

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 takes zero parameters, so there is no parameter semantics to document and the baseline of 4 applies. The description correctly implies no arguments are needed.

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

Purpose3/5

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

States a clear verb ('get') and resource ('information about the connected Odoo.sh project'), but 'information' is vague about what is actually retrieved. It also does not distinguish itself from closely-named siblings such as get_system_info or list_branches, leaving the agent to guess which one returns project-level data.

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?

There is no when-to-use guidance and no mention of alternatives. With get_system_info in the sibling list, the agent is given no rule for choosing between the two, which is exactly the ambiguity this field should resolve.

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

get_system_infoB

Get system information (hostname, uptime, disk, memory, versions)

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

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 carries the full behavioral burden. It does not state whether this is a safe read-only operation (implied but not confirmed), whether it's cached, how expensive it is, or what the return shape looks like. For a zero-param diagnostic tool, the safety profile is intuitive, but the description does not confirm read-only status or latency.

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 parenthetical sentence, efficiently front-loaded and low-waste. Slightly dense but appropriate for a simple tool.

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 zero-param read operation with no output schema, the description is adequate but not rich. It does not confirm the read-only nature (though obvious), nor describe the return format or whether the output is structured. An agent can call it confidently, but some behavioral clarity is missing.

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 zero parameters, the baseline is 4. The description adds relevant context by listing returned fields, which compensates for the absence of parameters.

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?

States a clear verb+resource: get system information, with examples of what's returned (hostname, uptime, disk, memory, versions). Distinguishes from siblings somewhat by scope, but doesn't explicitly contrast with get_project_info or get_logs.

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 when-to-use or when-not-to-use guidance. The agent must infer that this is for machine-level diagnostics versus project-level or log queries.

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

git_addB

Stage files for commit

ParametersJSON Schema
NameRequiredDescriptionDefault
filesYesArray of file paths to stage (relative to ~/src/user)

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 carries the full behavioral burden. It implies a mutation of the git index but does not disclose whether it requires a git repository, whether it stages all changes or only specified paths, or what permissions or side effects are involved.

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 phrase with no wasted words. It is appropriately sized for the tool's narrow 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?

For a simple one-parameter git staging tool with a fully documented schema and no output schema, the description is minimally adequate. However, with no annotations and no mention of repository requirements or index side effects, it leaves some behavioral context unstated.

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%, and the parameter already documents that it accepts an array of file paths relative to '~/src/user'. The description adds no further parameter meaning, so the baseline of 3 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 uses a specific verb and resource ('Stage files') that clearly identifies the git operation. It differentiates itself from siblings like git_commit and git_status implicitly, though it never names an alternative to route against.

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 says what the tool does but gives no guidance on when to use it versus git_commit, git_status, or other git tools. The closest signal is that staging precedes committing, but this is left for the agent to infer.

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

git_checkoutC

Switch to a branch or create a new branch

ParametersJSON Schema
NameRequiredDescriptionDefault
branchYesBranch name
createNewNoCreate a new branch if true

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 the full disclosure burden. It implies a workspace mutation but says nothing about uncommitted-change risk, failure modes, permission needs, or whether a new branch is cut from the current HEAD — all material for a checkout.

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?

A single front-loaded sentence with no filler. It is efficiently sized for the operation, though it leaves obvious room to state the risky case in the same breath.

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 2-parameter tool with full schema coverage and no output schema, the description is minimally viable. It omits the operational caveats (dirty working tree, detached HEAD) that an agent would want before invoking a checkout.

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%, with 'branch' and 'createNew' both documented inline, so the schema already does the work. The description adds nothing about parameter interaction (e.g., createNew overriding branch selection), so the baseline 3 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?

States a specific verb pair ('switch to' / 'create a new branch') and the resource (branch), which is enough for an agent to recognize the operation. It does not explicitly contrast itself with siblings like git_pull or git_status, so it falls short of the 5 tier.

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 when-to-use guidance, no prerequisites, and no alternatives. It never says that createNew=true is required to create a branch, nor when switching is preferable to pulling or checking status first.

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

git_commitC

Commit staged changes

ParametersJSON Schema
NameRequiredDescriptionDefault
messageYesCommit message

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 carries the full burden and delivers almost nothing: it does not say the commit is local until git_push, whether hooks run, whether it can fail on an empty index, or what the response contains. The only behavioral clue is the 'staged' scope constraint.

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?

Three words with no waste, but the brevity comes from under-specification rather than tight editing. It is front-loaded and scannable, yet there is no second sentence earning its place because there is no second sentence at all.

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 simple one-parameter mutation tool the description is too thin: no annotations, no output schema, and no mention of the git_add → git_commit → git_push sequence the sibling list implies. An agent can guess the call, but not the preconditions or consequences.

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, self-explanatory 'message' parameter, so the schema already does the work. The description adds nothing about message format or conventions, which is acceptable at this baseline.

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?

States a specific verb+resource ('Commit staged changes'), and the word 'staged' separates it reasonably well from siblings like git_add and git_push. However, it never names or contrasts with those siblings, so the agent must infer the handoff chain from names alone.

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 when-to-use guidance and no prerequisites: it does not say that changes must be staged with git_add first, nor when to prefer git_commit over git_push or git_status. The 'staged' qualifier hints at a precondition but leaves it implicit.

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

git_pullB

Pull changes from remote repository

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

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 carries the full behavioral burden, yet it says nothing about merge-conflict handling, what happens to uncommitted local changes, whether credentials/authentication are required, or whether the operation is reversible. 'Pull changes' implies a network mutation but discloses none of its risk profile.

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?

A single short sentence with the action front-loaded and no filler. It is efficient, though arguably terse to the point of under-specification rather than deliberately 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?

With no parameters, no output schema, and no annotations, the surface is simple, so the description is minimally adequate. However, for a git pull the agent still needs to know about conflict failure modes and the effect on local working state, none of which is covered.

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 takes zero parameters and the schema is empty with 100% coverage, so there is nothing for the description to clarify. Baseline 4 applies since no parameter semantics are needed.

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?

States a specific verb ('Pull') and resource ('changes from remote repository'), so the operation is unambiguous. It does not, however, explicitly differentiate itself from siblings such as git_push or git_status, relying on the agent to infer the distinction from the name alone.

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?

There is no guidance on when to use this versus alternatives like git_checkout or git_status, nor any prerequisites such as needing a clean working tree or an upstream branch configured. The agent must infer all usage context.

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

git_pushC

Push commits to remote repository

ParametersJSON Schema
NameRequiredDescriptionDefault
branchNoBranch name to push (default: current branch)

TDQS

C2.9/5.0
Behavior2/5

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

No annotations provided, so the description carries full burden. 'Push' implies a mutation and remote interaction, but the description doesn't state whether it requires authentication, whether it's destructive, what happens on conflicts, or what the response looks like. For a write operation with zero annotation coverage, this is a significant gap.

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, front-loaded with the core action, no wasted words. It is appropriately sized for a simple tool.

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 annotations and no output schema, the description should carry more behavioral context. For a git push operation, the agent needs to know about authentication requirements, potential for remote rejection, and side effects. The description is too sparse for a mutation tool with no structured safety hints.

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 schema already documents the 'branch' parameter fully, including its default. The description adds no extra parameter meaning. Baseline 3 is appropriate.

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?

Clear verb+resource: 'Push commits to remote repository' tells the agent exactly what operation is performed. Among siblings like git_commit, git_pull, git_checkout, this is distinguishable. However, it doesn't distinguish itself from git_commit (which creates a commit) or git_pull (which fetches), though it is specific enough.

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 vs alternatives like git_commit or git_pull. The description lacks context about prerequisites (e.g., need to commit first) or when NOT to use it. Usage 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.

git_statusA

Get git status showing modified, staged, and untracked files

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.6/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 does disclose what the result covers (modified, staged, untracked categories), which is genuine behavioral context, but says nothing about read-only safety, output size limits, path scoping, or whether ignored files are excluded.

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, front-loaded sentence with no filler. It loses a point only because the phrase 'git status' restates the operation name rather than adding 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?

With no output schema and no annotations, the description usefully enumerates the file categories returned by git status, which is the main thing an agent needs to know. It is nearly complete for a simple, parameterless read tool; only edge behaviors like ignored files or truncation are unaddressed.

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 takes zero parameters, so the baseline of 4 applies. There is no parameter syntax to explain and the description correctly avoids inventing any.

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?

States a specific verb and resource (get git status) plus the categorical content returned: modified, staged, and untracked files. It is clearly distinguishable from siblings like git_add or git_commit by the read-only nature of the operation, though it does not name those siblings explicitly.

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 – checking working-tree state before staging or committing – but never states when to use it versus alternatives such as get_current_branch or list_branches. For an obvious read command, implied usage is adequate but unhelpful for disambiguation.

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

list_branchesB

List all Git branches in the Odoo.sh project

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.4/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full behavioral burden. It does not state that this is a read-only operation, whether local/remote branches are included, whether it requires an active project context, or how results are ordered.

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, front-loaded sentence with no wasted words. It says exactly what it does and stops.

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 zero-param list tool this is nearly sufficient, but with no output schema and no annotations the description leaves the return shape (branch names, ordering, metadata) and any project-context prerequisite unspecified.

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 takes zero parameters, so there is nothing to document; the baseline of 4 applies. The description correctly implies no filtering input is needed.

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?

States a specific verb (List) and resource (Git branches) scoped to the Odoo.sh project, so the agent can distinguish it from siblings like git_status or get_current_branch. It does not explicitly name those siblings, so it stops short of a 5.

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?

Usage is implied by the verb and scope: call it when you need an inventory of branches. No explicit when/when-not guidance and no routing against the closely related get_current_branch or git_status siblings.

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

list_databasesA

List all PostgreSQL databases on the Odoo.sh instance

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?

With no annotations provided, the description carries the full burden of behavioral disclosure. It adds useful scope information ('all ... on the Odoo.sh instance'), implying a complete unfiltered read, but it does not explicitly confirm read-only safety, authentication requirements, or any 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.

Conciseness5/5

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

A single sentence that front-loads the action and resource with no wasted words. It is appropriately sized for a zero-parameter list tool.

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 and no annotations, the description should ideally explain what a database listing contains (e.g., names, owners, or connection details). It tells the agent what is listed but not the return format or how results are presented, leaving a modest completeness gap for a simple 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?

The tool takes zero parameters, so the baseline score is 4. The description appropriately does not attempt to document nonexistent 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 states a specific verb ('List'), resource ('all PostgreSQL databases'), and scope ('on the Odoo.sh instance'). It is unambiguous and distinct from all sibling tools, which cover projects, branches, builds, logs, shell, git, and filesystem operations rather than database listing.

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?

Usage is implied by the clear action and resource: an agent would use this tool when it needs to enumerate PostgreSQL databases on the Odoo.sh instance. However, there is no explicit when-to-use guidance, no exclusions, and no mention of alternatives among the many sibling tools.

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

list_filesB

List files and directories in a path

ParametersJSON Schema
NameRequiredDescriptionDefault
dirPathNoDirectory path relative to ~/src/user (default: .)

TDQS

B3.2/5.0
Behavior2/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 does not mention whether the listing is recursive, what format the output takes, whether hidden files are included, or any permission requirements.

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, efficient sentence that front-loads the action and resource. No redundant or filler content.

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 listing tool with no output schema and no annotations, the description is minimal but functional. It omits return format, recursion behavior, and any ordering, which an agent would need to infer from the tool name alone.

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 100%, and the single parameter dirPath is fully documented in the schema including its default. The description adds no new parameter details but the schema already does the job; baseline for 1 param with full coverage is high.

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?

States a clear verb (List) and resource (files and directories) with scope limited to a path. It does not differentiate itself from sibling tools like read_file or get_logs, but the purpose is unmistakable.

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 indication of when to use this tool versus alternatives. With siblings like read_file and get_logs that could overlap in exploring the filesystem, 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.

read_fileC

Read the contents of a file

ParametersJSON Schema
NameRequiredDescriptionDefault
filePathYesPath to the file relative to ~/src/user

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 the full behavioral burden, yet only states the basic action. It omits how missing/unreadable files behave, whether large or binary files are supported, and what encoding or truncation behavior to expect.

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?

A single brief sentence with the action front-loaded and zero waste. It is appropriately sized for a one-parameter read tool, though it is arguably under-specified rather than optimally 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 trivial single-parameter read with no output schema, the description covers the core action, but it leaves return-format and failure-mode questions unanswered. Adequate as a minimum viable definition.

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 single filePath parameter is already documented (path relative to ~/src/user). The description adds nothing beyond the schema, so the baseline of 3 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?

States a clear verb+resource ("Read the contents of a file") that an agent can immediately understand. It does not, however, differentiate itself from adjacent siblings like list_files or get_logs, which also return file/repo content.

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?

There is no when-to-use guidance, no mention of alternatives (e.g. list_files for discovering paths, write_file for mutation), and no prerequisites such as needing the file to exist. The agent must infer all routing decisions.

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

trigger_buildA

Trigger a new build by creating an empty commit and pushing

ParametersJSON Schema
NameRequiredDescriptionDefault
branchYesBranch name to trigger build on

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 carries full burden. It discloses the non-obvious mechanism (empty commit + push), which is valuable context. However, it doesn't state whether this creates an actual commit on the branch, whether it can be undone, permission requirements, or side effects on the git history.

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, front-loaded with the action, zero waste. Efficiently conveys both purpose and mechanism.

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 mutation tool with no annotations and no output schema, the description explains the mechanism but omits behavioral details (reversibility, history impact, permissions) that an agent needs to invoke safely. 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 coverage is 100% and the single branch parameter is fully documented in the schema. The description adds no parameter detail beyond what the schema provides, so baseline 3 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?

States a specific verb (trigger) and resource (build) with clear mechanism. Distinguishable from siblings like get_build_history, though the mechanism description (empty commit + push) overlaps conceptually with git_push/git_commit siblings without clarifying the relationship.

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 (shortcut for triggering builds) but doesn't say when to use this vs. manually chaining git_commit + git_push, which are sibling tools. No exclusions or prerequisites stated.

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

write_fileC

Create or update a file with given content

ParametersJSON Schema
NameRequiredDescriptionDefault
contentYesFile content to write
filePathYesPath to the file relative to ~/src/user

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 description carries the full disclosure burden. It hints at upsert behavior via 'create or update' but says nothing about whether existing content is overwritten, whether the parent directory must exist, permission requirements, or encoding. For a write/mutation tool this is a significant gap.

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?

A single tight sentence with the verb front-loaded and zero filler. It is appropriately sized for a two-parameter tool, though it is arguably terse to a fault given the mutation semantics.

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?

A mutating tool with no annotations and no output schema needs to explain overwrite/destructive behavior and path constraints, and the description does not. The only structural support comes from the schema's path description.

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 schema already documents both parameters, including the path base (~/src/user). The phrase 'with given content' adds nothing beyond the schema, making the baseline of 3 appropriate.

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?

States a specific verb+resource combination ('create or update a file') and signals the upsert semantics, which cleanly distinguishes it from the read_file sibling. It doesn't explicitly name alternative tools, but the operation is unambiguous.

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 versus create_directory or git_add, and no mention of prerequisites. The agent must infer usage entirely from the tool name.

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. 19 tool updatesv1.0.0
    • First observedcreate_directory
    • First observedexecute_odoo_shell
    • First observedget_build_history
    • First observedget_current_branch
    • First observedget_logs
    • First observedget_project_info
    • First observedget_system_info
    • First observedgit_add
    • First observedgit_checkout
    • First observedgit_commit
    • First observedgit_pull
    • First observedgit_push
    • First observedgit_status
    • First observedlist_branches
    • First observedlist_databases
    • First observedlist_files
    • First observedread_file
    • First observedtrigger_build
    • First observedwrite_file

TDQS

B3.2/5.0

Scored across 19 tools

Disambiguation4/5

Most tools target clearly distinct actions: git operations, file operations, build/database/log queries, and shell execution are well separated. The only mild overlap is between get_project_info and get_system_info, both returning environment metadata, though their descriptions clarify the difference.

Naming Consistency4/5

The majority of tools follow a verb_noun pattern (get_project_info, list_branches, write_file, create_directory, execute_odoo_shell). The git_ prefix group (git_status, git_add, git_commit) is internally consistent, though git_status and git_pull deviate slightly from the verb-first style.

Tool Count4/5

19 tools is slightly above the ideal range but justified given the breadth of the domain (project/build management, databases, logs, shell, filesystem, and full git workflow). Each tool maps to a distinct capability rather than redundant variations.

Completeness4/5

The surface covers a full git lifecycle (status/add/commit/push/pull/checkout), file read/write/list/create, build triggering, logs, databases, and shell execution. Minor gaps exist, such as no file/directory delete or git diff, but core workflows are supported.

Maintenance

ActivityInactive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    A Model Context Protocol server that enables AI assistants to interact with Odoo ERP systems, providing comprehensive tools for searching, creating, updating, and managing Odoo records through a standardized interface.
    135 PyPI
    23
    GPL 3.0
  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables seamless interaction with Odoo instances through the Model Context Protocol, supporting CRUD operations, custom method execution, and real-time updates. It offers versatile communication via stdio and HTTP protocols, including support for streaming and Server-Sent Events.
    8
    MIT
  • A
    license
    C
    quality
    D
    maintenance
    A Model Context Protocol server that provides 29 Git operations and advanced workflows, enabling AI assistants and developers to safely manage version control.
    30
    291 npm
    1
    ISC