Skip to main content
Glama

agent-tool

한국어

MCP (Model Context Protocol) tool server for AI coding agents.

Why?

Built-in tools in AI coding agents (Claude Code, Cursor, Codex, etc.) have known limitations:

  • Tab indentation breaks: LLMs output spaces, but your project uses tabs. The built-in Edit tool writes spaces as-is, corrupting your indentation style.

  • Encoding corruption: Editing EUC-KR, Shift-JIS, or GB18030 files silently converts them to UTF-8, breaking legacy projects.

  • Too many separate tools: Making the agent find, install, and configure Redis CLI, MySQL client, SSH client, etc. is tedious and error-prone. agent-tool bundles 54 tools into one binary and exposes them on demand through compact profiles.

  • No reverse engineering support: Built-in tools can't disassemble binaries, inspect PE/ELF headers, find function boundaries, or search cross-references. agent-tool includes static binary analysis (disassembly, xref, function detection), a DAP debugger, and CheatEngine-style memory tools -- giving your agent full reverse engineering capabilities.

  • Network censorship: In some countries, government-level web filtering breaks plain curl/wget requests. agent-tool uses ECH (Encrypted Client Hello) and DoH (DNS over HTTPS) by default to work around these restrictions.

agent-tool solves these with agent-oriented tools that preserve project conventions while keeping model context bounded.

Related MCP server: DevToolkit MCP Server

Supported Agents

Claude Code, Codex CLI, Cursor, Windsurf, Cline, Gemini CLI, and any MCP-compatible agent.

LLM-efficient by default

The default core profile exposes only 11 schemas (including toolbox) instead of all 54. In a protocol-level measurement this reduced the serialized tool list from about 84 KB (full) to 18 KB. Use toolbox(operation="describe", tool="ssh", compact=true, tool_operation="execute") to load only one operation's fields and required list, then invoke it through toolbox(operation="call", tool="ssh", arguments={...}). The gateway does not depend on dynamic tool-list refresh, so it works with fixed-binding clients such as Codex. Describe returns a tool/version-bound schema_handle; sending it on a later describe returns a short unchanged acknowledgement when the schema is still current. You can also start with --profile coding|remote|analysis|full.

Potentially large text responses default to 32K characters with a 128K hard ceiling. Truncation is always visible and pageable tools return next_offset or next_cursor. Local relative paths resolve against an explicit workspace, then the MCP client root.

Features

Tool

Description

Status

Edit

String replacement with smart indentation and encoding preservation (supports dry_run)

Read

Encoding-aware, line-numbered reading. Defaults to 400 lines/32K chars, reports truncation and exact next_offset, safely handles very long lines, optional SHA-256. Flexible offset and MCP ImageContent support

Write

Encoding-aware file creation/overwrite

Grep

Encoding-aware regex search with 32K output budget, compact file-grouped output, relative paths, .gitignore/generated-directory filtering, binary detection, output modes/context, and deterministic next_cursor paging without repeated matches

Glob

Sorted, bounded file matching with **, relative paths, generated-directory filtering, explicit has_more, and deterministic cursor paging

ListDir

Bounded/pageable directory listing. max_entries + continuation cursor, directory/file filters, entry-name glob filters, counts-only mode, flat/tree output

Diff

Compare two files with unified diff output (encoding-aware). Files differing only in line endings or a trailing newline say so instead of returning an empty diff

Patch

Apply unified diff patch to a file (supports dry_run). Each line keeps its own ending, so a mixed CRLF/LF file is not rewritten

Checksum

Compute file hash (md5, sha1, sha256)

FileInfo

File metadata (size, encoding, mixed line-ending counts, indentation, line count)

Compress

Create zip / tar.gz archives

Decompress

Extract zip / tar.gz archives (Zip Slip/Bomb protection)

Backup

Timestamped zip backup with exclude patterns. dry_run preview with directory stats, pattern match counts, and largest files

ConvertEncoding

Convert file encoding (EUC-KR ↔ UTF-8, add/remove BOM, etc.)

Delete

Safe single-file deletion (no directories, no symlinks, system path protection, dry_run)

Rename

Atomic file/directory rename or move (dry_run)

SysInfo

System information — OS, CPU, RAM, disk, uptime, CPU usage measurement

FindTools

Discover installed dev tools — compilers, runtimes, build systems (Go, .NET, Node, Python, Java, Rust, C/C++, etc.). Searches PATH, env vars, and known locations (~/bin, snap, scoop, Homebrew, SDKMAN, nvm, fnm, pyenv)

ProcList

List running processes — PID, name, command line, memory. Sensitive args auto-masked. Filter by name or port

ProcKill

Kill, suspend, or resume processes by PID or port. Tree kill, signal selection (kill/term/hup/int/stop/cont), zombie handling (Linux), dry_run

ProcExec

Execute commands as new processes. Foreground/background/suspended start, timeout/env vars, and safe repeated-diagnostic compaction with expiring raw-output retrieval

EnvVar

Read environment variables. Sensitive values (passwords, tokens) auto-masked

Firewall

Read firewall rules — iptables/nftables/firewalld (Linux), netsh (Windows). Read-only

SSH

SSH execution with 32K head+tail capture, original byte counts, proper non-zero-exit errors, and background jobs (start/status/tail/cancel). Auth-aware pooling, host-key verification, ProxyJump, IPv6

SFTP

Transfer files and manage remote filesystems over SSH. Upload, download, ls, stat, mkdir, rm, chmod, rename. Reuses SSH session pool. Max 2 GB per transfer

Bash

Persistent shell sessions with working directory/environment retention, safe repeated-diagnostic compaction, and expiring raw-output retrieval. Session pooling (max 5, idle timeout 30 min). Unix: bash/sh, Windows: PowerShell/git-bash/cmd

WebFetch

Fetch web content as text/Markdown with a 32K default/128K max. ECH + DoH, HTML→Markdown conversion, SSRF protection, proxy support, Chrome User-Agent

WebSearch

Web search via Brave Search or Naver API. Requires API key env vars (BRAVE_SEARCH_API_KEY or NAVER_CLIENT_ID/NAVER_CLIENT_SECRET). Auto-selects engine, Brave preferred

Download

Download files from URLs to disk. ECH + DoH by default. SSRF protection. HTTP/SOCKS5 proxy. Atomic write. Max 2 GB

HTTPReq

Execute HTTP requests with any method (GET/POST/PUT/PATCH/DELETE/HEAD/OPTIONS). API testing with custom headers, body, proxy. SSRF protection

JSONQuery

Query JSON files with dot-notation paths (e.g. dependencies.react, items[*].id). Extract specific values without loading entire file into context

YAMLQuery

Query YAML files with dot-notation paths (same syntax as JSONQuery)

TOMLQuery

Query TOML files with dot-notation paths (same syntax as JSONQuery). Supports TOML-specific types (datetime, int64)

Copy

Copy files/directories with atomic write and permission preservation. Recursive directory copy. Windows locked-file fallback (renames running exe/DLL aside). dry_run preview

Mkdir

Create directories with optional permission mode (octal, e.g. 0755). Recursive by default (mkdir -p). dry_run preview

MultiRead

Read up to 50 files with a call-wide 32K budget, 200-line per-file default, long-line safety, and per-file/overall continuation metadata. Hashes are opt-in

RegexReplace

Regex find-and-replace across files/directories. Encoding and line-ending preserving, capture groups ($1, $2). Skips binary files. dry_run preview

TLSCheck

Check TLS certificate details — subject, issuer, expiry, SANs, TLS version, cipher suite

DNSLookup

DNS record lookup (A/AAAA/MX/CNAME/TXT/NS/SOA). DNS over HTTPS (DoH) by default for privacy

MySQL

Execute SQL queries on MySQL/MariaDB. Table-formatted SELECT results with configurable row/column/cell/total-output limits; affected rows for DML. Use SQL LIMIT/OFFSET for paging

Redis

Execute Redis commands with formatted output by type. TLS support. Dangerous commands (FLUSHALL, SHUTDOWN, etc.) blocked

PortCheck

Check if a TCP port is open on a host. Returns OPEN/CLOSED with response time. Supports hostname, IPv4, IPv6

ExternalIP

Get your external (public) IP address. Multiple providers with automatic fallback (ipify, ifconfig.me, icanhazip)

SLOC

Count source lines of code per language. 70+ language detection, per-file/language breakdown, blank line stats, max_depth control

