Skip to main content
Glama

Ubuntu MCP Server & Web Console

License: MIT Python 3.10+ MCP Protocol Tests: 61 passed Docker Support

A sandboxed Model Context Protocol (MCP) server exposing 38 tools for filesystem, directory, Ubuntu system, network, git, and code/text operations — packaged with a futuristic Web GUI & Interactive Linux Terminal (xterm.js + WebSockets).

Connect directly with MCP-compatible AI clients (Antigravity IDE, Claude Desktop, Cursor, Claude Code) or interact directly through your browser!


⚡ Quick Start — Launch Web GUI & Terminal

# Clone the repository
git clone https://github.com/<your-username>/ubuntu-mcp-server.git
cd ubuntu-mcp-server

# Run the Web Console (opens automatically at http://localhost:8000)
python run_gui.py
# Or on Windows: .\run_gui.bat
# Or on Linux:   ./run_gui.sh

✨ Web Console Features:

  1. 🖥️ Interactive Linux Terminal: Full ANSI color, real-time bash prompt, autocomplete, vim/nano support, connected to the active Ubuntu/WSL session!

  2. ⚡ MCP Playground & Tool Explorer: Browse all 38 tools, fill schema-driven argument forms, and execute tools live with formatted JSON outputs and latency metrics.

  3. 📊 Live System Monitor: Real-time dials for CPU, RAM, Disk utilization, and a live top processes table.

  4. 🔌 1-Click Integration Hub: Instant copy-paste configurations for Antigravity, Claude Desktop, Cursor, and Docker.


Related MCP server: MCPort

Architecture

        AI Client (Claude Code / Claude Desktop / Cursor / ...)
                          │
                          │  MCP protocol (stdio, or streamable-http if remote)
                          ▼
                 ┌─────────────────────┐
                 │  Ubuntu MCP Server  │
                 │   (MCPServer/       │
                 │    FastMCP)         │
                 └──────────┬──────────┘
                             │
      ┌───────────┬─────────┼─────────┬───────────┬──────────┐
      ▼           ▼         ▼         ▼           ▼          ▼
 Filesystem   Directories  System   Network      Git      Code/Text
  8 tools      6 tools     6 tools  6 tools     5 tools    7 tools
      │           │         │         │           │          │
      └───────────┴─────────┼─────────┴───────────┴──────────┘
                             ▼
                     Security boundary
                (security.py: workspace sandbox
                 + SSRF-blocking network guard)
                             │
                             ▼
                        Ubuntu host

There is no arbitrary shell-execution tool. The only subprocess calls in the project are fixed, whitelisted invocations: git <fixed subcommand> and systemctl status <validated-name> --no-pager. Nothing here accepts a free-form command string from the AI client.

Features / tool list

All tool names below are exactly what the MCP client sees.

Filesystem (src/ubuntu_mcp/tools/filesystem.py) read_file, write_file, append_file, delete_file, copy_file, move_file, file_exists, get_file_info

Directories (directories.py) list_directory, create_directory, delete_directory, directory_exists, find_files, get_directory_size

Ubuntu / system (system.py) — all read-only get_system_info, get_cpu_info, get_memory_info, get_disk_info, list_processes, get_service_status

Network (network.py) — SSRF-guarded fetch_url, check_connectivity, resolve_dns, validate_url, parse_url, build_url

Git (git_tools.py) — read-only, fixed subcommands only git_status, git_log, git_diff, git_branches, git_current_branch

Code / text / data (code_tools.py) detect_project_type, search_text_in_files, count_words, format_json, validate_json, csv_to_json, csv_get_columns

Every tool returns the same predictable shape:

{"success": true,  "data": {...}, "error": null}
{"success": false, "data": null,  "error": {"code": "...", "message": "..."}}

Requirements

  • Ubuntu (or any modern Linux/macOS) with Python 3.10+

  • git (for the git tools; everything else works without it)

  • systemctl optional (only get_service_status needs it; it degrades gracefully to {"available": false} if missing)

Installation

Quick path

git clone <your-fork-or-copy-of-this-repo> ubuntu-mcp-server
cd ubuntu-mcp-server
./deploy/install.sh

This installs OS packages, creates .venv/, installs the project, copies .env.example.env, and runs the test suite as a smoke check.

Manual path (Ubuntu/Linux/macOS)

sudo apt update && sudo apt install -y python3 python3-venv python3-pip git   # Ubuntu only

python3 -m venv .venv
source .venv/bin/activate           # macOS/Linux
# .venv\Scripts\activate            # Windows (PowerShell)

pip install --upgrade pip
pip install -e ".[dev]"

cp .env.example .env

Environment configuration

All configuration is read from environment variables (optionally via .env, loaded with python-dotenv). See .env.example for the full, commented list. Key ones:

Variable

Default

Purpose

MCP_WORKSPACE

./workspace

Sandbox root. Every filesystem/git/code tool is confined here.

MCP_MAX_FILE_SIZE

10485760 (10 MB)

Max file size for read/write/append.

MCP_MAX_RESPONSE_SIZE

5242880 (5 MB)

Max bytes fetch_url will buffer.

MCP_HTTP_TIMEOUT

10

Default fetch_url timeout, seconds.

MCP_ALLOW_PRIVATE_NETWORK

false

Set true to let fetch_url/check_connectivity reach private/loopback hosts.

MCP_TRANSPORT

stdio

stdio (local, client-launched) or streamable-http (remote).

MCP_HTTP_HOST / MCP_HTTP_PORT

127.0.0.1 / 8765

Bind address for streamable-http.

Never commit your real .env.

Running locally (stdio — the normal case)

source .venv/bin/activate
python -m ubuntu_mcp

In stdio mode the process expects to be launched by an MCP client, which owns its stdin/stdout. Running it by hand like this will just sit there — that's expected; an MCP client is what talks to it. To see it actually respond, configure a client (next section) instead of running it standalone.

Testing

source .venv/bin/activate
pytest -q

61 tests cover every tool module, including: happy paths, invalid input, path-traversal / workspace-escape attempts, SSRF blocking (loopback and private IPs rejected), a real throwaway git repo, and a full round trip through the actual MCP call_tool() protocol layer (not just the underlying functions). Network tests mock httpx — no live network access is required to run the suite.

MCP client configuration

Exact configuration syntax depends on your specific client (Claude Code, Claude Desktop, Cursor, etc.) — check that client's docs for where this config file lives. The common shape (stdio, local) looks like:

{
  "mcpServers": {
    "ubuntu-mcp": {
      "command": "/absolute/path/to/ubuntu-mcp-server/.venv/bin/python",
      "args": ["-m", "ubuntu_mcp"],
      "env": {
        "MCP_WORKSPACE": "/absolute/path/to/a/workspace/directory"
      }
    }
  }
}

Use absolute paths — the client launches this as its own subprocess, so relative paths resolve against wherever the client happens to run from.

Example prompts once connected

  • "List everything in my workspace."

  • "Read notes.md and summarize it."

  • "How much CPU and memory is this machine using right now?"

  • "Show me git log for the api project, last 5 commits."

  • "Is nginx running?"

  • "Fetch https://example.com/status.json and tell me what's in it."

  • "Find all Python files under src/ that mention TODO."

  • "Convert data.csv to JSON."

Remote deployment

Local (default, recommended):

AI Client  →  spawns this process directly  →  talks over stdio

No network port is opened. This is the safest mode and needs no authentication of its own, because the client process owns the pipe.

Remote (opt-in, MCP_TRANSPORT=streamable-http):

AI Client  →  HTTPS  →  reverse proxy (TLS + auth)  →  Ubuntu MCP Server (streamable-http)  →  Ubuntu host

Running with MCP_TRANSPORT=streamable-http binds a plain HTTP port with no built-in authentication. Do not expose that port to the internet directly. Put it behind a reverse proxy (nginx, Caddy, etc.) that terminates TLS and enforces auth, or keep it reachable only over a private network / VPN / SSH tunnel. deploy/ubuntu-mcp.service is a systemd template for running this mode as a background service:

sudo cp deploy/ubuntu-mcp.service /etc/systemd/system/ubuntu-mcp@.service
sudo systemctl daemon-reload
sudo systemctl enable --now ubuntu-mcp@yourusername
journalctl -u ubuntu-mcp@yourusername -f

