Odoo.sh MCP Server
Provides Git workflow tools for version control, including status, add, commit, push, checkout, pull, and file management operations to facilitate building custom Odoo modules.
Integration with Odoo.sh for SSH-based management, including branch operations, build management, database access, system monitoring, and Odoo shell execution. Also provides Git workflow tools for building custom Odoo modules.
Allows listing PostgreSQL databases and their sizes on the Odoo.sh server.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Odoo.sh MCP Serverlist branches and show latest commits"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Odoo.sh MCP Server
š SSH-based Model Context Protocol server for Odoo.sh - Build custom apps with AI assistance using Git workflow tools
⨠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 belowInstallation
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
Clone or download this repository
Install dependencies:
npm installSet 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
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:
Create directory structure:
my_custom_app/,my_custom_app/models/, etc.Create
__init__.py,__manifest__.pyfilesCreate model files with Python code
Create XML view files
Stage all files with
git addCommit with descriptive message
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 listReturns: project name, repository, list of branches
š” Use this to list branches (recommended over
list_branches)
get_current_branch: Get the currently checked out branchReturns: current branch name
list_branches: List branches with commit infoReturns: branch names with last commit hash and message
ā ļø Known issue: May not work in some MCP clients (use
get_project_infoinstead)
Builds
get_build_history: Get commit/build history for a branchParameters:
branch(e.g., "main"),limit(default: 10)Returns: commit hash, author, date, message
trigger_build: Trigger a new build by creating empty commitParameters:
branchReturns: git push output
Database
list_databases: List all PostgreSQL databasesReturns: database names and sizes
Logs & Shell
get_logs: Get Odoo logs from the serverParameters:
log_type("odoo", "install", "pip"),lines(default: 100)Returns: log entries with timestamps
execute_odoo_shell: Execute Python code in Odoo shellParameters:
python_codeReturns: shell output
System
get_system_info: Get system informationReturns: 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 filesReturns: git status output
write_file: Create or update a file with given contentParameters:
filePath(relative to~/src/user),contentReturns: success message
š” Uses base64 encoding to safely transfer file content via SSH
read_file: Read the contents of a fileParameters:
filePath(relative to~/src/user)Returns: file content
list_files: List files and directories in a pathParameters:
dirPath(optional, default:., relative to~/src/user)Returns:
ls -laoutput
create_directory: Create a directory (including parent directories)Parameters:
dirPath(relative to~/src/user)Returns: success message
git_add: Stage files for commitParameters:
files(array of file paths or.for all)Returns: git add output
git_commit: Commit staged changesParameters:
messageReturns: git commit output
git_push: Push commits to remote repositoryParameters:
branch(optional, defaults to current branch)Returns: git push output
git_checkout: Switch to a branch or create a new branchParameters:
branch,createNew(optional, default: false)Returns: git checkout output
git_pull: Pull changes from remote repositoryReturns: 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 formatProject 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.exampleTesting
Tests are located in the tests/ directory. Run with:
npm testTroubleshooting
Common Issues
1. SSH Connection Failed
Error: SSH connection errorSolution:
Verify SSH key path is correct and absolute
Check key permissions:
chmod 600 /path/to/key(Unix) oricacls(Windows)Verify hostname format:
BUILD_ID@project-name.dev.odoo.comTest manually:
ssh -i /path/to/key BUILD_ID@host
2. list_branches Tool Not Working in Warp
Empty response from list_branchesSolution: 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 detectedSolution: 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.jsVerify 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:
Follow existing code style (use
npm run format)Add tests for new features
Update documentation (README, Runbook, DECISIONS.md)
Document issues in Troubleshooting.md
License
MIT License - see LICENSE file for details.
Links
Odoo.sh Documentation: https://www.odoo.com/documentation/17.0/administration/odoo_sh.html
MCP Specification: https://spec.modelcontextprotocol.io/
MCP TypeScript SDK: https://github.com/modelcontextprotocol/typescript-sdk
Maintained by: Odoo MCP Server Contributors
Version: 0.1.0
Available Tools
19 toolscreate_directoryB
Create a directory (including parent directories)
| Name | Required | Description | Default |
|---|---|---|---|
| dirPath | Yes | Directory path relative to ~/src/user |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| python_code | Yes | Python code to execute in Odoo shell |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Number of commits to retrieve (default: 10) | |
| branch | Yes | Branch name (e.g., main, staging-1) |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden, 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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| lines | No | Number of log lines to retrieve (default: 100) | |
| log_type | No | Type of log to retrieve | odoo |
TDQS
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.
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.
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.
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.
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.
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)
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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)
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| files | Yes | Array of file paths to stage (relative to ~/src/user) |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| branch | Yes | Branch name | |
| createNew | No | Create a new branch if true |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| message | Yes | Commit message |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| branch | No | Branch name to push (default: current branch) |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It 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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It 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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| dirPath | No | Directory path relative to ~/src/user (default: .) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It 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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| filePath | Yes | Path to the file relative to ~/src/user |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| branch | Yes | Branch name to trigger build on |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| content | Yes | File content to write | |
| filePath | Yes | Path to the file relative to ~/src/user |
TDQS
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.
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.
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.
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.
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.
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.
19 tool updates
v1.0.0- First observed
create_directory - First observed
execute_odoo_shell - First observed
get_build_history - First observed
get_current_branch - First observed
get_logs - First observed
get_project_info - First observed
get_system_info - First observed
git_add - First observed
git_checkout - First observed
git_commit - First observed
git_pull - First observed
git_push - First observed
git_status - First observed
list_branches - First observed
list_databases - First observed
list_files - First observed
read_file - First observed
trigger_build - First observed
write_file
TDQS
Scored across 19 tools
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.
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.
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.
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
Related MCP Connectors
A Model Context Protocol server for Wix AI tools
A comprehensive Model Context Protocol (MCP) server that enables AI assistants to interact with yoā¦
Model Context Protocol server for Studex tools, notifications, and profile integrations
Enable secure connectivity between Sentry issues and debugging data, and LLM clients, using a Model Context Protocol (MCP) server.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceA 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 PyPI23GPL 3.0
- AlicenseNot gradedqualityCmaintenanceEnables seamless interaction with Odoo instances through the Model Context Protocol, supporting CRUD operations, custom method execution, and real-time updates. It offers versatile communication via stdio and HTTP protocols, including support for streaming and Server-Sent Events.8MIT
- AlicenseCqualityDmaintenanceA Model Context Protocol server that provides 29 Git operations and advanced workflows, enabling AI assistants and developers to safely manage version control.30291 npm1ISC
- AlicenseNot gradedqualityDmaintenanceA Model Context Protocol server that generates pull request descriptions, commit messages, and code reviews from actual code changes using git diff.3MIT