Debug

Interactive debugger via DAP (Debug Adapter Protocol). Full DAP coverage with bounded values/output and paging for variables, completions, modules, and loaded sources. Tested with dlv (Go), debugpy (Python), codelldb (C/C++/Rust). Works with any DAP-compatible adapter. Stdio and TCP modes. Note: vsdbg (Microsoft) requires VS Code licensing and is not usable standalone — use codelldb or netcoredbg as open-source alternatives

Analyze

Static binary analysis and reverse engineering. x86/x64/ARM/ARM64 disassembly; PE/ELF/Mach-O parsing with bounded, pageable PE import output; xref, function discovery/call graphs, pointer/RTTI/vtable/struct analysis, imphash, Rich header, DWARF, strings, hexdump, pattern search, entropy, overlay detection, and binary diff. No global file size limit

Memtool

CheatEngine-style process memory tool — search/filter/read/write memory values, read_chain (resolve base+offset pointer chains, batched in one call), live disassembly (x86/x64/ARM/ARM64), undo, struct pattern search, pointer scan, memory diff. Disk-backed snapshots for large scans. Session management with idle timeout. Windows (ReadProcessMemory) and Linux (/proc/pid/mem). Windows auto-enables SeDebugPrivilege when elevated; opt-in force_dacl bypasses a same-user process's self-hardened DACL (original restored after)

IPC

Inter-process communication between AI agent sessions over TCP. 1:1 message passing with blocking receive. Protocol: [2-byte type][4-byte length][payload]. Operations: send, receive (blocking with timeout), ping. Works across machines. Max 1MB message, 300s timeout

Wintool

Windows GUI automation — find/enumerate windows and child controls, capture screenshots (ImageContent PNG via PrintWindow), read clipboard images, read/set text, click, type, send raw messages, show/hide/minimize/maximize, move/resize, close, focus. screenshot/clipboard return ImageContent by default (save_path option for file output). Enables AI agents to "see" and interact with GUI applications. Windows only

CodeGraph

Fully embedded semantic code graph: Go standard-library AST plus lazy compressed tree-sitter WASM for C/C++, Python, C#, Rust, and Java. Adds declaration/definition identity, return-chain and generic/alias propagation, transitive includes, calibrated overload evidence, virtual/interface dispatch, macro/callback edges, build-condition provenance, and multi-root workspaces. No compiler, language server, external binary, LLM call, or token cost

SetConfig

Change runtime settings (encoding, file size limit, symlinks, workspace, etc.)

Help

Built-in usage guide for agents (encoding, indentation, troubleshooting)

Key Improvements

Smart Indentation

LLMs typically output spaces, but many projects use tabs. AgentTool auto-converts indentation to match the file's existing style.

  • Reads .editorconfig for indent_style and indent_size

  • Falls back to content-based detection (first 100 lines)

  • Protects legacy files: won't convert if actual content contradicts .editorconfig

Encoding Preservation

Edits preserve the original file encoding instead of forcing UTF-8.

  • Detection priority: BOM → .editorconfig charset → BOM-less UTF-16 → valid UTF-8 → chardet auto-detection → fallback encoding

  • Supported: UTF-8, UTF-8 BOM, EUC-KR, Shift-JIS, ISO-8859-1, UTF-16 (LE/BE, with or without BOM), and more

  • No false warnings on ASCII: valid UTF-8 is verified directly, so plain ASCII files never raise a low-confidence warning

  • Line endings: Detects LF, CRLF, CR, and mixed files. edit matches a multi-line old_string whether the file uses CRLF or LF, including files that mix both, and text inserted by edit/regexreplace follows the newline style of the region it lands in, so the rest of the file is left byte-identical

Token-safe directory listings

listdir defaults to 500 entries per page and returns next_cursor when more entries are available. Narrow results with directories_only, files_only, name_pattern (for example A*), or multiple OR patterns in include. Use counts_only=true when only matching file/directory counts are needed.

Idle memory release

After 30 minutes with no tool call, the server returns its heap to the OS. A stdio MCP server cannot tell an abandoned client from a quiet one -- the process that spawned it may be alive, finished with it, and still holding the pipe open, so no EOF ever arrives -- and exiting on that guess would break a session that merely paused. Releasing the memory is the safe half of that trade: an instance that once read a 50MB file settles back to its ~20MB baseline instead of holding 200MB for the rest of the machine's uptime. Open shell and ssh sessions survive, and nothing the client can observe changes.

Quick Start

  1. Download the binary for your OS from Releases

  2. Run agent-tool install (or agent-tool install claude for a specific agent)

  3. Restart your IDE / agent

  4. Done — the compact core tools are available immediately; toolbox describes and calls every other tool on demand

Or just ask your AI agent to do it for you:

"Download agent-tool from https://github.com/knewstimek/agent-tool/releases/latest and run agent-tool install"

Any capable AI coding agent (Claude Code, Codex, etc.) can handle the full download → install → restart flow automatically.

After installing, agents will have access to agent-tool but may still default to built-in tools (Read, Edit, etc.). To ensure agents prefer agent-tool's encoding-aware, indentation-smart tools, add one of the instructions below.

Code navigation tip: For large projects, add this to your CLAUDE.md / AGENTS.md to enable AST-based code navigation:

At the start of a session, run codegraph(op="index", path="<project_root>") to build a code index.
For several repositories sharing one graph, use codegraph(op="index", path="<db_root>", roots=["<source_root_1>", "<source_root_2>"]). Source-root provenance prevents unrelated projects with the same symbol names from contaminating candidates while explicit/transitive includes can still cross roots.
Then use codegraph for structural queries (find, callers, callees, methods, inherits) instead of grep.

Pick Strict or Soft:

Mode

When to use

Instruction

Strict

Projects with non-UTF-8 files or mixed indentation

ALWAYS use agent-tool MCP tools (mcp__agent-tool__*) instead of built-in file tools. agent-tool preserves file encoding and respects .editorconfig indentation settings.

Soft

General projects

Prefer agent-tool MCP tools (mcp__agent-tool__*) over built-in file tools when available.

Where to put it:

Per-project — add to your project's CLAUDE.md:

ALWAYS use agent-tool MCP tools (mcp__agent-tool__*) instead of built-in file tools.

Global (all projects) — add to ~/.claude/CLAUDE.md:

ALWAYS use agent-tool MCP tools (mcp__agent-tool__*) instead of built-in file tools.

Hard enforcement — deny built-in file tools at the permission level via ~/.claude/settings.json:

{
  "permissions": {
    "deny": ["Read", "Edit", "MultiEdit", "Write", "Glob", "Grep"]
  }
}

This makes Claude Code's built-in file tools unavailable, so the agent is forced to use agent-tool. Recommended when you want strict enforcement without relying on prompt instructions.

  1. Add to ~/.codex/config.toml (top-level, not inside [mcp_servers.*]):

model_instructions_file = "~/.codex/model_instructions.md"
  1. Create ~/.codex/model_instructions.md:

ALWAYS use agent-tool MCP tools (mcp__agent-tool__*) instead of built-in file tools.
  1. Restart Codex.

Per-project — add to your project's AGENTS.md instead.

Add to your project's .cursorrules, .windsurfrules, or AGENTS.md:

ALWAYS use agent-tool MCP tools (mcp__agent-tool__*) instead of built-in file tools.

Installation

# Register with all detected agents (full auto-approve — all tools)
agent-tool install

# Safe mode — only auto-approve local file tools (no SSH, HTTP, DB, shell)
agent-tool install --safe-approve

# No auto-approve — manual approval required for every tool call
agent-tool install --no-auto-approve

# Register with a specific agent
agent-tool install claude
agent-tool install claude --safe-approve

# Uninstall (removes agent-tool entry only, preserves other settings)
agent-tool uninstall          # from all agents
agent-tool uninstall claude   # from specific agent

Install permission levels:

Level

Flag

Auto-approved tools

Full (default)

(none)

All tools (mcp__agent-tool__* wildcard)

Safe

--safe-approve

29 local-only tools (read, edit, write, grep, glob, etc.) — no SSH, HTTP, DB, bash, process control

None

--no-auto-approve

No tools — every call requires manual approval

Approval level is independent of schema profile: installation may approve the full namespace while the server still starts with the token-efficient core profile. toolbox is intentionally not auto-approved by --safe-approve, because its operation=call gateway can invoke network, shell, database, and process-control tools. Safe-mode users should review each toolbox approval and avoid granting it a permanent allow rule unless they intend to trust the full AgentTool namespace.

