Skip to main content
Glama

MCP File Tools

Release Downloads Test OpenSSF Scorecard License: GPL-3.0 MCP Registry Glama score

Claude sees Настройки — not ???? or Íàñòðîéêè.

MCP server for file operations on text that isn't UTF-8. It detects the encoding from the file's bytes rather than its extension, hands the model UTF-8, and writes back in the original encoding — BOM and CRLF/LF intact, still byte-compatible with whatever legacy tool owns the file.

  • 25 encodings, read and write — Cyrillic (CP1251, KOI8-R/U, CP866), Windows-125x, ISO-8859-x, UTF-16 LE/BE, GBK/GB18030 (full list)

  • Encoding-aware across the whole tool setedit_file, grep_text_files and search_files decode the same way, not just read and write

  • Detection you can inspectdetect_encoding reports the charset, a confidence score and any BOM, so garbled text becomes diagnosable

  • BOM and line endings are first-class — including on UTF-16, where a naive byte-level rewrite corrupts the file

  • Sandboxed — every path, symlink and junction targets included, is checked against the directories you allowed

Built for: Delphi/Pascal units with Cyrillic UI text, VB6 forms, legacy PHP/HTML with localized content, and INI or data files whose encoding you can't tell from the filename.

User: Read config.ini and change the title to "Настройки"
Claude: [read_text_file → cp1251 detected] → [edits UTF-8] → [write_file → back to cp1251]

PRs welcome and merged fast — no CLA, no style review, one-line fixes count. Forked this to fix something? Please send it back instead.

Installation

claude plugin marketplace add dimitar-grigorov/mcp-file-tools
claude plugin install mcp-file-tools

Inside a session: /plugin marketplace add … and /plugin install ….

Requires Node.js 18+ on your PATH. The launcher is a Node script and Claude Code does not bundle Node; without it /mcp shows the server as not connected.

First launch downloads the binary for your OS at a pinned version, verifies its SHA-256 and caches it. It is scoped to the folder you have open, so there is nothing to configure. For directories outside the workspace, or a machine without Node, use a manual install.

Coming from a manual install

claude mcp list                                              # find the old file-tools entry
claude mcp remove file-tools
claude plugin marketplace add dimitar-grigorov/mcp-file-tools
claude plugin install mcp-file-tools
# Old binary, once /mcp shows the plugin connected:
#   Windows      Remove-Item "$env:LOCALAPPDATA\Programs\mcp-file-tools\mcp-file-tools.exe"
#   Linux/macOS  rm ~/.local/bin/mcp-file-tools

Tool names change too: mcp__file-tools__* becomes mcp__plugin_mcp-file-tools_file-tools__*, so update your permission rules, see Auto-approve tools.

Updating the plugin

claude plugin marketplace update mcp-file-tools
claude plugin update mcp-file-tools@mcp-file-tools

Use the full plugin@marketplace id, not the bare name, or turn on auto-update in /pluginMarketplaces.

Registries and directories

This server is listed in the Official MCP Registry for discovery by any MCP client, and indexed on Glama, which scores it A for license, quality and maintenance.

Manual install (other MCP clients, or access outside your workspace)

Download the binary for your platform, then register it with the directories it may access.

Platform

Release asset

Suggested path

Windows x64

mcp-file-tools_windows_amd64.exe

%LOCALAPPDATA%\Programs\mcp-file-tools\mcp-file-tools.exe

Linux x64

mcp-file-tools_linux_amd64

~/.local/bin/mcp-file-tools

macOS ARM64

mcp-file-tools_darwin_arm64

~/.local/bin/mcp-file-tools

Windows (PowerShell, not CMD):

mkdir -Force "$env:LOCALAPPDATA\Programs\mcp-file-tools"
iwr "https://github.com/dimitar-grigorov/mcp-file-tools/releases/latest/download/mcp-file-tools_windows_amd64.exe" -OutFile "$env:LOCALAPPDATA\Programs\mcp-file-tools\mcp-file-tools.exe"
claude mcp add --scope user file-tools -- "$env:LOCALAPPDATA\Programs\mcp-file-tools\mcp-file-tools.exe" "C:\Projects"

Linux / macOS (swap the asset name from the table for your platform):

mkdir -p ~/.local/bin
curl -L "https://github.com/dimitar-grigorov/mcp-file-tools/releases/latest/download/mcp-file-tools_linux_amd64" -o ~/.local/bin/mcp-file-tools
chmod +x ~/.local/bin/mcp-file-tools
claude mcp add --scope user file-tools -- ~/.local/bin/mcp-file-tools ~/Projects

Go install (all platforms)

# Requires Go 1.26+
go install github.com/dimitar-grigorov/mcp-file-tools/v4/cmd/mcp-file-tools@latest
# Linux / macOS
claude mcp add --scope user file-tools -- $(go env GOPATH)/bin/mcp-file-tools ~/Projects
# Windows PowerShell
claude mcp add --scope user file-tools -- "$(go env GOPATH)\bin\mcp-file-tools.exe" "C:\Projects"

Other Clients

For Claude Desktop, VSCode, or Cursor, use the downloaded binary path in your config:

Claude Desktop (%APPDATA%\Claude\claude_desktop_config.json on Windows, ~/Library/Application Support/Claude/claude_desktop_config.json on macOS):

Windows:

{
  "mcpServers": {
    "file-tools": {
      "command": "C:\\Users\\YOUR_NAME\\AppData\\Local\\Programs\\mcp-file-tools\\mcp-file-tools.exe",
      "args": ["D:\\Projects", "C:\\Users\\YOUR_NAME\\Documents"]
    }
  }
}

macOS / Linux:

{
  "mcpServers": {
    "file-tools": {
      "command": "/Users/YOUR_NAME/.local/bin/mcp-file-tools",
      "args": ["/Users/YOUR_NAME/Projects", "/Users/YOUR_NAME/Documents"]
    }
  }
}

args lists the directories the server may access — as many as you need.

VSCode / Cursor (Claude Code extension)

If you already ran claude mcp add --scope user from the installation steps above, the server is already available in VSCode — no extra config needed.

To configure separately for VSCode only:

claude mcp add --scope user file-tools -- "%LOCALAPPDATA%\Programs\mcp-file-tools\mcp-file-tools.exe" "C:\Projects"

Alternatively, create a per-project config by adding .mcp.json to your project root:

{
  "mcpServers": {
    "file-tools": {
      "type": "stdio",
      "command": "C:\\Users\\YOUR_NAME\\AppData\\Local\\Programs\\mcp-file-tools\\mcp-file-tools.exe",
      "args": ["D:\\Projects", "D:\\Other\\Directory"]
    }
  }
}

Note: type: "stdio" is required here. The VSCode extension does not add the workspace directory by itself, so args must list every directory you want reachable. Adding one later means re-running claude mcp add with the full list — it overwrites the previous config rather than appending.

OpenAI Codex CLI

Codex takes a direct MCP command, so no manual TOML editing is needed.

Windows (PowerShell):

mkdir -Force "$env:LOCALAPPDATA\Programs\mcp-file-tools"
iwr "https://github.com/dimitar-grigorov/mcp-file-tools/releases/latest/download/mcp-file-tools_windows_amd64.exe" -OutFile "$env:LOCALAPPDATA\Programs\mcp-file-tools\mcp-file-tools.exe"
codex mcp add file-tools -- "$env:LOCALAPPDATA\Programs\mcp-file-tools\mcp-file-tools.exe" "C:\Projects"

Run codex mcp list to verify it, then start a new Codex session. Add more directory arguments to grant access outside the current project.

Auto-approve tools (Claude Code)

To skip the permission prompts, add to .claude/settings.local.json in your project root:

{ "permissions": { "allow": ["mcp__plugin_mcp-file-tools_file-tools__*"] } }

That prefix is the plugin install; a manual one registered as file-tools is mcp__file-tools__* instead, and a rule with the wrong prefix matches nothing and fails quietly. Which modes the rules affect, and keeping delete_file / move_file behind a prompt, are in docs/extra.md.

Update

