Skip to main content
Glama

bash-mcp

An MCP server that wraps common CLI tools (kubectl, terraform, helm, git, argocd, jq, yq, ripgrep, etc.) and returns structured JSON instead of raw text output.

Designed for AI agents and LLM-powered workflows where parsing human-readable CLI output wastes tokens and breaks easily.

Created with the help of Claude since it is the main consumer of the structured data.

Quick Start

Option 1: Zero-install with npx

No installation needed — just add the MCP config and npx will fetch it on first use.

Option 2: Global install

npm install -g @nickw8/bash-mcp

Option 3: Install from source

git clone https://github.com/nickw8/bash-mcp.git
cd bash-mcp
npm install && npm run build
npm link

Related MCP server: Pare

Verify your setup

Run the built-in preflight check before wiring bash-mcp into a client:

npx -y @nickw8/bash-mcp --doctor   # or: bash-mcp --doctor (global install)

It reports your Node version, whether the MCP SDK loads, which CLIs are available (versions included), and the resolved BASH_MCP_MODE — then exits non-zero if a critical check fails (Node too old or the SDK can't load). Missing CLIs are advisory, not failures. Without --doctor, the binary starts the MCP server as usual.

Claude Code Setup

Add bash-mcp to your Claude Code settings. For all projects (recommended), edit ~/.claude/settings.json. For a single project, edit .claude/settings.json in the project root.

With npx (no install required):

{
  "mcpServers": {
    "bash-mcp": {
      "command": "npx",
      "args": ["-y", "@nickw8/bash-mcp"],
      "env": {
        "BASH_MCP_MODE": "readOnly"
      }
    }
  }
}

Safe by default: an unset BASH_MCP_MODE resolves to readOnly, which blocks mutating run/batch commands. The examples set it explicitly for clarity. For trusted local use, set BASH_MCP_MODE=off to allow writes.

With global install:

{
  "mcpServers": {
    "bash-mcp": {
      "command": "bash-mcp",
      "env": {
        "BASH_MCP_MODE": "readOnly"
      }
    }
  }
}

To verify it's working, start Claude Code and check that bash-mcp tools (like cat, rg, git_status) appear in the tool list.

You can also add it from the CLI:

claude mcp add bash-mcp -e BASH_MCP_MODE=readOnly -- npx -y @nickw8/bash-mcp

Steer agents toward the structured tools (optional)

Registering the server exposes the tools, but agents still reach for raw Bash out of habit. Two assets fix that: a rules file (~/.claude/rules/bash-mcp-tools.md, auto-loaded into every session — the tool inventory) and a PreToolUse(Bash) redirect hook. Install both with:

npx -y @nickw8/bash-mcp --install-claude        # copy into ~/.claude
npx -y @nickw8/bash-mcp --install-claude --check # report drift, write nothing

It prints the settings.json hook block to paste in (the rules file needs no settings — Claude Code auto-loads ~/.claude/rules/*.md). See hooks/README.md for details and the clone-time npm run claude:install equivalent. --uninstall-claude removes both files again.

Or install the Claude Code plugin, which bundles the server and the hook (in warn mode — it never blocks unless BASH_MCP_HOOK=block):

/plugin install bash-mcp --marketplace nickw8/bash-mcp

Every other client (VS Code/Copilot, Codex, generic stdio) and pinned versions: docs/guides/installation.md.

Claude Desktop Setup

Edit claude_desktop_config.json (macOS: ~/Library/Application Support/Claude/, Windows: %APPDATA%\Claude\) and add the same mcpServers entry:

{
  "mcpServers": {
    "bash-mcp": {
      "command": "npx",
      "args": ["-y", "@nickw8/bash-mcp"],
      "env": {
        "BASH_MCP_MODE": "readOnly"
      }
    }
  }
}

Restart Claude Desktop after editing.

Cursor Setup

Add bash-mcp to ~/.cursor/mcp.json (global) or .cursor/mcp.json (per-project):

{
  "mcpServers": {
    "bash-mcp": {
      "command": "npx",
      "args": ["-y", "@nickw8/bash-mcp"],
      "env": {
        "BASH_MCP_MODE": "readOnly"
      }
    }
  }
}

(Use "command": "bash-mcp" with no args if you installed globally.) Any MCP-aware client works the same way — point it at the bash-mcp binary or npx -y @nickw8/bash-mcp.

Optional Claude Code hooks in hooks/ steer agents toward the structured tools by blocking raw shell commands (git status, kubectl get, cat, …) that have a bash-mcp equivalent, while letting write commands (git commit, kubectl apply) pass through. BASH_MCP_HOOK=warn makes every block advisory; off disables the hook.

See docs/runbooks/hooks-setup.md for setup.

Why Structured Output?

Raw CLI tools return text meant for humans. AI agents waste tokens parsing tables, aligning columns, and guessing field boundaries. bash-mcp runs the same CLI tools but returns structured JSON with typed schemas, so the agent gets exactly the data it needs.

# Raw kubectl output: 148 tokens to parse a table
NAME                     READY   STATUS    RESTARTS   AGE
nginx-7c5b8d6c88-abc12  1/1     Running   0          3d

# bash-mcp output: typed, compact, ready to use
{ "name": "nginx-7c5b8d6c88-abc12", "status": "Running", "age": "3d", ... }

See docs/guides/token-benchmarks.md for measured savings (e.g. kubectl describe pod → kube_diagnose_pod is ~64% fewer tokens).

Philosophy: structured tools first, run is the escape hatch

  1. Reach for a structured tool first. Every wrapper returns typed JSON the agent can use directly — no column-counting, no re-parsing on a format change.

  2. Prefer a diagnostic over a chain of raw commands. Tools like kube_diagnose_pod, helm_release_triage, and argo_app_health_summary answer an operational question in one call — { status, likelyCauses, suggestedNextCommands, evidence } — instead of making the agent run get, then logs, then reason across both.

  3. run / batch are the escape hatch. For commands without a dedicated wrapper, run executes anything with smart truncation. Optional hooks actively steer agents back to the structured tool when a raw equivalent is invoked.

Read-only tools carry the MCP readOnlyHint annotation. run/batch can be gated with BASH_MCP_MODE (see Configuration).

Which tool should I use?

Pick the structured tool that matches your intent instead of reaching for a raw command. The list_guidance tool returns this same index as JSON (filter by intent or category), so agents can self-select without the README.

I want to…

Use this

Instead of

diagnose a crashing or failing Kubernetes pod

kube_diagnose_pod

kubectl describe pod, kubectl logs

find all not-ready or failing pods in a namespace

kube_pod_failure_summary

kubectl get pods, kubectl get pods | grep

check a deployment's rollout health

kube_deployment_status

kubectl rollout status, kubectl get deployment

understand recent cluster events

kube_events_summary

kubectl get events

summarize the changes in a Terraform plan

tf_plan_summary

terraform plan, terraform show

review the current feature branch before a PR

git_pr_context

git diff, git log, git status

understand the overall state of a repository

repo_health_summary

git status, git log --oneline

read a file's structure without loading the full body

outline

cat (entire file), cat

read one region of a large file

cat

cat (whole file), sed -n '10,40p'

keep a broad search from flooding the context

rg

rg | head

search for exact code references or symbols

rg

grep -r, rg

check whether a pull request's CI checks pass

gh_pr_checks

gh pr checks, gh pr view

find out why a CI / GitHub Actions run failed

gh_run_failure_summary

gh run view --log-failed, gh run list

check whether a GitLab pipeline or merge request's jobs pass

glab_ci_status

glab ci get, glab ci status

find out why a GitLab CI pipeline failed

glab_pipeline_failure_summary

glab ci trace, glab ci view

triage why a Helm release is unhealthy

helm_release_triage

helm status, helm get values

check whether an ArgoCD app is healthy and in sync

argo_app_health_summary

argocd app get, argocd app list

validate a Liquibase changelog for errors

liquibase_validate

liquibase validate

preview the SQL Liquibase would run for pending changesets

liquibase_update_sql

liquibase updateSQL, liquibase updateSQL | grep

list Liquibase changesets not yet applied to the database

liquibase_status

liquibase status --verbose

lint a shell script for bugs and quoting issues

bash_lint

shellcheck, shellcheck -f json1

run a bats or shell test suite

bash_test

bats, bash test.sh

discover which CLIs are installed before calling a tool

check_environment

which, <tool> --version

Tools

📖 Full tool reference → docs/tools.md — generated from the registered tools (inputs, outputs, and the raw command each one approximates). Regenerate with npm run docs:tools.

Environment

Tool

Description

check_environment

Report which CLIs are installed (and their versions) so you can pick the right tool before calling it.

list_guidance

Return an intent → preferred-tool index so you can pick the right bash-mcp tool for a goal.

Filesystem

Tool

Description

ls

List files in a directory.

tree

Show directory structure as a compact tree.

du

Show disk usage for paths.

find_files

Find files by name pattern, type, or modification time.

Tool

Description

rg

Search file contents with ripgrep.

glob

Find files matching a glob pattern.

File

Tool

Description

cat

Read one or more files with line numbers and smart truncation.

outline

Show the structural outline of a file — function/class names, top-level comments, imports.

Git

Tool

Description

git_status

Structured git status: branch, staged/unstaged/untracked files.

git_log

Structured git log: commit hash, author, date, message.

git_diff

Structured git diff: files changed with insertions/deletions counts.

git_branches

List git branches.

repo_health_summary

One-call snapshot of a git working tree: branch, ahead/behind vs upstream, staged/unstaged/untracked counts, recent commits, and the uncommitted diffstat.

git_pr_context

Collect the commits and file changes of a branch vs a base ref (for writing a PR description): commit list, changed files with status, and a diffstat over base...head.

git_diff_content

Show git diff with structured patch content.

GitHub

Tool

Description

gh_pr_checks

Report a pull request's CI checks as counts per state plus the failing and pending checks.

gh_run_failure_summary

Diagnose a GitHub Actions run in one call: status, the failed jobs and steps, and the ##[error] lines from the failed log as evidence.

GitLab

Tool

Description

glab_ci_status

Report a GitLab pipeline's jobs as counts per status plus the failed, running and pending jobs.

glab_pipeline_failure_summary

Diagnose a GitLab pipeline in one call: status, the failed jobs and why GitLab says they failed, and the last script lines of each failed job's trace as evidence.

Kubernetes

Tool

Description

kube_get

Get Kubernetes resources as structured data.

kube_logs

Get pod logs.

kube_contexts

List available kubectl contexts with current context marked.

kube_diagnose_pod

Diagnose why a pod is unhealthy in one call.

kube_pod_failure_summary

List unhealthy pods in a namespace with their failure reason and evidence — one call instead of get + describe per pod.

kube_deployment_status

Report a deployment's rollout health (ready/desired replicas, conditions) as a structured diagnosis.

kube_events_summary

Summarize Warning events in a namespace (grouped by reason, ordered by count) instead of scrolling raw kubectl get events.

Terraform

Tool

Description

tf_state_list

List resources in Terraform state.

tf_show

Show current Terraform state as structured JSON.

tf_plan_summary

Run terraform plan and return a structured summary of changes (add/change/destroy counts and affected resources).

tf_workspaces

List Terraform workspaces with current workspace marked.

tf_outputs

List Terraform/OpenTofu outputs as [name, value] pairs; a sensitive output is redacted to [name] alone.

tf_providers

List the Terraform/OpenTofu version and selected provider versions for the project.

tf_validate_summary

Validate the Terraform/OpenTofu config and return a compact pass/fail summary with diagnostics.

tf_modules_summary

List the modules used by an initialized Terraform/OpenTofu project (key, source, version).

tf_backend_info

Report the configured backend type and config for an initialized project.

Helm

Tool

Description

helm_list

List Helm releases with status, chart, and app version.

helm_status

Get detailed status of a Helm release.

helm_values

Get the computed values for a Helm release as structured data.

helm_release_triage

Diagnose a Helm release's health in one call: combines helm status + helm history into current status, likely causes, suggested next commands, and recent-revision evidence.

ArgoCD

Tool

Description

argo_apps

List ArgoCD applications with sync/health status.

argo_app_detail

Get detailed status for a single ArgoCD application including resource health.

argo_app_diff

Show what's out of sync for an ArgoCD application.

argo_app_health_summary

Diagnose an ArgoCD application's health in one call: overall sync/health, likely causes, suggested next commands, and the unhealthy resources/conditions as evidence.

Data Processing

Tool

Description

jq

Query and transform JSON using jq expressions.

yq

Query and transform YAML files using yq expressions (mikefarah/yq).

.NET

Tool

Description

dotnet_build

Run dotnet build and return structured diagnostics with file, line, column, message, and error code.

dotnet_test

Run dotnet test and return structured results: pass/fail/skip counts, failure messages.

Liquibase

Tool

Description

liquibase_validate

Validate a Liquibase changelog and return a structured pass/fail result with per-changeset errors (duplicate ids, checksum drift).

liquibase_update_sql

Render the SQL Liquibase would run for pending changesets (updateSQL) as structured per-changeset summaries with a SQL-Server batch lint.

liquibase_status

List Liquibase changesets not yet applied to the target database, as structured JSON.

Node.js

Tool

Description

npm_lint

Run biome check and return structured diagnostics with file, line, column, message, and rule.

npm_test

Run vitest or jest (picked from package.json) and return structured test results: suites, pass/fail counts, failure messages.

npm_typecheck

Run tsc/tsgo --noEmit and return structured type errors with file, line, column, message, and TS error code.

Python

Tool

Description

python_lint

Run ruff check and return structured diagnostics with file, line, column, message, and rule code.

python_test

Run pytest and return structured test results: suites, pass/fail counts, failure messages.

python_typecheck

Run mypy and return structured type errors with file, line, column, message, and error code.

Shell

Tool

Description

bash_syntax_check

Check shell scripts for syntax errors with bash -n and return structured diagnostics (file, line, message).

bash_lint

Run shellcheck and return structured diagnostics with file, line, column, message, and SC rule code.

bash_test

Run a shell test script — bats .bats files via --tap, or a plain .sh harness — and return structured results: per-case pass/fail plus a summary parsed from TAP or N tests, M failures output, falling back to exit-code-only when the format is unrecognized.

Execution

Tool

Description

run

Run a single command — a binary plus an args array, executed directly without a shell (so no pipes, redirects, or ';'/'&&' in the string) — and return structured output with smart truncation.

run_seq

Run an ordered list of labeled commands one after another, stopping at the first failure by default.

batch

Run multiple commands in parallel and return all results.

Results

Tool

Description

result_get

Page through a result the response budget trimmed.

All tf_* tools accept binary: "terraform" | "tofu" (or set $TF_BINARY) to run OpenTofu.

Example Agent Workflows

Triage a crash-looping pod. Before — three raw calls plus reasoning:

kubectl get pods -n payments          # find the broken pod
kubectl describe pod api-xyz          # read events/state, infer cause
kubectl logs api-xyz --tail=200       # scroll for the error
# ...agent reasons across all three to guess the next step

After — one structured call:

kube_diagnose_pod(pod="api-xyz", namespace="payments")
→ { status: "CrashLoopBackOff",
    likelyCauses: ["container exits 1; DB connection refused"],
    suggestedNextCommands: ["kube_logs(pod='api-xyz', container='api')"],
    evidence: ["Restart Count: 12", "BackOff x140 over 30m"] }

Review a feature branch. Before: git log main..HEAD, git diff --stat main...HEAD, git diff main...HEAD — three commands, manual stitching. After:

git_pr_context(base="main")
→ { commits: [...], files: [...], summary: { filesChanged, insertions, deletions } }

Check capabilities before acting. Instead of which kubectl && kubectl config current-context:

check_environment()
→ { kubectl: { installed: true, version: "1.31.2", context: "prod" },
    terraform: { installed: false }, ... }

Configuration

Environment Variables

Variable

Values

Default

Effect

BASH_MCP_LOG

error | info | off

error

Wide-event JSON logging to stderr (one line per tool call). error logs only failed calls; info adds successes; off/silent disables. stdout always stays pure MCP. run/batch commands are redacted (metadata only).

BASH_MCP_MODE

readOnly | confirmWrites | off

readOnly

Gates run/batch. Default readOnly blocks commands classified as mutating (confirmWrites likewise). Set off (or dangerous) to disable enforcement — recommended only for trusted local use.

BASH_MCP_PROFILE

core | development | infrastructure | all

all

Which tool groups register. Fewer tools, less schema in context — see tool discovery. An unknown value fails at startup.

BASH_MCP_RESPONSE_MODE

auto | summary | compact | full

auto

Response budget. A cut result carries retained and its full payload is pageable with result_get. full is the v4 behaviour. See output conventions.

BASH_MCP_RESULT_TTL

seconds

900

How long a stored result stays retrievable; 0 disables the store.

BASH_MCP_HOOK

block | warn | off

block (warn in the plugin)

Redirect hook behaviour.

TF_BINARY

terraform | tofu

terraform

Default binary for all tf_* tools (overridable per-call via binary).

Timeouts

Each tool group uses appropriate default timeouts:

  • Filesystem/search/git: 30 seconds

  • Kubernetes/Helm/ArgoCD: 15 seconds

  • Terraform state: 30 seconds

  • Terraform plan: 120 seconds

  • .NET build/test: 120 seconds

  • Python lint: 30 seconds

  • Python test: 120 seconds

  • Python typecheck: 60 seconds

Command Buffer

All commands default to a 10 MB output buffer. Override per-tool in src/exec.ts.

Development

# Install dependencies
npm install

# Run in development mode (auto-reloads)
npm run dev

# Build for production
npm run build

# Start production server
npm start

# Run tests
npm test

# Lint and format
npm run lint
npm run format

Architecture

src/
  index.ts              # Server entry point — registers tools and starts stdio transport
  exec.ts               # Command execution layer — runs CLI tools via execFile
  tool.ts               # defineTool — wraps registerTool with wide-event logging + error catching
  error.ts              # ToolError taxonomy + classifyError (missing_binary, timeout, ...)
  logger.ts             # Zero-dep structured stderr logger (BASH_MCP_LOG)
  safety.ts             # Command classification + BASH_MCP_MODE gate for run/batch
  format.ts             # Multi-format list output (TSV, columnar, JSON)
  response.ts           # MCP response helpers (ok, okList, err)
  shell.ts              # Shell escaping utilities
  parsers/
    types.ts            # Shared interfaces: Diagnostic, TestResult, TestSuite
    schemas.ts          # Shared Zod (diagnostic, budget fragment, applyBudget)
  tools/
    argocd/argocd.ts    # argo_apps, argo_app_detail, argo_app_diff
    batch/batch.ts      # batch (parallel command execution)
    dotnet/
      dotnet.ts         # dotnet_build, dotnet_test
      parsers/          # MSBuild and TRX output parsers
    file/
      file.ts           # cat (file reading with metadata), outline (structural file outline)
      outline/          # Language-specific outline extractors
    filesystem/
      filesystem.ts     # ls, tree, du, find_files
    git/
      git.ts            # git_status, git_log, git_diff, git_branches
      diff.ts           # git_diff_content (structured patch hunks)
    helm/helm.ts        # helm_list, helm_status, helm_values
    json/json.ts        # jq
    kubernetes/
      kubernetes.ts     # kube_get, kube_logs, kube_contexts
    npm/
      npm.ts            # npm_lint, npm_test, npm_typecheck
      parsers/          # Biome, Vitest, tsc output parsers
    run/run.ts          # run (command execution with smart truncation)
    search/search.ts    # rg, glob
    terraform/
      terraform.ts      # tf_state_list, tf_show, tf_plan_summary, tf_workspaces
    yaml/yaml.ts        # yq

Each tool file exports a single register*Tools(server) function that registers all tools in its group. Every tool returns both content (text for display) and structuredContent (typed JSON for programmatic use).

Adding a New Tool

  1. Add to an existing category (src/tools/<group>/<group>.ts) or create a new category directory

  2. Define input/output schemas with Zod (add annotations: { readOnlyHint: true } for read-only tools)

  3. Implement the handler using exec() or execJson() from #exec, return ok() or err() from #response

  4. Register it with defineTool from #tool (injects wide-event logging + uniform error catching)

  5. Wire the group's register*Tools into src/index.ts

  6. Add tests in a co-located *.test.ts file

import { z } from "zod";
import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
import { exec } from "#exec";
import { ok, err } from "#response";
import { defineTool } from "#tool";

export function registerMyTools(server: McpServer) {
  defineTool(server, "my_tool", {
    title: "My tool",
    description: "What it does and why structured output helps.",
    inputSchema: {
      path: z.string().describe("Path to operate on"),
    },
    outputSchema: {
      result: z.string(),
    },
    annotations: { readOnlyHint: true },
  }, async ({ path }) => {
    const result = await exec("mytool", ["--json", path]);

    if (result.exitCode !== 0) {
      return err(result.stderr, { result: "" });
    }

    return ok({ result: result.stdout.trim() });
  });
}

See docs/guides/adding-tools.md for the full guide.

Prerequisites

The following CLI tools must be installed for their respective tool groups to work:

  • Always required: Node.js >= 20

  • Filesystem/search: ls, tree, find, du, rg (ripgrep)

  • Git: git

  • Kubernetes: kubectl

  • Terraform/OpenTofu: terraform or tofu

  • Helm: helm

  • ArgoCD: argocd

  • JSON: jq

  • YAML: yq (mikefarah/yq)

  • .NET: dotnet (.NET SDK)

  • Liquibase: liquibase

  • Python: ruff (lint), mypy (typecheck), pytest (test)

Tools gracefully return errors if their underlying CLI is not installed.

License

Apache-2.0

Available Tools

65 tools
argo_app_detailArgoCD app detailA
Read-only

Get detailed status for a single ArgoCD application including resource health.

NameRequiredDescriptionDefault
nameYesApplication name

Output Schema

NameRequiredDescription
nameYes
messageYes
projectYes
retainedNo
revisionYes
resourcesYes
conditionsYes
syncStatusYes
healthStatusYes

TDQS

A3.5/5.0
Behavior3/5

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

readOnlyHint=true already declares this as a safe read, so the description's burden is low. It adds the useful note that health information is included in the response, but says nothing about error behavior for missing apps or the richness of the status payload.

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

Conciseness4/5

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

A single efficient sentence with the core purpose front-loaded. No padding, though it could have used its brevity budget to add one routing hint instead.

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?

An output schema exists so return values need no explanation, and the single required parameter is fully documented. The definition is nearly complete for a simple one-param read tool; only sibling differentiation is absent.

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

Parameters3/5

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

Schema coverage is 100% with a single 'name' parameter already described as 'Application name'. The description adds no naming conventions, namespace/context qualifiers, or format hints beyond the schema baseline.

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

Purpose4/5

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

States a specific verb ('Get') and resource ('detailed status for a single ArgoCD application') plus the scope of content ('including resource health'). This distinguishes it from the list-oriented sibling argo_apps, though the overlap with argo_app_health_summary is not addressed.

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: 'for a single application' suggests it is the per-app detail fetch. No explicit when-to-use, when-not, or routing to argo_apps / argo_app_health_summary / argo_app_diff is given.

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

argo_app_diffArgoCD app diffB
Read-only

Show what's out of sync for an ArgoCD application.

NameRequiredDescriptionDefault
nameYesApplication name

Output Schema

NameRequiredDescription
diffYes
hasDiffYes
retainedNo

TDQS

B3.4/5.0
Behavior3/5

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

The readOnlyHint annotation already establishes the safe read-only nature. The description reinforces that this is a read operation but adds no behavioral context such as how the diff is computed, whether it contacts the cluster, or permission requirements.

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

Conciseness5/5

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

The description is a single front-loaded sentence with no wasted words. It efficiently communicates the core action.

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-only tool with an output schema and annotations, this is largely complete. The main gap is the absence of sibling differentiation, but the core operation is clear.

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

Parameters3/5

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

Schema description coverage is 100%, and the single `name` parameter is documented in the schema. The description adds no parameter meaning beyond the schema, so the baseline of 3 is appropriate.

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

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: showing what is out of sync for an ArgoCD application. This distinguishes it from a general app detail or health summary, though it does not explicitly name the sibling tools it differs from.

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?

It implies the tool is used for sync drift inspection, but gives no explicit when-to-use guidance, prerequisites, or alternatives. Sibling tools like argo_app_detail and argo_app_health_summary are not mentioned, leaving the agent to infer selection.

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

argo_app_health_summaryArgoCD app health summaryA
Read-only

Diagnose an ArgoCD application's health in one call: overall sync/health, likely causes, suggested next commands, and the unhealthy resources/conditions as evidence.

NameRequiredDescriptionDefault
nameYesApplication name

Output Schema

NameRequiredDescription
nameYes
statusYes
healthyYes
evidenceYes
retainedNo
syncStatusYes
likelyCausesYes
suggestedNextCommandsYes

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, so safety is covered. The description adds real value beyond that by disclosing what the diagnosis produces (causes, suggested next commands, evidence resources/conditions), giving the agent a mental model of the output. It omits auth/permission context, but with an output schema present that gap is minor.

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 the verb and resource first, followed by the concrete payload. No filler; every clause 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?

With output schema present, annotations covering safety, and the one parameter documented, the description is nearly complete: it conveys purpose and output shape. Slightly more on when to prefer it over argo_app_detail would round it out.

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?

There is a single parameter 'name' with 100% schema description coverage, so the schema fully documents it. The description adds no format/lookup hints beyond the schema, which is the expected baseline when schema coverage is complete.

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 (Diagnose) and resource (ArgoCD application) plus the concrete outputs: sync/health, likely causes, suggested commands, and unhealthy resources as evidence. This clearly distinguishes it from plain detail/diff siblings conceptually, though it doesn't name a sibling explicitly to anchor that contrast.

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?

'in one call' hints that this consolidates what would otherwise require multiple calls, implying a diagnostic use case. However, it never explicitly states when to choose this over argo_app_detail or argo_app_diff, nor any preconditions, so usage is only implied.

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

argo_appsArgoCD applicationsB
Read-only

List ArgoCD applications with sync/health status. Structured summary instead of table output.

NameRequiredDescriptionDefault
projectNoFilter by ArgoCD project
selectorNoLabel selector

Output Schema

NameRequiredDescription
appsYes
countYes
summaryYes
retainedNo

TDQS

B3.2/5.0
Behavior3/5

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

readOnlyHint=true already tells the agent this is a safe read. The description adds that results come back as a structured summary rather than a table, which is useful shaping context, but it says nothing about pagination, cluster/context requirements, or what happens if no project is given.

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 sentences with the purpose front-loaded and no filler. The second sentence is marginally redundant given the output schema but still contributes signal about result shape.

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?

An output schema exists, so return values need no explanation, and annotations cover safety. The remaining gaps are the unmentioned filter capabilities and the lack of routing guidance among three closely related argo_* siblings, which an agent would need to choose correctly.

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

Parameters3/5

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

Schema coverage is 100%, so both 'project' and 'selector' are already documented in the schema. The description never mentions that filtering by project or label selector is possible, so it adds nothing beyond the schema and cannot lift the baseline.

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

Purpose4/5

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

States a specific verb and resource ('List ArgoCD applications') plus the content scope ('sync/health status'), so an agent knows exactly what it returns. It does not explicitly differentiate itself from siblings like argo_app_health_summary or argo_app_detail, which keeps it 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?

There is no statement of when to use this versus argo_app_detail, argo_app_diff, or argo_app_health_summary, which cover overlapping territory. The only contrast offered ('structured summary instead of table output') describes output format, not tool selection.

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

bash_lintBash lint (structured)A
Read-only

Run shellcheck and return structured diagnostics with file, line, column, message, and SC rule code. Much more compact than raw shellcheck output. Use minSeverity to filter by severity level.

NameRequiredDescriptionDefault
filesNoRequired. Shell script path(s) to lint; a string or array
maxItemsNoItem cap; overrides detailLevel
detailLevelNoItem preset: summary 20, normal 100, full (default; also skips the response budget)
minSeverityNoMinimum severity to include (e.g. 'error' drops warnings and info)

Output Schema

NameRequiredDescription
totalNo
errorsYes
retainedNo
truncatedNo
errorCountYes
warningCountYes

TDQS

A3.5/5.0
Behavior3/5

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

readOnlyHint=true already tells the agent this is a safe read, so the bar is lower. The description adds that output is structured and compact, but says nothing about prerequisites (shellcheck must be installed), behavior on unparseable/missing files, or whether exit status reflects findings.

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?

Three short sentences with the capability and output shape front-loaded and no filler. The final sentence largely repeats the schema's minSeverity description, a minor 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 an output schema present and full parameter documentation, the description covers what it needs to. The remaining gap is operational context (tool dependency, failure behavior) rather than anything required to select or invoke it.

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

Parameters3/5

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

Schema description coverage is 100%, so all four parameters including the two enums are documented in the schema. The description only restates minSeverity's filtering effect, adding nothing beyond what the schema already says, so baseline 3 is correct.

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 ('Run shellcheck') and describes the return shape (file, line, column, message, SC rule code), which an agent can use to decide relevance. It does not, however, differentiate itself from the nearby bash_syntax_check or bash_test 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 mention that it is 'much more compact than raw shellcheck output' implies you should prefer it over raw shellcheck, and 'Use minSeverity to filter' hints at a workflow. There is no explicit when-to-use/when-not or routing to bash_syntax_check or bash_test, so usage is only implied.

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

bash_syntax_checkBash syntax check (structured)A
Read-only

Check shell scripts for syntax errors with bash -n and return structured diagnostics (file, line, message). Parses without executing, so it is safe on untrusted scripts. Reports valid:true when no errors are found.

NameRequiredDescriptionDefault
filesNoRequired. Shell script path(s) to check; a string or array
maxItemsNoItem cap; overrides detailLevel
detailLevelNoItem preset: summary 20, normal 100, full (default; also skips the response budget)

Output Schema

NameRequiredDescription
totalNo
validYes
errorsYes
retainedNo
truncatedNo
errorCountYes

TDQS

A3.8/5.0
Behavior4/5

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

Beyond the `readOnlyHint` annotation, the description explains that it uses `bash -n`, does not execute code, is safe on untrusted scripts, and reports `valid:true` when clean. It adds meaningful safety and output behavior context, though it does not describe edge cases such as unreadable or missing files.

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

Conciseness5/5

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

Three short sentences with no filler. The core action, safety property, and success signal are 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?

The tool is simple, annotations already indicate read-only behavior, the output schema exists, and parameter documentation is complete in the schema. The description is largely sufficient, though it could mention when this syntax-only check is preferable to `bash_lint` or `bash_test`.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents `files`, `maxItems`, and `detailLevel`. The description adds no parameter-level guidance beyond what is already structured, which is the baseline 3 case.

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 gives a specific verb and resource: checking shell scripts for syntax errors with `bash -n`, plus the shape of the diagnostics. It is clear what the tool does, but it does not explicitly differentiate itself from siblings such as `bash_lint` or `bash_test`.

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

Usage Guidelines3/5

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

The description implies usage by noting that it parses without executing and is safe on untrusted scripts. However, it does not explicitly state when to choose this over `bash_lint`, `bash_test`, or `run`, nor does it give exclusion conditions.

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

bash_testBash test (structured)A

Run a shell test script — bats .bats files via --tap, or a plain .sh harness — and return structured results: per-case pass/fail plus a summary parsed from TAP or N tests, M failures output, falling back to exit-code-only when the format is unrecognized. Executes the script, so it is gated by BASH_MCP_MODE.

NameRequiredDescriptionDefault
cwdNoWorking directory
fileNoRequired. Test script path (.bats or .sh)
timeoutNoTimeout in ms

Output Schema

NameRequiredDescription
failedYes
passedYes
skippedYes
summaryYes
exitCodeYes
retainedNo

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 full burden and does substantial work: it discloses that the script is actually executed (arbitrary side effects), that a permission gate (BASH_MCP_MODE) applies, and how results degrade to exit-code-only for unrecognized output formats. It omits what the gate failure looks like and how timeout kills the process.

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

Conciseness5/5

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

Two sentences, front-loaded with the action, then the return contract, then the gating caveat. Every clause carries information; nothing is repeated from the schema or title.

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?

An output schema exists, yet the description still summarizes the return shape and the parsing fallback, which is helpful rather than redundant. Gaps remain around timeout semantics and what the BASH_MCP_MODE gate returns when it blocks execution.

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

Parameters4/5

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

Schema coverage is 100%, so 3 is the baseline, but the description adds real meaning: passing a .bats file triggers an implicit --tap invocation, and the expected harness output formats are described. cwd and timeout are left entirely to the schema, so it does not fully compensate beyond the baseline.

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

Purpose5/5

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

Names a specific verb+resource ('Run a shell test script') and immediately scopes the accepted inputs (.bats via --tap, or a plain .sh harness), which cleanly separates it from siblings like bash_lint, bash_syntax_check, npm_test and python_test. An agent can pick this tool 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?

The two accepted script types are spelled out, which tells the agent what inputs qualify, and the closing clause signals that execution is mode-gated. It stops short of naming an alternative tool or stating when not to use it (e.g. use bash_lint for static checks), so it is clear context without exclusions.

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

batchRun commands in parallelA

Run multiple commands in parallel and return all results. Each command is a binary plus an args array, executed without a shell (for a pipeline use command='sh', args=['-c', '...']). Use when you need to gather independent pieces of information in a single tool call instead of multiple sequential calls.

NameRequiredDescriptionDefault
commandsNoRequired.

Output Schema

NameRequiredDescription
elapsedYes
resultsYes
retainedNo

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations, the description carries the burden and does well: it discloses that commands execute without a shell and gives the concrete workaround (command='sh', args=['-c', '...']) for pipelines. It leaves gaps on failure semantics (what happens if one command in the batch fails) and concurrency limits, which matters for a batch executor.

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

Conciseness5/5

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

Three sentences, zero waste, with the core behavior front-loaded before the shell caveat and the usage guidance. Every sentence earns its place.

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

Completeness4/5

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

An output schema exists, so return values need no explanation, and the execution model is well covered. What's missing is partial-failure behavior and the default/max timeout implications for a 30s default batch, which an agent would want before batching long-running commands.

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

Parameters3/5

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

Schema coverage is 100% and the schema itself documents command, label, args, cwd and timeout. The description reinforces the shell semantics but largely restates the schema's command field note rather than adding new meaning. Baseline 3 applies when the schema does the heavy lifting.

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

Purpose5/5

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

States a specific verb and resource ('run multiple commands in parallel and return all results') and immediately scopes the tool against the sequential-call alternative. An agent can distinguish it from run/run_seq 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?

Explicitly gives the trigger condition: gather independent pieces of information in one call instead of multiple sequential calls. It implies the boundary with sequential execution tools (run_seq) but never names them, so the routing is clear rather than airtight.

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

catRead file contentsA
Read-only

Read one or more files with line numbers and smart truncation. Returns structured output with metadata. Pass path for a single file, or paths to read several in one call (returns { files, count }) — collapsing what would otherwise be multiple round-trips. For large files, use startLine/endLine or maxLines to limit output. Use ref to read from a git branch/commit instead of disk (e.g. ref='main'). NOTE: reading with cat does NOT satisfy the built-in Edit/Write "must read first" guard (it tracks only the built-in Read tool) — run the built-in Read on a file immediately before editing it.

NameRequiredDescriptionDefault
refNoGit ref to read from (e.g. 'main', 'HEAD~1', a commit hash). When set, reads file content from git (git show ref:path) instead of disk.
pathNoPath to a single file
pathsNoRead multiple files in one call; a string or array. Returns { files, count }; a per-file failure is reported in that file's `error` and does not abort the others.
endLineNoStop reading at this line (inclusive)
maxLinesNoMax lines to return per file (default 200, use 0 for unlimited)
startLineNoStart reading from this line (1-based)
lineNumbersNoPrepend line numbers to each line (useful when locating a line). Does not register the file as read for the built-in Edit — use the built-in Read right before editing.

Output Schema

NameRequiredDescription
pathNo
sizeNo
countNo
errorNo
filesNo
mtimeNoFile modification time (unix timestamp)
rangeNo
contentNo
retainedNo
truncatedNo
totalLinesNo

TDQS

A4.9/5.0
Behavior5/5

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

Adds substantial context beyond the readOnlyHint annotation: default truncation at 200 lines, batched return shape { files, count }, per-file error isolation that does not abort the batch, git-backed reads via `ref`, and the non-obvious interaction with the Edit/Write 'must read first' guard.

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 with the core action, then batched reads, then range limiting, then git ref, then the editing caveat — ordered by likely agent need. Every sentence carries distinct information; nothing is padding.

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

Completeness5/5

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

For a 7-parameter read tool with an output schema and readOnlyHint, the description covers batching, truncation defaults, git sourcing, error behavior, and the edit-guard caveat. Nothing an agent needs to invoke it correctly 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 coverage is 100%, so baseline is 3, but the description adds real value: it explains the path/paths dichotomy and the { files, count } result, gives a concrete ref example ('main'), and frames startLine/endLine/maxLines as the large-file strategy rather than just restating field names.

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

Purpose5/5

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

States a specific verb and resource ('Read one or more files') and immediately names distinguishing features: line numbers, smart truncation, structured metadata. This clearly separates it from sibling directory/listing tools like ls, tree, and find_files.

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

Usage Guidelines5/5

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

Explicit routing guidance: use `path` for one file vs `paths` for batching, use startLine/endLine/maxLines for large files, and use `ref` to read from git instead of disk. It also gives a critical precondition — the built-in Read must be run before Edit/Write because cat does not satisfy that guard.

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

check_environmentCheck environmentA
Read-only

Report which CLIs are installed (and their versions) so you can pick the right tool before calling it. Probes are client-only and non-blocking — no server/auth calls. Includes kubectl's current context when available.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription
toolsYes
totalYes
retainedNo
installedCountYes

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already mark it readOnlyHint=true, but the description adds genuinely useful context beyond that: probes are 'client-only and non-blocking — no server/auth calls', which tells the agent it is cheap and safe to call speculatively. It doesn't detail latency or output shape, but the output schema covers the latter.

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

Conciseness5/5

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

Three short sentences, front-loaded with the core capability and followed by the usage rationale and behavioral guarantee. Every sentence carries distinct information with no waste.

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

Completeness5/5

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

For a zero-parameter, read-only probe with a full output schema, the description covers what is probed, why, and how invasive it is. Nothing an agent needs in order to call it correctly 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?

The tool takes zero parameters, so the baseline is 4. There is nothing for the description to disambiguate, and it correctly implies no inputs are needed.

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

Purpose5/5

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

States a concrete verb and resource: reports which CLIs are installed and their versions, plus kubectl context. This clearly separates it from probing siblings like kube_contexts or git_status, which return data for a specific tool rather than a capability inventory.

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

Usage Guidelines4/5

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

The description says to use it 'before calling' a CLI 'so you can pick the right tool', which gives a clear trigger point. It stops short of naming explicit alternatives or when-not-to-use conditions, so it falls just under the top score.

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

dotnet_buildBuild (structured)A

Run dotnet build and return structured diagnostics with file, line, column, message, and error code. Much more compact than raw MSBuild output. Warnings are omitted by default; pass includeWarnings:true (or detailLevel:'full') to include them.

NameRequiredDescriptionDefault
cwdNoRequired. Project root directory
projectNoPath to .csproj or .sln file (default: auto-detected in cwd)
maxItemsNoItem cap; overrides detailLevel
detailLevelNoItem preset: summary 20, normal 100, full (default; also skips the response budget)
configurationNoBuild configuration (e.g. Debug, Release)
includeWarningsNoInclude warnings in the response (default: errors only, even on a successful build)

Output Schema

NameRequiredDescription
totalNo
summaryYes
exitCodeYes
retainedNo
truncatedNo
errorCountYes
diagnosticsYes
warningCountYes

TDQS

A3.6/5.0
Behavior3/5

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

With no annotations, the description must carry the full behavioral burden. It usefully discloses that warnings are omitted by default and how to include them, and that output is structured and compact. It does not mention side effects (build artifacts, execution time), failure behavior, or permissions—gaps for a build command.

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

Conciseness5/5

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

Three front-loaded sentences with zero filler. Each sentence earns its place: purpose/output, compactness benefit, and the warning default with the override.

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?

An output schema exists, so return values need not be explained. The description covers the purpose and the main behavioral toggle (warnings). For a no-annotation build tool it could say more about failure semantics, but given the rich schema and output schema it is largely complete.

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

Parameters3/5

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

Schema description coverage is 100%, so all six parameters are already documented by the schema. The description reinforces the includeWarnings/detailLevel interaction, but adds little beyond the schema text; for example, detailLevel:'full' skipping the response budget is only in the schema. The baseline of 3 is appropriate when the schema does the heavy lifting.

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 ('Run dotnet build') and lists the structured diagnostic fields returned, making the operation unambiguous. It distinguishes itself from raw MSBuild output by promising compact structured diagnostics. However, it does not explicitly contrast itself with any sibling tool, 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?

There is no explicit when-to-use / when-not guidance relative to alternatives. The only guidance is parameter-level: warnings are omitted by default, and includeWarnings:true or detailLevel:'full' includes them. Usage is implied by the tool name and dotnet context, but alternatives like dotnet_test are not addressed.

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

dotnet_testTest (structured)A

Run dotnet test and return structured results: pass/fail/skip counts, failure messages. Much more compact than raw test output. Only failures are listed.

NameRequiredDescriptionDefault
cwdNoRequired. Project root directory
filterNoTest filter expression (e.g. 'FullyQualifiedName~MyTest')
projectNoPath to .csproj or .sln file (default: auto-detected in cwd)

Output Schema

NameRequiredDescription
totalYes
failedYes
passedYes
skippedYes
summaryYes
exitCodeYes
failuresYes
retainedNo

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 behavioral burden. It discloses output filtering ('Only failures are listed') and compactness, but omits execution traits such as timeouts, required SDK/build state, and possible side effects like build artifacts.

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

Conciseness5/5

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

Three short sentences, front-loaded with the action and return shape, and each sentence adds distinct value without repetition.

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?

An output schema exists, so return values need not be explained, but the description still summarizes them. It covers purpose and output filtering; only execution prerequisites and runtime characteristics are missing for an annotation-free runner.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents cwd, filter, and project. The description adds no parameter-level meaning beyond that; baseline 3 applies.

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

Purpose5/5

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

States a specific action ('Run dotnet test') and the exact return shape (pass/fail/skip counts, failure messages), while contrasting it with raw test output. This clearly distinguishes it from generic test runners and sibling tools.

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

Usage Guidelines3/5

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

Implies it should be used for .NET test runs and that it is preferable to raw output, but gives no explicit when-to-use/when-not guidance relative to siblings like dotnet_build or npm_test, nor prerequisites such as build state.

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

duDisk usageA
Read-only

Show disk usage for paths. Returns entries as [path, sizeBytes] pairs, in the order du emits them. Use maxDepth to control how deep the summary goes.

NameRequiredDescriptionDefault
pathYesPath to measure
maxDepthNoDepth to summarize

Output Schema

NameRequiredDescription
entriesYes
retainedNo

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, so safety is covered. The description adds useful return-format context ([path, sizeBytes] pairs and du emission order), but does not disclose practical traits such as performance, permissions, symlink handling, or large-output 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?

Three short sentences, front-loaded with the core action and return format. No wasted text.

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

Completeness4/5

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

The tool is simple, parameters are fully documented, annotations cover safety, and an output schema exists. The description is largely complete, though it omits usage boundaries against siblings and operational caveats.

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

Parameters3/5

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

Schema description coverage is 100%, so both parameters are already documented. The description only lightly restates maxDepth's effect and does not add significant semantics beyond the schema.

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

Purpose4/5

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

States a specific verb and resource: show disk usage for paths. It clearly distinguishes disk-usage measurement from listing/inspection siblings, but does not explicitly name when to use it over ls or tree.

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

Usage Guidelines3/5

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

Mentions that maxDepth controls summary depth, which gives some usage context. It does not say when to choose du over alternatives like ls, tree, or find_files, nor does it state exclusions.

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

find_filesFind filesA
Read-only

Find files by name pattern, type, or modification time. Returns structured list of paths. Use names for multiple glob patterns (OR logic), modifiedWithin for recent files (e.g. '7d', '1h').

NameRequiredDescriptionDefault
nameNoFilename glob pattern (e.g. '*.ts')
pathNoRoot directory to search (default: '.').
typeNoFilter by type
namesNoMultiple filename glob patterns (e.g. ['*.ts', '*.py', '*.sh']). Combined with OR logic.
patternNoAlias for name — filename glob pattern (e.g. '*.ts')
maxDepthNoMax search depth
withMetadataNoInclude size (bytes) and mtime (unix timestamp) for each file
modifiedWithinNoModified within timespan (e.g. '7d', '1h')

Output Schema

NameRequiredDescription
countYes
filesYes
metadataNo
retainedNo

TDQS

A3.5/5.0
Behavior3/5

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

readOnlyHint=true already establishes this is a safe non-mutating search, so the description's burden is lower. It adds the return shape ('structured list of paths') and the OR semantics, but says nothing about recursion depth behavior, symlink handling, result volume/limits, or ordering — the traits an agent would actually want before running a broad search.

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?

Three tight sentences with the core purpose front-loaded and no filler. The 'Returns structured list of paths' clause is mildly redundant given an output schema exists, which keeps it just short of a 5.

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?

Structural burden is low: all 8 parameters are optional, the schema is fully documented, and an output schema covers return values. The only real gap is the unexplained name/pattern alias overlap, which an agent could stumble on; otherwise the definition is sufficient to invoke the tool correctly.

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

Parameters3/5

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

Schema coverage is 100%, so baseline is 3. The description merely restates what the schema already says ('names' OR logic appears verbatim in the schema description), and it does not resolve the genuinely ambiguous case of three overlapping filters — name, names, and pattern (an alias) — leaving the agent without guidance on which to use.

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 (find files) plus the three filtering axes (name pattern, type, modification time) and the return shape (list of paths). It does not differentiate from overlapping siblings such as glob, ls, or tree, so an agent can't tell on purpose alone which one to prefer.

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 second sentence gives real selection guidance between parameters ('names' for multiple globs with OR logic, 'modifiedWithin' for recent files), which is useful. But there is no when-to-use-this-vs-alternatives guidance, and the sibling set contains glob and ls that an agent would reasonably confuse with this tool.

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

gh_pr_checksPR checksA
Read-only

Report a pull request's CI checks as counts per state plus the failing and pending checks. Defaults to the current branch's PR; passing checks are counted, not listed, unless all=true.

NameRequiredDescriptionDefault
prNoPR number, URL or branch (default: the current branch's PR)
allNoList passing and skipped checks too (default: only the rest)
cwdNoRepository path (default: the server's working directory)

Output Schema

NameRequiredDescription
checksYes
countsYes
retainedNo

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, so the safety profile is covered; the description adds the non-obvious output policy that passing checks are counted rather than listed by default. It does not cover error behavior for a missing/unresolvable PR, but that is a minor gap against the annotation 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?

Two dense sentences: what it returns first, default targeting and the listing exception second. No filler, and the most decision-relevant fact is front-loaded.

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

Completeness5/5

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

An output schema exists and annotations cover the read-only profile, so the description need only frame intent and the default scoping rule — both are present. Nothing needed to call this three-optional-param tool correctly is missing.

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

Parameters3/5

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

Schema coverage is 100% and all three parameters carry descriptions, so the schema does the heavy lifting. The description restates the two most important defaults (`pr` and `all=true`) but adds no syntax or format detail beyond the schema.

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

Purpose4/5

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

States a specific verb and resource ('Report a pull request's CI checks') and even characterizes the payload ('counts per state plus the failing and pending checks'). It is clearly distinct from unrelated siblings, though it never names the nearest analog (glab_ci_status) for contrast.

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

Usage Guidelines4/5

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

Gives the default target ('Defaults to the current branch's PR') and states the condition that changes behavior ('unless all=true'), so an agent knows how to invoke it with no arguments. No explicit when-not or sibling-alternative guidance is given.

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

gh_run_failure_summaryCI run failure summaryA
Read-only

Diagnose a GitHub Actions run in one call: status, the failed jobs and steps, and the ##[error] lines from the failed log as evidence. Defaults to the latest run on the current branch.

NameRequiredDescriptionDefault
cwdNoRepository path (default: the server's working directory)
runNoRun ID (default: the latest run on `branch`)
branchNoBranch whose latest run to read (default: the current branch)

Output Schema

NameRequiredDescription
runYes
urlYes
branchYes
statusYes
evidenceYes
retainedNo
workflowYes
failedJobsYes
likelyCausesYes
suggestedNextCommandsYes

TDQS

A3.8/5.0
Behavior4/5

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

The readOnlyHint annotation already establishes that this is a safe read operation. The description adds useful operational context: it summarizes status, failed jobs/steps, and error evidence, and defaults to the latest run on the current branch. It does not mention authentication or rate limits, but those are secondary here.

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, front-loads the primary action, and then adds the key output/default details. Every phrase contributes to understanding the 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?

With an output schema, readOnlyHint, and full parameter descriptions, the definition is largely self-contained. The description covers the purpose and default behavior, though it could mention prerequisites such as an authenticated GitHub CLI for full operational completeness.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents cwd, run, and branch. The description only restates the run/branch default behavior in combined form and does not add syntax or precedence details beyond the schema, so baseline 3 is appropriate.

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

Purpose4/5

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

The description uses a specific verb ("Diagnose") and resource ("GitHub Actions run") and enumerates what the summary contains: status, failed jobs and steps, and ##[error] lines. It distinguishes itself from non-GitHub diagnostics by platform, but does not explicitly name sibling alternatives such as gh_pr_checks or glab_pipeline_failure_summary.

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

Usage Guidelines3/5

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

The description implies usage for diagnosing a failed Actions run and explains the default target (latest run on current branch), but gives no explicit when-to-use/when-not guidance or alternatives. An agent can infer the context but must still decide on its own when this tool is preferable to siblings.

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

git_branchesGit branchesB
Read-only

List git branches. Returns the current branch and [name, lastCommit] pairs; a remote branch's name starts with remotes/.

NameRequiredDescriptionDefault
cwdNoRepository path
remoteNoInclude remote branches

Output Schema

NameRequiredDescription
currentYes
branchesYes
retainedNo

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, so the safety profile is covered structurally. The description adds the return shape (current branch plus [name, lastCommit] pairs) and the remotes/ naming convention, which are useful behavioral details. It does not go further into pagination or repository-state requirements, so a middling score is appropriate.

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, front-loaded with the core action and followed by the return shape. There is no wasted text.

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?

An output schema exists, so the description does not need to enumerate return values, yet it helpfully summarizes the key ones. The main remaining gap is the lack of guidance on when to prefer this tool over related git tools.

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

Parameters3/5

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

Schema coverage is 100%, with both cwd and remote documented in the schema, so the baseline is 3. The description's note that remote branch names start with remotes/ is helpful context for the 'remote' flag but does not explicitly explain the parameter's behavior.

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

Purpose4/5

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

The description opens with a specific verb and resource ('List git branches'), which is unambiguous and does not overlap with any sibling tool (git_status, git_log, or git_diff cover other concerns). It stops short of explicitly contrasting itself with those siblings, so it falls just below 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?

The description contains no guidance about when to call this tool versus alternatives such as git_status, git_log, or git_diff. An agent must infer the appropriate context on its own.

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

git_diffGit diffA
Read-only

Structured git diff: files changed with insertions/deletions counts. Use base+ref for two-ref comparison (e.g. base='main', ref='feature'). Use path to scope to one or more files or directories.

NameRequiredDescriptionDefault
cwdNoRepository path
refNoRef to diff against (e.g. 'main', 'HEAD~3')
baseNoBase ref for two-ref comparison. When both ref and base are set, runs git diff <base> <ref>
pathNoLimit diff to one or more files or directories (string or array)
stagedNoShow staged changes

Output Schema

NameRequiredDescription
filesYes
retainedNo
fileCountYes
totalDeletionsYes
totalInsertionsYes

TDQS

A3.8/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, so safety is covered; the description adds that output is per-file change counts rather than patch bodies. It says nothing about defaults when no ref/base are given, untracked or binary files, rename detection, or how staged combines with other params.

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

Conciseness5/5

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

Three short sentences, purpose first, then the two non-obvious parameters. No filler and nothing repeated needlessly.

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?

Output schema exists, so return values need no explanation, and all five parameters are documented. The remaining gap is behavioral: what the tool does by default with no ref (working tree vs index) and whether staged combines with base/ref, which an agent would need to reason out.

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

Parameters3/5

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

Schema description coverage is 100% and the schema already explains base/ref combination ('git diff <base> <ref>') and path scoping. The description only restates those with a slightly friendlier example, so the baseline of 3 applies.

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

Purpose4/5

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

States a specific verb and resource plus the shape of the result: 'Structured git diff: files changed with insertions/deletions counts.' That implicitly separates it from git_diff_content (patch text), but the sibling is never named, so an agent must infer the split.

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

Usage Guidelines4/5

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

Gives concrete invocation guidance: base+ref for two-ref comparison with a worked example (base='main', ref='feature'), and path for scoping to files or directories. It stops short of saying when to prefer git_diff_content or how staged interacts with base/ref.

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

git_diff_contentGit diff with contentA
Read-only

Show git diff with structured patch content. Returns parsed hunks per file instead of raw unified diff text. Use this when you need to see actual code changes, not just file-level stats. Use base+ref for two-ref comparison (e.g. base='main', ref='feature'). Use path to scope to one or more files or directories.

NameRequiredDescriptionDefault
cwdNoWorking directory (git repo)
refNoDiff against this ref (e.g. 'HEAD~1', 'main', a commit hash)
baseNoBase ref for two-ref comparison. When both ref and base are set, runs git diff <base> <ref>
pathNoLimit diff to one or more files or directories (string or array)
stagedNoShow staged changes (--cached)
contextNoNumber of context lines around changes (passed as -U<n>)

Output Schema

NameRequiredDescription
filesYes
summaryYes
retainedNo

TDQS

A4.4/5.0
Behavior4/5

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

The readOnlyHint annotation already establishes that this is a safe read operation, and the description adds useful behavioral context by explaining that output is parsed into structured hunks per file instead of raw unified diff text. It does not discuss limits on large diffs or pagination, but with annotations and an output schema present, that omission is minor.

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 core purpose and output shape, then moves efficiently through selection guidance and key parameter usage. Each sentence contributes 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?

With an output schema, full parameter schema coverage, and readOnlyHint annotations, the description provides enough context to call the tool correctly. It could mention staged/context behavior for completeness, but those are already handled by the schema and are not essential to the description's role.

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

Parameters3/5

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

Schema description coverage is 100%, so all six parameters are already documented in the schema. The description reinforces the important usage of base+ref and path, but it does not add syntax or semantics beyond what the schema already states, so the baseline of 3 is appropriate.

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

Purpose5/5

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

The description states a specific verb and resource ('Show git diff') and immediately distinguishes the tool's output as 'structured patch content' with 'parsed hunks per file' rather than raw unified diff text. It also contrasts the tool with file-level diff/stat approaches, so an agent can identify its role among siblings like git_diff and git_status.

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

Usage Guidelines5/5

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

It explicitly says to use this when actual code changes are needed rather than file-level stats, which provides a clear selection rule against sibling diff/status tools. It also explains how to use base+ref for two-ref comparison and path for scoping, leaving little ambiguity about invocation.

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

git_logGit logA
Read-only

Structured git log: commit hash, author, date, message. Compact and parseable. Use range for ref comparisons (e.g. 'main..feature'). Use exclude to filter out commits matching a pattern (e.g. 'ci:').

NameRequiredDescriptionDefault
cwdNoRepository path
pathNoFilter by file path
countNoNumber of commits (default 20)
rangeNoGit ref range (e.g. 'main..feature', 'HEAD~5..HEAD')
sinceNoSince date (e.g. '2024-01-01')
authorNoFilter by author
excludeNoExclude commits matching this grep pattern (uses --invert-grep)
withFilesNoInclude list of files changed per commit

Output Schema

NameRequiredDescription
countYes
commitsYes
retainedNo

TDQS

A3.6/5.0
Behavior3/5

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

readOnlyHint=true already tells the agent this is a safe read, and the output schema exists, so the description doesn't need to enumerate return values. It adds some value by noting output is 'compact and parseable' and by disclosing that exclude uses --invert-grep semantics, but says nothing about default result limits (count defaults to 20), ordering, or what happens with large histories.

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?

Four short sentences, front-loaded with the output contract before the parameter hints. Every sentence carries distinct information with no repetition of the tool name or padding.

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 eight optional parameters, full schema coverage, an output schema, and a readOnly annotation, the description covers the non-obvious surface adequately. It stops short of explaining how the filters combine or what the default 20-commit cap means for callers expecting a full history.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents all eight parameters including the range and exclude examples. The description restates the range ('main..feature') and exclude ('ci:') examples rather than adding new semantics such as precedence between since/range/author or how path filtering interacts with range.

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 concrete resource and return shape ('Structured git log: commit hash, author, date, message. Compact and parseable'), so an agent knows exactly what it gets back. It does not differentiate itself from adjacent siblings like git_diff or git_status, which 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 Guidelines3/5

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

The guidance ('Use range for ref comparisons', 'Use exclude to filter out commits matching a pattern') is really per-parameter usage instruction rather than when-to-use-this-tool-vs-alternatives guidance. There is no statement about when to reach for git_log instead of git_diff, git_status or rg, so the choice among siblings is left implicit.

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

git_pr_contextGit PR contextA
Read-only

Collect the commits and file changes of a branch vs a base ref (for writing a PR description): commit list, changed files with status, and a diffstat over base...head.

NameRequiredDescriptionDefault
cwdNoRepository path
baseNoBase ref to compare against (default 'main')main
headNoHead ref (default 'HEAD')HEAD

Output Schema

NameRequiredDescription
baseYes
headYes
filesYes
changesYes
commitsYes
retainedNo

TDQS

A3.7/5.0
Behavior4/5

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

readOnlyHint=true already declares the safety profile, and the description usefully specifies that the output is an aggregate of three artifacts (commits, file statuses, diffstat) rather than a raw diff. It doesn't mention size/truncation behavior for large branches, which is the main remaining gap.

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

Conciseness4/5

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

A single front-loaded sentence that puts the resource and range before the use case. Minor deduction for the trailing ellipsis, which leaves the enumeration looking truncated rather than finished.

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?

Read-only, fully documented parameters with sensible defaults, and an output schema that carries return-value detail. The description is close to complete for this complexity; only edge-case behavior on very large comparisons is unaddressed.

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

Parameters3/5

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

Schema coverage is 100%, so base, head, and cwd are already documented with defaults. The description's 'base...head' phrasing reinforces the range semantics but adds no format details beyond the schema, so the baseline 3 applies.

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

Purpose4/5

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

States a specific verb ('Collect') and concrete resources (commit list, changed files with status, diffstat) over a base...head range, plus the intent ('for writing a PR description'). It implicitly separates itself from single-purpose siblings like git_log and git_diff by being an aggregate, but never names 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?

The parenthetical 'for writing a PR description' gives a use context, which is useful. However there is no explicit guidance on when to prefer this over git_log, git_diff, or git_status, nor any stated exclusions or prerequisites.

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

git_statusGit statusA
Read-only

Structured git status: branch, staged/unstaged/untracked files. Replaces parsing raw git status output.

NameRequiredDescriptionDefault
cwdNoRepository path

Output Schema

NameRequiredDescription
aheadYes
cleanYes
behindYes
branchYes
stagedYes
retainedNo
unstagedYes
untrackedYes

TDQS

A3.6/5.0
Behavior3/5

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

The readOnlyHint annotation already declares the safety profile, so the description only needs added context. "Structured ... replaces parsing raw output" usefully flags that the result is machine-readable rather than porcelain text, but it says nothing about cost, scope limits, or what happens with a dirty multi-repo tree.

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, zero filler, with the payload contents front-loaded before the rationale. Nothing could be removed without losing information.

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

Completeness4/5

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

With an output schema covering the returned fields and a single optional parameter, the description is close to sufficient. The one meaningful gap is default behavior when cwd is not supplied, which an agent would need to know before calling.

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

Parameters3/5

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

Schema description coverage is 100% for the single cwd parameter, so baseline 3 applies. The description adds no semantics beyond the schema — notably it never states what happens when cwd is omitted and the optional default path is used.

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 the resource (git status) and enumerates exactly what it returns: branch, staged/unstaged/untracked files. This separates it from git_diff, git_log and git_branches, though those siblings are never named, so the differentiation is inferential 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 Guidelines3/5

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

"Replaces parsing raw git status output" implies when to reach for it (instead of shelling out to git status), but there is no explicit when-to-use/when-not and no alternative tool named. The agent must infer that git_diff or git_branches cover the narrower questions.

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

glab_ci_statusGitLab pipeline statusA
Read-only

Report a GitLab pipeline's jobs as counts per status plus the failed, running and pending jobs. Defaults to the current branch's latest pipeline; pass mr for a merge request's head pipeline. Passing, skipped and manual jobs are counted, not listed, unless all=true.

NameRequiredDescriptionDefault
mrNoMerge request IID: read its head pipeline instead
allNoList passing, skipped and manual jobs too
cwdNoRepository path (default: the server's working directory)
repoNoGROUP/REPO or URL (default: the repo at `cwd`)
branchNoBranch whose latest pipeline to read (default: current branch)
pipelineNoPipeline ID (default: the latest pipeline on `branch`)

Output Schema

NameRequiredDescription
urlYes
jobsYes
countsYes
statusYes
pipelineYes
retainedNo

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, so the safety profile is covered. The description adds the non-obvious aggregation trait: passing, skipped and manual jobs are counted, not listed, unless all=true. That's real behavior an agent couldn't infer from structured fields, though auth/rate-limit context is absent.

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

Conciseness5/5

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

Two sentences, zero waste. The default behavior is front-loaded, then the mr override, then the output-shape caveat — a sensible priority order for an agent deciding how to call it.

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 a readOnly annotation, an output schema and full schema coverage, the description supplies what remains: scope selection and the counted-vs-listed distinction. Only slightly incomplete in not addressing the interaction between an explicit pipeline ID and branch.

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

Parameters3/5

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

Schema coverage is 100%, so every parameter including all defaults (cwd, repo, branch, pipeline, mr, all) is already documented in the schema. The description restates the branch/mr/all semantics rather than adding new constraints such as ID formats or precedence between branch and pipeline. Baseline 3 is appropriate.

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

Purpose4/5

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

The description opens with a specific verb and resource: report a GitLab pipeline's jobs as counts per status, plus the failed, running and pending jobs. That is concretely distinguishable from non-filtering list tools. It stops short of naming how it differs from the sibling glab_pipeline_failure_summary, so it lands just below top marks.

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 states the default selection (current branch's latest pipeline), the alternate selection (pass mr for a merge request's head pipeline), and the condition that changes output shape (all=true). Clear context with no exclusions, but no guidance on when to prefer this over glab_pipeline_failure_summary.

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

glab_pipeline_failure_summaryGitLab pipeline failure summaryA
Read-only

Diagnose a GitLab pipeline in one call: status, the failed jobs and why GitLab says they failed, and the last script lines of each failed job's trace as evidence. Allowed-to-fail jobs are noted, not counted as the failure. Defaults to the current branch's latest pipeline.

NameRequiredDescriptionDefault
mrNoMerge request IID: read its head pipeline instead
cwdNoRepository path (default: the server's working directory)
repoNoGROUP/REPO or URL (default: the repo at `cwd`)
branchNoBranch whose latest pipeline to read (default: current branch)
pipelineNoPipeline ID (default: the latest pipeline on `branch`)

Output Schema

NameRequiredDescription
urlYes
branchYes
statusYes
evidenceYes
pipelineYes
retainedNo
failedJobsYes
likelyCausesYes
suggestedNextCommandsYes

TDQS

A4.3/5.0
Behavior4/5

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

readOnlyHint=true already tells the agent this is a safe read, so the bar is lower. The description still adds real behavior beyond that: allowed-to-fail jobs are surfaced but excluded from the failure count, and traces are truncated to the last script lines — an agent knows to expect evidence rather than full logs.

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 dense sentences with zero filler. The one-call diagnostic promise and the returned evidence are front-loaded, and the scoping notes (allowed-to-fail, default branch) follow logically.

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

Completeness5/5

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

Given an output schema exists, the description need not document return shape, yet it still characterizes the payload precisely. With all five parameters documented in-schema and the read-only annotation carrying the safety profile, nothing an agent needs to call this correctly is missing.

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

Parameters3/5

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

Schema description coverage is 100%, so every parameter including mr, branch, pipeline, repo, and cwd already carries an explanation. The description reinforces only the default behavior (current branch's latest pipeline), adding marginal semantics beyond the schema. Baseline 3 applies.

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

Purpose5/5

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

States a specific verb (diagnose) and resource (GitLab pipeline), then enumerates exactly what the diagnosis contains: status, failed jobs with GitLab's stated reasons, and the trailing script lines of each failed job's trace. This is clearly distinguishable from glab_ci_status, which the description implies is the shallower status-only view.

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?

"Diagnose a GitLab pipeline in one call" plus the default-to-current-branch behavior gives a clear context for invocation. However, no sibling is named as an explicit alternative (glab_ci_status exists and is the obvious shallow counterpart), so the guidance is strong but not fully prescriptive.

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

globGlob file searchB
Read-only

Find files matching a glob pattern. Returns a compact list of paths.

NameRequiredDescriptionDefault
cwdNoWorking directory for the glob
patternYesGlob pattern (e.g. 'src/**/*.ts')

Output Schema

NameRequiredDescription
countYes
filesYes
retainedNo

TDQS

B3.3/5.0
Behavior3/5

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

The readOnlyHint annotation already establishes that this is a safe read operation. The description adds that results are a compact list of paths, but it does not mention recursion behavior, hidden-file handling, or cwd defaults.

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 zero waste, and the primary action is front-loaded before the return-value note.

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?

Because an output schema exists, the description need not explain return values. However, with many search-related siblings, it should do more to clarify when glob is the right choice.

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

Parameters3/5

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

Schema description coverage is 100%, so the pattern and cwd parameters are already documented in the schema. The description adds no syntax or behavioral detail beyond what the schema provides.

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: find files matching a glob pattern. It is clear what the tool does, but it does not distinguish itself from siblings such as find_files, ls, or rg.

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 glob instead of find_files, ls, tree, or rg. The only implied usage is from the word 'glob,' and no exclusions or alternative selection criteria are provided.

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

helm_listHelm releasesB
Read-only

List Helm releases with status, chart, and app version. Structured output.

NameRequiredDescriptionDefault
filterNoFilter by release name regex
contextNoKube context
namespaceNoNamespace (omit for all)
allNamespacesNoSearch all namespaces (overrides namespace)

Output Schema

NameRequiredDescription
countYes
releasesYes
retainedNo

TDQS

B3.2/5.0
Behavior3/5

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

readOnlyHint=true already declares this a safe read, so the description doesn't need to establish safety. It adds that status, chart, and app version are surfaced, which is modest extra value, but 'Structured output' is redundant given a real output schema exists and nothing is said about scope defaults or empty-result behavior.

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 sentences, front-loaded with the action and the key returned fields. The trailing 'Structured output' is close to wasted space since an output schema is declared, but the overall brevity is good.

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 an output schema present, the description needn't explain return shape, and the read-only annotation covers safety. What's missing is sibling differentiation in a crowded helm/kube/argo toolset, which keeps it just under a 5.

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

Parameters3/5

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

Schema description coverage is 100%, and the schema already documents filter (regex), context, namespace (omit for all), and allNamespaces override. The description adds nothing beyond that, which is acceptable at full coverage.

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

Purpose4/5

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

'List Helm releases' gives a specific verb and resource, and it names the fields surfaced (status, chart, app version). However, it does not distinguish itself from close siblings such as helm_status, helm_values, or helm_release_triage, so an agent must infer the boundary.

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 statement of when to use this versus helm_status or helm_release_triage, no prerequisites (kube context/cluster access), and no exclusions. The agent gets no routing guidance at all.

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

helm_release_triageHelm release triageA
Read-only

Diagnose a Helm release's health in one call: combines helm status + helm history into current status, likely causes, suggested next commands, and recent-revision evidence.

NameRequiredDescriptionDefault
contextNoKube context
releaseYesRelease name
namespaceNoNamespacedefault

Output Schema

NameRequiredDescription
statusYes
healthyYes
evidenceYes
retainedNo
revisionYes
revisionsYes
likelyCausesYes
suggestedNextCommandsYes

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, so the safety profile is covered; the description adds real value by disclosing aggregation behavior and the shape of the synthesis (likely causes, suggested next commands, recent-revision evidence). It omits what happens on a missing/unhealthy release or whether diagnosis is bounded in scope.

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 dense sentence with no filler, leading with the core capability and then enumerating exactly what comes back. Nothing to trim.

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?

An output schema exists so return values need no explanation, and the inputs are fully documented. The remaining gap is behavioral edge cases: what the agent gets if the release doesn't exist or if helm isn't reachable, which for a diagnostic tool would matter.

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

Parameters3/5

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

Schema description coverage is 100% and all three parameters (context, release, namespace) are documented in the schema, including the namespace default. The description adds no semantics beyond that, which is the baseline case when structured fields do the work.

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

Purpose4/5

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

Specific verb ('Diagnose') plus resource ('a Helm release's health') and an explicit statement that it fuses helm status + helm history into one composite result. That implicitly separates it from the sibling helm_status, though no sibling is named 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?

'in one call' hints that this replaces manually running helm_status and helm_history, but the description never states when to prefer it over helm_status or helm_list, nor any preconditions (e.g. release must exist, namespace must be in context). Usage is inferable rather than stated.

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

helm_statusHelm release statusC
Read-only

Get detailed status of a Helm release.

NameRequiredDescriptionDefault
contextNoKube context
releaseYesRelease name
namespaceNoNamespacedefault

Output Schema

NameRequiredDescription
nameYes
notesYes
statusYes
retainedNo
revisionYes
namespaceYes
descriptionYes
lastDeployedYes

TDQS

C2.9/5.0
Behavior2/5

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

readOnlyHint=true already declares the safety profile, and an output schema exists to explain the return shape. The description adds no behavioral context beyond the title restatement – 'detailed status' is not expanded into what states, history, or failure modes are reported.

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

Conciseness4/5

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

A single front-loaded sentence with no waste. It is efficient, though the brevity leaves no room for routing or behavioral detail.

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?

Output schema and full parameter descriptions are supplied, so the call mechanics are covered. However, against a crowded sibling set containing helm_release_triage and helm_values, the description does not say enough to disambiguate the tool's role.

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

Parameters3/5

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

Schema description coverage is 100%, so release, namespace, and context are already documented in the schema. The description adds no meaning beyond that, which is the baseline expectation when the schema does the work.

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 detailed status of a Helm release.' An agent can tell it is a read-only introspection call on a named release. It stops short of differentiating against nearby siblings like helm_release_triage or helm_values, which also surface release information.

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 helm_release_triage, helm_values, or helm_list, all of which appear in the sibling set. Nothing tells the agent which situation selects this tool over those.

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

helm_valuesHelm release valuesB
Read-only

Get the computed values for a Helm release as structured data.

NameRequiredDescriptionDefault
contextNoKube context
releaseYesRelease name
allValuesNoInclude chart defaults (not just user-supplied)
namespaceNoNamespacedefault

Output Schema

NameRequiredDescription
valuesYes
retainedNo

TDQS

B3.4/5.0
Behavior3/5

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

The readOnlyHint annotation already communicates that this is a safe read operation. The description adds that values are 'computed' and returned 'as structured data,' which is useful context beyond the annotation, but it does not disclose failure behavior, Kubernetes context requirements, or other operational traits.

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

Conciseness5/5

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

The description is a single front-loaded sentence with no wasted language. It states the verb, resource, and output shape immediately.

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 Helm values lookup, the description is largely sufficient: annotations cover safety, the schema documents all parameters, and an output schema exists for return values. The only meaningful gap is the absence of guidance on when to choose this tool over related Helm tools.

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

Parameters3/5

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

Schema description coverage is 100%, so all four parameters are already documented in the schema, including release, namespace, context, and allValues. The description adds no parameter-specific meaning beyond what the schema provides, so the baseline of 3 is appropriate.

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

Purpose4/5

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

The description states a specific verb and resource: 'Get the computed values for a Helm release.' It clearly distinguishes the operation from list/status-style tools by focusing on computed values, though it does not explicitly name or differentiate against siblings such as helm_status or helm_release_triage.

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

Usage Guidelines2/5

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

The description provides no explicit guidance on when to use this tool versus alternatives, nor does it mention prerequisites or exclusions. The purpose is inferable from the wording, but an agent receives no routing guidance.

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

jqjq JSON processorA
Read-only

Query and transform JSON using jq expressions. Accepts a file path or raw JSON string. Returns parsed, structured output — far more compact than reading a full JSON file. The filter is passed directly to jq (no shell), so shell-style escaping such as backslash-escaped quotes is neither needed nor supported — write the filter exactly as jq expects it.

NameRequiredDescriptionDefault
fileNoPath to a JSON file
inputNoRaw JSON string to process (alternative to file)
slurpNoRead entire input into array (-s)
filterNojq filter expression (default: '.').
compactNoCompact output (-c)
rawOutputNoOutput raw strings without JSON encoding (-r)

Output Schema

NameRequiredDescription
resultYes
retainedNo
multilineYes

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already establish a read-only safety profile, and the description adds genuinely non-obvious behavior: the filter is passed directly to jq with no shell, so backslash escaping is neither needed nor supported, plus a note on output form. Error behavior on malformed filters is not covered, keeping it at 4.

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?

Four short sentences, front-loaded with purpose then input forms then the escaping caveat. No filler; every sentence carries actionable information.

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

Completeness5/5

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

Six parameters are fully documented in the schema and an output schema exists, so return values need no prose. The description fills the remaining gap an agent would actually stumble on: filter escaping.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3; the description goes beyond it by explaining the file-vs-raw-JSON input choice and how the filter string must be written literally (no shell escaping). Flags like slurp/compact/rawOutput are left entirely to the schema.

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

Purpose4/5

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

States a specific verb and resource ('Query and transform JSON using jq expressions') and clarifies accepted input forms. It does not explicitly name siblings like yq (YAML) or cat, so differentiation is implied 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 Guidelines4/5

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

Provides clear context for when to reach for it: 'far more compact than reading a full JSON file', which implicitly steers the agent away from cat/ls-style reads. No explicit exclusions or named alternatives are given.

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

kube_contextsKubectl contextsA
Read-only

List available kubectl contexts with current context marked.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription
currentYes
contextsYes
retainedNo

TDQS

A3.7/5.0
Behavior3/5

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

The readOnlyHint annotation already communicates that this is a safe read operation. The description adds the useful behavioral detail that the current context is marked in the result, but does not discuss permissions, output format, or any other runtime 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?

A single, front-loaded sentence with no wasted words. It communicates the resource and the key distinguishing output detail immediately.

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

Completeness4/5

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

Given the low complexity, zero parameters, and the presence of an output schema, the description is largely complete. An agent can understand what the tool returns, though it does not mention that the operation is read-only beyond the annotation.

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

Parameters4/5

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

The tool has zero parameters, so there are no parameter semantics to document. The description does not need to compensate for any schema gaps, making the baseline score appropriate.

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

Purpose4/5

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

States a specific verb and resource ('List available kubectl contexts') and adds that the current context is marked. It is clearly distinct in practice from siblings like kube_get, but it does not explicitly differentiate itself from alternatives.

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

Usage Guidelines3/5

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

Usage is implied by the simple list operation: an agent would call this when it needs available kubectl contexts. However, the description gives no explicit when-to-use guidance or comparison to kubectl-related siblings such as kube_get.

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

kube_deployment_statusDeployment rollout statusB
Read-only

Report a deployment's rollout health (ready/desired replicas, conditions) as a structured diagnosis.

NameRequiredDescriptionDefault
nameYesDeployment name
contextNoKube context
namespaceNoNamespacedefault

Output Schema

NameRequiredDescription
statusYes
evidenceYes
retainedNo
likelyCausesYes
suggestedNextCommandsYes

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, so the safety profile is covered. The description adds that the output is a 'structured diagnosis' with replica counts and conditions, which is useful context, but doesn't mention scoping, permissions, or what a degraded result looks like.

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 packs verb, resource, output fields, and output shape with zero 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?

The tool is simple (one required param), annotations cover read-only safety, and an output schema exists, so the description needn't explain return values. It is essentially complete, with only the sibling-differentiation gap remaining.

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

Parameters3/5

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

Schema description coverage is 100%, with name, context, and namespace all documented in the schema. The description adds no parameter-level detail beyond what the schema provides, so the baseline 3 applies.

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

Purpose4/5

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

States a specific verb and resource ('Report a deployment's rollout health') and even names the fields surfaced (ready/desired replicas, conditions). However, it does not distinguish this from sibling tools like kube_get or kube_diagnose_pod, leaving the agent to infer the difference.

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 kube_get, kube_diagnose_pod, or kube_events_summary, and no stated prerequisites. The agent must guess based on the name alone.

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

kube_diagnose_podDiagnose a podA
Read-only

Diagnose why a pod is unhealthy in one call. Returns status, likely causes, suggested next commands, and evidence (CrashLoopBackOff/ImagePullBackOff/OOMKilled/Unschedulable/restarts).

NameRequiredDescriptionDefault
podYesPod name
contextNoKube context
namespaceNoNamespacedefault

Output Schema

NameRequiredDescription
statusYes
evidenceYes
retainedNo
likelyCausesYes
suggestedNextCommandsYes

TDQS

A3.9/5.0
Behavior4/5

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

Annotations only declare readOnlyHint=true; the description adds substantive behavior by disclosing that it aggregates multiple signals into one call and enumerating what evidence categories it surfaces (CrashLoopBackOff, ImagePullBackOff, OOMKilled, Unschedulable, restarts). It stops short of stating limits, such as what it does with a healthy pod or whether the pod must already exist in the given context.

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

Conciseness5/5

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

Two sentences, zero filler, and the value proposition ('in one call') is front-loaded before the return contents. The parenthetical evidence list is dense rather than padded.

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

Completeness5/5

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

With an output schema present, return values need no prose explanation, and annotations cover safety; the description still adds the failure-mode scope an agent needs to judge applicability. All three parameters are fully documented in the schema, so nothing required to invoke it correctly is missing.

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

Parameters3/5

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

Schema coverage is 100% with all three fields documented, including the namespace default, so the schema already carries semantics. The description adds nothing about how pod name relates to namespace or context, which is the correct baseline-3 position when the schema does the heavy lifting.

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 plus the condition it targets ('Diagnose why a pod is unhealthy'), which is clearly distinct from raw retrieval tools like kube_get or kube_logs. It does not, however, differentiate itself from the nearby kube_pod_failure_summary sibling, leaving an agent to guess which diagnostic entry point to pick.

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 'in one call' implies this should be preferred over manually chaining get/logs/events, which is useful implied guidance. But there is no explicit when-to-use or when-not statement and no sibling is named as an alternative or complement.

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

kube_events_summarySummarize warning eventsA
Read-only

Summarize Warning events in a namespace (grouped by reason, ordered by count) instead of scrolling raw kubectl get events.

NameRequiredDescriptionDefault
contextNoKube context
maxItemsNoItem cap; overrides detailLevel
namespaceNoNamespacedefault
includeRawNoInclude raw/verbose fields
detailLevelNoItem preset: summary 20, normal 100, full (default; also skips the response budget)
allNamespacesNoSearch all namespaces (overrides namespace)

Output Schema

NameRequiredDescription
totalNo
statusYes
evidenceYes
retainedNo
truncatedNo
likelyCausesYes
suggestedNextCommandsYes

TDQS

A3.8/5.0
Behavior3/5

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

readOnlyHint=true already covers the safety profile, and the schema covers detailLevel/maxItems caps. The description adds real behavior (Warning-only filter, grouping by reason, count ordering) but says nothing about the response budget interaction, truncation behavior, or that results are aggregated rather than complete.

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

Conciseness5/5

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

A single sentence that front-loads the scope, the aggregation behavior, and the contrast with the naive alternative. 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?

With an output schema present and full parameter documentation, the description only needs to convey scope and aggregation semantics, which it does. Minor gap: it doesn't clarify how allNamespaces interacts with the summary grouping when no namespace is given.

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

Parameters3/5

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

Schema description coverage is 100%, so every parameter is already documented, including the detailLevel presets and maxItems override. The description adds no syntax or defaulting information beyond what the schema states, so baseline 3 applies.

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

Purpose4/5

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

States a specific verb (Summarize) and resource (Warning events) plus the output shape: grouped by reason, ordered by count. It implicitly separates itself from raw event listing ('instead of scrolling raw kubectl get events') but never names the actual sibling (e.g. kube_get) that does the raw read.

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

Usage Guidelines4/5

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

The clause 'instead of scrolling raw kubectl get events' gives a clear selection rule against the raw-listing approach. It stops short of naming the sibling tool or stating when NOT to use it (e.g. when you need event timestamps or raw messages, use another tool).

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

kube_getKubectl get resourcesA
Read-only

Get Kubernetes resources as structured data. Wraps kubectl get -o json and returns a compact summary by default. Use the jq param to extract specific fields from the raw JSON (e.g. '.spec.template.spec.containers[].env') instead of the summary.

NameRequiredDescriptionDefault
jqNojq filter applied to raw kubectl JSON. Skips the default summary and returns the jq result instead. Example: '.spec.template.spec.containers[].env'
nameNoSpecific resource name
contextNoKube context
maxItemsNoItem cap; overrides detailLevel
resourceNoRequired. Resource type (e.g. pods, deployments, services, nodes)
selectorNoLabel selector (e.g. 'app=nginx')
namespaceNoNamespace (omit for all-namespaces or cluster-scoped)
includeRawNoInclude raw/verbose fields
detailLevelNoItem preset: summary 20, normal 100, full (default; also skips the response budget)
allNamespacesNoSearch all namespaces (overrides namespace)
includeLabelsNoInclude each resource's labels (default false — labels are verbose and mostly hashes; use selector to filter or jq to read specific ones)

TDQS

A3.8/5.0
Behavior4/5

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

Annotations only declare readOnlyHint, so the description does real work: it discloses that output is a compact summary by default, that jq skips the summary and returns raw results, and that kubectl JSON underlies it. It doesn't cover auth/context requirements or failure behavior, keeping it below 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.

Conciseness5/5

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

Three sentences, front-loaded with the core capability, followed by output-shaping behavior and the single most important routing tip. 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 an 11-parameter read-only query tool with no output schema, the description covers purpose, default output shape, and the jq escape hatch, which are the essentials. Interaction between detailLevel, maxItems, and includeRaw is left entirely to the schema, but that is acceptable given full coverage there.

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

Parameters3/5

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

Schema description coverage is 100%, so all 11 parameters are already documented in structured fields, including the jq example. The description's jq explanation largely restates the schema, establishing the baseline 3 rather than adding new 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 and resource ('Get Kubernetes resources') and clarifies the mechanism ('Wraps kubectl get -o json'). It does not differentiate itself from specialized siblings like kube_deployment_status or kube_pod_failure_summary, which an agent must infer from the generic naming.

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

Usage Guidelines3/5

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

It gives one clear routing rule: use the jq param instead of the summary when extracting specific fields. However, it never says when to prefer the generic kube_get over the many specialized kube_* siblings, nor when the standalone jq sibling would be more appropriate.

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

kube_logsKubectl logsA
Read-only

Get pod logs. lines are as kubectl prints them, ' ', oldest first; consecutive repeats of a message merge into the first, marked ' [×N]', and a budget cut keeps the newest. Use grep to filter lines by regex pattern (e.g. 'ERROR|WARN') instead of piping through shell commands.

NameRequiredDescriptionDefault
podNoRequired. Pod name (or deployment/xxx)
grepNoRegex pattern to filter log lines (e.g. 'ERROR|WARN', 'timeout'). Only matching lines are returned.
tailNoNumber of lines (default 100)
sinceNoDuration like '1h', '30m'
contextNoKube context
maxItemsNoItem cap; overrides detailLevel
containerNoContainer name
namespaceNoNamespacedefault
ignoreCaseNoCase-insensitive grep matching (default: false)
includeRawNoInclude raw/verbose fields
detailLevelNoItem preset: summary 20, normal 100, full (default; also skips the response budget)

Output Schema

NameRequiredDescription
linesYes
totalNo
retainedNo
truncatedNo

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, so the description is not required to explain the safety profile. It adds meaningful behavioral detail beyond the annotations: the exact line format, oldest-first ordering, the merging of consecutive repeats into one line marked ' [×N]', and the rule that when the response budget truncates output, the newest lines are kept. This is genuinely useful context for interpreting results.

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

Conciseness4/5

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

The description is two sentences and front-loads the core behavior before the grep advice. The second sentence is dense but contains no filler, though the formatting details could be separated for easier reading.

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 11 parameters, a full schema and a complete output schema, the description still says enough. It covers how log lines are formatted and what happens when the output budget truncates results. The schema covers everything else. Still, the interaction among detailLevel, maxItems, and the budget is only described in the schema.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents all 11 parameters. The description adds only the operational hint that grep should be used instead of shell piping; it gives no additional syntax or format details for tail, since, detailLevel, maxItems, or the budget interaction. This matches the baseline of 3 when the schema itself describes the parameters.

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

Purpose4/5

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

The first sentence, 'Get pod logs,' gives a specific verb and resource and is immediately actionable. However, it doesn't differentiate this tool from sibling tools such as kube_get or kube_events_summary; for example, it could explain why logs come from this tool rather than from a general kubectl wrapper.

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 'Use grep ... instead of piping through shell commands' sentence explains how to use the grep parameter, not when to prefer this tool over alternatives. No explicit guidance about when this tool should be used instead of its siblings is present, so the agent can only infer usage.

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

kube_pod_failure_summarySummarize failing podsA
Read-only

List unhealthy pods in a namespace with their failure reason and evidence — one call instead of get + describe per pod.

NameRequiredDescriptionDefault
contextNoKube context
maxItemsNoItem cap; overrides detailLevel
namespaceNoNamespacedefault
includeRawNoInclude raw/verbose fields
detailLevelNoItem preset: summary 20, normal 100, full (default; also skips the response budget)
allNamespacesNoSearch all namespaces (overrides namespace)

Output Schema

NameRequiredDescription
podsYes
totalNo
statusYes
evidenceYes
retainedNo
truncatedNo
likelyCausesYes
suggestedNextCommandsYes

TDQS

A3.6/5.0
Behavior3/5

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

readOnlyHint=true already declares the safety profile, so the description only needs to add operational context. It does add that failure reason and evidence are aggregated per pod, but says nothing about response size, the item cap / detailLevel trade-off, or whether evidence is truncated by the response budget mentioned in the schema.

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

Conciseness5/5

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

A single sentence with zero filler, front-loading the verb, resource, and payload. The round-trip savings clause is the only elaboration and it 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?

With an output schema present and full parameter descriptions, the description needn't explain return values, and it states the essential output shape (failure reason + evidence). The one gap is that it frames the tool as namespace-scoped without mentioning the allNamespaces escape hatch, which changes what the tool does.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents context, maxItems, namespace, includeRaw, detailLevel, and allNamespaces. The description only echoes namespace scoping (and says "in a namespace" without acknowledging allNamespaces overrides it), adding no meaning about the detail/cap knobs.

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 ("List unhealthy pods in a namespace") plus what each item carries (failure reason and evidence), which is more than a restatement of the title. It does not name the sibling tools (kube_get, kube_diagnose_pod) it replaces, so differentiation must be inferred from "get + describe."

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

Usage Guidelines3/5

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

Implies the usage context — bulk triage of failing pods instead of a get+describe per pod — which is a genuine selection hint. It never says when NOT to use it (e.g., for deep single-pod investigation use kube_diagnose_pod) and offers no explicit alternative by name.

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

liquibase_statusPending changesets (structured)A
Read-only

List Liquibase changesets not yet applied to the target database, as structured JSON. Reports up-to-date vs a pending list. liquibase is on PATH — no mise/wrapper needed.

NameRequiredDescriptionDefault
cwdNoDirectory to run liquibase in (where the defaults file / changelog live).
labelsNoLabel expression to filter changesets (--labels).
contextsNoContext expression to filter changesets (--contexts).
extraArgsNoAdditional raw arguments appended to the liquibase invocation.
defaultsFileNoPath to the Liquibase defaults file (--defaults-file), e.g. db-dev.properties. Usually carries the JDBC URL, credentials, and changelog path.
changelogFileNoChangelog path (--changelog-file); usually set in the defaults file instead.

Output Schema

NameRequiredDescription
pendingYes
retainedNo
upToDateYes
pendingCountYes

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, so the safety profile is known; the description adds that output is structured JSON and that the result distinguishes up-to-date from pending. The PATH/mise note usefully warns the agent not to wrap the command, but nothing is said about exit behavior, failure modes, or DB connectivity requirements.

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?

Three short sentences, with the core purpose front-loaded and the practical PATH note trailing. Nothing is padding, though the environment note is tangential to the core description and could have been folded in more tightly.

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?

An output schema exists, so return values need no explanation, and annotations cover the read-only safety profile while the schema fully documents parameters. The description covers purpose and output shape adequately; only connectivity/prerequisite context is missing.

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

Parameters3/5

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

Schema description coverage is 100%, so all six optional parameters (cwd, labels, contexts, extraArgs, defaultsFile, changelogFile) are already documented in the schema. The description adds no filter syntax or precedence hints beyond that, so the baseline 3 applies.

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

Purpose4/5

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

States a specific verb and resource plus scope: 'List Liquibase changesets not yet applied to the target database, as structured JSON.' That is clearly distinguishable from siblings like liquibase_update_sql or liquibase_validate, 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?

The intent (check pending changesets before applying) is implied by 'not yet applied' and 'Reports up-to-date vs a pending list', but there is no explicit when-to-use or when-not-to-use guidance versus liquibase_validate or liquibase_update_sql. The 'liquibase is on PATH' note is operational rather than tool-selection guidance.

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

liquibase_update_sqlPreview migration SQL (structured)A
Read-only

Render the SQL Liquibase would run for pending changesets (updateSQL) as structured per-changeset summaries with a SQL-Server batch lint. Does NOT apply changes. SQL bodies are omitted unless includeRaw or changesetId is set. liquibase is on PATH — no mise/wrapper needed.

NameRequiredDescriptionDefault
cwdNoDirectory to run liquibase in (where the defaults file / changelog live).
labelsNoLabel expression to filter changesets (--labels).
contextsNoContext expression to filter changesets (--contexts).
maxItemsNoItem cap; overrides detailLevel
batchLintNoLint each changeset for the SQL-Server 'routine DDL must lead its GO-batch' rule (default true).
extraArgsNoAdditional raw arguments appended to the liquibase invocation.
includeRawNoInclude raw/verbose fields
changesetIdNoReturn only this changeset's full rendered SQL (matches the changeset id).
detailLevelNoItem preset: summary 20, normal 100, full (default; also skips the response budget)
defaultsFileNoPath to the Liquibase defaults file (--defaults-file), e.g. db-dev.properties. Usually carries the JDBC URL, credentials, and changelog path.
changelogFileNoChangelog path (--changelog-file); usually set in the defaults file instead.

Output Schema

NameRequiredDescription
totalNo
retainedNo
truncatedNo
changesetsYes
changesetCountYes

TDQS

A4.7/5.0
Behavior5/5

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

Beyond the readOnlyHint annotation, the description discloses key behavior: output is structured per changeset, a SQL-Server batch lint is included, and SQL bodies are omitted unless includeRaw or changesetId is set. It also clarifies the environment expectation that liquibase is on PATH and no wrapper is needed.

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

Conciseness5/5

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

The description is three tightly written sentences with the core behavior front-loaded. Every sentence contributes useful information: purpose, non-mutation guarantee, output omission rules, and environment note.

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

Completeness5/5

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

For a complex 11-parameter tool with a full schema and an output schema, the description supplies the essential behavioral context an agent needs. It covers purpose, safety, output shape, SQL omission rules, linting, and environment assumptions without duplicating schema documentation.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3. The description adds important cross-parameter meaning by explaining that SQL bodies are omitted unless includeRaw or changesetId is set, which is not obvious from the individual schema fields alone.

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

Purpose5/5

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

The description uses a specific verb and resource: render the SQL Liquibase would run for pending changesets as structured per-changeset summaries. It also clearly distinguishes this preview operation from applying changes by stating 'Does NOT apply changes.'

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

Usage Guidelines4/5

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

The description establishes clear context for previewing pending migration SQL and explicitly notes that it does not apply changes. It does not name sibling alternatives such as liquibase_status or liquibase_validate, so the when-to-use guidance is strong but not exhaustive.

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

liquibase_validateValidate changelog (structured)A
Read-only

Validate a Liquibase changelog and return a structured pass/fail result with per-changeset errors (duplicate ids, checksum drift). Much more compact than raw output. liquibase is on PATH — no mise/wrapper needed.

NameRequiredDescriptionDefault
cwdNoDirectory to run liquibase in (where the defaults file / changelog live).
labelsNoLabel expression to filter changesets (--labels).
contextsNoContext expression to filter changesets (--contexts).
extraArgsNoAdditional raw arguments appended to the liquibase invocation.
defaultsFileNoPath to the Liquibase defaults file (--defaults-file), e.g. db-dev.properties. Usually carries the JDBC URL, credentials, and changelog path.
changelogFileNoChangelog path (--changelog-file); usually set in the defaults file instead.

Output Schema

NameRequiredDescription
validYes
errorsYes
retainedNo
errorCountYes

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, and the description is consistent with a read-only validation. It adds genuine context beyond annotations: the result is structured and 'much more compact than raw output', and it enumerates the error categories surfaced (duplicate ids, checksum drift). It stops short of saying whether a failing validation is reported as an error result vs a payload.

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

Conciseness5/5

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

Three short sentences, front-loaded with the action and result shape, then the output-format benefit, then the environment prerequisite. Nothing is padded and each sentence carries information an agent would otherwise have to discover.

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?

Output schema exists, so return values need not be explained, and annotations cover the safety profile; the description still adds the error taxonomy and compactness rationale. It is essentially complete, with only the missing sibling routing as a gap.

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

Parameters3/5

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

Schema description coverage is 100%, so all six parameters (cwd, labels, contexts, extraArgs, defaultsFile, changelogFile) are already documented in the schema. The description adds no parameter-level meaning beyond that, so the baseline 3 applies.

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

Purpose4/5

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

Specific verb+resource: 'Validate a Liquibase changelog' with a stated output shape (structured pass/fail with per-changeset errors). It distinguishes itself by output format and names the concrete failure classes (duplicate ids, checksum drift), but does not name siblings like liquibase_status or liquibase_update_sql to disambiguate.

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 — validate when you want a pass/fail check — but the description never says when to use this instead of liquibase_status or liquibase_update_sql, nor any prerequisite/exclusion conditions. The 'liquibase is on PATH' note is an environment fact, not usage guidance.

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

list_guidanceList tool-selection guidanceA
Read-only

Return an intent → preferred-tool index so you can pick the right bash-mcp tool for a goal. Each entry names the tool to prefer, raw-command anti-patterns to avoid, and why. Filter with intent (substring) or category to narrow the list.

NameRequiredDescriptionDefault
intentNoCase-insensitive substring filter on the intent text.
categoryNoExact category filter, e.g. 'kubernetes', 'git', 'terraform'.

Output Schema

NameRequiredDescription
totalYes
intentsYes
retainedNo

TDQS

A4.2/5.0
Behavior4/5

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

The readOnlyHint annotation already establishes the safe-read profile. The description adds useful behavioral context by explaining that the result is an index of preferred tools, anti-patterns, and reasons, and that filtering narrows the list. It does not cover exhaustiveness or staleness, but the output schema likely handles return structure.

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

Conciseness5/5

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

Two sentences with no filler: the purpose and return format are front-loaded, followed by concise filter guidance. Every sentence earns its place.

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

Completeness4/5

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

With zero required parameters, a complete input schema, an output schema, and readOnlyHint, the description is largely complete for correct invocation. It could explicitly state that omitting filters returns the full index, but that is a minor gap.

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

Parameters3/5

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

Schema coverage is 100%, so both the substring behavior of `intent` and the exact-match behavior of `category` are already documented in the schema. The description repeats the filtering purpose but adds no syntax, examples, or constraints beyond what the schema provides.

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

Purpose5/5

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

The description states a specific verb ('Return') and resource ('intent → preferred-tool index'), and it positions the tool as the way to choose among bash-mcp siblings. It also specifies what each entry contains: preferred tool, raw-command anti-patterns, and rationale.

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 implies when to use the tool: to pick the right bash-mcp tool for a goal and to avoid raw-command anti-patterns. It does not explicitly state when not to use it or name a direct alternative, but the meta-tool purpose makes the usage context obvious.

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

lsList directoryA
Read-only

List files in a directory. Returns entries as [name, size, permissions, modified] — directories end with '/' and links with '@'. Use nameOnly for names alone, recursive for one level of subdirectories, all to include hidden files.

NameRequiredDescriptionDefault
allNoInclude hidden files
pathNoRequired. Directory path to list
nameOnlyNoEntries are [name] alone
recursiveNoRecurse into subdirectories (1 level)

Output Schema

NameRequiredDescription
entriesYes
retainedNo

TDQS

A3.8/5.0
Behavior4/5

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

readOnlyHint=true already covers the safety profile, and the description adds genuinely non-obvious traits: entry tuple ordering [name, size, permissions, modified], directory entries suffixed with '/', links with '@', and that recursion is only one level deep. It does not mention path errors or performance on large directories, keeping 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.

Conciseness5/5

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

Two sentences, zero waste. The core action and return format come first, then flag semantics — properly front-loaded and appropriately sized.

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?

An output schema exists so return values needn't be spelled out, and the description still covers the notable formatting quirks plus the recursion limit. Minor gaps around relative vs absolute paths or behavior on invalid paths are the only shortfall.

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

Parameters3/5

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

Schema coverage is 100%, so all four parameters are already documented, and the description largely restates them (all=hidden files, nameOnly=names alone). The 'one level' emphasis on recursive is a mild addition, so baseline 3 is right.

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 ('List files in a directory') and describes the return shape, so the agent knows exactly what it gets. It never distinguishes itself from siblings like tree, find_files, glob, or du, which also enumerate filesystem content, 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 Guidelines3/5

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

The flag explanations ('Use nameOnly for names alone, recursive for one level of subdirectories, all to include hidden files') imply when to set each option, but there is no explicit guidance on when to choose this over tree/find_files/glob. Usage is inferable rather than stated.

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

npm_lintLint (structured)A

Run biome check and return structured diagnostics with file, line, column, message, and rule. Far more compact and parseable than raw lint output. Use minSeverity to filter by severity level.

NameRequiredDescriptionDefault
cwdNoRequired. Project root directory
fixNoAuto-fix safe issues (default: false)
pathsNoSpecific path(s) to lint; a string or array (default: '.')
maxItemsNoItem cap; overrides detailLevel
detailLevelNoItem preset: summary 20, normal 100, full (default; also skips the response budget)
minSeverityNoMinimum severity to include (e.g. 'error' drops warnings and info)

Output Schema

NameRequiredDescription
totalNo
errorsYes
retainedNo
truncatedNo
errorCountYes
fixedCountYes
warningCountYes

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 and it does disclose the underlying engine (biome) and the structured output shape, which is useful. However, it says nothing about the mutating `fix` path (files modified on disk), dependency/toolchain prerequisites, or failure behavior when biome is absent or config is missing — significant gaps for a tool that can write.

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?

Three short sentences, front-loaded with what it runs and what it returns, then the differentiator versus raw output, then the severity knob. No filler, though the middle sentence is a soft marketing claim rather than actionable information.

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

Completeness4/5

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

An output schema exists and all parameters are schema-documented, so the description does not need to re-explain return values or params; it correctly focuses on engine identity and the compactness rationale. The one meaningful hole is the lack of any note that `fix` mutates source files, which matters for an otherwise complete definition.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents all six parameters including detailLevel presets and the minSeverity enum semantics. The description's 'Use minSeverity to filter by severity level' merely restates what the enum description already says, adding no new syntax or precedence detail beyond the schema.

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

Purpose4/5

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

Names a concrete verb and engine ('Run biome check') and specifies the return shape (file, line, column, message, rule), so an agent knows exactly what it produces. It implicitly separates itself from npm_test/npm_typecheck by being lint-only, but never names a sibling or an alternative tool explicitly.

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

Usage Guidelines3/5

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

The only guidance is a preference claim ('Far more compact and parseable than raw lint output') plus a hint to use minSeverity for filtering. There is no statement of when to choose this over npm_test, npm_typecheck, or a raw shell lint invocation, and no exclusions or prerequisites.

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

npm_testTest (structured)A

Run vitest or jest (picked from package.json) and return structured test results: suites, pass/fail counts, failure messages. Much more compact than raw test output. Only failures are listed by default; use verbose=true for all tests.

NameRequiredDescriptionDefault
cwdNoRequired. Project root directory
patternNoFilter tests by filename pattern
verboseNoInclude all tests in output (default: only failures)
coverageNoEnable coverage reporting

Output Schema

NameRequiredDescription
suitesYes
summaryYes
retainedNo

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations, the description carries the burden and does well: it discloses runner auto-detection, output compactness, and the default filtering behavior that governs what the agent actually sees. Gaps remain around failure modes (no test script present, timeouts, whether coverage changes the result payload), 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.

Conciseness5/5

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

Three sentences, front-loaded with the action and the payoff, then the filtering default and its override. No filler and nothing buried.

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?

Output schema exists, so return values need minimal explanation, and the description correctly focuses on behavior rather than shape. Slightly incomplete for a zero-annotation tool in not covering what happens when no runner or test script is detected.

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

Parameters3/5

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

Schema description coverage is 100%, so all four parameters are already documented in structured form; the description only restates verbose's default semantics. It adds no new meaning for cwd, pattern, or coverage 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 (run) and resource (vitest/jest tests) and spells out the return shape: suites, pass/fail counts, failure messages. An agent can distinguish it from npm_lint, npm_typecheck, or dotnet_test without opening a 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?

Gives clear operational context: failures-only by default, verbose=true for full output, and the runner is auto-selected from package.json. It doesn't explicitly route to alternatives (e.g., npm_lint for style, python_test for other stacks), but the usage condition for this tool is unambiguous.

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

npm_typecheckType check (structured)A
Read-only

Run tsc/tsgo --noEmit and return structured type errors with file, line, column, message, and TS error code. Much more compact than raw tsc output. Auto-detects tsgo for faster checking. Use project to specify a tsconfig.

NameRequiredDescriptionDefault
cwdNoRequired. Project root directory
projectNoPath to tsconfig.json (default: auto-detected by tsc)
maxItemsNoItem cap; overrides detailLevel
detailLevelNoItem preset: summary 20, normal 100, full (default; also skips the response budget)

Output Schema

NameRequiredDescription
totalNo
errorsYes
successYes
retainedNo
truncatedNo
errorCountYes

TDQS

A3.9/5.0
Behavior4/5

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

readOnlyHint already declares the safety profile, and the description still adds real behavioral detail: output is compact/structured rather than raw tsc noise, and tsgo is auto-detected for speed. These are traits not derivable from annotations or the schema.

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

Conciseness4/5

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

Four short sentences, front-loaded with the action and result shape, with the usage hint last. Slight redundancy between 'structured type errors' and 'much more compact than raw tsc output', but both earn their place by describing the output contract.

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?

An output schema exists, so return values need not be explained, and annotations cover the read-only nature. Combined with the description, an agent has enough to run the check and interpret results; only cross-sibling routing guidance is thin.

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

Parameters3/5

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

Schema description coverage is 100% and every parameter is documented there, so the schema does the heavy lifting. The description only reinforces the 'project' parameter, adding no format or default nuance beyond what the schema already states.

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 (run tsc/tsgo --noEmit type checking) plus the distinctive output contract (structured errors with file/line/column/message/TS code). This clearly separates it from npm_lint, npm_test, and python_typecheck without requiring the agent to open 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 final sentence gives one concrete usage hint ('Use project to specify a tsconfig'), but there is no explicit when-to-use/when-not guidance versus siblings like npm_test or npm_lint, and no mention of prerequisites such as a TypeScript project being present.

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

outlineFile structure outlineA
Read-only

Show the structural outline of a file — function/class names, top-level comments, imports. Returns a compact view without implementation bodies. Includes git metadata (branch, commit) when the file is in a git repo. Use instead of cat when reviewing file structure or auditing many files at once.

NameRequiredDescriptionDefault
refNoGit ref to outline (e.g. 'main', 'HEAD~1', a commit hash). When set, reads file content from git (git show ref:path) instead of disk.
pathYesPath to the file

Output Schema

NameRequiredDescription
pathYes
mtimeYesFile modification time (unix timestamp). 0 if using ref.
branchYesCurrent git branch, or null if not in a git repo
commitYesLast commit hash that touched this file, or null if not in a git repo
outlineYes
symbolsYes
languageYes
retainedNo
totalLinesYes
outlineLinesYes

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, so safety is covered, but the description still adds useful behavior: output is truncated to structure with no bodies, and git metadata (branch, commit) is included when the file lives in a repo. It stops short of saying what happens for non-repo files or binary/large files, which would be the last bit of behavioral context.

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

Conciseness5/5

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

Three short sentences, front-loaded with what the tool returns, then the output shape, then the alternative. Every sentence carries distinct information and nothing is repeated from the schema.

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

Completeness5/5

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

With an output schema present and 100% schema coverage, the description only needs to supply purpose, output character, and sibling routing — all of which it does. An agent can decide to call this instead of cat and know what it will get back.

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

Parameters3/5

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

Schema description coverage is 100%, so both 'path' and 'ref' are already documented, including the git-show semantics of 'ref'. The description mentions git metadata but adds no syntax or constraint detail beyond the schema, so baseline 3 applies.

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

Purpose5/5

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

States a specific verb and resource ('show the structural outline of a file') and enumerates the contents (function/class names, top-level comments, imports). The scope constraint 'compact view without implementation bodies' makes clear what the agent gets back and how it differs from a full read.

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

Usage Guidelines5/5

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

Explicitly names the alternative ('use instead of cat') and the two conditions that select it: reviewing file structure or auditing many files at once. This is exactly the when/when-not routing an agent needs among ~60 siblings.

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

python_lintPython lint (structured)B

Run ruff check and return structured diagnostics with file, line, column, message, and rule code. Much more compact than raw ruff output. Use minSeverity to filter by severity level.

NameRequiredDescriptionDefault
cwdYesProject root directory
fixNoAuto-fix safe issues (default: false)
pathsNoSpecific path(s) to lint; a string or array (default: '.')
maxItemsNoItem cap; overrides detailLevel
detailLevelNoItem preset: summary 20, normal 100, full (default; also skips the response budget)
minSeverityNoMinimum severity to include (e.g. 'error' drops warnings and info)

Output Schema

NameRequiredDescription
totalNo
errorsYes
retainedNo
truncatedNo
errorCountYes
fixedCountYes
warningCountYes

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 disclosure burden. It covers the return format and compactness, but never states that fix=true writes changes to files, whether lint findings cause a non-zero exit, or that ruff must be available in the environment — significant omissions for a tool with a mutating mode.

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?

Three short sentences, front-loaded with the core action and return shape, with no filler. The 'more compact than raw ruff output' sentence is a useful framing detail, though the final minSeverity sentence duplicates schema 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?

An output schema exists, so return values need not be re-explained, and the schema documents all six parameters. However, with zero annotations the description should compensate for the missing safety/mutation profile of fix mode and the environment expectation; it does not.

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

Parameters3/5

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

Schema description coverage is 100%, including per-parameter docs and enum explanations for detailLevel and minSeverity, so the schema already does the heavy lifting. The description's only parameter remark repeats what the schema says about minSeverity, adding no syntax or interaction detail (e.g. how maxItems overrides detailLevel).

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 ('Run ruff check') and describes the exact return shape (file, line, column, message, rule code). Naming ruff makes it clearly the Python linter among the lint siblings (npm_lint, bash_lint), so an agent can select it 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 Guidelines2/5

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

Only guidance is 'Use minSeverity to filter by severity level', which is a parameter hint rather than a when-to-use rule. There is no statement about when to prefer this over python_typecheck, bash_lint, or raw shelling out, and no warning about when not to use fix mode.

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

python_testPython test (structured)A

Run pytest and return structured test results: suites, pass/fail counts, failure messages. Much more compact than raw test output. Only failures are listed by default; use verbose=true for all tests.

NameRequiredDescriptionDefault
cwdYesProject root directory
pathNoSpecific test path or file to run
patternNoFilter tests by expression (-k pattern)
verboseNoInclude all tests in output (default: only failures)

Output Schema

NameRequiredDescription
suitesYes
summaryYes
retainedNo

TDQS

A3.8/5.0
Behavior3/5

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

With no annotations, the description carries the full burden; it discloses the default output policy (failures only) and touts compactness, but says nothing about prerequisite installation, timeouts, side effects of executing test code, or what happens on collection errors.

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

Conciseness5/5

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

Three short sentences, zero waste, with the purpose and the output-shape benefit front-loaded before the default/verbose detail.

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

Completeness4/5

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

An output schema exists so return values need not be explained, and the description covers the default-vs-verbose behavior; only the lack of any execution-context caveats keeps it short of full marks.

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

Parameters3/5

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

Schema coverage is 100% and each parameter is already documented, including the verbose default; the description merely restates the verbose behavior and adds no format or semantics beyond the schema. Baseline 3 applies.

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

Purpose5/5

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

States a specific verb and resource ('Run pytest') plus what it returns ('suites, pass/fail counts, failure messages'), which cleanly separates it from the other test runners in the sibling list (dotnet_test, npm_test, bash_test) by language/runner.

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 Python-testing context and gives an explicit rule for the verbose flag, but it never states when to reach for this over python_lint, python_typecheck, or a generic run tool, and offers no exclusions.

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

python_typecheckPython type check (structured)A
Read-only

Run mypy and return structured type errors with file, line, column, message, and error code. Much more compact than raw mypy output.

NameRequiredDescriptionDefault
cwdYesProject root directory
pathsNoSpecific path(s) to check; a string or array (default: '.')
maxItemsNoItem cap; overrides detailLevel
detailLevelNoItem preset: summary 20, normal 100, full (default; also skips the response budget)

Output Schema

NameRequiredDescription
totalNo
errorsYes
successYes
retainedNo
truncatedNo
errorCountYes

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, so the safety profile is covered. The description adds that output is structured and compact, which is useful context, but says nothing about exit-code behavior, timeout, missing mypy, or how errors are capped by maxItems/detailLevel.

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, front-loaded with the verb and action, then the value proposition. No 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?

An output schema exists, so return values need not be explained, and the read-only annotation covers safety. The description is sufficient to invoke correctly, with only minor gaps (prerequisites, error handling) remaining.

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

Parameters3/5

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

Schema coverage is 100% and all four parameters are documented in the schema, including the detailLevel preset and maxItems override. The description adds no parameter meaning beyond that, so baseline 3 applies.

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

Purpose4/5

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

States a specific verb and resource: runs mypy and returns structured type errors with named fields. Clearly a type-checking tool distinguishable from python_lint and python_test by the mypy reference, though it does not 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?

Implies use over raw mypy output ('much more compact than raw mypy output') but gives no explicit when-to-use/when-not guidance, no prerequisites such as a mypy config or installation, and no mention of the lint/test siblings.

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

repo_health_summaryRepo health summaryA
Read-only

One-call snapshot of a git working tree: branch, ahead/behind vs upstream, staged/unstaged/untracked counts, recent commits, and the uncommitted diffstat.

NameRequiredDescriptionDefault
cwdNoRepository path
commitsNoNumber of recent commits to include (default 5)

Output Schema

NameRequiredDescription
aheadYes
cleanYes
behindYes
branchYes
stagedYes
changesYes
retainedNo
unstagedYes
untrackedYes
recentCommitsYes

TDQS

A3.8/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, so the safety profile is covered. The description reinforces that this is a read-only aggregate view, but adds nothing about cost (it may scan the working tree), whether it works on a dirty/empty repo, or error behavior — context the annotations don't carry.

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 leads with the capability and packs the enumerated contents efficiently. Zero wasted words.

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

Completeness4/5

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

With an output schema present, the description needn't detail return values, and the enumerated contents give a good preview. It's nearly complete for a read-only snapshot tool; only explicit routing guidance against sibling tools is missing.

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

Parameters3/5

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

Schema description coverage is 100%, so both cwd and commits (with default) are already documented in the schema. The description only alludes to recent commits without adding format or bounds beyond what the schema provides, which is the baseline for full-coverage schemas.

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 ('One-call snapshot of a git working tree') and enumerates exactly what the snapshot contains: branch, ahead/behind, staged/unstaged/untracked counts, recent commits, diffstat. This clearly distinguishes it from the sibling single-facet tools git_status, git_log, and git_diff.

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 'one-call snapshot' hints that this consolidates multiple narrower tools, but the description never explicitly says to prefer it over git_status + git_log + git_diff or when each alternative is better. 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.

result_getGet Retained ResultA
Read-only

Page through a result the response budget trimmed. Pass the retained.id from that response; path selects a field (dotted, e.g. files.0), offset/limit slice an array. Snapshot of the original call, kept for retained.expiresInSec.

NameRequiredDescriptionDefault
idNoRequired. retained.id from a trimmed response
pathNoDotted path into the payload; omit for the whole payload
limitNoDefault 100
offsetNoDefault 0

Output Schema

NameRequiredDescription
idYes
pathYes
toolYes
totalNo
valueNo
offsetYes
retainedNo
capturedAtYes

TDQS

A4.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and openWorldHint=false, so safety is covered. The description usefully adds that this is a snapshot of the original call and that retention is time-limited via retained.expiresInSec, but says nothing about pagination boundaries, what an expired/missing id returns, or how partial slices behave when path is wrong.

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

Conciseness5/5

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

Three tight sentences, front-loaded with the core action, then the input source, then per-parameter meaning, then the retention caveat. Every clause carries information; nothing is repeated from schema or annotations.

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?

An output schema exists, so return values need not be described, and the description covers the inputs, the id source, and the expiry mechanism. It stops short of the error/expiry path, which is the one gap for an agent recovering budget-trimmed data.

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

Parameters4/5

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

Schema coverage is 100%, so baseline is 3. The description earns above baseline by explaining path is dotted (example files.0) and that offset/limit slice an array, which is meaningful operational context the schema's terse 'Default 100'/'Default 0' strings do 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 (page through) and resource (a result trimmed by the response budget), and pins down the entry point (retained.id from that response). An agent immediately understands this is the recovery mechanism for truncated payloads, a role no sibling competes for.

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?

Clearly says to pass retained.id from the trimmed response and explains that the snapshot is only kept for retained.expiresInSec. It gives clear context but never states what to do if the id has expired or what happens without an id, so no explicit exclusions.

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

rgRipgrep searchA
Read-only

Search file contents with ripgrep. Returns files as [file, "line:text", ...] rows (a context line is "line-text"), [file, count] under countPerFile, [file] under filesOnly. Use glob (string or array, '!' to exclude) to filter files, ignoreCase for case-insensitive search, filesOnly for just filenames, countPerFile for match counts per file, maxPerFile to cap hits per file. For 'collect all X' tasks use only:true to return just the matched substrings (one row per hit) — add replace ($1 capture groups) to extract structured values.

NameRequiredDescriptionDefault
globNoFile glob filter(s); a string or array. Prefix with '!' to exclude (e.g. ['*.ts','!*.test.ts'])
onlyNoReturn only the matched substring(s), not the whole line — one row per match. Best for collecting tokens (versions, names, URLs)
pathNoDirectory or file to search (default: cwd)
contextNoLines of context around each match
patternNoRequired. Regex pattern to search for
replaceNoRewrite each match with this template ($1, $2 capture groups) and return the result; implies only-match extraction
filesOnlyNoOnly return filenames, not matched lines
ignoreCaseNoCase-insensitive search
maxPerFileNoCap matches per file (rg --max-count), independent of maxResults — keeps one hot file from dominating
maxResultsNoMax results to return across all files (default 30). When the cap bites, the response reports the true totalMatches so you can decide whether to narrow the pattern or raise the cap
countPerFileNoReturn match counts grouped by file instead of individual matches
fixedStringsNoTreat pattern as literal string
maxLineLengthNoWindow matched line text to ~this many chars centered on the match, so long/minified lines don't dump in full (0 = unlimited, default 120)

Output Schema

NameRequiredDescription
filesYes
retainedNo
truncatedNoPresent only when maxResults cut the matches
matchCountNoMatches returned; with countPerFile, the sum of counts
totalMatchesNo

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, so the safety profile is covered; the description adds real behavioral context — the exact row shapes returned under each mode and the fact that maxResults caps results but reports true totalMatches so the agent can widen or narrow. No mention of auth, performance, or ignore-file behavior, so not 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 with purpose and return shapes, and every sentence conveys usable information. The middle section is a dense comma-and-parenthetical list of flags, which reads more like a compressed cheat sheet than clean prose, costing it the top band.

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 13-parameter tool with an output schema already present, the description covers what structured fields don't: return row formats per mode and the truncation/totalMatches contract. It omits defaults like cwd for path and doesn't address error or no-match behavior, so there is a small residual 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?

Schema coverage is 100%, so baseline is 3; the description earns above that by explaining parameter interactions the schema states only in isolation — replace implies only-match extraction, maxPerFile is independent of maxResults, and glob's '!' exclusion form. Most of the per-parameter detail is still schema-owned.

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 ('Search file contents with ripgrep'), which cleanly separates it from filename-oriented siblings like glob and find_files. It does not explicitly name those siblings as alternatives, so it falls just short of the top band.

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

Usage Guidelines4/5

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

Gives concrete conditional guidance: use glob to filter files, only:true for 'collect all X' tasks, replace with capture groups to extract structured values. Missing an explicit 'use this instead of X when...' routing against sibling search/list tools.

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

runRun a commandA

Run a single command — a binary plus an args array, executed directly without a shell (so no pipes, redirects, or ';'/'&&' in the string) — and return structured output with smart truncation. Pass the binary as command and its arguments as args (e.g. command='npm', args=['test']); for a real shell pipeline run the shell yourself: command='sh', args=['-c', 'a | b > c']. Keeps the last N lines of output by default (where errors typically appear), or the first N with mode='head'. Use for build, test, and lint commands where you need exit code and error details, not full verbose output.

NameRequiredDescriptionDefault
cwdNoWorking directory
argsNoArguments passed directly to the binary (e.g. ['test']). With command='sh', use ['-c', '<shell script>'].
modeNoKeep the last N lines (tail, default) or the first N (head).tail
commandYesThe binary to execute — NOT a shell string (e.g. 'npm', 'git', 'sh'). For pipes/redirects, use command='sh' and put the script in args.
timeoutNoTimeout in ms
collapseNoMerge consecutive repeated lines (timestamps ignored) into the first, marked ' [×N]' (default true). false = output verbatim.
maxBytesNoOptional cap on stdout/stderr byte length (UTF-8).
maxLinesNoMax stdout/stderr lines to keep. 0 = unlimited.

Output Schema

NameRequiredDescription
stderrYes
stdoutYes
elapsedYesWall-clock execution time in milliseconds
exitCodeYes
retainedNo
truncatedYes
stdoutLinesYes

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 disclose the execution model (no shell, so no pipes/redirects/';'), opposite defaults ('Keeps the last N lines ... where errors typically appear') and the head-mode override. It omits the safety profile an arbitrary-command executor needs: no mention that it runs with the agent's user permissions, can mutate the filesystem, or what happens to output/process on timeout.

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 execution model and truncation behavior, and every clause serves usage (examples, shell workaround, mode). The single dense run-on with em-dashes and parentheticals is harder to scan than a short bulleted structure, but there is 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?

An output schema exists, so return values need no explanation; the description covers the exec model, argument passing, truncation defaults and mode switching. Remaining gaps are timeout semantics (process killed? partial output?) and permission/side-effect disclosure for an arbitrary binary executor with 8 parameters.

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

Parameters3/5

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

Schema description coverage is 100%, so every parameter including cwd, timeout, collapse, maxBytes and maxLines is already documented. The description reinforces command/args with examples (command='npm', args=['test']) and restates the tail/head behavior, but adds little semantic detail beyond the schema — baseline 3.

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

Purpose5/5

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

States a concrete verb and resource ('Run a single command — a binary plus an args array') and pins the execution model ('executed directly without a shell'), which cleanly separates it from run_seq and batch. An agent knows exactly what this does before 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?

Gives clear positive guidance ('Use for build, test, and lint commands where you need exit code and error details, not full verbose output') and an explicit escape hatch for shell pipelines via command='sh', args=['-c', ...]. It never names the more specific siblings (npm_test, npm_lint, python_test) that an agent should arguably prefer, so routing between alternatives is still partly inferred.

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

run_seqRun commands in sequenceA

Run an ordered list of labeled commands one after another, stopping at the first failure by default. Use for dependent steps (e.g. build then test then package) where order matters and a later step is pointless if an earlier one fails. Unlike batch (parallel), run_seq is sequential and short-circuits; set stopOnError=false to run every step regardless.

NameRequiredDescriptionDefault
stepsNoRequired. Ordered steps to run sequentially
maxLinesNoMax stdout/stderr lines to keep per step. 0 = unlimited.
stopOnErrorNoStop at the first step with a non-zero exit code (default true).

Output Schema

NameRequiredDescription
stepsYes
elapsedYesTotal wall-clock time in milliseconds
exitCodeYes0 if every step succeeded, else the first failure's code
failedAtYesIndex of the first failing step, or null if all passed
retainedNo

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 full load and does disclose the key behavioral traits: sequencing, fail-fast short-circuit, per-step labels in results, and the exact effect of stopOnError=false. It does not mention that individual steps can time out (schema default 30s) or that output is truncated per step, leaving some execution risk unstated for an arbitrary-command tool.

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

Conciseness5/5

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

Three sentences, front-loaded with the core behavior, then the decision rule, then the sibling contrast and override. No filler and nothing redundant with the schema restated verbatim.

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?

An output schema exists, so return values needn't be explained, and the 3-parameter schema is fully described. What remains thin is execution-risk context an agent might want for a shell-running tool (timeout per step, output truncation via maxLines), though it is discoverable from the schema.

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

Parameters3/5

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

Schema description coverage is 100%, so every parameter including nested step fields is already documented, which sets the baseline at 3. The description reinforces stopOnError's default and semantics but adds no syntax or constraints beyond what the schema says (e.g. non-shell-string command form is only 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 (run) and resource (ordered list of labeled commands) with explicit execution semantics ('one after another, stopping at the first failure'). It also explicitly contrasts with the sibling batch tool, so an agent can distinguish the two without opening either schema.

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

Usage Guidelines5/5

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

Gives an explicit when-to-use case ('dependent steps... build then test then package') and a when-to-use-alternative rule ('unlike batch (parallel), run_seq is sequential and short-circuits'). It further tells the agent when to override the default via stopOnError=false.

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

tf_backend_infoTerraform backend infoA
Read-only

Report the configured backend type and config for an initialized project. Reads .terraform/terraform.tfstate — run init first.

NameRequiredDescriptionDefault
cwdYesTerraform project directory

Output Schema

NameRequiredDescription
typeYes
configYes
retainedNo

TDQS

A4.1/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, so safety is covered. The description adds real context beyond that: the data source is .terraform/terraform.tfstate and the project must be initialized first. It does not describe behavior when the file is missing or what error the agent should expect.

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, front-loaded with the purpose, with the prerequisite attached as a trailing clause. Nothing extraneous.

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

Completeness5/5

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

An output schema exists, so return values need no explanation. For a single-param read-only tool, the purpose, data source, and init prerequisite are all an agent needs to call it correctly.

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

Parameters3/5

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

One required parameter with 100% schema coverage, so the schema already documents 'cwd' as the project directory. The description adds no syntax or path-format detail beyond that baseline.

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

Purpose5/5

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

States a specific verb and resource — 'Report the configured backend type and config' — scoped to 'an initialized project'. An agent can distinguish this from tf_show (state contents) or tf_state_list (resources) 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 Guidelines4/5

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

Gives a clear precondition — 'run init first' — and restricts scope to initialized projects. It doesn't name a sibling alternative for the uninitialized case, so it stops short of full when/when-not guidance.

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

tf_modules_summaryTerraform modules summaryA
Read-only

List the modules used by an initialized Terraform/OpenTofu project (key, source, version). Reads .terraform/modules/modules.json — run init first.

NameRequiredDescriptionDefault
cwdYesTerraform project directory

Output Schema

NameRequiredDescription
countYes
modulesYes
retainedNo

TDQS

A4.3/5.0
Behavior4/5

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

Discloses the underlying data source (.terraform/modules/modules.json) and the init prerequisite, which is meaningful context beyond the readOnlyHint annotation. Return shape is covered by the output schema, so remaining gaps are minor.

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

Conciseness5/5

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

Two tight sentences, zero filler, with the listing purpose front-loaded and the prerequisite trailing as supporting detail.

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

Completeness5/5

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

Everything needed to call it correctly is present: purpose, prerequisite, data source, and a fully covered parameter with an output schema for return values.

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?

With 100% schema coverage the single cwd parameter is already documented as the Terraform project directory. The description's mention of an 'initialized' project adds only slight nuance, so baseline 3 applies.

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

Purpose5/5

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

States a specific verb (List) and resource (modules) plus the exact fields returned (key, source, version) and the scope (an initialized Terraform/OpenTofu project). An agent can readily distinguish it from siblings like tf_state_list or tf_providers.

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

Usage Guidelines4/5

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

Provides a concrete precondition — the project must be initialized and init must have been run — before the tool will work. It does not, however, explicitly compare against alternatives or state when not to use it.

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

tf_outputsTerraform outputsA
Read-only

List Terraform/OpenTofu outputs as [name, value] pairs; a sensitive output is redacted to [name] alone.

NameRequiredDescriptionDefault
cwdYesTerraform project directory
binaryNoterraform or tofu (default $TF_BINARY, else terraform)

Output Schema

NameRequiredDescription
outputsYes
retainedNo

TDQS

A3.6/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, so the safety profile is covered; the description adds genuinely new behavioral context — that sensitive outputs are redacted to name-only — which changes how an agent should interpret and use the results. It doesn't cover failure modes (uninitialized project, no outputs defined), keeping 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.

Conciseness5/5

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

A single sentence, front-loaded with the verb and resource, with the redaction clause appended where it matters. Zero 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?

An output schema exists so return values needn't be spelled out, and the description still flags the sensitive-output shape change. For a two-param read-only tool this is nearly complete; only the interaction with sibling tf_* tools is left unaddressed.

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

Parameters3/5

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

Schema coverage is 100% with both parameters described and an enum on binary, so the schema carries parameter meaning. The description adds nothing about cwd resolution or binary selection beyond what the schema and its $TF_BINARY default note already provide — baseline 3.

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 ('List Terraform/OpenTofu outputs') and even sketches the return shape ([name, value] pairs). It doesn't explicitly distinguish itself from sibling tools like tf_show or tf_state_list, so an agent must infer the split, but the resource itself is unambiguous.

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

Usage Guidelines2/5

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

No guidance on when to use this versus tf_show, tf_state_list, or tf_plan_summary, and no mention of prerequisites (initialized project, state available). The 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.

tf_plan_summaryTerraform plan summaryA
Read-only

Run terraform plan and return a structured summary of changes (add/change/destroy counts and affected resources). Each action is create, update, delete, replace or read; a replace counts in add and destroy, as terraform's Plan line does.

NameRequiredDescriptionDefault
cwdYesTerraform project directory
binaryNoterraform or tofu (default $TF_BINARY, else terraform)
targetNoTarget specific resource
varFileNoVar file to use
planFileNoPath to a saved plan file (from `terraform plan -out`); summarized via `show -json` instead of re-running plan.

Output Schema

NameRequiredDescription
addYes
changeYes
changesYes
destroyYes
retainedNo
noChangesYes

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, and the description is consistent with that — it only reads/plans. The description earns credit by disclosing non-obvious output semantics: a replace is counted in both add and destroy, matching Terraform's own Plan line, which prevents an agent from misreading the counts. It omits runtime, lock contention and failure behavior, which keeps it out of the top band.

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

Conciseness5/5

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

Two tight sentences, front-loaded with the action and result shape, followed by the one counting detail that genuinely needs stating. No filler or restatement of the title.

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 an output schema present and annotations covering safety, the description supplies the one interpretive rule an agent needs to read the summary correctly. It is nearly complete; only prerequisites and error/runtime behavior for a potentially slow command are left unaddressed.

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

Parameters3/5

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

Schema description coverage is 100%, including the binary default chain and the planFile/show -json behavior, so the schema already carries parameter meaning. The description adds the replace double-counting rule but no additional per-parameter semantics beyond what the schema states.

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: run `terraform plan` and return a structured change summary with add/change/destroy counts. It also pins down the action vocabulary (create/update/delete/replace/read), which no sibling tool covers. It stops short of naming a sibling such as tf_show, so the boundary between 'run a plan' and 'show a plan' is left implicit.

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 planFile sentence implicitly tells the agent when to summarize a saved plan instead of re-running one, which is a real usage branch. There is no explicit when-to-use/when-not guidance versus tf_show, tf_validate_summary or the other tf_* siblings, and no prerequisites (init, backend auth, credentials) are mentioned.

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

tf_providersTerraform providersC
Read-only

List the Terraform/OpenTofu version and selected provider versions for the project.

NameRequiredDescriptionDefault
cwdYesTerraform project directory
binaryNoterraform or tofu (default $TF_BINARY, else terraform)

Output Schema

NameRequiredDescription
versionYes
retainedNo
providersYes

TDQS

C2.9/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true, so the safety profile is covered. The description adds essentially nothing beyond that — no note on how it invokes the binary, whether it requires an initialized project, or what 'selected' providers means.

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

Conciseness4/5

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

A single well-formed sentence with no filler, front-loading the action and resource. It is arguably too terse rather than wasteful.

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?

An output schema exists, so return values needn't be explained. However, for a tool that shells out to terraform/tofu, the description is silent on whether the project must be initialized or what 'selected provider versions' refers to, leaving minor gaps.

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

Parameters3/5

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

Schema description coverage is 100%, so cwd and binary are fully documented in the schema. The description adds no parameter detail beyond a vague reference to 'the project', which is the baseline for complete schema coverage.

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

Purpose4/5

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

States a specific verb ('List') and resource (Terraform/OpenTofu version and selected provider versions), scoped to the project. It is distinguishable from siblings like tf_show or tf_workspaces, though it never names them directly.

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

Usage Guidelines2/5

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

No indication of when to use this versus related tools such as tf_show or tf_backend_info, and no prerequisites or exclusions. Usage is only implied by the noun phrase 'for the project'.

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

tf_showTerraform showB
Read-only

Show current Terraform state as structured JSON. Returns resource summary with types and attributes.

NameRequiredDescriptionDefault
cwdYesTerraform project directory
binaryNoterraform or tofu (default $TF_BINARY, else terraform)

Output Schema

NameRequiredDescription
countYes
retainedNo
resourcesYes

TDQS

B3.2/5.0
Behavior3/5

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

readOnlyHint=true already declares this is a safe read, so the description's job is to add context. It does note the output is structured JSON with resource types and attributes, which is mild value, but it says nothing beyond that – no pagination, size limits, or behavior when no state exists. With annotations carrying the safety profile, a 3 is appropriate.

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 sentences, front-loaded with the primary action and output format; zero waste. The second sentence partially restates the return shape that the output schema already encodes, but it is not bloated.

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?

An output schema exists, so return values need not be described, and the readOnly annotation covers safety. However, given many sibling tf_* tools that also inspect state, the description leaves the selection decision under-specified, which is the main gap for an agent choosing a tool.

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

Parameters3/5

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

Schema coverage is 100%, and both parameters (cwd, binary with enum and default fallback) are fully documented in the schema. The description adds no parameter meaning beyond that, which is the expected baseline when the schema does the work.

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: 'Show current Terraform state as structured JSON', plus what is returned (resource summary with types and attributes). It does not explicitly distinguish itself from the close sibling tf_state_list, which likely also reads state, so the boundary between the two is left to inference.

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 rather than tf_state_list or the other tf_* tools, and no prerequisites or exclusions are mentioned. The agent must infer usage 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.

tf_state_listTerraform state listA
Read-only

List resources in Terraform state. Returns the resource addresses, plus a byType rollup once there are more than 20 (type, name, and module are readable from each address).

NameRequiredDescriptionDefault
cwdYesTerraform project directory
binaryNoterraform or tofu (default $TF_BINARY, else terraform)

Output Schema

NameRequiredDescription
byTypeNo
retainedNo
resourcesYes

TDQS

A3.6/5.0
Behavior4/5

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

readOnlyHint=true already establishes the safety profile, so the description only needs to add operational context — and it does, disclosing that a byType rollup appears once results exceed 20 entries. That threshold behavior is not derivable from the annotations and directly affects how an agent interprets the response. It does not mention failure modes (missing state file, init requirements), which keeps it off 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.

Conciseness5/5

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

Two sentences, zero filler, with the core purpose front-loaded before the return-shape detail. Every clause conveys actionable information.

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

Completeness4/5

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

The tool is read-only, has a fully documented two-parameter schema, and ships an output schema, so the description need not explain return values; the rollup note is a bonus. Coverage is slightly incomplete only in that prerequisites (initialized project, existing state) are unstated.

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

Parameters3/5

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

Schema description coverage is 100% for both parameters (cwd, binary with enum and default documented), so the schema already carries parameter meaning. The description adds nothing about cwd resolution or the terraform/tofu binary choice, making this a baseline 3.

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 ("List resources in Terraform state") and specifies the unit returned (resource addresses), which is meaningfully different from what tf_show or tf_outputs return. It stops short of naming any sibling to contrast with, 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 when-to-use or when-not-to-use guidance, and no alternative tool is named despite several neighbors (tf_show, tf_modules_summary, tf_outputs) that could plausibly be confused with an inventory listing. The intended context is only implied by the tool name.

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

tf_validate_summaryTerraform validate summaryA
Read-only

Validate the Terraform/OpenTofu config and return a compact pass/fail summary with diagnostics.

NameRequiredDescriptionDefault
cwdYesTerraform project directory
binaryNoterraform or tofu (default $TF_BINARY, else terraform)

Output Schema

NameRequiredDescription
validYes
retainedNo
errorCountYes
diagnosticsYes
warningCountYes

TDQS

A3.6/5.0
Behavior3/5

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

The readOnlyHint annotation is consistent with the description, and the phrase 'compact pass/fail summary with diagnostics' usefully characterizes the output. However it does not disclose operational traits such as whether validation requires prior init, provider/network access, or how long it may take, which are the real behavioral risks here.

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 sentence, front-loaded with the action and ending with the return shape. There is no filler and nothing to trim.

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 two-parameter tool with an output schema and a read-only annotation, the description covers what it does and what comes back. Only the operational prerequisites for running validation are missing.

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

Parameters3/5

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

Schema coverage is 100%, so both parameters are already documented in the schema and the baseline applies. The description's mention of Terraform/OpenTofu loosely corroborates the binary enum but adds no new syntax or format guidance.

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 (validate) and resource (Terraform/OpenTofu config) plus what it returns. It does not explicitly differentiate itself from neighboring tf_ tools such as tf_plan_summary, so it stops short of a 5.

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

Usage Guidelines3/5

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

Usage is only implied by the word 'validate' — an agent can infer it belongs before a plan, but the description names no alternatives and gives no when/when-not condition. Nothing steers the agent away from tf_plan_summary for syntax-only checks.

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

tf_workspacesTerraform workspacesA
Read-only

List Terraform workspaces with current workspace marked.

NameRequiredDescriptionDefault
cwdYesTerraform project directory
binaryNoterraform or tofu (default $TF_BINARY, else terraform)

Output Schema

NameRequiredDescription
currentYes
retainedNo
workspacesYes

TDQS

A3.5/5.0
Behavior3/5

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

readOnlyHint=true already tells the agent this is a safe read operation, so the description's added detail that the current workspace is marked is modest but useful output context. It does not mention error behavior outside a Terraform directory or whether the workspace list is cached.

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

Conciseness4/5

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

A single front-loaded sentence with no wasted words. It is appropriately sized for a simple read-only list operation.

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 readOnlyHint, 100% schema coverage, and an output schema, the description is largely complete for a simple workspace-listing tool. The only mild gap is the absence of guidance on when to prefer this over tf_state_list.

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

Parameters3/5

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

Schema coverage is 100%, with cwd and binary both documented in the schema, so the baseline is 3. The description adds no additional parameter meaning beyond what the schema provides.

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

Purpose4/5

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

States a specific verb ("List") and resource ("Terraform workspaces"), plus a useful detail that the current workspace is marked. It does not distinguish itself from sibling tools like tf_state_list, 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 listing purpose implies when to use it, but there are no explicit conditions, exclusions, or named alternatives among the many tf_* siblings. An agent must infer that this is the workspace inventory tool.

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

treeDirectory treeA
Read-only

Show directory structure as a compact tree. Returns structured nodes instead of ASCII art. Use dirsOnly for directory-only view, pattern to filter by glob, maxDepth to control depth.

NameRequiredDescriptionDefault
pathYesRoot directory
excludeNoPipe-separated patterns to exclude (default: node_modules|.git|dist|__pycache__|.venv|.next|.terraform)
patternNoOnly show files matching glob pattern
dirsOnlyNoOnly show directories
maxDepthNoMax depth (default 3)

Output Schema

NameRequiredDescription
dirsYes
filesYes
pathsYes
retainedNo

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, so the safety profile is covered. The description adds a useful behavioral detail — returning structured nodes rather than ASCII art — but with an output schema present that detail is somewhat redundant, and it omits other behavioral context such as the default excluded paths (left to the schema).

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

Conciseness5/5

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

The description is three short sentences with zero waste. Purpose is front-loaded, output format follows, and parameter options come last — each sentence earns its place.

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

Completeness4/5

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

For a read-only tree tool with full schema coverage, annotations, and an output schema, the description covers what the tool does, its output form, and key options. The main missing piece is routing guidance versus sibling tools like ls or find_files, but otherwise an agent has enough to call it correctly.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents all five parameters. The description repeats semantics for dirsOnly, pattern, and maxDepth without adding syntax or constraints beyond the schema, and it does not mention the exclude parameter. Baseline 3 is appropriate when the schema does the heavy lifting.

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: 'Show directory structure as a compact tree.' It further clarifies the output form ('structured nodes instead of ASCII art'), which distinguishes it from an ASCII tree or raw listing. However, it does not explicitly differentiate itself from sibling tools like ls, find_files, or glob, 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 Guidelines3/5

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

The description gives option-level guidance ('Use dirsOnly for directory-only view, pattern to filter by glob, maxDepth to control depth'), but it does not state when to use this tool versus alternatives such as ls, find_files, or glob. Usage is implied by the purpose rather than explicitly guided.

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

yqyq YAML processorA
Read-only

Query and transform YAML files using yq expressions (mikefarah/yq). Outputs as JSON for structured consumption. Far more compact than reading a full YAML file.

NameRequiredDescriptionDefault
fileNoPath to a YAML file
inputNoRaw YAML string to process (alternative to file)
expressionNoyq expression (default: '.').
outputFormatNoOutput format (default: 'json' for structured output)json

Output Schema

NameRequiredDescription
formatYes
resultYes
retainedNo

TDQS

A3.5/5.0
Behavior3/5

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

With readOnlyHint=true already declaring a safe read operation, the bar is lower. The description adds that output is emitted as JSON for structured consumption, which is useful context beyond the annotation, but says nothing about error behavior or expression limitations. Adequate but not rich.

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

Conciseness4/5

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

Three short sentences, front-loaded with the core action and engine. The compactness note earns its place as a selection rationale; 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?

An output schema exists and the schema fully documents parameters, so the description needn't explain return shapes. For a read-only query tool, the definition covers action, engine, and output format adequately, with only minor gaps around usage selection.

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

Parameters3/5

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

Schema coverage is 100%, so all four parameters (file, input, expression, outputFormat) are already documented in the schema. The description adds no parameter-level detail beyond naming 'yq expressions,' so the baseline 3 is appropriate.

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

Purpose4/5

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

States a specific verb+resource (query/transform YAML) and names the underlying engine (mikefarah/yq), which distinguishes it from the jq sibling that handles JSON. The purpose is clear, though it doesn't explicitly contrast itself with jq or describe the transformation scope.

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?

'Far more compact than reading a full YAML file' implies preferring this over cat for YAML inspection, which gives some usage direction. However, there is no explicit when-to-use/when-not guidance or named alternative (e.g., 'use jq for JSON'), leaving it 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.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 65 tool updatesv5.0.1
    • First observedargo_app_detail
    • First observedargo_app_diff
    • First observedargo_app_health_summary
    • First observedargo_apps
    • First observedbash_lint
    • First observedbash_syntax_check
    • First observedbash_test
    • First observedbatch
    • First observedcat
    • First observedcheck_environment
    • First observeddotnet_build
    • First observeddotnet_test
    • First observeddu
    • First observedfind_files
    • First observedgh_pr_checks
    • First observedgh_run_failure_summary
    • First observedgit_branches
    • First observedgit_diff
    • First observedgit_diff_content
    • First observedgit_log
    • First observedgit_pr_context
    • First observedgit_status
    • First observedglab_ci_status
    • First observedglab_pipeline_failure_summary
    • First observedglob
    • First observedhelm_list
    • First observedhelm_release_triage
    • First observedhelm_status
    • First observedhelm_values
    • First observedjq
    • First observedkube_contexts
    • First observedkube_deployment_status
    • First observedkube_diagnose_pod
    • First observedkube_events_summary
    • First observedkube_get
    • First observedkube_logs
    • First observedkube_pod_failure_summary
    • First observedliquibase_status
    • First observedliquibase_update_sql
    • First observedliquibase_validate
    • First observedlist_guidance
    • First observedls
    • First observednpm_lint
    • First observednpm_test
    • First observednpm_typecheck
    • First observedoutline
    • First observedpython_lint
    • First observedpython_test
    • First observedpython_typecheck
    • First observedrepo_health_summary
    • First observedresult_get
    • First observedrg
    • First observedrun
    • First observedrun_seq
    • First observedtf_backend_info
    • First observedtf_modules_summary
    • First observedtf_outputs
    • First observedtf_plan_summary
    • First observedtf_providers
    • First observedtf_show
    • First observedtf_state_list
    • First observedtf_validate_summary
    • First observedtf_workspaces
    • First observedtree
    • First observedyq

TDQS

B3.3/5.0

Scored across 65 tools

Disambiguation3/5

Most tools target a distinct tool/resource (kube vs helm vs argo vs tf vs per-language lint/test), but several pairs are near-neighbors: find_files vs glob, git_diff vs git_diff_content, tf_state_list vs tf_show, and the cluster of '*_health_summary'/'*_failure_summary'/'*_diagnose' triage tools overlap conceptually with the plain getters they wrap. Descriptions do resolve most of these, but at 65 tools an agent must read carefully to avoid picking e.g. kube_get over kube_diagnose_pod when a diagnosis is wanted.

Naming Consistency3/5

Everything is snake_case, which is good, but the prefix/verb ordering is mixed: domain-prefixed noun-first (git_status, kube_get, tf_plan_summary, argo_app_diff) coexists with verb-first (list_guidance, check_environment, result_get) and bare Unix-style names (ls, tree, du, rg, glob, cat, jq, yq, run, batch). Readable, but not a single predictable pattern.

Tool Count2/5

65 tools is very heavy, even for a broad shell/devops toolbox spanning git, k8s, Terraform, ArgoCD, Helm, four language toolchains, and CI. Each tool is defensible in isolation, but the surface invites selection errors and could be consolidated (e.g. per-language lint/typecheck/test trios, summary vs getter variants).

Completeness4/5

Read/inspect coverage is deep across every advertised domain (files, git, Terraform, k8s, ArgoCD, Helm, CI, language toolchains), and run/batch act as an escape hatch for anything missing. Gaps are mostly write-side: no git mutations (commit/checkout/push), no kube apply/scale/exec, no file edit—though run largely works around them.

Maintenance

ActivityMaintained
ResponsivenessSlow

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    A
    maintenance
    Provides MCP servers that wrap common developer tools such as git, npm, Docker, Kubernetes, and test runners, returning schema-validated structured JSON instead of raw terminal text. This lets AI agents consume typed, token-efficient results directly without brittle string parsing or platform-dependent formatting issues.
    0
    MIT
  • A
    license
    Not graded
    quality
    A
    maintenance
    Wraps developer tools like git, npm, Docker, and test runners to return clean, schema-validated JSON instead of raw terminal text. This lets agents use typed, token-efficient results directly without brittle string parsing.
    0
    MIT
  • A
    license
    Not graded
    quality
    A
    maintenance
    Enables AI agents to work with developer tools such as git, npm, Docker, and test runners through structured, schema-validated JSON outputs. Reduces token usage and eliminates fragile terminal text parsing for reliable cross-platform workflows.
    0
    MIT
  • A
    license
    Not graded
    quality
    A
    maintenance
    Enables AI agents to invoke common developer tools such as git, npm, Docker, and test runners and receive clean, schema-validated JSON instead of fragile terminal text, reducing token usage and parsing errors.
    0
    MIT