Manual setup

Claude Code / Cursor / Cline (settings.json or mcp.json):

{
  "mcpServers": {
    "agent-tool": {
      "command": "/path/to/agent-tool"
    }
  }
}

Codex CLI (~/.codex/config.toml):

[mcp_servers.agent-tool]
command = "/path/to/agent-tool"

Options

# Select the initial schema profile (default: core)
agent-tool --profile coding

# Set fallback encoding for projects with non-UTF-8 files
agent-tool --fallback-encoding EUC-KR

Profiles are additive presets: core (11 schemas), coding (core plus broader file/build/shell tools), remote, analysis, and full. At runtime, prefer the client-independent toolbox gateway: operation=describe returns one tool's schema (compact=true plus tool_operation limits it to one operation), and operation=call invokes it through the stable toolbox binding. Re-send a returned schema_handle to avoid receiving an unchanged schema again. When command diagnostics are compacted, operation=output retrieves the bounded raw output by its reported ID for 30 minutes and reports next_offset when paging is needed. enable, disable, and profile remain available for clients that honor tools/list_changed; fixed-binding clients can always keep using the gateway.

Environment Variable

Set AGENT_TOOL_FALLBACK_ENCODING and/or AGENT_TOOL_PROFILE to avoid repeating CLI flags:

# Windows (no admin required)
setx AGENT_TOOL_FALLBACK_ENCODING EUC-KR
setx AGENT_TOOL_PROFILE coding

# Linux / macOS (add to ~/.bashrc or ~/.zshrc)
export AGENT_TOOL_FALLBACK_ENCODING=EUC-KR
export AGENT_TOOL_PROFILE=coding

Priority: CLI flag > environment variable > default (UTF-8).

Local SSH/SFTP connection profiles

SSH and SFTP accept either connection_profile or a session-local connection_id, so host, user, key, and jump-host fields do not need to be repeated. Profiles are read from the OS user config directory at agent-tool/connections.json; override the location with AGENT_TOOL_CONNECTION_PROFILE_FILE. Keep this file local and explicitly ignored if it is placed inside a workspace.

{
  "connections": {
    "dev": {
      "host": "192.0.2.10",
      "user": "builder",
      "key_file": "/local/path/to/id_ed25519",
      "host_key_check": "strict",
      "trusted": true
    }
  }
}

An initial call returns an opaque connection_id that remains reusable by both tools for 30 minutes. trusted:true affects only display: an allowed private-address warning is shown once per pooled connection instead of on every call; SSRF blocking and cloud metadata protection are unchanged. SSH also supports quiet, echo_command, and result_only; the last returns compact JSON centered on stdout, stderr, and exit_code. SFTP supports quiet, result_only, and upload_many (up to 100 files).

Runtime Configuration

Agents can change settings at runtime via set_config without restarting:

Parameter

Description

Default

fallback_encoding

Fallback encoding when auto-detection fails

UTF-8

encoding_warnings

Show encoding detection warnings

true

max_file_size_mb

Max file size for read/edit/grep (MB)

100

allow_symlinks

Allow symlink extraction from tar archives

false

workspace

Explicit local workspace root. Otherwise the first MCP client root is used, then cwd

(MCP root/cwd)

allow_http_private

Allow webfetch/download/httpreq to access private IPs

false

allow_mysql_private

Allow mysql tool to access private IPs

true

allow_redis_private

Allow redis tool to access private IPs

true

allow_ssh_private

Allow ssh/sftp tools to access private IPs

true

enable_doh

Enable DNS over HTTPS globally (webfetch/download/httpreq/dnslookup)

true

enable_ech

Enable Encrypted Client Hello globally (webfetch/download/httpreq)

true

Build

go build -trimpath -ldflags="-s -w" -o agent-tool .

Cross-compile:

GOOS=linux GOARCH=amd64 go build -trimpath -ldflags="-s -w" -o agent-tool .
GOOS=darwin GOARCH=arm64 go build -trimpath -ldflags="-s -w" -o agent-tool .
GOOS=windows GOARCH=amd64 go build -trimpath -ldflags="-s -w" -o agent-tool.exe .

Troubleshooting

Garbled text (encoding issues)

If Korean, Japanese, or other non-ASCII text appears as garbage characters:

Option 1: Add charset to your .editorconfig:

[*]
charset = euc-kr

Option 2: Set environment variable (persistent):

setx AGENT_TOOL_FALLBACK_ENCODING EUC-KR   # Windows
export AGENT_TOOL_FALLBACK_ENCODING=EUC-KR  # Linux

Option 3: CLI flag (per-session):

agent-tool --fallback-encoding EUC-KR

Built-in help for agents

agent-tool includes a agent_tool_help tool that agents can call for usage guidance. When an agent encounters encoding warnings or garbled text, it can call:

{ "tool": "agent_tool_help", "arguments": { "topic": "encoding" } }

Available topics: overview, encoding, indentation, tools, troubleshooting

Security

agent-tool provides powerful system access (SSH, MySQL, Redis, file operations, HTTP requests). When used with AI coding agents, be aware of prompt injection risks:

  • SSRF Protection: Cloud metadata IPs (169.254.x.x, fe80::/10) are always blocked regardless of settings. Private IP access is configurable per protocol via set_config (allow_http_private, allow_mysql_private, allow_redis_private, allow_ssh_private)

  • DLP (Data Loss Prevention): All outbound HTTP request bodies are scanned for sensitive data patterns (PEM private keys, AWS access keys, GitHub/GitLab tokens, Slack tokens, .env file dumps) and blocked before transmission

  • Prompt Injection Warnings: Every private IP connection shows a security warning visible to both the user and the AI agent, helping detect prompt injection attacks from fetched web content

  • Zip Slip protection: Archive entries with ../ path traversal are blocked (both zip and tar)

  • Zip Bomb protection: Single file limit (1GB), total extraction limit (5GB)

  • Symlinks: Skipped by default. Enable via set_config allow_symlinks=true (tar only; zip symlinks always skipped). Even when enabled, symlinks targeting outside the output directory are blocked

  • File size limit: Configurable max file size (default 100MB) prevents OOM on large files. Adjustable via set_config max_file_size_mb=N

  • Encoding safety: chardet uses 64KB sample (not full file) for memory efficiency

For maximum security, review the AI agent's tool calls before approving, especially for SSH commands, HTTP requests to external URLs, and database queries.

Tech Stack

License

MIT

Available Tools

11 tools
agent_tool_helpA

Returns usage guide for agent-tool. Call this when you encounter encoding warnings, garbled text, or need to understand agent-tool features. Topics: overview, encoding, indentation, tools, debug, analyze, troubleshooting.

ParametersJSON Schema
NameRequiredDescriptionDefault
topicNoHelp topic. Available: overview, encoding, indentation, tools, debug, analyze, memtool, wintool, codegraph, ipc, troubleshooting. Empty = overview

TDQS

A4.1/5.0
Behavior4/5

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

No annotations provided, but description clearly conveys a read-only operation (returns usage guide). No misleading or missing behavioral traits given its simple nature.

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 sentences plus bullet list; no wasted words. Front-loaded with purpose. Could be slightly improved by aligning topic list with schema.

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 help tool with one parameter and no output schema, the description adequately covers purpose and usage. Does not explain default topic behavior but schema covers 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 has 100% coverage for the single parameter. Description adds list of topics but is incomplete compared to schema's enum-like list (missing memtool, wintool, etc.). Adds marginal value beyond 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?

Clearly states it returns usage guide for agent-tool, with specific verb and resource. Distinguishes from sibling tools like analyze or debug by focusing on help for the tool itself.

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 says when to call (encoding warnings, garbled text, need to understand features). Lacks explicit when-not or alternatives, but context is clear.

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

editB