(Only streamable-http mode makes sense as a systemd service — stdio mode has no persistent process to supervise, since it's designed to be spawned per-client-session.)

Security model

  1. Filesystem sandbox (security.safe_path): every path is resolved relative to MCP_WORKSPACE. .. traversal and absolute paths that would land outside the workspace are rejected; an absolute-looking path like /etc/passwd is safely re-rooted inside the workspace rather than touching the real one.

  2. Network SSRF guard (security.assert_public_host): fetch_url and check_connectivity resolve the target hostname and reject loopback, link-local, and RFC1918 private ranges unless you explicitly set MCP_ALLOW_PRIVATE_NETWORK=true.

  3. No arbitrary command execution: git and systemd tools only ever invoke a fixed subcommand list via asyncio.create_subprocess_exec (never a shell string), with strictly validated arguments.

  4. Structured, leak-free errors: every tool is wrapped by @safe_tool, which catches exceptions and returns {"success": false, "error": {...}} — never a raw traceback, environment variable, or secret.

Troubleshooting

  • "No module named ubuntu_mcp" — activate the venv (source .venv/bin/activate) or reinstall with pip install -e ..

  • get_service_status returns available: falsesystemctl isn't installed/available on this host (e.g. inside some containers); this is expected, not a bug.

  • fetch_url / check_connectivity raise a security error — the target resolved to a private/loopback address; that's the SSRF guard working as intended. Set MCP_ALLOW_PRIVATE_NETWORK=true only if you trust the target and understand the tradeoff.

  • git tools say "not a git repository" — the path must contain a .git directory; run git init there first.

How to add a new tool

  1. Implement the function in the relevant tools/*.py module (or a new module), following the existing pattern: async def my_tool(...) -> dict, raising one of the exceptions in exceptions.py on failure.

  2. In server.py, add:

    @mcp.tool()
    @safe_tool
    async def my_tool(arg: str) -> dict:
        """One-line summary.
    
        Args:
            arg: what it's for.
        """
        return await my_module.my_tool(arg)
  3. Add tests in tests/test_<module>.py covering the happy path and at least one failure path.

  4. Run pytest -q.

Publish to Your Own GitHub Account

You can publish this entire project to your personal GitHub repository:

# 1. Initialize git in the project root (if not already done)
git init
git add .
git commit -m "feat: Ubuntu MCP Server with Web Console, Terminal & 38 Tools"

# 2. Add your GitHub remote repository
git remote add origin https://github.com/<your-username>/ubuntu-mcp-server.git
git branch -M main

# 3. Push to GitHub!
git push -u origin main

Docker Deployment

Build and run in seconds with Docker:

docker compose up -d --build

Then visit http://localhost:8000 for the Web Console & Terminal, and http://localhost:8765/mcp for the MCP endpoint.

License

MIT — see LICENSE.

Available Tools

38 tools
append_fileA

Append text to an existing file inside the workspace.

Args: path: Path to an existing file, relative to the workspace root. content: Text to append.

Returns: The path and number of bytes appended. Fails if the file does not exist or if appending would exceed the max file size.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes
contentYes

TDQS

A4.1/5.0
Behavior4/5

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

With no annotations present, the description carries the full burden and does reasonably well: it discloses two failure modes (nonexistent file, exceeding max file size) and the return payload (path plus byte count). It omits encoding, whether parent directories must exist, and atomicity/concurrency behavior, but the core mutation semantics are clear.

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

Conciseness4/5

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

Front-loads the purpose in one sentence, then uses terse Args/Returns blocks where every line adds information. Slightly more formatting scaffolding than a single sentence needs, but 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 simple two-parameter mutation tool with no annotations and no output schema, the description covers the action, both parameters, the return value, and the two documented failure conditions. Remaining gaps (encoding, directory prerequisites) are minor.

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 0%, so the description must compensate, and it does: 'path' is documented as relative to the workspace root and required to exist, and 'content' as the text to append. Both parameters gain meaning beyond the bare string types in the schema.

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

Purpose5/5

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

States a specific verb (append) and resource (text to an existing file) plus scope ('inside the workspace'). The 'existing file' qualifier and the explicit 'fails if the file does not exist' distinguish it from the sibling write_file, which creates/overwrites.

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 purpose and the 'existing file' constraint, but the description never states when to choose this over write_file or how to handle a missing file (create it first, use write_file, etc.). No explicit when/when-not guidance is given.

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

build_urlB

Construct a URL from a base URL, an appended path, and optional query parameters.

Args: base_url: Base http/https URL. path: Path segment to append. query: Optional dict of query parameters to encode and attach.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathNo
queryNo
base_urlYes

TDQS

B3.1/5.0
Behavior2/5

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

With no annotations, the description carries the full burden. It reveals the inputs but not the output (a URL string), nor behavior for edge cases such as trailing slashes, a base_url that already contains a query string, or encoding rules for duplicate keys. For a pure transformation tool this is a notable 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?

Front-loaded one-sentence summary followed by a compact Args block; every line is relevant. Slightly redundant with the schema, but efficient overall.

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?

There is no output schema, so the description should at least confirm the return value (the composed URL string) and note encoding/edge-case behavior. As written it is adequate for happy-path invocation but incomplete for a transformation tool with 0% schema coverage.

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 0%, so the description must compensate, and it does: base_url is constrained to http/https, path is described as the segment to append (with a default of empty), and query is a dict to encode and attach. It adds real meaning beyond the bare schema, though it doesn't cover encoding or key-collision semantics.

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 ('Construct') and resource ('a URL') and enumerates the three inputs, so the operation is unambiguous. It does not, however, distinguish itself from related siblings such as parse_url or validate_url, which an agent might reasonably consider.

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 parse_url, validate_url, or fetch_url, and no prerequisites or exclusions. The agent must infer purpose from the name alone.

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

check_connectivityA

Check whether a TCP port on a public host is reachable.

Args: host: Hostname or IP to test (private/loopback hosts are blocked). port: TCP port number (1-65535). timeout: Connection timeout in seconds.

ParametersJSON Schema
NameRequiredDescriptionDefault
hostYes
portYes
timeoutNo

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. It helpfully discloses that private/loopback hosts are blocked, which is real behavioral context, but it does not describe the return format (e.g., boolean reachability vs. latency), error behavior on timeout, or rate limits. Partial disclosure only.

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

Conciseness4/5

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

Front-loaded one-line purpose followed by a compact Args block. Efficient, though the adjacency of the blocking constraint inside the host arg is slightly awkward. No filler.

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

Completeness4/5

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

For a simple, non-destructive TCP probe with no output schema, no annotations, and no auth requirements, the description is nearly complete. Only the return/error behavior is unspecified, which is a minor gap given the low complexity.

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

Parameters4/5

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

Schema description coverage is 0%, so the description must compensate. It documents all three parameters including bounds for port (1-65535), the timeout unit (seconds), and the input type for host (hostname or IP), plus the blocking constraint. Good compensation, though the default timeout is carried by the schema, not the description.

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

Purpose5/5

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

States a specific verb (check), resource (TCP port connectivity), and scope (public host). Clearly distinguished from siblings like resolve_dns, fetch_url, or get_service_status, which describe name resolution, HTTP fetching, and local service status respectively.

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

Usage Guidelines3/5

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

The description says what it tests and that private/loopback hosts are blocked, which implies when it is applicable, but it never states when to prefer this over siblings like fetch_url or get_service_status, nor describes supported use cases. Usage is implied rather than explicit.

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

copy_fileA

Copy a file within the workspace, preserving metadata.

Args: source: Existing file path, relative to the workspace root. destination: Destination path; parent directories are created automatically.

ParametersJSON Schema
NameRequiredDescriptionDefault
sourceYes
destinationYes

TDQS

A3.5/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden. It usefully discloses that metadata is preserved and that parent directories of the destination are created automatically, but it omits the critical question of overwrite behavior when the destination already exists, plus permissions and failure modes.

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

Conciseness4/5

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

Front-loaded purpose sentence followed by a compact Args block; every line earns its place. Slightly redundant to restate parameter names that already appear in the schema, but the added semantics justify it.

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 file-creating operation with no annotations and no output schema, key agent-facing details are missing: overwrite/fail-if-exists behavior, what the tool returns (destination path? new file info?), and error conditions. The scope and side-effect notes partially compensate.

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 0% (only titles 'Source'/'Destination'), so the description must compensate and largely does: source is an existing path relative to the workspace root, and destination auto-creates its parent directories. Only destination's own path semantics (relative? absolute? overwrite?) remain underspecified.

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 ('Copy a file') plus scope ('within the workspace') and a behavioral detail (metadata preserved). It does not explicitly differentiate itself from close siblings like move_file or write_file, 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?

The 'within the workspace' scope implicitly constrains when this tool applies, but there is no explicit when-to-use guidance or named alternative (e.g. use move_file to relocate, write_file to create new content). 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.

count_wordsB

Count words, characters, and lines in a block of text.

Args: text: The text to analyze.

ParametersJSON Schema
NameRequiredDescriptionDefault
textYes

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 behavioral burden. It discloses which three metrics are computed, which is useful, but says nothing about counting rules (whitespace splitting, unicode, empty input), whether it is a pure read-only operation, or the shape of the result. For a zero-annotation tool this is a real gap, even though the operation is intrinsically simple.

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 front-loaded sentence states the purpose, followed by a minimal Args block. No waste, though the Args block restating 'text' contributes little value.

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

Completeness3/5

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

The tool is simple and takes one required string, so not much is needed. But with no output schema and no annotations, the description never indicates what the caller receives (counts of words/characters/lines presumably as a structured result), which is the one piece of information an agent would still want.

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

Parameters3/5

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

Schema description coverage is 0%, so the description must compensate, and it does list the single parameter with an Args block. However, 'The text to analyze' is nearly a restatement of the parameter name and adds little meaning beyond what an agent would already infer.

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?

States a specific verb (count) and resource/metrics (words, characters, lines) in a single clear sentence. Against a sibling set of file, network, git and JSON tools, there is zero ambiguity about what this does.

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 never says when to use this tool, when not to, or how it relates to any alternative. For a simple utility this is tolerable, but no usage guidance is provided at all.

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

create_directoryB

Create a directory (and any missing parent directories) in the workspace.

Args: path: Directory path to create, relative to the workspace root.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes

TDQS

B3.3/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 disclosure burden. It does reveal a meaningful behavior — that missing parent directories are created (mkdir -p semantics) — but is silent on what happens if the directory already exists (error vs no-op), permissions, and reversibility.

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

Conciseness4/5

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

Two short, front-loaded sentences with no filler; the recursive behavior is stated up front. The trailing Args block is slightly redundant given the sparse schema but is harmless.

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 one-parameter mutation tool with no annotations and no output schema, the description should say what it returns or does on an existing directory. It covers the core behavior and path semantics but leaves idempotency and failure modes 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 schema has 0% description coverage and the single required parameter is a bare string, so the description must compensate. It does add real meaning by specifying the path is relative to the workspace root, though it says nothing about absolute paths or traversal handling.

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 (create a directory) and adds the recursive parent-creation scope, which is more precise than the bare name. It doesn't explicitly contrast with siblings like directory_exists or list_directory, but the name and description make the operation 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?

There is no guidance on when to use this versus checking directory_exists first, nor any precondition or error-handling context. 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.

csv_get_columnsA

Read just the header row of a CSV file in the workspace.

Args: path: Path to the CSV file, relative to the workspace root.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes

TDQS

A3.7/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full behavioral burden. It discloses that only the header row is read, but omits error behavior (missing file, non-CSV), permissions, and any return format details. This is a significant gap for a tool with no annotation coverage.

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

Conciseness5/5

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

The description is front-loaded with the tool's purpose, then follows with a compact Args section. Every sentence earns its place, and there is 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?

The tool is simple and the description covers its purpose and the path parameter. However, with no output schema, the description does not explain what the header row is returned as (e.g., list of strings, single string), leaving a gap in completeness for an agent trying to use the result.

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 0%, so the description must compensate. It does so by clarifying that the path is relative to the workspace root, which is meaningful semantic information not present in the schema. It does not cover extension expectations or absolute paths, but the core parameter meaning is well supplemented.

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 ('Read'), resource ('header row of a CSV file'), and scope ('just'), making the purpose unambiguous. It is clearly distinguishable from siblings like read_file (whole file) and csv_to_json (conversion), even without naming them 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?

Usage is implied by 'Read just the header row' – use it when only column names are needed. However, it never explicitly states when to use this over alternatives like read_file or csv_to_json, nor any exclusions or prerequisites, so guidance remains implicit.

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

csv_to_jsonB

Read a CSV file from the workspace and convert it to a list of row objects keyed by header column.

Args: path: Path to the CSV file, relative to the workspace root.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes

TDQS

B3.4/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden. It usefully discloses the output structure (row objects keyed by header), which is valuable absent an output schema, but says nothing about error behavior, encoding/delimiter handling, or failure when the file is missing.

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?

Purpose is front-loaded in the first clause, and the sole argument is documented without padding. The inline 'Args:' block is slightly boilerplate but still tight and earns its place.

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

Completeness4/5

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

For a simple one-parameter read/transform tool with no output schema, the description covers the transformation result well. Missing only edge-case behavior (missing file, malformed CSV), which is a minor gap given the tool's simplicity.

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 0%, so the description must compensate for the single parameter, and it does: 'Path to the CSV file, relative to the workspace root' clarifies both meaning and the workspace-relative resolution rule.

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 (read/convert) and resource (CSV file) and even specifies the output shape ('list of row objects keyed by header column'). It does not explicitly differentiate from the sibling csv_get_columns, but the conversion 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?

No when-to-use guidance, no exclusions, and no mention of the closely related sibling csv_get_columns or read_file. The agent must infer when this is preferable to those alternatives.

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

delete_directoryA

Delete a directory inside the workspace.

Args: path: Directory to delete, relative to the workspace root. recursive: Required to be True to delete a non-empty directory and everything inside it. The workspace root itself can never be deleted.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes
recursiveNo

TDQS

A4.5/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden. It discloses critical behavioral traits: recursive must be True for non-empty directories, and the workspace root is immutable. It does not mention permissions, reversibility, or error handling, but the core destruction semantics are clear.

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

Conciseness5/5

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

The description is concise and front-loaded with the primary action. The provided args section is structured and each sentence adds necessary information without waste.

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 destructive tool with no annotations and no output schema, the description adequately covers the essential parameters and constraints. It could be more complete with notes on permissions or expected return, but the core information needed to call correctly is present.

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

Parameters5/5

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

Schema description coverage is 0%, and only titles exist. The description fully compensates by explaining that 'path' is relative to the workspace root, and that 'recursive' is required to be True for non-empty directories. This adds essential meaning beyond the schema.

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

Purpose5/5

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

The description states a specific verb and resource: 'Delete a directory inside the workspace.' It clearly distinguishes from the sibling delete_file by specifying directory, and from other directory tools like create_directory.

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

Usage Guidelines4/5

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

It provides clear context that the directory is 'inside the workspace' and explains recursive behavior, including the important constraint that the workspace root can never be deleted. However, it does not explicitly name alternative tools or specify conditions when to use this versus delete_file for empty directories.

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

delete_fileA

Delete a single file inside the workspace.

Args: path: Path to the file to delete, relative to the workspace root.

Returns: The deleted path. Fails if the path does not exist or is a directory (use delete_directory for directories).

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations, the description carries the burden and does disclose key behavior: single-file scope, workspace-relative resolution, and the two failure modes. It omits irreversibility and any permission requirements, which are worth noting for a destructive operation, but the disclosure is well above baseline.

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?

Front-loaded one-line purpose, then compact Args/Returns sections. Every sentence adds information; nothing is redundant.

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 one-parameter destructive tool with no output schema and no annotations, the description covers purpose, parameter meaning, failure modes, and the sibling alternative. Only the irreversibility/permission angle 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?

Schema description coverage is 0%, so the description must carry the parameter. It does: 'Path to the file to delete, relative to the workspace root' adds the resolution base that the schema's bare string type does not convey.

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?

States a specific verb (delete) and resource (a single file) and immediately distinguishes itself from delete_directory, its closest sibling. An agent can select it confidently without opening the schema.

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

Usage Guidelines4/5

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

Names the alternative for the directory case ('use delete_directory for directories') and states the failure conditions (path does not exist, is a directory). It doesn't cover permissions or edge cases like symlinks, but the primary routing guidance is explicit.

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

detect_project_typeA

Guess the project type(s) present in a directory by looking for common marker files (pyproject.toml, package.json, Cargo.toml, etc.).

Args: path: Directory to inspect, relative to the workspace root.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathNo.

TDQS

A3.6/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 discloses the detection method (marker-file scanning) but says nothing about permissions, what happens when no markers are found, or the shape of results (a list? confidence scores?). For a read-only detection tool this is thin.

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

Conciseness4/5

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

Front-loaded with the core purpose in one tight sentence, followed by the parameter note. No filler, though the two-line 'Args' block is slightly redundant formatting for a single parameter.

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 annotations and no output schema, the description should explain the return value (e.g., a list of detected project types) since nothing else does. It covers the input adequately but leaves the output shape entirely 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?

Schema coverage is 0% and the schema only names the parameter, so the description must compensate. It adds real meaning: the path is 'relative to the workspace root', which clarifies the resolution base beyond the bare 'default: .' in the schema.

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

Purpose5/5

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

States a specific verb ('Guess'/'detect') and resource (project type(s) in a directory) plus the mechanism used (marker files like pyproject.toml, package.json). No sibling tool overlaps, so an agent can route to it unambiguously.

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

Usage Guidelines3/5

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

The description implies the scenario (inspecting a directory to identify its project type) but never states when to prefer this over alternatives or any prerequisites. No sibling performs detection, so there is little to contrast, but no explicit guidance is given either.

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

directory_existsA

Check whether a given path exists and is a directory.

Args: path: Path to check, relative to the workspace root.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes

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 burden. 'Check' implies a non-mutating read, and it usefully discloses that the path is relative to the workspace root. It does not state the return value (boolean) or any failure behavior, leaving some behavioral gaps.

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

Conciseness4/5

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

Front-loaded with the core purpose in one sentence, followed by a brief Args block. The Args line is partly redundant with the schema but adds the workspace-root detail, so little 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 trivial single-parameter boolean check with no output schema and no annotations, the definition covers what the agent needs: what it does and how the path is interpreted. Only the return value is left implicit.

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 0%, so the schema documents nothing about 'path'. The description compensates by explaining that path is 'relative to the workspace root', which is meaningful semantics beyond the bare string type.

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 'Check' and resource 'directory', plus the exact semantics (exists AND is a directory). This implicitly distinguishes it from the sibling file_exists. It is clear but does not name the sibling 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?

No explicit when-to-use or when-not guidance, and no alternative (file_exists) is named. However, for a boolean existence check the use case is self-evident from the purpose statement, so usage is implied rather than documented.

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

fetch_urlA

Fetch a public HTTP/HTTPS URL and return its status, headers, and body.

Blocks requests to localhost, loopback, link-local, and private IP ranges to prevent SSRF (unless MCP_ALLOW_PRIVATE_NETWORK=true). Response bodies are capped at MCP_MAX_RESPONSE_SIZE bytes.

Args: url: The http:// or https:// URL to fetch. timeout: Optional per-request timeout in seconds (defaults to MCP_HTTP_TIMEOUT).

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYes
timeoutNo

TDQS

A4.1/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and does well: it discloses SSRF protections (localhost/loopback/link-local/private IP blocking), the MCP_ALLOW_PRIVATE_NETWORK override, the response-size cap via MCP_MAX_RESPONSE_SIZE, and the timeout default source. It does not describe error/failure behavior or redirect handling, which keeps it from a 5.

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

Conciseness4/5

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

Front-loaded purpose sentence followed by two constraint sentences and a clean Args block. Every sentence earns its place; the env-var references are slightly boilerplate but informative.

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

Completeness4/5

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

For a 2-param tool with no output schema and no annotations, the description covers the return shape, safety constraints, and both parameters. It is close to complete, only missing failure/redirect semantics and any response-format detail.

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 0%, so the description must compensate and largely does: it defines url as an http:// or https:// URL and timeout as an optional per-request timeout in seconds defaulting to MCP_HTTP_TIMEOUT, adding real meaning beyond the bare schema (whose default is only null).

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?

States a specific verb (fetch) and resource (public HTTP/HTTPS URL) and enumerates the return payload (status, headers, body). An agent can immediately distinguish this from siblings like validate_url, parse_url, check_connectivity, and resolve_dns.

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 word 'public' and the SSRF note imply this is for externally-reachable URLs only, and the SSRF/private-network exclusion gives partial when-not guidance. However, it never names an alternative sibling (e.g., validate_url to check a URL without fetching) or states explicit when-to-use conditions.

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

file_existsA

Check whether a given path exists and is a regular file.

Args: path: Path to check, relative to the workspace root.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes

TDQS

A3.9/5.0
Behavior3/5

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

No annotations are supplied, so the description carries the burden. It does imply a non-mutating boolean check and clarifies that directories do not count as 'exists', which is real behavioral value, but it says nothing about error conditions (permissions, invalid paths, non-existent workspace root) or the return value shape.

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

Conciseness4/5

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

The defining sentence is front-loaded and zero-waste. The trailing 'Args:' block marginally restates the same path information already given, but the overall structure is appropriately sized for a one-parameter predicate.

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, the description should sketch the result, and 'whether a given path exists and is a regular file' effectively communicates the boolean predicate and the directory edge case. Only the explicit return type and failure behavior are left unstated, a minor gap for a tool this simple.

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

Parameters4/5

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

Schema coverage is 0% for the single required parameter, so the description must compensate, and it does: 'Path to check, relative to the workspace root' establishes the resolution base, which the bare 'type: string' schema does not. That is meaningful semantics beyond the schema.

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

Purpose5/5

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

States a specific verb ('Check whether') and a precise resource ('a given path... is a regular file'). The 'regular file' qualifier cleanly distinguishes it from the sibling directory_exists and from read_file/write_file, so an agent can select it without opening any schema.

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?

There is no explicit when-to-use statement, no exclusions, and no named alternatives. The predicate nature implies it is a pre-flight guard for read_file/write_file/copy_file, but that usage is left to inference rather than stated.

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

find_filesA

Recursively find files under a directory matching a glob pattern.

Args: path: Directory to search under, relative to the workspace root. pattern: Filename glob, e.g. ".py" or ".md" (matched against the filename only, not the full path).

Returns: Up to 500 matching relative file paths.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathNo.
patternNo*

TDQS

A3.6/5.0
Behavior4/5

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

No annotations are supplied, so the description carries the full burden and it delivers meaningful traits: recursion depth behavior, glob matching against the filename only (not the full path), and a hard cap of 500 results. It omits error behavior, hidden-file handling, and result ordering, which keeps it short of a 5.

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

Conciseness4/5

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

The Args/Returns structure is front-loaded and each line earns its place; no filler. The verbose docstring formatting is slightly heavy for a 2-parameter tool but does not obscure the content.

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 2-parameter read tool with no output schema, the description supplies what the schema cannot: workspace-relative semantics, matching scope, and the 500-result return bound. Only edge-case behavior (errors, hidden files, symlinks) is left 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?

Schema description coverage is 0%, so the description must compensate, and it does: 'path' is defined as relative to the workspace root and 'pattern' as a filename-only glob with concrete examples ('*.py'). It does not restate the schema defaults ('.' and '*'), which would be the only remaining gap.

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+mechanism: 'Recursively find files under a directory matching a glob pattern.' An agent can distinguish this from list_directory (non-recursive) and search_text_in_files (content search) by the recursion + filename-glob combination, though no sibling is named explicitly.

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 exclusion of alternatives, and no conditions under which to prefer find_files over list_directory or search_text_in_files. Usage is only implied by the verb 'find'.

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

format_jsonB

Pretty-print (reformat) a JSON string with the given indentation.

Args: json_text: Raw JSON text to parse and reformat. indent: Number of spaces per indent level (0-8).

ParametersJSON Schema
NameRequiredDescriptionDefault
indentNo
json_textYes

TDQS

B3.4/5.0
Behavior3/5

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

With no annotations and no output schema, the description carries the disclosure burden. It conveys that this is a pure transformation, but says nothing about failure behavior on malformed input, whether the result is returned as a string, or handling of large inputs. Adequate but with clear gaps.

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

Conciseness4/5

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

Front-loaded one-line purpose followed by a tight two-entry Args list; nothing is wasted. The Args block is slightly redundant with the single-sentence summary but stays efficient.

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

Completeness4/5

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

A simple two-parameter pure function with no side effects; both parameters are explained and the return value (reformatted JSON text) is self-evident even without an output schema. Only the invalid-input behavior is left 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?

Schema description coverage is 0%, so the description must compensate, and it largely does: json_text is defined as raw JSON to parse and reformat, and indent is defined as spaces per level with a 0-8 range that the schema itself does not encode. No default value (2) is mentioned, which is the residual gap.

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 (pretty-print/reformat) and resource (a JSON string), plus the indentation behavior. It is clearly distinct from sibling validate_json, though the description never names or contrasts with that sibling explicitly.

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 validate_json or json-related siblings, and no preconditions (e.g. input must already be valid JSON). Usage is only implied by the verb.

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

get_cpu_infoA

Get CPU information: core counts, current utilization (overall and per-core), clock frequency, and 1/5/15-minute load averages.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.7/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full behavioral burden. It discloses the data categories returned, which is the most relevant behavior here, but says nothing about whether it is read-only, whether it requires elevated privileges, whether readings are instantaneous snapshots, or whether the call is cheap. A 'Get' verb implies read-only, but that is inference rather than disclosure.

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 using a colon-delimited list; every clause earns its place by naming a returned metric, and there is no filler or redundancy.

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

Completeness4/5

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

With no output schema and no annotations, the description is the only source of return-value information, and it does name the four metric families an agent would receive. It falls short of describing the shape of the response (e.g., how per-core values are keyed), which is the remaining gap for a tool whose output is otherwise undocumented.

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 explain; the baseline of 4 applies. The description correctly does not waste space describing non-existent inputs.

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 ('CPU information') and then enumerates the exact metrics returned (core counts, utilization overall/per-core, clock frequency, load averages). The enumerated metrics are inherently CPU-specific and separate it from get_memory_info, get_disk_info, and get_system_info, though no sibling is named 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?

Usage is only implied: the name plus the metric list make it obvious this is the tool for CPU stats, but there is no statement of when to prefer it over get_system_info (which likely overlaps) or any preconditions. For a zero-argument informational tool this is acceptable but thin.

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

get_directory_sizeA

Recursively calculate the total size of a directory's contents.

Args: path: Directory to measure, relative to the workspace root.

Returns: Total size in bytes and megabytes, plus the number of files counted.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathNo.

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 the full burden. It discloses recursion and the return format (bytes, MB, file count), but omits performance implications on large directories, symlink handling, permission errors, and whether the operation is strictly read-only.

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

Conciseness5/5

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

The description uses a titled purpose plus 'Args' and 'Returns' sections with no filler. It is front-loaded and easy to scan.

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

Completeness4/5

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

For a simple read-only directory-size tool with one parameter and no output schema, the description covers purpose, parameter semantics, and return values. It lacks edge-case behavior and performance notes, but is otherwise complete enough to invoke correctly.

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

Parameters4/5

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

Schema coverage is 0%, so the description must document the parameter. It does: 'path: Directory to measure, relative to the workspace root' clarifies the parameter's type, meaning, and base directory, adding significant value beyond the bare 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?

The description states a specific verb ('calculate') and resource ('total size of a directory's contents') with scope ('recursively'), clearly distinguishing it from siblings like get_file_info or get_disk_info. However, it does not explicitly name an alternative tool to differentiate, so it falls 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 Guidelines2/5

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

No when-to-use or when-not-to-use guidance is provided; the description only explains what the tool does. The agent must infer that this is for measuring directory sizes versus other file or directory tools.

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

get_disk_infoA

Get disk usage (total/used/free, in GB) for the filesystem containing the given workspace-relative path.

Args: path: Path (inside the workspace) whose filesystem to inspect.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathNo.

TDQS

A3.8/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden. It discloses the returned metrics and units (GB) and the filesystem-scoping behavior, which is useful, but does not state read-only safety, error behavior for external/mounted paths, or that it returns nothing about the path's size (vs. get_directory_size).

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 front-loaded sentence carrying all the key information (metrics, units, scoping), followed by a short Args block. No padding or repetition of the tool name.

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 single-param read tool with no annotations and no output schema, the description is adequate: it names the returned metrics and their units. Without an output schema, however, it could more explicitly describe return shape (e.g., single object vs. error on nonexistent path), leaving some behavioral gaps.

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 0% and the single 'path' parameter has only a default ('.') in the schema. The description compensates well by explaining path is workspace-relative and identifies which filesystem is inspected; only minor gaps (permissions, external mounts) remain. One parameter with no schema documentation triggers a low-coverage baseline needing description support.

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?

States a specific verb (Get) and resource (disk usage) with the exact metrics returned (total/used/free, in GB) and the scoping condition (filesystem containing the given path). This clearly distinguishes it from siblings like get_memory_info, get_cpu_info, and get_system_info.

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 description — inspect the filesystem holding a workspace-relative path — but there is no explicit when-to-use vs. when-not, nor a named alternative such as get_memory_info or get_system_info. Adequate but with a clear gap for an agent choosing among several info tools.

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

get_file_infoA

Get metadata about a file: size, modified/created time, extension.

Args: path: Path to the file, relative to the workspace root.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes

TDQS

A3.9/5.0
Behavior4/5

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

With no annotations, the description carries the full burden. It correctly signals a read-only, non-destructive operation by describing the returned metadata and does not include any misleading claims. It could add whether the file must exist or what happens on failure, but the read-only nature is clear.

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

Conciseness5/5

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

Two short sentences with no wasted words; the purpose is front-loaded and the parameter explanation is clearly separated under an Args heading.

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 read tool with no output schema and no annotations, the description is nearly complete: it states what metadata is returned and how to specify the path. It could mention error behavior or whether the file must already exist, but it covers the essentials for correct invocation.

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

Parameters4/5

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

Schema description coverage is 0%, and the description compensates by explaining that 'path' is relative to the workspace root. This is essential context that the bare schema does not provide, though it does not cover edge cases like symlinks or absolute paths.

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 (metadata about a file) and enumerates the exact fields returned (size, modified/created time, extension). It is clearly distinct from read_file and file_exists, though it doesn't explicitly name those siblings.

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 phrase 'metadata about a file' implies using this for file attributes rather than content, but there is no explicit when-to-use or when-not-to-use guidance, nor any mention of the sibling read_file or file_exists as alternatives.

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

get_memory_infoA

Get RAM and swap usage in gigabytes and as a percentage.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.5/5.0
Behavior3/5

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

With no annotations, the description carries the full behavioral burden, and it does disclose the return shape: values in gigabytes and as a percentage for both RAM and swap. That is useful, but it says nothing about platform constraints, whether data is a point-in-time snapshot, or whether elevated permissions are needed. For a zero-parameter read-only utility the risk is low, so a 3 is defensible rather than a failure.

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 that states the resource and the output units with no filler or redundancy. It is appropriately sized for a trivial no-argument tool.

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

Completeness4/5

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

No output schema exists, so the description must carry return-value information, and it does specify both metric types and both representations (gigabytes and percentage). It stops short of noting whether the snapshot is instantaneous or whether it covers physical vs. virtual memory, so it is near-complete but not exhaustive.

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, which establishes the baseline of 4 under the scoring rules. There is nothing further for the description to clarify about inputs.

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

Purpose4/5

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

The description names a specific verb and resource ("Get RAM and swap usage") and specifies the measurement units, so the purpose is unambiguous. However, it offers no differentiation from closely related siblings such as get_system_info, get_cpu_info, or get_disk_info, so an agent must infer the boundary itself.

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 statement of when to call this versus the other system-info siblings, and no prerequisites or conditions are given. The description is purely a statement of function with no routing guidance.

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

get_service_statusA

Get the systemctl status output for one systemd service (read-only; cannot start, stop, restart, enable, or disable services).

Args: service_name: Service unit name, e.g. "nginx" or "ssh.service". Only letters, digits, '@', '.', '_', and '-' are allowed.

ParametersJSON Schema
NameRequiredDescriptionDefault
service_nameYes

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations, the description carries the behavioral burden and does so: it declares read-only semantics and explicitly lists the mutating actions that are unavailable. It also indicates the return is the raw `systemctl status` output. Minor gap: no mention of behavior for a nonexistent or inactive unit.

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?

Front-loads the purpose and the read-only constraint in one sentence, then cleanly separates the argument spec. No filler anywhere.

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 read tool with no output schema, the definition covers purpose, safety, and argument format adequately. Slightly incomplete on edge-case behavior (unit not found) but nothing that would cause a misinvocation.

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

Parameters4/5

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

Schema coverage is 0%, and the description compensates by giving the parameter's meaning, two concrete examples ('nginx', 'ssh.service'), and an explicit allowed-character set. That is meaningful added value, though it doesn't state whether the '.service' suffix is optional or how invalid names behave.

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?

States a specific verb and resource ('Get the systemctl status output for one systemd service') and immediately scopes it as read-only, distinguishing it from mutation-oriented siblings and from other info tools like get_cpu_info/get_system_info.

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

Usage Guidelines4/5

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

Explicitly frames the read-only context and enumerates the operations it cannot perform (start/stop/restart/enable/disable), which tells the agent when this tool is the wrong choice. It stops short of naming a sibling as the alternative for those operations, so not a full 5.

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

get_system_infoA

Get basic host information: OS, kernel release, architecture, hostname, Python version, and boot time.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.5/5.0
Behavior3/5

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

No annotations are supplied, so the description carries the behavioral burden, and it does implicitly convey that this is a passive, no-side-effect information read by listing only returned host facts. It never states read-only/no-auth requirements explicitly, nor does it say the result is a one-shot snapshot, so the disclosure is adequate but thin.

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 a colon-delimited field list and zero filler; every word earns its place and the reader knows exactly what comes back.

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, the enumeration of returned fields is what makes this complete, and it covers the key facts an agent would want. It stops slightly short of saying whether the call can fail or what happens on unsupported platforms, but for a trivial zero-arg read that is a minor 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 no parameter semantics are needed. The description correctly avoids inventing arguments and instead documents the output fields, which is the useful analog here.

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 ('basic host information') and then enumerates the exact fields returned: OS, kernel release, architecture, hostname, Python version, boot time. That field list implicitly separates it from siblings like get_cpu_info, get_memory_info, and get_disk_info, though no sibling is named explicitly.

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 or when-not-to-use guidance, and no mention of alternatives such as get_cpu_info or get_memory_info. The purpose is self-evident from the name, but the description provides no routing signal.

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

git_branchesB

List local branches for a repository inside the workspace, marking which one is currently checked out.

Args: path: Path to the git repository, relative to the workspace root.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathNo.

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 behavioral burden. It discloses that only local branches are listed and that the current branch is marked, but it does not state read-only safety, error behavior for invalid paths, output format, sorting, or whether remote branches 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.

Conciseness5/5

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

The description is front-loaded and appropriately sized. The core purpose appears first, and the Args block cleanly documents the single parameter with no wasted wording.

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 one-parameter read tool with no annotations and no output schema, the description covers purpose and path semantics, but it omits output format details and error behavior. It is minimally adequate but leaves some agent-relevant behavior 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?

Schema description coverage is 0%, so the description must explain the single parameter. It does so by clarifying that 'path' is the git repository path relative to the workspace root, adding meaningful context beyond the schema's type and default.

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 states a specific verb and resource: 'List local branches for a repository inside the workspace.' It also adds the key behavior of marking the currently checked-out branch. It does not explicitly differentiate from the sibling git_current_branch, so it misses the full sibling-discrimination bar for 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 Guidelines2/5

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

There is no explicit when-to-use guidance or comparison to alternatives such as git_current_branch or git_status. The use case is implied by 'list local branches,' but the description never states when this tool should be chosen over siblings.

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

git_current_branchB

Get the name of the currently checked-out branch.

Args: path: Path to the git repository, relative to the workspace root.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathNo.

TDQS

B3.2/5.0
Behavior2/5

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

With no annotations, the description carries the full behavioral burden. It implies a read-only lookup but never states read-only semantics, nor what happens outside a repo, in a detached-HEAD state, or on an invalid path. Only the path-relative-to-workspace-root note adds any context.

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

Conciseness4/5

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

One sentence for the purpose plus a short Args block; nothing is padded. The structure is front-loaded and easy to scan, though the Args block repeats a field name the schema already exposes.

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 read tool with no output schema and no annotations, the description covers purpose and parameter meaning adequately. Missing edge-case behavior is minor given the tool's simplicity.

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

Parameters4/5

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

Schema coverage is 0%, so the description must compensate, and it does: 'Path to the git repository, relative to the workspace root' explains what the parameter points at and how it is resolved. It omits mention of the '.' default that the schema declares, but the core semantics are covered.

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 the name of the currently checked-out branch.' This is clearly distinct from the sibling git_branches (which lists branches), though the description never names that sibling explicitly, so the differentiation is implicit rather than stated.

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 or when-not-to-use guidance, and no reference to the sibling git_branches as the alternative for enumerating branches. The agent must infer from the purpose text alone that this returns a single branch rather than a list.

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

git_diffA

Get the current diff for a repository inside the workspace.

Args: path: Path to the git repository, relative to the workspace root. staged: If True, show staged (index) changes instead of the working-tree diff. file_path: Optional single file to limit the diff to.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathNo.
stagedNo
file_pathNo

TDQS

A3.5/5.0
Behavior2/5

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

With no annotations provided, the description carries the full behavioral burden, yet it does not state that this is a read-only operation, whether it touches the working tree, authentication requirements, or the return format. It adds essentially nothing beyond what the name implies.

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?

Front-loaded one-line purpose followed by a tight Args block; every sentence earns its place with no redundancy.

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

Completeness4/5

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

For a three-parameter read tool with no annotations and no output schema, the description covers the intent and each parameter adequately. It could say more about the returned diff format, but an agent has enough to invoke it correctly.

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

Parameters4/5

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

Schema description coverage is 0%, so the description must compensate, and it does: it defines path (relative to workspace root), staged (index vs working-tree diff), and file_path (limit to one file). This meaningfully fills the gap, though it omits the default values present in 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?

The description states a specific verb and resource: 'Get the current diff for a repository inside the workspace.' It is clearly distinguishable from unrelated file tools, and implicitly from git_status/git_log by the word 'diff,' though it names no sibling 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?

Usage is only implied. The staged parameter note ('staged (index) changes instead of the working-tree diff') conveys a meaningful use-mode distinction, but the description never says when to prefer git_diff over git_status or git_log, nor any prerequisites.

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

git_logB

Get recent commit history for a repository inside the workspace.

Args: path: Path to the git repository, relative to the workspace root. limit: Number of commits to return (1-200).

ParametersJSON Schema
NameRequiredDescriptionDefault
pathNo.
limitNo

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 that this is a read-only operation, what happens if the path is not a repo or the repo is empty, how history is ordered, or what fields each commit entry contains. It only contributes the limit range (1-200), which is useful but far short of the disclosure needed for an annotation-free tool.

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

Conciseness4/5

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

The purpose sentence is front-loaded and the two parameters are listed compactly with no filler. The Args block is slightly verbose for two parameters but nothing is wasted.

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 annotations and no output schema, the description should tell the agent enough to call and interpret the tool. It covers both inputs and scope, but never indicates the shape of a returned commit (hash, author, message, date) or the ordering, leaving interpretation of results to guesswork.

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 0%, so the description must compensate, and it largely does: it defines 'path' as repo path relative to the workspace root and 'limit' as the number of commits, with a valid range of 1-200. It omits the schema defaults (path='.', limit=10), so an agent cannot infer default behavior from the prose alone.

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

Purpose4/5

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

States a specific verb and resource: 'Get recent commit history for a repository inside the workspace.' An agent can distinguish this from git_status and git_diff by the resource (commit history vs. working-tree state vs. change content). It does not, however, explicitly contrast itself with the neighboring git_* 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?

There is no guidance on when to use git_log versus git_diff, git_status, git_branches, or git_current_branch. The word 'recent' hints at a recency scope but no conditions, prerequisites, or alternatives are named.

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 (branch info + changed files) for a repository inside the workspace.

Args: path: Path to the git repository, relative to the workspace root.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathNo.

TDQS

A3.7/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden. It discloses the return content and the workspace-relative scoping constraint, but does not state that it is read-only, what happens if the path is not a git repository, or any error/permission behavior.

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

Conciseness5/5

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

Two short, front-loaded sentences plus a compact Args line; no filler, and the essential scope constraint appears before the parameter note.

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

Completeness4/5

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

For a simple, single-parameter read tool with no output schema and no annotations, the description covers purpose, scope, and the parameter's meaning. It stops short of stating read-only nature or failure modes, but little else is required for correct invocation.

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

Parameters4/5

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

Schema description coverage is 0%, but the description compensates by explaining that 'path' points to the git repository and is relative to the workspace root — meaning beyond the bare type/default in the schema. This is the key semantic an agent needs to pass the parameter correctly.

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 states a specific verb and resource ('Get `git status`') and clarifies the returned content ('branch info + changed files') and scope ('for a repository inside the workspace'). This meaningfully separates it from git_log and git_diff, though it never names 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?

Usage is implied — an agent can infer this is the tool for inspecting working-tree state — but there is no explicit statement of when to use this vs git_log, git_diff, git_branches, or git_current_branch, and no prerequisites or exclusions.

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

list_directoryA

List the contents of a directory inside the workspace.

Args: path: Directory to list, relative to the workspace root (default: the workspace root itself). recursive: If True, walk subdirectories too (capped by MCP_MAX_DIRECTORY_DEPTH).

Returns: Each entry's name, relative path, whether it's a file or directory, and file size when applicable.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathNo.
recursiveNo

TDQS

A3.5/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full behavioral burden. It discloses the recursive walk is capped by MCP_MAX_DIRECTORY_DEPTH and describes return fields, which is useful. However, it doesn't mention error behavior (e.g., what if path doesn't exist), permission requirements, or whether it follows symlinks.

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 well-structured with Args and Returns sections, front-loading the purpose. Every sentence earns its place by explaining parameters and return values without redundancy.

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

Completeness4/5

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

Given no output schema and 0% parameter description coverage, the description fills gaps by explaining both parameters and return fields. It is nearly complete, missing only error handling and edge cases like empty directories, but sufficient for an agent to invoke correctly.

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

Parameters4/5

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

Schema coverage is 0%, so the description must compensate. It clarifies the 'path' parameter is relative to the workspace root and defaults to the root, and that 'recursive' enables subdirectory walking with a depth cap. This adds meaningful meaning beyond the bare schema, though it doesn't specify path format constraints.

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 states a specific verb (list) and resource (directory contents) with an explicit scope constraint ('inside the workspace'). It distinguishes from siblings like read_file, find_files, or get_directory_size by focusing on direct listing, though it doesn't explicitly name alternatives.

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

Usage Guidelines2/5

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

No guidance is provided on when to use this tool versus alternatives such as find_files, get_directory_size, or directory_exists. The description implies listing but doesn't state conditions or exclusions.

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

list_processesA

List running processes on the host (read-only; cannot start, stop, or signal anything).

Args: limit: Max number of processes to return (1-200). sort_by: "cpu" or "memory" -- which usage metric to sort by, descending.

Returns: Each process's pid, name, username, cpu%, memory%, and status.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
sort_byNocpu

TDQS

A4.3/5.0
Behavior4/5

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

With no annotations, the description carries the full behavioral burden and does well: it discloses the read-only guarantee and explicitly rules out start/stop/signal operations, and it lists the return fields (pid, name, username, cpu%, memory%, status). It omits auth requirements, pagination, and host-scope details, but the core safety and output profile is clearly communicated.

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 purpose is front-loaded in the first sentence, followed by compact Args and Returns sections. Every sentence earns its place, and the Args/Returns structure is exactly what is needed given the absence of an output schema and parameter descriptions.

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 read-only list tool with no annotations and no output schema, the description supplies the essential missing pieces: mutation boundaries, parameter constraints, and return fields. Remaining gaps are minor – it does not clarify whether the host is local or remote, nor any pagination or permission model.

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

Parameters5/5

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

Schema description coverage is 0%, so the description must compensate, and it does: limit is documented as a max count with an explicit 1-200 range, and sort_by is given allowed values ('cpu' or 'memory') plus the descending sort order. Both parameters gain meaning not present in the bare schema.

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

Purpose5/5

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

States a specific verb and resource ('List running processes on the host') and immediately scopes the operation as read-only, which distinguishes it from mutation-oriented process tools and from sibling info tools like get_cpu_info or get_system_info. An agent can tell what this does without opening the schema.

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 parenthetical 'cannot start, stop, or signal anything' gives a clear when-not boundary, implying this is not for process control. However, it never names an alternative tool or states when to prefer this over get_system_info/get_cpu_info, so usage is only implied rather than explicit.

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

move_fileB

Move or rename a file within the workspace.

Args: source: Existing file path, relative to the workspace root. destination: New path; parent directories are created automatically.

ParametersJSON Schema
NameRequiredDescriptionDefault
sourceYes
destinationYes

TDQS

B3.2/5.0
Behavior2/5

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

With no annotations, the description carries the full burden of behavioral disclosure. It usefully notes that parent directories are created automatically for the destination, but omits critical mutation behaviors: whether an existing destination is overwritten, what happens if the source is missing, or whether the operation is atomic.

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

Conciseness5/5

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

The description is two compact sentences plus a clean Args block, front-loading the action with no wasted words. Every sentence earns its place.

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

Completeness3/5

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

For a simple two-parameter move tool with no annotations or output schema, the description covers parameter meaning and one behavioral detail. However, it leaves out important mutation edge cases (overwrite behavior, error conditions) that an agent needs to invoke the tool correctly.

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

Parameters4/5

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

Schema description coverage is 0%, so the description must compensate. It provides meaningful semantics for both parameters: source is an existing file path relative to the workspace root, and destination is the new path with parent directories created automatically. This effectively documents the parameters beyond their basic types.

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 (move/rename) and resource (file) within the workspace, clearly distinguishing it from pure copy or delete operations. However, it does not explicitly name sibling alternatives like copy_file or delete_file, so sibling differentiation is implicit rather than explicit.

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?

Provides no guidance on when to use move_file versus alternatives such as copy_file, write_file, or delete_file. The description only states the operation, leaving the agent to infer the appropriate scenario without any context or exclusions.

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

parse_urlB

Break a URL down into scheme, hostname, port, path, query, and fragment.

Args: url: The URL to parse.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYes

TDQS

B3.4/5.0
Behavior3/5

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

No annotations are present, so the description carries the full burden. It discloses the output components but says nothing about error behavior for malformed URLs, handling of relative vs absolute URLs, or whether it is a pure side-effect-free operation.

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

Conciseness4/5

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

Front-loaded and free of filler; the purpose sentence leads and the argument note is short. The brief Args block is somewhat redundant stylistically but adds negligible bloat.

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, the description usefully enumerates the return components, which is the key missing piece an agent would need. For a low-complexity single-parameter tool this is nearly complete, though error handling is unmentioned.

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

Parameters2/5

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

Schema coverage is 0% and the single parameter's description ("url: The URL to parse") merely restates the parameter name. It does not clarify accepted formats, whether a scheme is required, or how relative URLs are treated.

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

Purpose5/5

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

The description uses a precise verb ("Break a URL down") and enumerates the exact components returned (scheme, hostname, port, path, query, fragment). This decomposition makes it functionally distinguishable from validate_url, build_url, and fetch_url without opening any schema.

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 choose this over validate_url (validity checking) or build_url (construction), nor any stated preconditions. Usage must be entirely inferred from the one-line purpose.

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

read_fileA

Read a UTF-8 (or other specified encoding) text file from the workspace.

Args: path: Path to the file, relative to the workspace root. encoding: Text encoding to decode with (default "utf-8").

Returns: The file's path, size in bytes, encoding, and full text content. Fails if the file does not exist, isn't a file, exceeds the configured max file size, or isn't valid text in that encoding.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes
encodingNoutf-8

TDQS

A4.1/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and does well: it discloses the return payload (path, byte size, encoding, full content) and four concrete failure modes including the max-file-size limit and encoding validity. It stops short of stating permission requirements or that the operation is strictly non-mutating.

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

Conciseness4/5

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

Front-loaded one-line purpose followed by tightly scoped Args/Returns sections; every line carries information. The labeled sections add slight overhead but no filler sentences.

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 supplies both the return shape and the error conditions, which is what an agent needs to call it correctly. Minor gaps remain around permissions and large-file behavior beyond the size cap.

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

Parameters4/5

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

Schema coverage is 0%, so the description must compensate, and it does: path is defined as relative to the workspace root and encoding is described with its default. Only the set of valid encoding values is left unspecified.

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?

States a specific verb (read) and resource (text file) plus scope (from the workspace) and supported encodings. An agent can immediately distinguish it from write_file, append_file, and get_file_info.

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 the failure conditions, but the description never states when to prefer this over siblings like get_file_info (metadata only) or search_text_in_files. No explicit exclusions or alternatives are named.

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

resolve_dnsB

Resolve a hostname to its IP address(es) and flag whether any are private.

Args: hostname: The hostname to resolve.

ParametersJSON Schema
NameRequiredDescriptionDefault
hostnameYes

TDQS

B3.3/5.0
Behavior3/5

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

With no annotations, the description carries the full behavioral burden. It usefully discloses the return shape (IP addresses plus a private-address flag), but says nothing about network access requirements, timeouts, or what happens on unresolvable hostnames, which are the traits an agent would most want for a DNS tool.

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

Conciseness4/5

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

The core sentence is front-loaded and wastes no words. The trailing 'Args:' block repeats the parameter name and type verbatim from the schema, adding length without value.

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

Completeness3/5

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

There is no output schema, so it is good that the description explains the return values (addresses + private flag). However, for a network-dependent tool with zero annotations, the absence of any failure/timeout/error-handling context leaves a real gap.

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

Parameters2/5

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

Schema description coverage is 0% and the single parameter's 'documentation' is merely a restatement of its name ('hostname: The hostname to resolve'). No format hints (FQDN vs. bare name), no IPv6/IPv4 expectations, no examples, so the description fails to compensate for the schema gap.

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

Purpose5/5

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

States a specific verb (resolve) and resource (hostname/IP addresses) plus an extra output behavior (flagging private addresses). No sibling in the list performs DNS resolution, so no differentiation is needed, and an agent can immediately tell what this does.

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 near-neighbors like check_connectivity, fetch_url, or validate_url, nor any stated prerequisites or expected failure modes. The 'flag private addresses' detail hints at an SSRF/security-screening use case but never states it, so usage is left to inference.

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

search_text_in_filesA

Recursively regex-search text files under a directory (like a scoped grep), confined to the workspace.

Args: path: Directory to search under, relative to the workspace root. pattern: Python regular expression to search each line for. file_glob: Glob to filter which files are searched, e.g. "*.py". max_results: Maximum number of matching lines to return (1-500).

ParametersJSON Schema
NameRequiredDescriptionDefault
pathNo.
patternNo
file_globNo*
max_resultsNo

TDQS

A3.9/5.0
Behavior3/5

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

With no annotations, the description carries the full behavioral burden. It discloses the recursive/workspace-confined scope and the max_results cap, which is useful. However, it does not state the return format (matching lines with file/line context?), pagination/truncation behavior, error handling, or performance characteristics — gaps for a search tool with no annotation coverage.

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

Conciseness4/5

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

Front-loaded one-sentence summary followed by a compact Args block. The 'like a scoped grep' analogy earns its place; the line 'Args:' is conventional. No wasted sentences, though the format is list-heavy rather than prose-optimized.

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

Completeness4/5

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

For a 4-param search tool with 0% schema coverage and no annotations, the description covers purpose, scope, and all parameters well. It lacks return-value/pagination detail, but since there is no output schema and no annotations, that gap is minor given how much it already explains.

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

Parameters4/5

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

Schema coverage is 0% and all four params are undocumented in the schema, so the description must compensate. It does so well: path (relative to workspace root), pattern (Python regex per line), file_glob (e.g. '*.py'), max_results (1-500) — each param gets a meaningful explanation including the regex dialect and the range constraint.

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?

States a specific verb (regex-search) and resource (text files under a directory), with scope qualifiers ('recursively', 'confined to the workspace') and an analogy ('like a scoped grep'). This clearly distinguishes it from siblings like find_files (which lists files) or read_file (which reads one file).

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

Usage Guidelines3/5

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

The 'like a scoped grep' framing implies usage context, but the description never explicitly says when to use this vs. find_files or read_file, nor does it mention exclusions or alternatives. Usage is inferable but not spelled out.

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

validate_jsonB

Check whether a string is valid JSON without modifying it.

Args: json_text: The text to validate.

ParametersJSON Schema
NameRequiredDescriptionDefault
json_textYes

TDQS

B3.3/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full behavioral burden. It does disclose one useful trait (non-mutating), but says nothing about what is returned (a boolean? a parse error with position?) or whether it throws or returns false on invalid input — critical for a validator.

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 front-loaded sentence states the action and the non-mutation guarantee, followed by a minimal Args block. No filler or redundant restatement.

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 single-argument utility this is mostly adequate, but with no output schema the description should disclose the return contract (valid/invalid signal, error detail). That gap leaves the agent guessing at how to 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 0%, so the description must compensate. 'json_text: The text to validate' restates the parameter name and clarifies it is the input string, but adds no format, encoding, or size guidance beyond the obvious.

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 states a specific verb and resource ('Check whether a string is valid JSON') and adds a scope qualifier ('without modifying it'), which implicitly contrasts it with the sibling format_json. It is clear and distinguishable, though it never names the alternative outright.

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 phrase 'without modifying it' hints that a modifying alternative (format_json) exists, so usage is implied but never explicit. There is no statement of when to prefer this over format_json or other JSON-handling siblings.

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

validate_urlA

Validate that a string is a well-formed http/https URL (syntax check only; does not make a network request).

Args: url: The URL string to validate.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYes

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations provided, the description carries the full behavioral burden. It usefully discloses that this is a syntax-only check with no network request, but it does not state the return value or error behavior, which would complete the behavioral picture.

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 appropriately sized and front-loaded, stating the core behavior in the first sentence and only adding a short parameter note afterward. There is no wasted prose.

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

Completeness4/5

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

For a simple validation tool, the description covers the essential behavioral constraint: syntax-only validation with no network request. The main remaining gap is that it does not describe the return value or error behavior, which matters because no output schema is provided.

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 0%, so the description must compensate. It does so reasonably well by naming the sole parameter and describing it as the URL string to validate, while the main description constrains it to well-formed http/https URLs.

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 and resource: validate a string as an http/https URL. It also distinguishes the operation from network-oriented siblings by clarifying it is a syntax check only and does not make a network request.

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

Usage Guidelines4/5

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

It clearly explains the context for using this tool: syntax validation only, with no network request. However, it does not explicitly name alternatives such as parse_url, fetch_url, or check_connectivity, so the routing guidance is strong but not fully explicit.

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

write_fileA

Create or overwrite a text file inside the workspace.

Args: path: Destination path, relative to the workspace root. Parent directories are created automatically. content: Text content to write (UTF-8). overwrite: If False and the file already exists, fails instead of overwriting it.

Returns: The path and number of bytes written.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes
contentYes
overwriteNo

TDQS

A4/5.0
Behavior4/5

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

With no annotations, the description must carry the behavioral burden. It discloses that parent directories are created automatically, that overwrite=False causes failure when the file exists, and that it returns the path and bytes written. It still omits permission requirements and broader failure modes.

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?

Front-loaded purpose followed by tightly structured Args and Returns sections. Every sentence carries useful information with no filler.

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 3-parameter write tool with no annotations, no output schema, and 0% schema coverage, the description is largely complete: it covers behavior, parameter meanings, and return value. Minor gaps remain around permissions, explicit default overwrite behavior, and non-overwrite failure modes.

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 0%, so the description must compensate. It documents all three parameters: path is workspace-relative with automatic parent creation, content is UTF-8 text, and overwrite=False prevents overwriting. It does not explicitly state the default overwrite value, though the schema provides it.

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?

States a specific verb and resource: 'Create or overwrite a text file inside the workspace.' This clearly distinguishes it from append_file and read_file by emphasizing full write/overwrite semantics.

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

Usage Guidelines2/5

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

No explicit guidance on when to use this tool versus append_file, or when overwriting is appropriate. The overwrite parameter hints at some behavior, but alternatives and exclusions are left to inference.

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. 38 tool updatesv0.1.0
    • First observedappend_file
    • First observedbuild_url
    • First observedcheck_connectivity
    • First observedcopy_file
    • First observedcount_words
    • First observedcreate_directory
    • First observedcsv_get_columns
    • First observedcsv_to_json
    • First observeddelete_directory
    • First observeddelete_file
    • First observeddetect_project_type
    • First observeddirectory_exists
    • First observedfetch_url
    • First observedfile_exists
    • First observedfind_files
    • First observedformat_json
    • First observedget_cpu_info
    • First observedget_directory_size
    • First observedget_disk_info
    • First observedget_file_info
    • First observedget_memory_info
    • First observedget_service_status
    • First observedget_system_info
    • First observedgit_branches
    • First observedgit_current_branch
    • First observedgit_diff
    • First observedgit_log
    • First observedgit_status
    • First observedlist_directory
    • First observedlist_processes
    • First observedmove_file
    • First observedparse_url
    • First observedread_file
    • First observedresolve_dns
    • First observedsearch_text_in_files
    • First observedvalidate_json
    • First observedvalidate_url
    • First observedwrite_file

TDQS

A3.5/5.0

Scored across 38 tools

Disambiguation4/5

Most tools have clearly distinct purposes, with minimal overlap. Minor confusion possible between file_exists and get_file_info, or between git_branches and git_current_branch, but descriptions clarify their differences.

Naming Consistency4/5

Tools follow a consistent snake_case pattern overall, but there is a mix of verb_noun (get_memory_info) and noun_verb (file_exists) conventions. Domain-prefixed names like git_* and csv_* are consistent within their groups.

Tool Count2/5

With 38 tools, the server is heavily over the typical 3-15 range. Many tools are very granular and could be combined (e.g., file_exists and get_file_info, or the URL manipulation tools), making the set feel bloated for the purpose.

Completeness4/5

The surface covers file management, system inspection, network utilities, git read operations, and text processing well. Notable gaps include command execution, package management, and process control, but these may be intentionally excluded for safety.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    C
    maintenance
    Provides AI coding agents with a secure, sandboxed environment for executing coding tasks including file operations, command execution, and testing. Features session management, policy enforcement, and Docker-based sandboxing for safe code execution and development workflows.
    -
  • A
    license
    Not graded
    quality
    A
    maintenance
    Enables AI clients to safely read, search, understand, and edit local project code and files, with Git inspection, code indexing, and controlled command execution within permissioned workspaces.
    4 npm
    6
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables AI agents to work in a persistent, isolated Linux workspace with file management, Bash execution, SSH/SFTP access, and durable storage while keeping workloads contained from the host and private networks.
    MIT
  • A
    license
    Not graded
    quality
    A
    maintenance
    Enables tool-capable AI models to operate a private Linux desktop and headless browser, with terminal, file, and application controls, while keeping your physical mouse and keyboard separate.
    MIT