The server checks for updates automatically and notifies you through tool responses when a newer version is available; the notice carries the steps for your install. Plugin installs update through Updating the plugin — a re-downloaded binary is ignored there.

For a manual install, re-download the binary over the existing one — the registration does not need repeating:

  1. Close all Claude Code sessions (the binary is locked while running)

  2. Re-download:

iwr "https://github.com/dimitar-grigorov/mcp-file-tools/releases/latest/download/mcp-file-tools_windows_amd64.exe" `
    -OutFile "$env:LOCALAPPDATA\Programs\mcp-file-tools\mcp-file-tools.exe"

To disable update checks, set the environment variable MCP_NO_UPDATE_CHECK=1.

Verify & Uninstall

# Check which file-tools server is connected (plugin or manual)
claude mcp list

# Remove a manual install
claude mcp remove file-tools

# Remove the plugin
claude plugin uninstall mcp-file-tools

Related MCP server: ellmos-filecommander-mcp

How to Use

Once installed, just ask Claude:

  • "List all .pas files in this directory"

  • "Read config.ini and detect its encoding"

  • "Show all supported encodings"

  • "Read MainForm.dfm using CP1251 encoding"

Security: the server reaches only the directories you allowed. It takes them from args: ["/path/to/project"] first, then MCP_FILE_TOOLS_ALLOWED_DIRS, and failing both from the directory it was started in — the workspace, when a client launches it there. Clients that still speak the MCP roots protocol add their roots on top. A drive root or your home directory is never granted by that last fallback; name it explicitly instead. Paths are resolved before the check, so a symlink or Windows junction pointing outside is rejected rather than followed.

Tools

20 tools — every one that touches text content is encoding-aware:

Plus three promptsaudit_encodings, fix_mojibake, migrate_to_utf8 — surfaced by clients as user commands.

See TOOLS.md for detailed parameters and examples. Calls shaped like Claude Code's built-in Read/Write/Edit/Grep are accepted too — the alias layer translates them where the semantics match exactly, so a model's habits don't fail the call.

Out of scope: binary/media reading (read_media_file). This is a text tool; agents read images with their built-in tools.

Supported encodings

Every one below reads and writes. Name one explicitly via the encoding parameter, or leave it to auto-detection.

Script / region

Encodings

Unicode

UTF-8, UTF-16 LE, UTF-16 BE

Cyrillic

Windows-1251, KOI8-R, KOI8-U, CP866, ISO-8859-5, MacCyrillic

Western European

Windows-1252, ISO-8859-1, ISO-8859-15

Central European

Windows-1250, ISO-8859-2

Greek

Windows-1253, ISO-8859-7

Turkish

Windows-1254, ISO-8859-9

Chinese Simplified

GBK, GB18030

Hebrew, Arabic, Baltic, Vietnamese, Thai

Windows-1255, 1256, 1257, 1258, 874

Common aliases are accepted (cp1251, latin1, gb2312, tis-620, …) — list_encodings prints the whole table with aliases.

UTF-32 is partially supported: LE and BE BOMs are detected, and manage_bom can add or strip them, but transcoding to or from UTF-32 is not implemented and manage_line_endings refuses UTF-32 files rather than corrupting their 4-byte alignment.

Configuration

The server can be configured via environment variables:

Variable

Description

Default

MCP_DEFAULT_ENCODING

Default encoding for write_file on new files when none specified. Existing files keep their detected encoding. Set to cp1251 to restore the pre-2.0.0 default.

utf-8

MCP_DEFAULT_LINE_ENDINGS

Line endings for write_file on new files (crlf/lf). Existing files keep their own style regardless.

unset (write unchanged)

MCP_MEMORY_THRESHOLD

Memory threshold in bytes. Files smaller are loaded into memory for faster I/O; larger files use streaming. Also affects encoding detection mode.

67108864 (64MB)

MCP_DETECTION_CANDIDATES

Comma-separated list pinning what detection may answer, in priority order — e.g. utf-8,windows-1252. See Pinning the encodings.

unset (detection unrestricted)

MCP_FILE_TOOLS_ALLOWED_DIRS

Allowed directories as an OS path list (; on Windows, : elsewhere). For clients where env is the only block you control, such as the Claude Code plugin. Overridden by args.

unset

MCP_FILE_TOOLS_NO_CWD_FALLBACK

Set to turn off granting the working directory when neither args nor MCP_FILE_TOOLS_ALLOWED_DIRS names one.

unset (fallback on)

Set them with an env block in your config (Claude Desktop example):

{
  "mcpServers": {
    "file-tools": {
      "command": "C:\\Users\\YOUR_NAME\\AppData\\Local\\Programs\\mcp-file-tools\\mcp-file-tools.exe",
      "args": ["D:\\Projects"],
      "env": {
        "MCP_DEFAULT_ENCODING": "utf-8"
      }
    }
  }
}

Pinning the encodings

Detection is a guess, and guesses have blind spots: Spanish CP1252 like MÓDULO FÍSICAMENTE ÚNICO is plausible GBK — every uppercase accent before an ASCII letter is a valid hanzi pair — so it reads back as Chinese and edits fail with "gbk cannot represent 2 characters". If you know what the repo contains, say so:

"env": { "MCP_DETECTION_CANDIDATES": "utf-8,windows-1252" }

A BOM still wins. A guess inside the list keeps its confidence; one outside it is dropped and the first listed encoding that decodes the bytes cleanly takes over, so order is your priority. A file that fits none of them is read as the default and reported as an ODD ENCODING in read_text_file's hint, so a stray file gets said out loud rather than guessed at. Unlisted encodings stop appearing in detect_encoding's candidates too. UTF-16/32 are named only by a BOM or the structural classifier, so listing them cannot make them a catch-all.

Legacy teams (pre-2.0.0 behaviour)

Before 2.0.0 new files defaulted to cp1251; they now default to utf-8. Existing files are unaffected — their encoding is detected and preserved — so this only matters if your team creates new non-UTF-8 files, e.g. new Delphi units with Cyrillic literals. To keep the old behaviour:

"env": { "MCP_DEFAULT_ENCODING": "cp1251" }

Commit that in the legacy repo's .mcp.json rather than setting it per machine, and everyone working in that repo gets the right default with no local setup.

Delphi 2007 and older read UTF-8 only when it carries a BOM, so a UTF-8 file without one is silently treated as ANSI. Set cp1251 (or your own ANSI code page) for such a repo and new Cyrillic literals land in the encoding the IDE expects. Files that already exist keep their own encoding either way, and no tool adds a BOM to them.

Development

Prerequisites: Go 1.26+

make test    # go test -race ./...
make lint    # go vet, go fmt, staticcheck (same pinned version as CI)
make build

test_server.go is an end-to-end smoke test over every tool, run by CI on each push:

go run test_server.go

Debugging

MCP Inspector gives a web UI for calling tools and inspecting responses (needs Node.js 18+):

npx @modelcontextprotocol/inspector go run ./cmd/mcp-file-tools -- /path/to/allowed/dir

Or pipe JSON-RPC straight to stdin:

echo '{"jsonrpc":"2.0","id":1,"method":"tools/list","params":{}}' | go run ./cmd/mcp-file-tools /path/to/project

Contributing

If it fits the scope and works, it gets merged. Don't ask first — just send the PR. No CLA, no style review: make test and make lint passing is enough, and tests are welcome but never required. One-line fixes and half-finished features behind a flag both count. Out of scope, or breaking a tool contract other people's agents rely on, gets a comment rather than a close. Not writing the fix yourself? Open an issue with the file, its encoding, and what the tool did.

Details in CONTRIBUTING.md. Found a way out of an allowed directory? That one goes to SECURITY.md, privately, not to an issue.

Forking

Forking is fine. That's what GPL-3.0 is for. Taking the project over is not.

GPL-3.0 is a license, not a preference. Distribute your fork in any form (public repo, release binary, registry listing, product you ship to customers) and you must:

  • Keep GPL-3.0 and LICENSE, copyright notice intact (§4, §5c)

  • Say what you changed and when, prominently (§5a)

  • Give the source to everyone you gave the binary to (§6)

WARNING

Deleting the license or the notice, relicensing as MIT or proprietary, or shipping only a binary is alicense violation, and §8 ends your rights the moment you do it.

It will be enforced, in this order: a request to comply, then a DMCA takedown plus delisting from whichever registry or marketplace carries it, then legal action. Complying costs one license file, one notice and one source link. Ask in an issue if you are unsure whether what you ship complies.

Asked, not enforced: leave the credit in — the copyright notice is the legal minimum, one line saying "Fork of mcp-file-tools" is what tells a reader where it came from. Give your fork its own name, so a registry listing under this one with the author swapped doesn't read as if the project moved and send its bugs here. And try upstream first: a PR beats carrying merge conflicts forever, and puts your name on the commit rather than in a credits list.

Credits

Ideas that started in someone else's fork and were reimplemented here:

  • @skyispainted - GBK/GB18030, JSON-string array args, edit_file retry hint

  • @haobiao - GBK/GB18030, independently

  • Hugo Rosário - merging MCP roots with CLI allowed dirs

  • @zoster81 - UTF-16 line endings and grep, path containment fixes, write durability, BOM policy, ordered concurrency

  • Mario Rial - pinning detection to known encodings, multi-pattern grep

A PR gets your name on the commit instead of this list.

License

GPL-3.0 - see LICENSE

Copyright (C) 2026 Dimitar Grigorov. Free software, distributed WITHOUT ANY WARRANTY.

Available Tools

20 tools
check_for_updatesA
Read-only

Check if a newer version of mcp-file-tools is available. Returns current version, latest version, and update instructions if outdated. Uses a cached result (max 1 GitHub API call per 30 min); force=true bypasses the cache. Call once at the start of each session.

ParametersJSON Schema
NameRequiredDescriptionDefault
forceNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
installMethodYes
latestVersionYes
updateMessageNo
currentVersionYes

TDQS

A5/5.0
Behavior5/5

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

The description discloses caching behavior (max 1 GitHub API call per 30 min), bypass condition, and return contents, adding context beyond the annotations (readOnlyHint, idempotentHint). It clarifies the tool's non-idempotent nature through the cache and force 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 is four concise sentences, each providing distinct information: purpose, returns, caching behavior, and usage recommendation. Every sentence earns its place with no redundancy.

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

Completeness5/5

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

For a simple one-parameter tool with an output schema, the description covers purpose, behavior, parameters, and usage. It is fully complete without needing to describe return structure since the output schema exists.

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?

The only parameter 'force' is fully explained in the description as bypassing the cache, compensating for the 0% schema description coverage. This adds essential meaning beyond the bare boolean type.

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 checks for a newer version of mcp-file-tools, a specific action on a specific resource. It distinguishes this tool from sibling file operation tools by focusing on self-update functionality.

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

Usage Guidelines5/5

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

The description explicitly instructs to 'Call once at the start of each session,' providing clear when-to-use guidance. It also explains the force parameter's conditional use (bypassing cache), which helps decide when to invoke it differently.

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

convert_encodingA
DestructiveIdempotent

Convert files between encodings. Parameters: path (one file) OR paths (a batch — never both), to (required), from (omit to auto-detect), backup (write .bak first), dryRun (report only), allowLowConfidence, bom ("auto" default, "always", "never", "preserve"). Refuses rather than corrupting: a narrowing conversion (utf-8 to cp1251) names the characters the target lacks with line and column, and an untrusted detection names its best guess — confirm it with from, or pass allowLowConfidence=true. A source BOM is stripped before decoding; one contradicting an explicit from is an error. No-op if the file already holds the target bytes. In a batch one bad file does not stop the rest. Run dryRun over a project first. Examples: {"path": "D:\legacy\data.txt", "to": "utf-8", "backup": true} leaves data.txt.bak; {"paths": ["a.pas", "b.pas"], "to": "utf-8", "dryRun": true} previews a migration.

ParametersJSON Schema
NameRequiredDescriptionDefault
toYes
bomNo
fromNo
pathNo
pathsNo
backupNo
dryRunNo
allowLowConfidenceNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
dryRunNo
errorsNo
hasBomYes
bomTypeNo
changedYes
messageYes
resultsNo
backupPathNo
errorCountNo
successCountNo
sourceEncodingNo
targetEncodingYes

TDQS

A5/5.0
Behavior5/5

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

Beyond the annotations (destructiveHint=true, idempotentHint=true), the description discloses specific behaviors: backup creation, refusal to corrupt with naming missing characters, BOM stripping and contradiction handling, and partial batch failures. This significantly enriches the agent's understanding of side effects and edge cases.

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 densely packed but every sentence earns its place: purpose, parameter guide, behavioral notes, and examples. It is structured logically from high-level operation to specific details, with no filler or repetition.

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 8 parameters, a mutation tool, and an output schema, the description covers all necessary contexts: parameter constraints, error handling, idempotency, backup behavior, BOM nuance, and batch execution. The presence of examples further rounds out completeness.

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

Parameters5/5

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

Schema description coverage is 0%, and the description fully compensates. It explains every parameter individually (path vs paths, to, from, backup, dryRun, allowLowConfidence, bom) and provides concrete JSON examples that illustrate correct usage, making the schema's bare properties meaningful.

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 opening sentence "Convert files between encodings" states a specific verb and resource, clearly distinguishing it from sibling tools like detect_encoding, list_encodings, and manage_bom. No ambiguity exists about what the tool does.

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

Usage Guidelines5/5

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

The description provides actionable guidance: "Run dryRun over a project first," "confirm it with from, or pass allowLowConfidence=true," and notes when conversion is unnecessary ("No-op if the file already holds the target bytes"). It even explains batch behavior ("one bad file does not stop the rest") which informs usage decisions.

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

copy_fileA

Copy one file byte for byte, keeping its encoding, BOM, line endings, permissions and mtime. Use it to back up a file before an edit or a conversion. Parameters: source (required), destination (required). Never overwrites: an existing destination is an error and nothing is written, so the same call repeated fails the second time rather than copying again. Source must be a file, a directory is refused. The destination's parent directory has to exist already (create_directory first), both paths must sit inside the allowed directories, and a relative path resolves against the directory the server was started in. Prefer move_file to relocate a file (the source stops existing), write_file to create one from new content, convert_encoding with backup=true for a .bak beside a converted file.

ParametersJSON Schema
NameRequiredDescriptionDefault
sourceYes
destinationYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
messageYes

TDQS

A4.9/5.0
Behavior5/5

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

The description provides rich behavioral details beyond the annotations: never overwrites, existing destination causes an error, source must be a file, destination parent must exist, paths must be inside allowed directories, and relative paths resolve against the server start directory. These are exactly the kind of non-obvious behaviors an agent needs to know. There is no contradiction with the annotations.

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 dense but every sentence serves a purpose: core semantics, typical use, parameter preconditions, failure behavior, path constraints, and sibling routing. It is front-loaded with the most important information and uses straightforward language without redundant 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?

Given this is a simple two-parameter copy operation with an output schema available, the description covers everything needed for correct invocation: exact behavior, preconditions, error conditions, path constraints, and alternatives. No critical information is missing.

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

Parameters4/5

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

With 0% schema description coverage, the description compensates by naming both parameters and clarifying their roles: source is a required file path and destination is a required path whose parent must exist and which must not already exist. It could have described path formats more explicitly, but it adds meaningful semantics beyond the bare string 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 precise action: 'Copy one file byte for byte, keeping its encoding, BOM, line endings, permissions and mtime.' This clearly identifies the resource and operation, and it distinguishes copy_file from sibling tools by emphasizing its byte-for-byte preservation semantics.

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

Usage Guidelines5/5

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

The description explicitly states the primary use case ('back up a file before an edit or a conversion') and names concrete alternatives with selection criteria: prefer move_file to relocate, write_file for new content, and convert_encoding with backup=true for a .bak beside a converted file. This leaves no ambiguity about when to choose this tool.

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

create_directoryA
Idempotent

Create a directory recursively (mkdir -p). Succeeds silently if already exists. Parameter: path (required).

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
messageYes

TDQS

A4.2/5.0
Behavior4/5

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

The description adds behavioral details beyond the annotations, specifically the recursive creation ('mkdir -p') and the silent success behavior if the directory already exists. These align with the idempotentHint annotation but provide concrete implementation context.

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

Conciseness5/5

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

The description is two sentences, front-loaded with the primary action, and contains no unnecessary words. Every sentence contributes useful information.

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

Completeness5/5

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

For a simple directory creation tool with idempotentHint and a known output schema, the description covers the essential behavior. It notes recursion and silent success, which are the main nuances. No additional return value explanation is needed given the output schema exists.

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

Parameters2/5

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

The description merely repeats 'Parameter: path (required)', which restates the schema without adding any new meaning. It does not explain what kind of path is expected (absolute/relative) or any constraints. Since schema coverage is 0%, the description fails to compensate.

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's function: 'Create a directory recursively (mkdir -p)'. This uses a specific verb and resource, and distinguishes it from sibling tools like write_file or delete_file.

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 clear context by noting it creates directories recursively and silently succeeds if the directory already exists. It does not explicitly mention alternatives, but the purpose is distinct and unambiguous given the sibling tool names.

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

delete_fileA
Destructive

Delete a file. Does not delete directories. Parameter: path (required).

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
messageYes

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare destructiveHint: true, so the safety profile is known. The description adds a valuable behavioral trait: 'Does not delete directories', which prevents misuse. This goes beyond the annotations without contradicting them.

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 extremely concise, consisting of two short sentences. It front-loads the main action and includes a necessary limitation without any filler, making it highly efficient.

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

Completeness4/5

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

For a simple delete tool with one parameter and a destructive annotation, the description covers the core behavior and a key limitation. It lacks details on error handling or return values, but the presence of an output schema and annotations partially fills this gap.

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

Parameters2/5

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

The input schema has 0% description coverage, and the description only restates 'Parameter: path (required)' without adding semantic detail. It does not explain the path format, whether absolute/relative, or behavior with non-existent paths, so it fails to compensate for the schema gap.

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

Purpose5/5

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

The description 'Delete a file' uses a specific verb and resource, clearly stating the tool's purpose. It also distinguishes from sibling tools by explicitly noting 'Does not delete directories', which differentiates it from directory-related operations.

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 a clear usage constraint by stating the tool does not delete directories, implying it should be used only for files. However, it does not explicitly name alternative tools for directory deletion, so it lacks a direct comparison but still gives useful context.

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

detect_encodingA
Read-only

Auto-detect file encoding with confidence score (0-100) and BOM detection. ALWAYS use this first when encountering garbled text or � characters. Use before read_text_file to determine the correct encoding. Parameters: path (required), mode (sample=fast default, chunked=thorough, full=entire file). When the answer is in doubt — low confidence, or a charset this server cannot read — the result also ranks candidates; retry the read with a supported one and ask the user if two are plausible.

ParametersJSON Schema
NameRequiredDescriptionDefault
modeNo
pathYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
has_bomYes
encodingYes
candidatesNo
confidenceYes

TDQS

A5/5.0
Behavior5/5

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

Beyond the readOnlyHint, the description adds behavioral context including confidence scoring, BOM detection, multiple modes (sample, chunked, full), and candidate ranking on low confidence. This fully discloses the tool's behavior and limitations.

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

Conciseness5/5

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

The description is front-loaded with the core purpose, followed by usage guidance, parameter details, and edge-case behavior. Every sentence adds value without unnecessary fluff.

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 presence of an output schema, the description need not detail return values, but it covers the key aspects of usage, parameters, and exceptional cases, making it complete for this tool.

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?

With 0% schema description coverage, the description compensates by explaining path as required and detailing mode values (sample, chunked, full) along with their semantics, exceeding the bare schema types.

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 auto-detects file encoding with confidence score and BOM detection, using a specific verb and resource. It distinguishes itself from siblings like read_text_file and convert_encoding by positioning itself as the preliminary step before reading.

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

Usage Guidelines5/5

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

It explicitly instructs to ALWAYS use this first when encountering garbled text, and to use before read_text_file. It also provides guidance on what to do when confidence is low, such as retrying with a supported encoding and asking the user.

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

edit_fileA
Destructive

Edit one file with replacements or a unified diff. Returns a unified diff and keeps the file's encoding and line endings. PREFER THIS over read+write to modify a file. In 'ask before edits' mode call dryRun=true first, show the diff, then dryRun=false once the user confirms; with auto-edit permissions go straight to dryRun=false. On no match, prefer fixing oldText from the closest-content hint. Alternatively retry that edit with similarity (0.0-1.0) for whitespace/comment drift, not different code. Do NOT re-read the file afterwards to verify: a success with a diff means the edit is on disk, a failed edit changes nothing. A file with mixed line endings is repaired to its dominant style; the result says how many endings changed, so report that to the user. Parameters: path; exactly one of edits [{oldText, newText, similarity?, replaceAll?}] or patch (---/+++/@@ unified diff for one file); dryRun (default false); encoding (auto). oldText must match ONE place: several matches fail with their line numbers and change nothing — add surrounding lines to pick one, or set replaceAll: true to change them all and report the count to the user. Edits apply in order. Matching ignores per-line leading/trailing whitespace and CRLF/LF, but interior spacing must match; newText is re-indented. Example: {"path": "D:\src\unit1.pas", "edits": [{"oldText": "i: Integer;", "newText": "i: NativeInt;"}, {"oldText": "for i := 0 to 10 do", "newText": "for i := 0 to 20 do"}], "dryRun": true}

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes
editsNo
patchNo
dryRunNo
encodingNo
forceWritableNo

TDQS

A4.8/5.0
Behavior5/5

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

Annotations already show destructiveHint=true, but the description goes well beyond that by explaining exact behavior: encoding and line endings are preserved, mixed line endings are repaired to the dominant style, matching ignores leading/trailing whitespace and CRLF/LF, edits apply in order, and a failed edit changes nothing. No contradiction with annotations exists.

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 exceptionally dense, with the core guidance front-loaded ('Edit one file... returns a unified diff... PREFER THIS over read+write'). It is a single block rather than structured sections, but every sentence provides useful operational detail, so it earns its length.

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 six parameters, no output schema, destructive behavior, and multiple sibling tools, this description is remarkably complete. It covers the return value, dry-run flow, matching edge cases, line-ending repair reporting, and no-verification rule. The only minor omission is forceWritable, but the operational workflow is fully specified.

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

Parameters4/5

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

Schema description coverage is 0%, so the description carries the burden. It thoroughly documents path, edits, patch, dryRun, encoding, replaceAll, similarity, and matching semantics, and includes a concrete example. The only parameter not mentioned is forceWritable, so the coverage is excellent but not complete.

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 ('Edit one file with replacements or a unified diff'), identifies its result ('Returns a unified diff'), and distinguishes it from the alternate read+write flow. It also names a sibling concept ('PREFER THIS over read+write') so the agent can differentiate it from write_file 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 Guidelines5/5

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

Explicit usage guidance is provided: prefer this over read+write, use dryRun=true in ask-before-editing mode, and use dryRun=false with auto-edit permissions. It also gives recovery guidance on no-match ('prefer fixing oldText... Alternatively retry with similarity') and tells the agent not to re-read the file afterward.

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

get_file_infoA
Read-only

Get file/directory metadata: size, timestamps, permissions, type. Use this to check file size before reading large files with read_text_file. Parameter: path (required).

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
sizeYes
isFileYes
createdYes
accessedYes
modifiedYes
isDirectoryYes
permissionsYes

TDQS

A3.9/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, so the safety profile is covered. The description adds that it returns specific metadata fields and warns about large files, but it doesn't discuss error handling, path existence, or directory-specific behavior. This is modest added context, appropriate given the low bar set by annotations.

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

Conciseness5/5

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

The description is two sentences, front-loaded with the primary function and metadata types. It includes a practical usage hint and parameter mention without any waste, achieving maximum conciseness.

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

Completeness4/5

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

Given the tool's simplicity (one parameter, read-only, output schema present), the description covers the main metadata returned and a key use case. It doesn't elaborate on edge cases, but the output schema and annotations fill some gaps, making it fairly complete for the tool's complexity.

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

Parameters2/5

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

The schema only provides a required string 'path' with no semantic detail, and the description merely repeats 'path (required)' without explaining accepted formats, relative vs absolute paths, or how directories versus files are handled. With 0% schema coverage, the description fails to compensate sufficiently.

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 retrieves file/directory metadata (size, timestamps, permissions, type), which is a specific verb plus resource. It distinguishes itself from content-reading tools like read_text_file by focusing on metadata rather than file contents.

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 gives an explicit use case: 'Use this to check file size before reading large files with read_text_file.' This names an alternative tool and specifies a scenario. It doesn't explicitly mention when not to use, but the guidance is clear and actionable.

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

grep_text_filesA
Read-only

Regex search in file contents with encoding support. PREFER THIS over built-in Grep for non-UTF-8 files. Skips .gitignore'd files (respectGitignore=false to include). Parameters: pattern (regex) or patterns (array), paths (array of files, or dirs searched recursively), caseSensitive (default true), contextBefore/After, maxMatches (default 1000), offset, include/includes, exclude/excludes, encoding. patterns finds ANY of several regexes in ONE pass — sweeping a codebase for a list of names is one call, not one per name. outputMode: "content" (default, matching lines), "files_with_matches" (paths only, far cheaper when you just need WHICH files), "count" (matching lines per file). contextBefore/After apply to content mode only. matchesOnly=true returns the matched substring instead of the whole line, for extracting values — with patterns it also tells you which one hit. offset skips the first N results, so you can page past maxMatches; the response echoes nextOffset when truncated. Include and exclude patterns are basename-only globs; {a,b} alternatives work and a leading **/ is ignored. Includes match any pattern and excludes reject any match. Do not combine a singular field with its plural. Example: {"patterns": ["TCustomer", "TOrder"], "paths": ["D:\proj\src"], "includes": [".pas", ".dfm"], "outputMode": "files_with_matches"}

ParametersJSON Schema
NameRequiredDescriptionDefault
pathsYes
offsetNo
excludeNo
includeNo
patternYes
encodingNo
excludesNo
includesNo
patternsNo
maxMatchesNo
outputModeNo
matchesOnlyNo
contextAfterNo
caseSensitiveNo
contextBeforeNo
respectGitignoreNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
hintNo
filesNo
countsNo
matchesYes
truncatedNo
nextOffsetNo
filesMatchedYes
totalMatchesYes
filesSearchedYes

TDQS

A5/5.0
Behavior5/5

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

The description reveals many behavioral traits: skips .gitignore'd files unless respectGitignore=false, defaults for caseSensitive and maxMatches, context modes limited to content mode, matchesOnly semantics, offset pagination with nextOffset echo, and glob specifics. This goes well beyond the readOnlyHint annotation, providing substantial operational insight.

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?

Though long, the description is highly organized and front-loaded. It starts with purpose and preference, then systematically covers parameters, output modes, and edge cases. Every sentence contributes useful detail, and the example anchors understanding.

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 16-parameter tool with no schema descriptions, the description is exceptionally complete. It covers defaults, modes, glob semantics, paging, and even includes a concrete example. The output schema can handle return structure, so this is sufficient for an agent to select and use the tool correctly.

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?

With no parameter descriptions in the schema (0% coverage), the description compensates fully. It defines every parameter, clarifies the difference between singular and plural forms, documents defaults, and explains how contextBefore/After and matchesOnly behave. This is essential for correct invocation.

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 clear verb+resource: 'Regex search in file contents with encoding support.' It explicitly distinguishes from the built-in Grep by recommending this tool for non-UTF-8 files, and the example further illustrates its intended use.

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

Usage Guidelines5/5

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

It says 'PREFER THIS over built-in Grep for non-UTF-8 files,' naming the alternative. It also provides thorough guidance on when to use outputMode 'files_with_matches' vs 'content', explains the efficiency of 'patterns' for multiple regexes, and warns against combining singular and plural fields.

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

list_allowed_directoriesA
Read-only

Returns the list of directories this server is allowed to access, normally the directory it was started in. Subdirectories are also accessible. If empty, the user needs to add paths as args in .mcp.json or set MCP_FILE_TOOLS_ALLOWED_DIRS.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
messageNo
directoriesYes

TDQS

A4.5/5.0
Behavior4/5

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

Beyond the readOnlyHint annotation, the description adds meaningful behavioral context: directories are typically the startup directory, subdirectories are also accessible, and an empty list indicates a configuration issue. This enriches the agent's understanding without contradicting annotations.

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

Conciseness5/5

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

Two sentences with the primary function first and troubleshooting second. Every sentence adds value; no filler or redundancy.

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 simple, zero-parameter tool with an output schema, the description fully covers purpose, typical behavior, and the empty-result remediation. No additional context is needed for correct invocation.

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

Parameters4/5

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

Tool has zero parameters, so the input schema is inherently complete. The description appropriately does not invent parameter details; baseline of 4 applies for a zero-parameter tool.

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?

Description states a specific action ('Returns the list of directories this server is allowed to access') and clearly distinguishes from sibling list_directory by focusing on allowed roots rather than directory contents. The added detail 'normally the directory it was started in' further clarifies the tool's unique role.

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

Usage Guidelines4/5

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

Provides clear context for when to use the tool: to discover accessible directories. It also gives actionable guidance for the empty-result case (.mcp.json or MCP_FILE_TOOLS_ALLOWED_DIRS). However, it does not explicitly contrast with sibling tools or state when not to use it, so it falls short of a 5.

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

list_directoryA
Read-only

List files and directories with optional glob pattern filtering (e.g., *.pas, *.dfm). Parameters: path (required), pattern (optional, default: *), sortBy ("name" default, "mtime" newest first, "size" largest first), reverse (bool, flips the order).

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes
sortByNo
patternNo
reverseNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
filesYes

TDQS

A4.6/5.0
Behavior4/5

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

Beyond the readOnlyHint annotation, the description adds behavior details about sorting (sortBy values and their effects) and the reverse option, giving the agent a better sense of the tool's output ordering. It also notes the default pattern '*', which is useful context.

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

Conciseness5/5

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

The description is a single sentence that packs essential parameter details without fluff. It is front-loaded with the primary purpose and wastes no words.

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 4-parameter read-only directory listing tool with an output schema, the description covers purpose, filtering, sorting, and defaults. Output format is handled by the output schema, so no gap exists.

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?

The schema has no parameter descriptions, but the description compensates fully by explaining path (required), pattern (optional, default *), sortBy (with specific sort options), and reverse (flips order). This adds substantial meaning beyond the raw 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 clearly states the tool lists files and directories with optional glob filtering, using the verb 'List' and specifying the resource. This distinguishes it from sibling tools like 'tree' (which implies hierarchy) and 'search_files' (which implies content search).

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 clear usage context by explaining the parameters, including the default sort order and reverse flag. However, it does not explicitly compare to alternatives like 'tree' or 'search_files' for when to choose this tool.

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

list_encodingsA
Read-only

List all 25 supported encodings with name, aliases, and description. Use this to find the correct encoding name for read/write/convert operations.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
encodingsYes

TDQS

A4.7/5.0
Behavior4/5

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

Annotations already mark readOnlyHint=true, and the description adds that it lists exactly 25 supported encodings with their metadata. No side effects are implied, and the description aligns with the read-only nature.

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

Conciseness5/5

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

Two sentences, both dense with information. The first states the action and output contents; the second explains the use case. No unnecessary words.

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 simplicity of the tool, the description fully covers its purpose and usage. The output schema exists, so the description need not list return fields.

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?

This tool has zero parameters, so baseline is 4. The description correctly omits parameter details, as there are none.

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

Purpose5/5

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

The description uses a specific verb ('List') and identifies the resource ('encodings'), specifying the exact content ('name, aliases, description') and count (25). This clearly distinguishes it from sibling tools like detect_encoding or convert_encoding.

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

Usage Guidelines5/5

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

Explicitly states when to use: 'Use this to find the correct encoding name for read/write/convert operations.' This provides clear context for selecting this tool over alternatives.

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

manage_bomA
DestructiveIdempotent

Detect, strip, or add Unicode BOM (Byte Order Mark). UTF-8 BOM breaks PHP/shell scripts; UTF-16 files need BOMs. Parameters: path (required), action (required: "detect"|"strip"|"add"), encoding (required for "add": utf-8, utf-16-le, utf-16-be, utf-32-le, utf-32-be).

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes
actionYes
encodingNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
hasBomYes
bomTypeNo
changedYes
messageYes
bomBytesNo

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already indicate destructive and idempotent behavior. The description adds specific action semantics (detect, strip, add) and conditional requirements (encoding for 'add'), enriching understanding beyond the generic hints without contradiction.

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

Conciseness5/5

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

The description is two sentences: the first defines purpose, the second condenses all parameter details. It is information-dense with no redundancy or unnecessary elaboration.

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?

The description, combined with annotations (destructive, idempotent) and output schema, covers purpose, usage context, parameter constraints, and safety implications. Nothing critical is missing for an agent to invoke the tool correctly.

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?

With 0% schema description coverage, the description fully compensates by enumerating valid action values, specifying encoding as required for 'add', and listing supported encoding formats. This provides complete parameter meaning beyond the bare schema.

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

Purpose5/5

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

The description explicitly states the tool detects, strips, or adds a Unicode BOM, using specific verbs and identifying the resource. It also provides context about UTF-8 and UTF-16 implications, clearly distinguishing it from sibling tools like detect_encoding and convert_encoding.

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 when BOM management is relevant (UTF-8 breaking scripts, UTF-16 needing BOMs), giving clear context for use. However, it does not explicitly name alternatives or state when not to use this tool, falling short of full exclusion guidance.

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

manage_line_endingsA
DestructiveIdempotent

Detect or fix line endings. action="detect" reports the dominant style (crlf/lf/mixed/none), total lines, and the line numbers that disagree — use it when a file looks inconsistent. action="convert" rewrites the file to style, per code unit for UTF-16 and preserving its BOM; no-op if the file already matches. Parameters: path, action ("detect"|"convert"), style ("lf"|"crlf", required for convert), encoding (auto-detected, including most BOM-less UTF-16 — pass utf-16-le/utf-16-be if a very short or unusual file is misread). Example: {"path": "D:\src\unit1.pas", "action": "convert", "style": "crlf"}

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes
styleNo
actionYes
encodingNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
styleYes
changedNo
messageNo
totalLinesNo
linesChangedNo
originalStyleNo
inconsistentLinesNo

TDQS

A5/5.0
Behavior5/5

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

Beyond the annotations, the description reveals important behaviors: rewriting the file for convert, no-op when the file already matches (idempotency), preservation of BOM, auto-detection of encoding, and potential misreading for short files. This adds significant context that annotations alone do not provide.

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

Conciseness5/5

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

The description is front-loaded with the core purpose and uses concise, informative sentences. It packs a lot of detail without redundancy, and the example is well-placed. Every sentence contributes meaningful information.

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

Completeness5/5

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

Given the tool's complexity (two actions, encoding nuances, BOM handling), the description covers all necessary aspects: return values for detect (style, total lines, line numbers), convert behavior, parameter details, and example usage. It is complete for an agent to invoke correctly.

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

Parameters5/5

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

The schema has no descriptions and 0% coverage, but the description explains every parameter: path, action (with valid values), style (required for convert), and encoding (with auto-detection and fallback options). The example ties them together, fully compensating for the schema's lack of detail.

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 'Detect or fix line endings', which clearly states the verb and resource. It distinguishes between two actions (detect and convert) and provides details on what each does, making it distinct from sibling tools like convert_encoding or manage_bom.

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

Usage Guidelines5/5

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

It explicitly states when to use detect ('use it when a file looks inconsistent') and describes the convert behavior with encoding and BOM handling. It also gives an example, making usage clear, though it does not mention alternative tools directly. The context is sufficient for an agent to decide when to invoke it.

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

move_fileA
Destructive

Move or rename files/directories. Fails if destination exists. Parameters: source (required), destination (required).

ParametersJSON Schema
NameRequiredDescriptionDefault
sourceYes
destinationYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
messageYes

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already signal destructive behavior, and the description adds a critical behavioral detail: it fails if the destination exists, meaning no overwrite. This is valuable context beyond annotations. It also clarifies it operates on both files and directories.

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 short and front-loaded with the core purpose in the first sentence. The second sentence about parameters is redundant with the schema but does not significantly bloat the description.

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

Completeness4/5

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

For a simple two-parameter move tool, the description covers the core operation, the failure mode, and the applicable resources. With annotations already providing destructive hints and an output schema available, the description is sufficiently complete for an agent to use it correctly.

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

Parameters2/5

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

Schema description coverage is 0%, so the description should compensate for the bare schema. However, it merely repeats 'source (required), destination (required)' without explaining the meaning of each parameter, such as source being the current path and destination being the target path. The parameter names are self-evident, but the description adds no semantic depth.

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

Purpose5/5

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

The description uses a specific verb ('move/rename') with a clear resource ('files/directories') and explicitly states a key constraint ('fails if destination exists'), which distinguishes it from siblings like copy_file and delete_file.

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

Usage Guidelines3/5

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

The description implies usage by its clear verb and resource, but does not explicitly reference alternatives or when-not-to-use. It mentions a failure condition but not when to choose this over copy_file or write_file.

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

read_multiple_filesA
Read-only

Read multiple files concurrently with encoding support. PREFER THIS when reading several non-UTF-8 files at once. Individual failures don't stop the batch — partial results are returned. Parameters: paths (required array), encoding (optional, auto-detected per file).

ParametersJSON Schema
NameRequiredDescriptionDefault
pathsYes
encodingNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
errorsNo
resultsYes
errorCountYes
successCountYes

TDQS

A4.8/5.0
Behavior5/5

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

Beyond the readOnlyHint annotation, the description reveals that 'Individual failures don't stop the batch — partial results are returned,' and that encoding is 'auto-detected per file.' These behavioral details help an agent anticipate outcomes.

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

Conciseness5/5

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

Three sentences efficiently cover purpose, usage guidance, and parameter semantics. No redundant information, and the key action 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?

The description covers concurrency, encoding support, and partial failure behavior, which are the main operational concerns. With an output schema present, no return-format details are needed. It is well-rounded for a batch-read tool.

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?

With 0% schema description coverage, the description fully compensates by explaining 'paths (required array)' and 'encoding (optional, auto-detected per file),' adding semantic meaning beyond the raw 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 clearly states it 'Read multiple files concurrently with encoding support,' which specifies both the verb and the resource, and distinguishes it from sibling tools like read_text_file by emphasizing the multi-file and non-UTF-8 use case.

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 explicitly advises to 'PREFER THIS when reading several non-UTF-8 files at once,' providing a concrete when-to-use scenario. It does not name sibling alternatives directly, but the context makes the guidance clear enough.

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

read_text_fileA
Read-only

Read file with encoding auto-detection, converts to UTF-8. PREFER THIS over built-in Read for non-UTF-8 files (Cyrillic, legacy codebases). Returns totalLines and fileSizeBytes for planning the next read. Parameters: path, encoding (auto-detected), offset (1-indexed start line), limit (max lines), maxCharacters (caps output to avoid token overflow), lineNumbers (default false: prefix lines with "N", absolute numbers — use to locate lines reported by grep or encoding errors; STRIP the prefix before using text as edit_file oldText). Page files >2000 lines: {"path": "D:\src\app.pas", "offset": 1, "limit": 2000}, then offset 2001, until offset exceeds totalLines.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes
limitNo
offsetNo
encodingNo
lineNumbersNo
maxCharactersNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
hintNo
contentYes
endLineNo
startLineNo
truncatedNo
totalLinesYes
fileSizeBytesYes
detectedEncodingNo
encodingConfidenceNo

TDQS

A4.9/5.0
Behavior5/5

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

Beyond the readOnlyHint annotation, the description discloses encoding auto-detection, UTF-8 conversion, return metadata (totalLines, fileSizeBytes), line number prefix behavior with a caution to strip it before use in edit_file, and maxCharacters to prevent token overflow. It also details offset as 1-indexed and limit as max lines, adding substantial behavioral context.

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

Conciseness4/5

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

The description is dense but efficient, with each sentence adding value. The parameter explanation is packed into one long but factually complete sentence; however, bullet points would improve scannability. The pagination example is a useful addition that justifies its length.

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?

The description covers the tool's purpose, usage guidance, parameter semantics, and return metadata, and even includes a concrete paging example. Since an output schema exists, detailed return structure is unnecessary. For a tool with 6 parameters, this description is remarkably complete.

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?

With 0% schema description coverage, the description compensates by explaining every parameter: path is implicit, encoding auto-detected, offset as 1-indexed start line, limit as max lines, maxCharacters to avoid token overflow, and lineNumbers with default false and prefix format. It also provides a pagination example demonstrating offset/limit usage, making parameter semantics clear.

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 reads a file with encoding auto-detection and converts to UTF-8, using a specific verb and resource. It also distinguishes itself from the built-in Read tool by specifically targeting non-UTF-8 files, making its purpose unique among siblings.

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

Usage Guidelines5/5

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

The description explicitly says 'PREFER THIS over built-in Read for non-UTF-8 files (Cyrillic, legacy codebases)', giving clear when-to-use guidance and naming an alternative. It also provides concrete pagination instructions for files larger than 2000 lines, showing exactly how to structure offset and limit for subsequent reads.

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

search_filesA
Read-only

Recursively search for files matching a glob pattern (*.ext at any depth, /*.ext, several ** and {a,b} alternatives allowed). Returns full paths. Skips .gitignore'd files (respectGitignore=false to include). Parameters: path (required), pattern (required), excludePatterns, maxResults (default 10000), sortBy, reverse. sortBy: "name" (default, lexical), "mtime" (newest first) or "size" (largest first); reverse flips the order. Unlike the built-in Glob there is no mtime default — pass sortBy "mtime" for newest first. With mtime or size the whole tree is ranked before the cap, so a truncated result really is the newest/largest maxResults files. Example: {"path": "D:\proj", "pattern": "/*.pas", "sortBy": "mtime"}

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes
sortByNo
patternYes
reverseNo
maxResultsNo
excludePatternsNo
respectGitignoreNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
filesYes
truncatedNo

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already mark the tool as readOnlyHint, lowering the bar. The description adds meaningful behavioral detail: skips .gitignore'd files unless respectGitignore=false, sorts lexically by name by default, and ranks the whole tree before trimming to maxResults for mtime/size sorts. No contradiction with 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 dense but every sentence contributes value, from the core purpose to sorting rules and an example. The parameter list is a bit run-on, yet the overall length is justified by the tool's complexity. Minor structural improvements would earn a 5.

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

Completeness4/5

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

The output schema exists, so return values need no description. The description covers search semantics, sort options, gitignore behavior, and result capping, which is largely sufficient. The lack of excludePatterns explanation is the main gap, making it complete but not flawless.

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

Parameters4/5

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

With 0% schema description coverage, the description must explain parameters. It thoroughly covers sortBy options, reverse, maxResults behavior, and respectGitignore, and shows path/pattern via example. Only excludePatterns is left with no semantic detail, preventing a 5.

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 begins with a clear verb and resource: 'Recursively search for files matching a glob pattern,' and expands with specifics about supported patterns and output (full paths). It also distinguishes itself from the built-in Glob by noting the missing mtime default, which differentiates it from sibling file tools.

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 context is provided via the contrast with the built-in Glob and the explanation of sortBy behavior (e.g., no mtime default, pass sortBy for newest first). However, it does not explicitly state when to prefer this over siblings like list_directory or tree, so it misses the top score.

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

treeA
Read-only

Compact indented tree view of directory structure. PREFER THIS for directory visualization. Skips .gitignore'd files and .git (respectGitignore=false to include). Set showEncoding=true to detect and display file encodings (e.g., for auditing legacy codebases). Parameters: path (required), maxDepth (0=unlimited), maxFiles (default 1000), dirsOnly (bool), exclude (array of patterns), showEncoding (bool, shows detected encoding per file).

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes
excludeNo
dirsOnlyNo
maxDepthNo
maxFilesNo
showEncodingNo
respectGitignoreNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
treeYes
dirCountYes
fileCountYes
truncatedNo

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true. The description adds behavioral details (skips .gitignore/.git, includes when respectGitignore=false, showEncoding feature) without contradicting annotations.

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

Conciseness5/5

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

Three sentences with no redundancy: purpose, preference, behavior, and parameter list. Front-loaded with essential info and each sentence earns 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?

Covers all 7 parameters with defaults and semantics, gives usage context, and an output schema exists. Adequate for a tree tool with no missing operational details.

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

Parameters5/5

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

Schema coverage is 0%, so the description must compensate. It lists path (required), maxDepth (0=unlimited), maxFiles (default 1000), dirsOnly, exclude (array of patterns), and showEncoding. respectGitignore is also explained in the behavior sentence. All parameters have semantic context.

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

Purpose5/5

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

States 'Compact indented tree view of directory structure' with a specific verb+resource. The directive 'PREFER THIS for directory visualization' clearly distinguishes it from siblings like list_directory and search_files.

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 'PREFER THIS for directory visualization' and gives a concrete use case via showEncoding. Does not name alternative tools but the preference is strong and context is clear.

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

write_fileA
DestructiveIdempotent

Write file with encoding conversion from UTF-8. PREFER THIS over built-in Write for non-UTF-8 files. Use after read_text_file to keep the original encoding. Parameters: path, content, encoding (default: the existing file's detected encoding, else utf-8), bom, lineEndings. bom: "auto" (default) writes a BOM for utf-16-* targets, else keeps one only if the file already had a BOM of the same encoding; "preserve" keeps it even when the encoding changed; "never" strips it; "always" fails on encodings with no BOM (e.g. cp1251). lineEndings: "preserve" (default) converts content to the file's existing style, so sending LF into a CRLF file will NOT leave it mixed; also "crlf", "lf", "asis" (byte for byte). Example — strip a UTF-8 BOM that breaks PHP: {"path": "D:\www\index.php", "content": "<?php ...", "bom": "never"}

ParametersJSON Schema
NameRequiredDescriptionDefault
bomNo
pathYes
contentYes
encodingNo
lineEndingsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
hasBomYes
bomTypeNo
messageYes
lineEndingsNo

TDQS

A4.7/5.0
Behavior5/5

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

Although annotations already indicate destructiveHint=true and idempotentHint=true, the description adds substantial behavioral context: encoding default behavior, BOM modes ('auto', 'preserve', 'never', 'always') with failure cases, and lineEndings 'preserve' ensuring LF does not mix into CRLF files. These details enrich the annotation hints without contradiction.

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 dense but not bloated; every clause adds value. It could be more structured with bullets, but the linear narrative with the example is effective and front-loaded with the primary purpose.

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?

The tool has five parameters, no enum constraints, and an output schema, so the description need not cover return values. It covers all parameter semantics, behavioral subtleties, and provides a practical example. No critical gaps remain.

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

Parameters5/5

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

Schema description coverage is 0%, so the description must explain all parameters. It does so exhaustively: path and content are straightforward, encoding has a default, bom has four modes with behavior, lineEndings has four modes. A concrete PHP BOM-stripping example further clarifies usage.

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 'Write file with encoding conversion from UTF-8', a specific verb+resource statement. It further distinguishes the tool from alternatives by saying 'PREFER THIS over built-in Write for non-UTF-8 files', making its purpose clear and unique.

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 explicit guidance: 'PREFER THIS over built-in Write for non-UTF-8 files' and 'Use after read_text_file to keep the original encoding'. It names alternatives (built-in Write, read_text_file) and provides a workflow context, though it does not explicitly contrast with sibling tools like edit_file or convert_encoding.

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. 5 tool updatesv4.2.0
    • Changedconvert_encoding1 field changed
      • addedInput schema / properties / allowLowConfidence
        Added value: +{
        +  "type": "boolean"
        +}
    • Changeddetect_encoding1 field changed
      • addedOutput schema / properties / candidates
        Added value: +{
        +  "items": {
        +    "additionalProperties": false,
        +    "properties": {
        +      "confidence": {
        +        "type": "integer"
        +      },
        +      "encoding": {
        +        "type": "string"
        +      },
        +      "supported": {
        +        "type": "boolean"
        +      }
        +    },
        +    "required": [
        +      "encoding",
        +      "confidence",
        +      "supported"
        +    ],
        +    "type": "object"
        +  },
        +  "type": [
        +    "null",
        +    "array"
        +  ]
        +}
    • Changededit_file1 field changed
      • addedInput schema / properties / edits / items / properties / replaceAll
        Added value: +{
        +  "type": "boolean"
        +}
    • Changedgrep_text_files2 fields changed
      • addedInput schema / properties / patterns
        Added value: +{
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": [
        +    "null",
        +    "array"
        +  ]
        +}
      • addedOutput schema / properties / hint
        Added value: +{
        +  "type": "string"
        +}
    • Changedread_multiple_files1 field changed
      • addedOutput schema / properties / results / items / properties / hint
        Added value: +{
        +  "type": "string"
        +}
  2. 19 tool updatesv3.3.0
    • Removedchange_line_endings
    • Changedcheck_for_updates2 fields changed
      • addedOutput schema / properties / installMethod
        Added value: +{
        +  "type": "string"
        +}
      • changedOutput schema / required
        Previous value: -[
        -  "currentVersion",
        -  "latestVersion"
        -]New value: +[
        +  "currentVersion",
        +  "latestVersion",
        +  "installMethod"
        +]
    • Changedconvert_encoding9 fields changed
      • addedInput schema / properties / dryRun
        Added value: +{
        +  "type": "boolean"
        +}
      • addedInput schema / properties / paths
        Added value: +{
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": [
        +    "null",
        +    "array"
        +  ]
        +}
      • changedInput schema / required
        Previous value: -[
        -  "path",
        -  "to"
        -]New value: +[
        +  "to"
        +]
      • addedOutput schema / properties / dryRun
        Added value: +{
        +  "type": "boolean"
        +}
      • addedOutput schema / properties / errorCount
        Added value: +{
        +  "type": "integer"
        +}
      • addedOutput schema / properties / errors
        Added value: +{
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": [
        +    "null",
        +    "array"
        +  ]
        +}
      • addedOutput schema / properties / results
        Added value: +{
        +  "items": {
        +    "additionalProperties": false,
        +    "properties": {
        +      "backupPath": {
        +        "type": "string"
        +      },
        +      "bomType": {
        +        "type": "string"
        +      },
        +      "changed": {
        +        "type": "boolean"
        +      },
        +      "error": {
        +        "type": "string"
        +      },
        +      "hasBom": {
        +        "type": "boolean"
        +      },
        +      "message": {
        +        "type": "string"
        +      },
        +      "path": {
        +        "type": "string"
        +      },
        +      "sourceEncoding": {
        +        "type": "string"
        +      },
        +      "unsupported": {
        +        "items": {
        +          "additionalProperties": false,
        +          "properties": {
        +            "char": {
        +              "type": "string"
        +            },
        +            "code": {
        +              "type": "string"
        +            },
        +            "column": {
        +              "type": "integer"
        +            },
        +            "line": {
        +              "type": "integer"
        +            }
        +          },
        +          "required": [
        +            "char",
        +            "code",
        +            "line",
        +            "column"
        +          ],
        +          "type": "object"
        +        },
        +        "type": [
        +          "null",
        +          "array"
        +        ]
        +      },
        +      "unsupportedCount": {
        +        "type": "integer"
        +      }
        +    },
        +    "required": [
        +      "path",
        +      "changed"
        +    ],
        +    "type": "object"
        +  },
        +  "type": [
        +    "null",
        +    "array"
        +  ]
        +}
      • addedOutput schema / properties / successCount
        Added value: +{
        +  "type": "integer"
        +}
      • changedOutput schema / required
        Previous value: -[
        -  "message",
        -  "sourceEncoding",
        -  "targetEncoding",
        -  "hasBom",
        -  "changed"
        -]New value: +[
        +  "message",
        +  "targetEncoding",
        +  "hasBom",
        +  "changed"
        +]
    • Addedcopy_file
    • Removeddetect_line_endings
    • Addededit_file
    • Addedget_file_info
    • Addedgrep_text_files
    • Addedlist_allowed_directories
    • Addedlist_directory
    • Addedlist_encodings
    • Addedmanage_bom
    • Addedmanage_line_endings
    • Addedmove_file
    • Addedread_multiple_files
    • Addedread_text_file
    • Addedsearch_files
    • Addedtree
    • Changedwrite_file2 fields changed
      • addedInput schema / properties / lineEndings
        Added value: +{
        +  "type": "string"
        +}
      • addedOutput schema / properties / lineEndings
        Added value: +{
        +  "type": "string"
        +}
  3. 10 tool updatesv2.0.1
    • Addedchange_line_endings
    • Addedcheck_for_updates
    • Removedcopy_file
    • Removeddirectory_tree
    • Removedlist_directory
    • Removedlist_encodings
    • Removedread_multiple_files
    • Removedread_text_file
    • Removedsearch_files
    • Removedtree
  4. 10 tool updatesv0.1.1
    • Removedchange_line_endings
    • Removedcheck_for_updates
    • Addedconvert_encoding
    • Addeddetect_line_endings
    • Removededit_file
    • Removedget_file_info
    • Removedlist_allowed_directories
    • Removedmanage_bom
    • Removedmove_file
    • Addedwrite_file
  5. 18 tool updatesv0.1.0
    • First observedchange_line_endings
    • First observedcheck_for_updates
    • First observedcopy_file
    • First observedcreate_directory
    • First observeddelete_file
    • First observeddetect_encoding
    • First observeddirectory_tree
    • First observededit_file
    • First observedget_file_info
    • First observedlist_allowed_directories
    • First observedlist_directory
    • First observedlist_encodings
    • First observedmanage_bom
    • First observedmove_file
    • First observedread_multiple_files
    • First observedread_text_file
    • First observedsearch_files
    • First observedtree

TDQS

A4.1/5.0
Disambiguation4/5

Tool purposes are mostly distinct, with rich descriptions steering usage (e.g. read_text_file vs read_multiple_files, edit_file vs write_file, copy_file vs move_file). A few overlapping areas—list_directory vs search_files vs tree, and manage_bom vs encoding-related parameters on convert_encoding/write_file—could cause hesitation but are resolvable from context.

Naming Consistency4/5

Nearly all tools follow a snake_case verb_noun pattern (create_directory, convert_encoding, read_text_file). Minor deviations like 'tree' (a bare noun) and 'check_for_updates' (prepositional phrase) keep it from a perfect score.

Tool Count3/5

At 20 tools, the set sits in the heavy-but-not-excessive range. Most tools are justified for a file- and encoding-focused toolkit, but the encoding cluster (detect/convert/list/BOM/line endings) and several listing/search tools could potentially be consolidated.

Completeness4/5

The file lifecycle is broadly covered: directory creation, file read/write/edit/copy/move/delete, search/grep, metadata, and encoding conversions. The most obvious gap is the lack of any directory-delete or recursive-delete operation, so created directories cannot be cleaned up; otherwise workflows are fairly complete.

Maintenance

ActivityActive
ResponsivenessSlow

Related MCP Connectors

Related MCP Servers

Appeared in Searches

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/dimitar-grigorov/mcp-file-tools'

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