Replaces old_string with new_string in the specified file. Smart indentation: auto-converts between tabs and spaces to match the file's style. Encoding-aware: preserves original file encoding (UTF-8, EUC-KR, Shift-JIS, UTF-8 BOM, etc.). Line-ending aware: matches old_string regardless of CRLF/LF, and inserted lines follow the newline style of the region being edited (mixed-newline files stay intact). Reads .editorconfig for indentation settings. Use dry_run=true to preview changes without modifying the file.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathNoAlias for file_path
dry_runNoPreview changes without modifying the file: true or false. Default: false
file_pathNoFile to edit. Relative paths use the configured workspace or MCP client root
new_stringNoReplacement text (must differ from old_string)
old_stringNoExact text to find in the file
new_contentNoAlias for new_string
old_contentNoAlias for old_string
replace_allNoReplace all occurrences instead of just the first: true or false. Default: false
indent_styleNoOverride indentation style. Values: tabs or spaces-N (e.g. spaces-4). Empty = auto-detect (default)
expected_hashNoOptional SHA-256 hash of the file. If provided and mismatched, edit is rejected (optimistic concurrency).

TDQS

B3.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 behavioral burden, and it delivers: smart indentation conversion, encoding preservation across multiple encodings, CRLF/LF-insensitive matching, newline-style preservation in mixed files, .editorconfig awareness, and a dry-run preview mode. It lacks disclosure of failure/error behavior and return semantics, but the non-obvious mutation-safety traits are well detailed.

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?

Six sentences with the core purpose front-loaded and each subsequent sentence earning its place by disclosing a distinct, non-obvious behavior (indentation, encoding, line endings, editorconfig, dry-run). It is longer than average, but nearly every sentence prevents a real-world correctness bug.

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

Completeness3/5

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

For a 10-parameter tool with no output schema, the description covers behaviors well but leaves gaps: it never states what a successful call returns, what happens when old_string is not found or ambiguous, or how replace_all/expected_hash/indent_style interact behaviorally. Core editing semantics are covered; edge and result semantics 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 description coverage is 100%, so all 10 parameters are already documented (including aliases, replace_all, indent_style, and expected_hash). The description adds no parameter-level meaning beyond what the schema provides; it revisits dry_run but without new information. 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?

The first sentence states a specific verb and resource: 'Replaces old_string with new_string in the specified file.' This identifies a targeted in-file substitution and separates it from read/write-style siblings. However, it does not explicitly differentiate itself from the similarly named siblings patch and multiedit, 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 Guidelines2/5

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

The description gives no guidance on when to choose edit over siblings such as patch, multiedit, or write, and no exclusions or alternative conditions. The only usage hint is 'Use dry_run=true to preview changes,' which is a safety option rather than a selection rule.

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

globA

Finds files matching a glob pattern. Supports ** recursive matching and sorts results by modification time (newest first). Defaults to 200 workspace-relative paths and 32768 characters per page. Skips hidden and common generated/vendor directories unless explicitly included. Returns total/has_more/truncated metadata and an opaque next_cursor.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathNoDirectory to search. Defaults to configured workspace, MCP client root, or current directory
limitNoMaximum paths returned per page. Default: 200, Max: 5000
cursorNoOpaque continuation cursor returned by a previous glob call
patternYesGlob pattern to match files (e.g. **/*.go or src/**/*.ts)
include_hiddenNoTraverse hidden directories. Explicit hidden roots are always searched. Default: false
relative_pathsNoReturn paths relative to the search directory. Default: true
include_ignoredNoTraverse generated/vendor directories such as node_modules, vendor, target, build, and dist. Default: false
max_output_charsNoMaximum returned text characters. Default: 32768, Max: 131072

TDQS

A4.5/5.0
Behavior5/5

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

Since no annotations are provided, the description fully carries the burden of explaining behavior. It discloses result ordering by modification time, default pagination limits, hidden and generated directory skipping, and the metadata/cursor shape, giving rich insight beyond mere function naming.

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 tight and front-loaded: the core purpose appears first, followed by behavioral specifics and return metadata. Every sentence conveys necessary information without redundancy or filler.

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 read-only file discovery tool with eight parameters and no output schema, the description covers key operational behaviors: recursive matching, sorting, defaults, path skipping, pagination metadata, and cursor semantics. The agent has enough information to invoke the tool correctly and interpret the result.

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 each parameter is already documented in the input schema. The description adds useful context such as 'supports ** recursive matching' and default behaviors, but it does not meaningfully enhance per-parameter semantics beyond the schema.

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

Purpose5/5

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

The description opens with a specific verb and resource: 'Finds files matching a glob pattern.' This clearly communicates the tool's core function and differentiates it from siblings like listdir and grep by focusing on pattern-based file discovery.

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 gives clear context for when to use the tool: when matching files with glob patterns. It does not explicitly name alternative tools or provide when-not guidance, but the purpose is clear enough for an agent to select it over simpler directory listing tools.

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

grepA

Searches file contents for a regex pattern. Encoding-aware: auto-detects file encoding. Can search a single file or recursively search a directory. Output modes: content (default), files_with_matches, count. Compact content groups matches under one file header by default; use output_format=classic for path:line:text. A CRLF ending is a terminator, not content: "^foo$" matches in a CRLF file and returned lines carry no stray CR. A lone CR is not a line break (same as read), so a CR-only file is one line. Context: use before/after/context to include surrounding lines (like grep -B/-A/-C). Large result sets stay usable: max_results supports up to 100000, while max_line_chars and max_output_chars bound the text returned to the agent. has_more and a visible continuation hint report when additional grep output exists. Directory search skips binary files (extension list + NUL-byte sniff); pass a binary file directly as path to search it anyway.

ParametersJSON Schema
NameRequiredDescriptionDefault
globNoGlob pattern to filter files (e.g. *.go). Only used when path is a directory
pathNoFile or directory to search. Defaults to configured workspace, MCP client root, or current directory
afterNoLines after each match. Overrides context. Default: 0, Max: 1000
beforeNoLines before each match. Overrides context. Default: 0, Max: 1000
cursorNoOpaque continuation cursor returned by a previous grep call. Not supported with context lines
contextNoLines before and after each match (like grep -C). Default: 0, Max: 1000
patternYesRegular expression pattern to search for
file_pathNoAlias for path
recursiveNoRecurse into subdirectories. Default: true
ignore_caseNoCase-insensitive search. Default: false
max_resultsNoMaximum matching lines/files per page. Default: 100, Max: 100000
output_modeNoOutput mode: content (default), files_with_matches, or count
output_formatNoContent layout: compact (group matches by file, default) or classic (path:line:text on every line)
include_hiddenNoSearch hidden directories. Explicitly provided hidden roots are always searched. Default: false
max_line_charsNoMaximum characters per matching/context line. Default: 4000, Max: 32768
relative_pathsNoReturn paths relative to the search root. Default: true for directory searches
include_ignoredNoSearch common generated/vendor directories instead of skipping them. Default: false
max_output_charsNoMaximum total result characters. Default: 32768, Max: 131072

TDQS

A4.7/5.0
Behavior5/5

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

With no annotations supplied, the description fully carries the behavioral burden and does so thoroughly. It discloses encoding detection, CRLF/CR line-ending semantics, output modes and their defaults, context behavior, binary-file skipping and the exception when passed directly, and large-result continuation behavior through has_more. These are exactly the non-obvious behaviors an agent needs to predict side effects and output.

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 long but densely packed with useful, non-redundant information. It leads with the main action, then systematically covers output modes, edge cases, context, large results, and binary handling. Every sentence provides behavioral or parameter knowledge that would be hard to discover from the schema alone, earning its place.

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

Completeness5/5

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

Given the 18 parameters, high schema coverage, and no output schema, the description is exceptionally complete. It explains result-limiting and pagination-related behavior (has_more, max_output_chars, continuation), which is crucial for an agent calling a search tool that may return a lot of text. It also covers boundary-case semantics like CRLF and binary files, making the tool surprisingly predictable without an output schema.

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

Parameters4/5

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

Schema description coverage is 100%, so the baseline is 3, but the description adds genuinely useful parameter semantics beyond the schema, including 'like grep -B/-A/-C' for context terms, the default compact output format versus output_format=classic, binary-file bypass when path points directly to a file, and the max_results/max_line_chars/max_output_chars caps. This helps agents understand how parameters combine without inspecting JSON examples.

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 opens with the specific verb-resource pair 'Searches file contents for a regex pattern,' which precisely identifies what the tool does and differentiates it from siblings like read, glob, and listdir. It further clarifies scope ('single file or recursively search a directory') and output modes, leaving no ambiguity about the tool's purpose.

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 gives clear context for using the tool: when searching file contents by regex, by file or directory, with context-line behavior, and with binary-file handling. It does not explicitly name alternatives or state 'use this instead of X,' but the purpose is concrete enough that an agent can infer when to select grep over read/glob/listdir. The reference to 'same as read' subtly ties behavior to a sibling tool, adding context.

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

listdirA

Lists directory contents with bounded, pageable output. Default: flat listing, max_depth=3, max_entries=500. When has_more=true, pass next_cursor as cursor to fetch the next page. Filter by type with directories_only or files_only, and by entry-name glob with name_pattern (single) or include (multiple OR patterns, e.g. ["A*", "*.go"]). Use counts_only=true for counts without names, flat=false for a visual tree, and relative_paths=true to save tokens. Skips hidden entries and common build/vendor directories during recursion.

ParametersJSON Schema
NameRequiredDescriptionDefault
flatNoFlat listing without tree connectors (one path per line). Default: true
pathNoDirectory to list. Relative paths use the configured workspace or MCP client root
cursorNoOpaque continuation cursor returned by a previous listdir call
includeNoAdditional entry-name glob patterns. An entry is included when any pattern matches
file_pathNoAlias for path
max_depthNoMaximum depth for traversal. Default: 3
files_onlyNoReturn files only: true or false. Default: false
counts_onlyNoReturn matching directory/file counts without listing names: true or false. Default: false
max_entriesNoMaximum entries to return per page. Default: 500, maximum: 10000
name_patternNoGlob matched against each entry name, for example A* or *.go
relative_pathsNoShow paths relative to the root. Saves tokens: true or false. Default: false
directories_onlyNoReturn directories only while still traversing them: true or false. Default: false

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 full burden and does a good job: it discloses pagination mechanics, skip behavior for hidden/build/vendor entries, the flat/tree distinction, counting mode, and token-saving relative paths. It does not describe the exact response fields, but it mentions has_more and next_cursor sufficient to drive pagination.

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?

Each sentence carries a distinct responsibility: definition, defaults, pagination, filtering, output modes, skipped entries. There is no filler or repetition, and key information is front-loaded.

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

Completeness4/5

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

The description covers defaults, pagination, filtering, output modes, and behavioral exclusions, which is a solid level of context. Since there is no output schema, the only minor gap is omitted return record shape, but the provided behavior is enough for a capable agent.

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, but the description adds relationship semantics beyond the schema: pagination binds has_ more to the cursor parameter, name_pattern versus include as single/multi OR patterns, and counts_only relative_paths as output modifiers. These are not obvious from names 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 clearly states the tool 'lists directory contents' and immediately adds the defining scope: bounded, pageable output. This is a specific verb plus resource and distinguishes the tool from siblings like read, write, and grep, even 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 Guidelines3/5

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

The description gives practical usage guidance: paginate with cursor when has_more=true, filter with directories_only/files_only, and use counts_only or relative_paths for optimization. It does not explicitly tell an agent when to prefer listdir over sibling tools like glob, but the tool's 'list directory contents' purpose implies the context.

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

multieditA

Applies multiple old_string -> new_string replacements to a single file in one call. Edits are applied sequentially in order; each edit sees the result of the previous one. Atomic: if any edit fails, the file is not modified at all. Encoding-aware: preserves original file encoding (UTF-8, EUC-KR, Shift-JIS, etc.). Line-ending aware: old_string matches whether the file uses CRLF or LF, and inserted newlines follow the region being edited (mixed-newline files stay intact). Accepts "path" as alias for "file_path". Use dry_run=true to preview all changes without modifying the file.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathNoAlias for file_path
editsYesOrdered list of replacements to apply sequentially
dry_runNoPreview changes without modifying the file: true or false. Default: false
file_pathNoFile to edit. Relative paths use the configured workspace or MCP client root

TDQS

A4.7/5.0
Behavior5/5

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

No annotations are provided, so the description carries the full burden, and it does this well. It discloses sequential application, atomic rollback on any failure, encoding preservation, CRLF/LF line-ending awareness, and alias support. These are meaningful behavioral characteristics beyond what the schema shows and are critical for correct agent use.

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?

Each sentence earns its place: core function first, then ordering, atomicity, encoding, line endings, alias, and dry-run. It is detailed but compact, and the most important operational facts are front-loaded before the alias and dry-run notes.

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 multi-edit file mutation tool with no annotations and no output schema, this description is unusually complete: it tells the agent what action, in what order, with what safety guarantees, and how to preview. Return format is not described, but the invocation-relevant behavior is covered thoroughly.

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 value by clarifying that old_string matching is encoding- and line-ending-aware, that newlines in inserted text follow the edited region, that path is an alias for file_path, and that dry_run preveview changes. This supplements the schema rather than restating it.

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

Purpose5/5

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

The description states a specific action ('Applies multiple old_string -> new_string replacements to a single file'), includes the precise edit primitive, and differentiates itself from siblings like edit by emphasizing multiple replacements, sequential application, and atomicity. An agent can clearly understand what the tool does and roughly how it differs from single-edit or patch alternatives.

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

Usage Guidelines4/5

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

It provides clear use-context: a single file with many ordered replacements, plus a dry_run option for previewing. It does not explicitly name sibling alternatives or state when not to use it, but the description makes the intended scenario obvious and includes an actionable preview-first workflow.

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

multireadA

Reads multiple files in a single call to reduce API round-trips. Encoding-aware: auto-detects file encoding for each file. Supports offset/limit for reading specific line ranges. Defaults to 200 lines per file and 32768 characters total across the call. Returns visible per-file and overall truncation metadata with continuation positions. Use file_paths or paths (string array) with global offset/limit, or files (object array) for per-file offset/limit. If a file fails, the error is included in output and remaining files continue. Maximum 50 files per request.

ParametersJSON Schema
NameRequiredDescriptionDefault
allNoRemove the default per-file line limit. The total character budget still applies. Default: false
filesNoPer-file read ranges. Each entry has path, offset, limit. Takes priority over file_paths
limitNoMaximum lines per file. Default: 200. Set 0 or all=true to remove the line limit
pathsNoCompatibility alias for file_paths; prefer file_paths
offsetNoLine number to start from (1-based, negative = from end). Default: 1
file_pathsNoFile paths to read. All files use the global offset/limit. Use files for per-file ranges
include_hashNoInclude per-file SHA-256 hashes. Default: false
max_line_charsNoMaximum characters returned from one line. Default: 4000, Max: 32768
max_output_charsNoMaximum total returned text characters across all files. Default: 32768, Max: 131072

TDQS

A4.7/5.0
Behavior5/5

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

No annotations exist, so the description carries the full behavioral burden. It discloses encoding auto-detection, default line and character budgets, truncation metadata with continuation positions, per-file error isolation, and the 50-file cap. This is unusually transparent for a tool with no annotation support.

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?

Every sentence contributes a distinct behavior or usage constraint: purpose, encoding, line/character limits, per-file modes, failure handling, and max file count. It is dense but not bloated, and the most important 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?

For a tool with 9 parameters, no annotations, and no output schema, the description is remarkably complete. It covers defaults, limits, semantics, file failure handling, encoding behavior, and truncation continuation positions, leaving an agent with the practical knowledge needed to invoke it and interpret its results.

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 input schema already covers 100% of parameters, so the baseline is 3. The description adds value by tying parameters to usage modes: global offset/limit vs per-file files entries, the interaction of all=true with the total character budget, and the 50-file request cap not visible in the schema. These aggregates help an agent pick the right parameter shape.

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 opens with a specific verb and resource: 'Reads multiple files in a single call to reduce API round-trips.' This immediately distinguishes it from the single-file 'read' sibling and clearly states the batching purpose.

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

Usage Guidelines4/5

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

The description provides strong contextual guidance: use the tool for reading multiple files efficiently, choose global file_paths/paths vs per-file files objects depending on offset/limit needs, and understand failure/encoding/limit behavior. It does not explicitly name the single-file 'read' tool as the alternative, but the multiple-vs-single distinction is clear.

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

patchA

Applies a unified diff patch to a file. Parses @@ hunk headers, verifies context lines, and applies changes. Encoding-aware: preserves original file encoding. Line-ending aware: each line keeps its own ending (a mixed CRLF/LF file is not rewritten) and a file without a trailing newline does not gain one. Use dry_run=true to preview without modifying the file.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathNoAlias for file_path
patchYesUnified diff text (output of the diff tool)
dry_runNoPreview patch result without modifying the file: true or false. Default: false
file_pathNoFile to patch. Relative paths use the configured workspace or MCP client root

TDQS

A3.6/5.0
Behavior1/5

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

The description directly contradicts the provided annotations: it says the tool 'applies changes' and can modify a file, while annotations mark readOnlyHint=true and destructiveHint=false. This is an annotation contradiction, which forces the lowest score regardless of the strong encoding and line-ending details.

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

Conciseness5/5

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

The description is concise and well-structured: it front-loads the primary action, then adds useful encoding/line-ending behavior, and ends with an actionable dry-run usage. Every sentence contributes unique 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 description covers the behavioral full picture: diff format, context verification, encoding preservation, line-ending behavior, and dry-run safety. The confusing annotation contradiction prevents a 5, but as a standalone spec it is nearly 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?

The input schema already describes all four parameters clearly, including patch, dry_run, and the path aliases. The description adds little beyond restating that dry_run previews without modifying, 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?

The description starts with a precise verb-resource pair: 'Applies a unified diff patch to a file.' It further clarifies behavior with hunk parsing and context verification, making it clearly distinct from nearby siblings like edit, write, or multiedit.

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 conveys a clear use-case: applying unified diff output to a file, with dry_run for preview. It does not explicitly contrast with edit or write, but the diff-specific framing makes the correct context fairly obvious.

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

readA

Reads a file and returns its contents with line numbers. Encoding-aware: auto-detects file encoding (UTF-8, EUC-KR, Shift-JIS, etc.). Image files (PNG, JPG, GIF, BMP, WebP, TIFF, ICO) are returned as ImageContent (base64). SVG files are returned as text. Supports offset/limit for reading specific line ranges. Text defaults to 400 lines and 32768 characters; use offset/limit to continue. Every text result ends with total line count, truncation state, and next_offset when more is available. Negative offset reads from end (e.g. offset=-5 reads last 5 lines). Offset accepts integer, string range "100-200", or [start, end] array. Accepts "path" as alias for "file_path". Relative paths use the configured workspace, MCP client root, or server CWD in that order.

ParametersJSON Schema
NameRequiredDescriptionDefault
allNoRemove the default line limit. The max_output_chars safety budget still applies. Default: false
pathNoCompatibility alias for file_path; prefer file_path
limitNoMaximum lines to return. Default: 400. Set 0 or all=true to remove the line limit; the character budget still applies
offsetNoLine offset. Integer (1-based, negative=from end), string range 'start-end', or [start,end] array. Default: 1
end_lineNoInclusive end line used with start_line
file_pathNoAbsolute or workspace-relative path to the file to read
start_lineNoCompatibility alias for offset; prefer offset
include_hashNoInclude SHA-256 for optimistic edit concurrency. Default: true
max_line_charsNoMaximum characters returned from one line. Default: 4000, Max: 32768
max_output_charsNoMaximum returned text characters. Default: 32768, Max: 131072

TDQS

A4.4/5.0
Behavior5/5

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

No annotations are provided, so the description carries the full burden of behavioral disclosure. It covers encoding detection, binary-image base64 output, SVG as text, default text limits, truncation reporting, negative-offset semantics, path resolution, and concurrency hash inclusion. This is unusually transparent for a tool with no annotations.

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 long but front-loaded with the core purpose, and nearly every sentence adds distinct behavioral detail for a complex 10-parameter tool. Some information, such as the path alias and default limits, overlaps with schema fields, but the density is justified because there is no other documentation.

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 no output schema, the description explains the return shape concretely: line numbers, base64 ImageContent for images, SVG as text, and text results annotated with total line count, truncation state, and next_offset. Combined with the schema's full parameter descriptions, this gives an agent everything needed to correctly invoke and use the function.

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 input schema already documents all parameters at 100% coverage, but the description adds meaning through examples and combination rules, such as offset=-5, offset/limit continuation, and the explicit interpretation of 'all' and max_output_chars. It does not simply repeat the schema word-for-word, though some redundancy exists with the offset and alias descriptions.

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 opens with a specific verb and resource: 'Reads a file and returns its contents with line numbers.' It also distinguishes itself from siblings by emphasizing single-file reads, image/SVG handling, and encoding detection, so an agent can differentiate it from multiread, edit, and other siblings without inspecting schemas.

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 rich operational context, such as using offset/limit to continue and negative offsets to read from the end, and it explains parameter aliases. However, it never explicitly says when to choose this tool over alternatives like multiread or grep, and there is no exclusion or routing guidance. Usage is implied rather than directly stated.

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

toolboxA

Discover and call any AgentTool capability without loading every tool schema into the model context. Use operation=describe with tool= to fetch one tool's instructions and input schema, then operation=call with tool= and arguments={...} to invoke it. This gateway works even when the MCP client ignores tools/list_changed. Use operation=output with output_id= to retrieve bounded raw command output preserved after diagnostic compaction. Large records report next_offset for paging and expire after 30 minutes. Use operation=list to see active and available tools. enable/disable/profile also expose direct tool bindings on clients that refresh dynamically. Profiles: core (compact file/search tools), coding, remote, analysis, full.

ParametersJSON Schema
NameRequiredDescriptionDefault
toolNoSingle tool name for operation=describe or call
toolsNoIndividual tool names to enable or disable
groupsNoTool groups to enable or disable: core, file, coding, system, remote, data, analysis, windows
profileNoProfile for operation=profile: core, coding, remote, analysis, full
argumentsNoTarget tool arguments for operation=call. Use operation=describe first when the schema is unknown
operationNoOperation: list (default), describe, call, output, enable, disable, profile. Prefer describe/call because they work even when the MCP client ignores dynamic tool-list changes
output_idNoPreserved raw command output ID for operation=output
output_offsetNoCharacter offset for operation=output paging. Default: 0
output_max_charsNoMaximum raw-output characters returned by operation=output. Default: 32768, Max: 130048

TDQS

A4.6/5.0
Behavior4/5

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

With no annotations available, the description carries the full burden, and it delivers. It discloses output expiration ('expire after 30 minutes'), bounded output size with paging ('next_offset'), and the enable/program behavior. The 'even when the MCP client ignores the raw tool list' statement adds infra-level transparency. The description does not fully disclose all safety or side-effect nuances of call/enable/disable, but it is far beyond a minimal explanation.

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 has a clear, structured format: a purpose sentence, then one per operation, and then the profiles. Every sentence adds new operational detail; no filler. Front-loaded with the core actiom, and compact despite covering many features.

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 no output schema, seven operations, and nine parameters, the description covers each operation with its relevant parameters, paging / workspace / expiry behavior. It also explains the 'profiles' concept and provides a list of all profiles. The only small missing pieces are explicit return shapes for describe/call, but the description already hints that 'output' returns captured raw output and the gateway is otherwise well explained.

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

Parameters5/5

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

Even though the schema covers 100% of parameters with descriptions, this plumbing meaningfully supplements that. It maps operation arguments to parameters (e.g., 'output_id', 'output_offset', 'therapy'), explicitly tells the agent to 'Use operation=describe first when the schema is any', lists profiles, and 'large records report next_offset' enriches semantics. This is more than baseline schema coverage.

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 opens with a specific verb+resource account: 'Discover and call any AgentTool capability without loading every tool schema into the model context.' It clearly identifies this as a gateway/dispatcher distinct from the concrete sibling tools (read, edit, grep, etc.), and gives a compact summary of what it provides.

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?

Usage is spelled out operation by operation: 'Use operation=describe... then... operation=call...', 'Use operation=output...', and 'Use operation=list...' It even adds a strong preference note: 'Prefer describe/call because they work even when the MCP client ignores dynamic tool-list changes.' Missing an explicit when-not-to-use or direct comparison to the sibling tools, but the intended gateway use case is clear.

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

writeA

Creates or overwrites a file with the given content. Encoding-aware: preserves original encoding for existing files, uses .editorconfig hints for new files. Auto-creates parent directories if they don't exist.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathNoAlias for file_path
contentYesContent to write to the file
file_pathNoFile to write. Relative paths use the configured workspace or MCP client root

TDQS

A3.8/5.0
Behavior4/5

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

With no annotations, the description carries the transparency burden, and it handles it well: it discloses overwriting behavior, encoding preservation, editorconfig usage for new files, and automatic creation of parent directories. It doesn't describe return values or error conditions, but the core behavioral risks are covered.

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, each carrying distinct useful information: core write behavior, encoding behavior, and directory behavior. It is front-loaded with the main operation and contains no filler.

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

Completeness4/5

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

For a simple write tool with no output schema and no annotations, the description covers the essential input semantics (content, path), the destructive write behavior, and the main edge cases (encoding and parent directories). It could mention return values or error handling, but an agent has enough to call and use 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?

The schema already documents all three parameters with descriptions, and schema description coverage is 100%, so the description is not required to add parameter-level detail. The description provides useful global context about encoding and parent directory behavior, but not parameter-specific 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?

The description states a specific operation: 'Creates or overwrites a file with the given content', making clear this is a full-file write. It is distinguished from sibling tools like edit or patch by the overwrite semantics, though it doesn't explicitly name those 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?

The primary usage is clear: use this tool when creating a new file or fully replacing existing content. However, there is no explicit guidance about preferring edit or patch for targeted modifications, so the routing decision 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.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 53 tool updatesv0.9.5
    • Removedanalyze
    • Removedbackup
    • Removedbash
    • Removedchecksum
    • Removedcodegraph
    • Removedcompress
    • Removedconvert_encoding
    • Removedcopy
    • Removeddebug
    • Removeddecompress
    • Removeddelete
    • Removeddiff
    • Removeddnslookup
    • Removeddownload
    • Changededit3 fields changed
      • addedInput schema / properties / dry_run / type
        Added value: +"boolean"
      • changedInput schema / properties / file_path / description
        Previous value: -"Absolute path to the file to edit"New value: +"File to edit. Relative paths use the configured workspace or MCP client root"
      • addedInput schema / properties / replace_all / type
        Added value: +"boolean"
    • Removedenvvar
    • Removedexternalip
    • Removedfile_info
    • Removedfind_tools
    • Removedfirewall
    • Changedglob8 fields changed
      • addedInput schema / properties / cursor
        Added value: +{
        +  "description": "Opaque continuation cursor returned by a previous glob call",
        +  "type": "string"
        +}
      • addedInput schema / properties / include_hidden
        Added value: +{
        +  "description": "Traverse hidden directories. Explicit hidden roots are always searched. Default: false",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / include_ignored
        Added value: +{
        +  "description": "Traverse generated/vendor directories such as node_modules, vendor, target, build, and dist. Default: false",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / limit
        Added value: +{
        +  "description": "Maximum paths returned per page. Default: 200, Max: 5000",
        +  "type": "integer"
        +}
      • addedInput schema / properties / max_output_chars
        Added value: +{
        +  "description": "Maximum returned text characters. Default: 32768, Max: 131072",
        +  "type": "integer"
        +}
      • changedInput schema / properties / path / description
        Previous value: -"Directory to search in (absolute path). Defaults to current directory if empty"New value: +"Directory to search. Defaults to configured workspace, MCP client root, or current directory"
      • changedInput schema / properties / relative_paths / description
        Previous value: -"Return paths relative to the search directory instead of absolute paths. Saves tokens in output: true or false. Default: false"New value: +"Return paths relative to the search directory. Default: true"
      • addedInput schema / properties / relative_paths / type
        Added value: +[
        +  "null",
        +  "boolean"
        +]
    • Changedgrep21 fields changed
      • changedInput schema / properties / after / description
        Previous value: -"Lines of context after each match (like grep -A). Overrides context. Default: 0"New value: +"Lines after each match. Overrides context. Default: 0, Max: 1000"
      • addedInput schema / properties / after / type
        Added value: +"integer"
      • changedInput schema / properties / before / description
        Previous value: -"Lines of context before each match (like grep -B). Overrides context. Default: 0"New value: +"Lines before each match. Overrides context. Default: 0, Max: 1000"
      • addedInput schema / properties / before / type
        Added value: +"integer"
      • changedInput schema / properties / context / description
        Previous value: -"Lines of context before and after each match (like grep -C). Default: 0"New value: +"Lines before and after each match (like grep -C). Default: 0, Max: 1000"
      • addedInput schema / properties / context / type
        Added value: +"integer"
      • addedInput schema / properties / cursor
        Added value: +{
        +  "description": "Opaque continuation cursor returned by a previous grep call. Not supported with context lines",
        +  "type": "string"
        +}
      • changedInput schema / properties / ignore_case / description
        Previous value: -"Case insensitive search: true or false. Default: false"New value: +"Case-insensitive search. Default: false"
      • addedInput schema / properties / ignore_case / type
        Added value: +"boolean"
      • addedInput schema / properties / include_hidden
        Added value: +{
        +  "description": "Search hidden directories. Explicitly provided hidden roots are always searched. Default: false",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / include_ignored
        Added value: +{
        +  "description": "Search common generated/vendor directories instead of skipping them. Default: false",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / max_line_chars
        Added value: +{
        +  "description": "Maximum characters per matching/context line. Default: 4000, Max: 32768",
        +  "type": "integer"
        +}
      • addedInput schema / properties / max_output_chars
        Added value: +{
        +  "description": "Maximum total result characters. Default: 32768, Max: 131072",
        +  "type": "integer"
        +}
      • changedInput schema / properties / max_results / description
        Previous value: -"Maximum number of matching lines/files to return. Default: 100"New value: +"Maximum matching lines/files per page. Default: 100, Max: 100000"
      • addedInput schema / properties / max_results / type
        Added value: +"integer"
      • addedInput schema / properties / output_format
        Added value: +{
        +  "description": "Content layout: compact (group matches by file, default) or classic (path:line:text on every line)",
        +  "type": "string"
        +}
      • changedInput schema / properties / output_mode / description
        Previous value: -"Output mode: 'content' (matching lines with path:line:text, default), 'files_with_matches' (file paths only), 'count' (match count per file)"New value: +"Output mode: content (default), files_with_matches, or count"
      • changedInput schema / properties / path / description
        Previous value: -"File or directory to search in (absolute path). Defaults to current directory"New value: +"File or directory to search. Defaults to configured workspace, MCP client root, or current directory"
      • changedInput schema / properties / recursive / description
        Previous value: -"Recurse into subdirectories: true or false. Default: true"New value: +"Recurse into subdirectories. Default: true"
      • addedInput schema / properties / recursive / type
        Added value: +[
        +  "null",
        +  "boolean"
        +]
      • addedInput schema / properties / relative_paths
        Added value: +{
        +  "description": "Return paths relative to the search root. Default: true for directory searches",
        +  "type": [
        +    "null",
        +    "boolean"
        +  ]
        +}
    • Removedhttpreq
    • Removedipc
    • Removedjsonquery
    • Changedlistdir12 fields changed
      • addedInput schema / properties / counts_only
        Added value: +{
        +  "description": "Return matching directory/file counts without listing names: true or false. Default: false",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / cursor
        Added value: +{
        +  "description": "Opaque continuation cursor returned by a previous listdir call",
        +  "type": "string"
        +}
      • addedInput schema / properties / directories_only
        Added value: +{
        +  "description": "Return directories only while still traversing them: true or false. Default: false",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / files_only
        Added value: +{
        +  "description": "Return files only: true or false. Default: false",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / include
        Added value: +{
        +  "description": "Additional entry-name glob patterns. An entry is included when any pattern matches",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": [
        +    "null",
        +    "array"
        +  ]
        +}
      • changedInput schema / properties / max_depth / description
        Previous value: -"Maximum depth for tree traversal. Default: 3"New value: +"Maximum depth for traversal. Default: 3"
      • addedInput schema / properties / max_depth / type
        Added value: +"integer"
      • addedInput schema / properties / max_entries
        Added value: +{
        +  "description": "Maximum entries to return per page. Default: 500, maximum: 10000",
        +  "type": "integer"
        +}
      • addedInput schema / properties / name_pattern
        Added value: +{
        +  "description": "Glob matched against each entry name, for example A* or *.go",
        +  "type": "string"
        +}
      • changedInput schema / properties / path / description
        Previous value: -"Absolute path to the directory to list"New value: +"Directory to list. Relative paths use the configured workspace or MCP client root"
      • changedInput schema / properties / relative_paths / description
        Previous value: -"Show the root as '.' instead of the full absolute path. Saves tokens in output: true or false. Default: false"New value: +"Show paths relative to the root. Saves tokens: true or false. Default: false"
      • addedInput schema / properties / relative_paths / type
        Added value: +"boolean"
    • Removedmemtool
    • Removedmkdir
    • Changedmultiedit2 fields changed
      • addedInput schema / properties / dry_run / type
        Added value: +"boolean"
      • changedInput schema / properties / file_path / description
        Previous value: -"Absolute path to the file to edit"New value: +"File to edit. Relative paths use the configured workspace or MCP client root"
    • Changedmultiread14 fields changed
      • addedInput schema / properties / all
        Added value: +{
        +  "description": "Remove the default per-file line limit. The total character budget still applies. Default: false",
        +  "type": "boolean"
        +}
      • changedInput schema / properties / file_paths / description
        Previous value: -"List of absolute file paths to read. All files use the global offset/limit. Use 'files' instead for per-file ranges"New value: +"File paths to read. All files use the global offset/limit. Use files for per-file ranges"
      • changedInput schema / properties / files / items / properties / limit / description
        Previous value: -"Max lines to read. Default: 0 (all)"New value: +"Max lines to read. Default: 200. Set 0 to remove the line limit"
      • addedInput schema / properties / files / items / properties / limit / type
        Added value: +[
        +  "null",
        +  "integer"
        +]
      • addedInput schema / properties / files / items / properties / offset / type
        Added value: +[
        +  "null",
        +  "integer"
        +]
      • changedInput schema / properties / files / items / properties / path / description
        Previous value: -"Absolute file path"New value: +"Absolute or workspace-relative file path"
      • addedInput schema / properties / include_hash
        Added value: +{
        +  "description": "Include per-file SHA-256 hashes. Default: false",
        +  "type": "boolean"
        +}
      • changedInput schema / properties / limit / description
        Previous value: -"Maximum number of lines to read per file. Default: 0 (all)"New value: +"Maximum lines per file. Default: 200. Set 0 or all=true to remove the line limit"
      • addedInput schema / properties / limit / type
        Added value: +[
        +  "null",
        +  "integer"
        +]
      • addedInput schema / properties / max_line_chars
        Added value: +{
        +  "description": "Maximum characters returned from one line. Default: 4000, Max: 32768",
        +  "type": "integer"
        +}
      • addedInput schema / properties / max_output_chars
        Added value: +{
        +  "description": "Maximum total returned text characters across all files. Default: 32768, Max: 131072",
        +  "type": "integer"
        +}
      • changedInput schema / properties / offset / description
        Previous value: -"Line number to start reading from (1-based). Negative = from end (e.g. -5 = last 5 lines). Default: 1"New value: +"Line number to start from (1-based, negative = from end). Default: 1"
      • addedInput schema / properties / offset / type
        Added value: +[
        +  "null",
        +  "integer"
        +]
      • changedInput schema / properties / paths / description
        Previous value: -"Alias for file_paths"New value: +"Compatibility alias for file_paths; prefer file_paths"
    • Removedmysql
    • Changedpatch2 fields changed
      • addedInput schema / properties / dry_run / type
        Added value: +"boolean"
      • changedInput schema / properties / file_path / description
        Previous value: -"Absolute path to the file to patch"New value: +"File to patch. Relative paths use the configured workspace or MCP client root"
    • Removedportcheck
    • Removedprocexec
    • Removedprockill
    • Removedproclist
    • Changedread13 fields changed
      • addedInput schema / properties / all
        Added value: +{
        +  "description": "Remove the default line limit. The max_output_chars safety budget still applies. Default: false",
        +  "type": "boolean"
        +}
      • changedInput schema / properties / end_line / description
        Previous value: -"End line number (1-based, inclusive). Sets limit = end_line - start_line + 1 when used with start_line"New value: +"Inclusive end line used with start_line"
      • addedInput schema / properties / end_line / type
        Added value: +[
        +  "null",
        +  "integer"
        +]
      • changedInput schema / properties / file_path / description
        Previous value: -"Absolute or relative path to the file to read"New value: +"Absolute or workspace-relative path to the file to read"
      • addedInput schema / properties / include_hash
        Added value: +{
        +  "description": "Include SHA-256 for optimistic edit concurrency. Default: true",
        +  "type": [
        +    "null",
        +    "boolean"
        +  ]
        +}
      • changedInput schema / properties / limit / description
        Previous value: -"Maximum number of lines to read. Default: 0 (all)"New value: +"Maximum lines to return. Default: 400. Set 0 or all=true to remove the line limit; the character budget still applies"
      • addedInput schema / properties / limit / type
        Added value: +[
        +  "null",
        +  "integer"
        +]
      • addedInput schema / properties / max_line_chars
        Added value: +{
        +  "description": "Maximum characters returned from one line. Default: 4000, Max: 32768",
        +  "type": "integer"
        +}
      • addedInput schema / properties / max_output_chars
        Added value: +{
        +  "description": "Maximum returned text characters. Default: 32768, Max: 131072",
        +  "type": "integer"
        +}
      • changedInput schema / properties / offset / description
        Previous value: -"Line offset. Integer (1-based, negative=from end), string range 'start-end', or [start,end] array. Default: 0 (all)"New value: +"Line offset. Integer (1-based, negative=from end), string range 'start-end', or [start,end] array. Default: 1"
      • changedInput schema / properties / path / description
        Previous value: -"Alias for file_path"New value: +"Compatibility alias for file_path; prefer file_path"
      • changedInput schema / properties / start_line / description
        Previous value: -"Alias for offset (1-based line number to start reading from)"New value: +"Compatibility alias for offset; prefer offset"
      • addedInput schema / properties / start_line / type
        Added value: +[
        +  "null",
        +  "integer"
        +]
    • Removedredis
    • Removedregexreplace
    • Removedrename
    • Removedset_config
    • Removedsftp
    • Removedsloc
    • Removedssh
    • Removedsysinfo
    • Removedtlscheck
    • Removedtomlquery
    • Addedtoolbox
    • Removedwebfetch
    • Removedwebsearch
    • Removedwintool
    • Changedwrite1 field changed
      • changedInput schema / properties / file_path / description
        Previous value: -"Absolute path to the file to write"New value: +"File to write. Relative paths use the configured workspace or MCP client root"
    • Removedyamlquery
  2. 53 tool updatesv0.8.7
    • Addedagent_tool_help
    • Addedanalyze
    • Addedbackup
    • Addedbash
    • Addedchecksum
    • Addedcodegraph
    • Addedcompress
    • Addedconvert_encoding
    • Addedcopy
    • Addeddebug
    • Addeddecompress
    • Addeddelete
    • Addeddiff
    • Addeddnslookup
    • Addeddownload
    • Addededit
    • Addedenvvar
    • Addedexternalip
    • Addedfile_info
    • Addedfind_tools
    • Addedfirewall
    • Addedglob
    • Addedgrep
    • Addedhttpreq
    • Addedipc
    • Addedjsonquery
    • Addedlistdir
    • Addedmemtool
    • Addedmkdir
    • Addedmultiedit
    • Addedmultiread
    • Addedmysql
    • Addedpatch
    • Addedportcheck
    • Addedprocexec
    • Addedprockill
    • Addedproclist
    • Addedread
    • Addedredis
    • Addedregexreplace
    • Addedrename
    • Addedset_config
    • Addedsftp
    • Addedsloc
    • Addedssh
    • Addedsysinfo
    • Addedtlscheck
    • Addedtomlquery
    • Addedwebfetch
    • Addedwebsearch
    • Addedwintool
    • Addedwrite
    • Addedyamlquery

TDQS

A3.8/5.0
Disambiguation3/5

Most tools have clearly separate responsibilities, but the editing tools overlap: edit, multiedit, and patch all modify files, and read/multiread differ mainly in batching. Descriptions are detailed enough to reduce confusion, but an agent choosing among them has several plausible options.

Naming Consistency3/5

Most names are short Unix-like commands (read, edit, grep, glob) and the multi-read/multi-edit pair is recognizable, but agent_tool_help breaks the pattern and there is no consistent verb_noun convention. The names are readable and mostly predictable, though not uniform.

Tool Count4/5

At 11 tools, the server is reasonably scoped for a file/workspace toolset, with read, search, edit, and patch covered. A few tools feel like redundant variants—edit and multiedit, read and multiread—so the count is slightly heavier than strictly necessary.

Completeness4/5

The toolset covers core file workflows well: read, write, edit, patch, search, glob, and directory listing are all present. The main gap its lack of direct delete/move/rename operations, though that may be intentional for safety and agents can often work around it.

Maintenance

ActivityMaintained
ResponsivenessUnresponsive

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/knewstimek/agent-tool'

If you have feedback or need assistance with the MCP directory API, please join our Discord server