Skip to main content
Glama
kurtzhi

fsext-mcp-server-python

by kurtzhi

FsExt-MCP-Server (Python)

Overview

A full-featured secure MCP server for local file system operations, with built-in image processing, OCR and media tools. Fully compliant with the official Model Context Protocol specification, offering standardized request/response schemas, large-file streaming I/O, multi-transport remote deployment, and comprehensive text search & replace functionality for LLM agent integration.

Core Features

  • Full File & Directory Management: Support file creation, deletion, copy, move, metadata query, existence check; full directory tree recursion copy and move with overwrite safety controls.

  • Streaming File Read/Write: Integrate full text reading, segmented line-based text reading, chunked binary reading, text/binary overwriting and appending writing, optimized to avoid loading entire large files into memory.

  • Powerful Search & Replace: Support directory-wide recursive file content search, single/multi-file contextual matching with configurable pre/post matching lines, regular expression matching, case-insensitive search, and in-place text replacement with match count statistics.

  • Image Processing Tools: Built-in high-performance image toolkit powered by Pillow, including resize (aspect ratio lock + canvas padding support), crop, and arbitrary-angle clockwise rotation.

  • Native Tesseract OCR Recognition: Reliable text extraction from images dependent on local Tesseract binary installation. No WASM fallback; an empty binary path argument will not trigger alternative JS-based OCR engines. Multi-language tessdata resource support with configurable binary and data paths.

  • Strict Input Validation & Unified Response Format: Every tool enables strict additionalProperties: false schema validation to block unexpected input fields. All operations share a universal success/error wrapping structure for consistent client parsing.

  • Multi-Transport Support: Compatible with official standard MCP transports: stdio (local desktop client integration), sse (legacy lightweight remote stream), and Streamable HTTP (modern bidirectional remote streaming transport).

  • Workspace Security Isolation: Provide --lock-root directory restriction capability. All file/directory operations are strictly confined to the specified root workspace to prevent unauthorized cross-directory path escape attacks.

Related MCP server: MCP Toolkit

Quick Start: Run directly with uvx (No pre-installation required)

uvx automatically pulls the published PyPI package and launches an isolated runtime environment, eliminating manual dependency installation or virtual environment setup.

1. Basic uvx startup commands

# Default stdio mode, unrestricted full filesystem access
uvx fsext-mcp-server

# Lock all operations to a dedicated workspace (production security recommended)
uvx fsext-mcp-server --lock-root /your/workspace

Full complete command

# Stdio mode with workspace isolation
uvx fsext-mcp-server --transport stdio --lock-root /your/workspace

# Remote SSE streaming service
uvx fsext-mcp-server --transport sse --host 0.0.0.0 --port 8000 --lock-root /your/workspace

# Modern Streamable HTTP remote service
uvx fsext-mcp-server --transport http --host 0.0.0.0 --port 8000 --lock-root /your/workspace

2. Integrate FsExt tools with LLM frameworks

No pre-deployment on host machines required; uvx dynamically instantiates the server when an MCP client establishes a connection.

Client config example (Claude Desktop / Cursor MCP json)

{
  "mcpServers": {
    "fsext": {
      "command": "uvx",
      "args": [
        "fsext-mcp-server",
        "--lock-root",
        "/your/workspace"
      ],
      "env": {"PYTHONUTF8": "1"}
    }
  }
}

LangChain / LangGraph core integration snippet

Session lifecycle limitations exist within official langchain-mcp-adapters; complete stable long-connection logic requires extra adapter customization. Below is the standard minimal connection template:

# Core config: Connect to FsExt MCP via uvx stdio transport
server_config = {
    "fsext": {
        "transport": "stdio",
        "command": "uvx",
        "args": ["fsext-mcp-server", "--lock-root", r"/your/workspace"],
        "env": {"PYTHONUTF8": "1"}
    }
}

# Load all exposed filesystem MCP tools
client = MultiServerMCPClient(server_config)
async with client.session("fsext") as session:
    mcp_tools = await load_mcp_tools(session)

# Bind loaded MCP tools to LLM instance for agent workflows
llm = ChatOpenAI(base_url="your-local-llm-api").bind_tools(mcp_tools)

Traditional installation & launch via pip

Install published PyPI package

pip install fsext-mcp-server

Launch commands after pip installation

# Default stdio local mode
fsext-mcp-server-py
fsext-mcp-server

# Short alias
fsext-py
fsext

# Secure workspace locked mode
fsext --lock-root /your/workspace

# Remote SSE streaming server
fsext --transport sse --port 8000

Local source repository development setup

It is recommended to use uv for fast, deterministic environment deployment:

# Clone official source repository
git clone https://github.com/kurtzhi/fsext-mcp-server-python
cd fsext-mcp-server-python

# Install full runtime + dev dependencies
uv sync

Core Runtime Dependencies Description

  • chardet: Automatic text file encoding detection

  • Pillow: Core image processing backend for resize, crop, rotate pipelines

  • python-magic: Accurate cross-platform file MIME type identification

  • fastmcp: Official Python MCP server framework

  • uvicorn / starlette: HTTP/SSE transport server runtime

  • pydantic: Strict schema validation for all tool input parameters

  • tesseract: Native bindings for local Tesseract OCR binary

Startup Usage

The server supports three official MCP transport modes and flexible workspace root isolation configuration via CLI flags.

Startup Parameter Reference Table

Parameter

Default Value

Description

--transport

stdio

MCP transport type: stdio / sse / http

--host

127.0.0.1

Network bind address (ignored under stdio transport)

--port

8000

Service bind port (ignored under stdio transport)

--lock-root

None

Restrict all filesystem operations to this root directory; full unrestricted access if omitted

Common Production Startup Commands

1. Default Local Stdio Mode (for Claude Desktop / Cursor AI Clients)

uv run -m fsext

2. Stdio Mode with Mandatory Workspace Lock (Secure Local Agent Use)

uv run -m fsext --lock-root /your/workspace/path

3. Remote SSE Transport Mode

uv run -m fsext --transport sse --host 0.0.0.0 --port 8000
Access Endpoints
  1. SSE long-lived stream subscription channel (server event push): http://<host>:<port>/sse

  2. Client JSON-RPC request submission channel: http://<host>:<port>/messages

MCP Inspector Connection Config
  • Transport type: SSE

  • Connection address input: http://127.0.0.1:8000/sse

4. Standard Streamable HTTP Remote Transport (Modern Bidirectional)

uv run -m fsext --transport http --host 0.0.0.0 --port 8000
Unified Bidirectional Access Endpoint

Single shared entry point for both client requests and server streaming: http://<host>:<port>/mcp

MCP Inspector Connection Config
  • Transport type: Streamable HTTP

  • Connection address input: http://127.0.0.1:8000/mcp

5. SSE vs Streamable HTTP Transport Feature Comparison

Feature

SSE Dual-Endpoint Transport

Streamable HTTP Single-Endpoint Transport

Endpoint Architecture

Two separate endpoints: GET stream subscription + POST message sender

Single unified URL handles all bidirectional traffic

Communication Pattern

Unidirectional server-to-client event push only

Full bidirectional request/stream hybrid capability

Connection Reliability

Frequent session loss, complex cross-endpoint state management

Automatic session recovery, optimized for high concurrent remote connections

Official Specification Status

Legacy compatible implementation, not recommended for new deployments

Current official MCP standard for remote network integrations

Unified Global Response Specification

All MCP tools share an identical top-level wrapping JSON structure for both successful execution and runtime failure states. Every tool’s business payload is nested within the info sub-object under the root res field.

Core Structure Definition

{
  "res": {
    "success": boolean,
    "info": object
  }
}
  • success: Global operation status flag

    • true: Tool logic executed without exceptions; info contains tool-specific return data

    • false: Operation failed (workspace escape block, missing file, IO error, invalid input schema, permission denied, etc.)

  • Dual behavior of info field:

    1. Success mode (success: true): Custom structured business payload unique to each tool

    2. Failure mode (success: false): Fixed standardized error object with machine-readable error code and human-readable explanation

      "info": {
        "code": "ERROR_CODE_IDENTIFIER",
        "message": "Detailed human-readable failure description"
      }

Full Example Responses

1. Successful Response Sample (fs_list_directory)

{
  "res": {
    "success": true,
    "info": {
      "paths": [
        "/tmp/tests/test_util.py",
        "/tmp/tests/__init__.py",
        "/tmp/tests/img/cochem_castle.jpg"
      ]
    }
  }
}

2. Failure Response Sample (Workspace Path Escape Restriction)

{
  "res": {
    "success": false,
    "info": {
      "code": "WORKSPACE_ESCAPE_FORBIDDEN",
      "message": "Access restricted: Path `/tmp/test2` is outside allowed workspace `/tmp/tests`"
    }
  }
}

All tools enforce workspace root isolation and fully follow the standardized input/output schema definitions listed below.

Complete MCP Tools Reference

All tool input schemas enable additionalProperties: false strict validation to reject unrecognized parameters and prevent malicious path injection vectors.

1. Directory Operation Tools

fs_list_directory

Description: Scan target directory recursively or shallowly, return filtered absolute filesystem path list with file-type and extension filtering controls. Parameters:

  • source_dir (string, required): Root directory path for scanning

  • recursive (boolean, required): Enable full recursive traversal of all subdirectories

  • only_files (boolean, required): Filter output to return only regular files, exclude directories

  • file_extension (string, optional, default=""): Filter results to files matching the specified suffix extension Success Response Payload:

{
  "res": {
    "success": true,
    "info": {
      "paths": ["/absolute/path/file1.txt", "/absolute/path/file2.py"]
    }
  }
}

fs_copy_directory

Description: Recursively copy an entire directory tree, with configurable overwrite behavior for pre-existing target directories. Parameters:

  • source_dir (string, required): Source directory tree path

  • copy_dest_dir (string, required): Target output directory path

  • overwrite (boolean, optional, default=false): Clear and overwrite existing destination directory contents Success Response Payload:

{
  "res": {
    "success": true,
    "info": {}
  }
}

fs_move_directory

Description: Atomically move an entire directory tree to a new target path. Fails immediately if destination exists unless overwrite is explicitly enabled to avoid accidental data loss. Parameters:

  • source_dir (string, required): Source directory path

  • dest_dir (string, required): Target directory path

  • overwrite (boolean, optional, default=false): Allow overwriting conflicting destination directories Success Response Payload: Empty info object wrapper with success flag.

2. Single File Basic Operation Tools

fs_create_file

Description: Create a new text file, automatically generate missing parent directories, support configurable text encoding and initial file content. Parameters:

  • file_path (string, required): Target absolute file path

  • content (string, optional, default=""): Initial text content written to the new file

  • charset (string, optional, default="utf-8"): Text encoding enum value (full charset list below) Supported Charset Enum Values: utf-8, utf-16, latin-1, iso-8859-1, cp1252, Windows-1252, gbk, gb2312, shift_jis, euc_jp, euc_kr Success Response Payload: Empty info object wrapper with success flag.

fs_delete_file

Description: Permanently delete a single regular file only; rejects directory path inputs to block mass recursive deletion risks. Parameters:

  • file_path (string, required): Target regular file absolute path Success Response Payload: Empty info object wrapper with success flag.

fs_copy_file

Description: Copy a single file while retaining original filesystem metadata, with configurable overwrite for conflicting target files. Parameters:

  • source_file_path (string, required): Source file absolute path

  • dest_file_path (string, required): Target output file absolute path

  • overwrite (boolean, optional, default=false): Overwrite pre-existing destination file Success Response Payload: Empty info object wrapper with success flag.

fs_move_file

Description: Atomically move a single file to a new absolute path, with configurable overwrite behavior for conflicting destination files. Parameters:

  • source_file_path (string, required): Source file absolute path

  • dest_file_path (string, required): Target file absolute path

  • overwrite (boolean, optional, default=false): Allow overwriting conflicting destination files Success Response Payload: Empty info object wrapper with success flag.

fs_get_file_info

Description: Retrieve complete metadata for files or directories, with optional SHA-256 cryptographic digest calculation for integrity verification. Parameters:

  • file_path (string, required): Target filesystem entry absolute path

  • calc_digest (boolean, optional, default=false): Compute SHA-256 hash of file contents Success Response Payload:

{
  "res": {
    "success": true,
    "info": {
      "absolute_path": "C:\\Users\\zhigu\\Documents\\My Games\\fsext-mcp-server\\pyproject.toml",
      "is_readable": true,
      "is_writable": true,
      "size": 1672,
      "is_regular_file": true,
      "is_directory": false,
      "is_symbolic_link": false,
      "creation_millis": 1782288135574.7114,
      "last_modified_millis": 1782279393020.1187,
      "last_access_millis": 1782644004556.3462,
      "sha256_digest": "59614cf5f8ecff38de37637f1d5b6f607d885bd277815786f5ce4bb2ee5b73a6"
    }
  }
}

fs_is_file_exists

Description: Lightweight existence check for any filesystem entry (file or directory) without loading full metadata. Parameters:

  • file_path (string, required): Target absolute path to verify Success Response Payload:

{
  "res": {
    "success": true,
    "info": {
      "exists": true
    }
  }
}

3. File Read & Write Tools

fs_read_full_text

Description: Read the complete text content of a target file with user-specified text encoding. Parameters:

  • file_path (string, required): Target text file absolute path

  • charset (string, optional, default="utf-8"): Text encoding enum value Success Response Payload:

{
  "res": {
    "success": true,
    "info": {
      "content": "complete-text-file-content-here"
    }
  }
}

fs_read_text_range

Description: Stream segmented text reading optimized for large files; skip leading lines and limit total read lines to avoid memory overload. Parameters:

  • file_path (string, required): Target text file absolute path

  • lines_to_skip (integer, required, minimum=0): Number of initial lines to skip during reading

  • max_lines_to_read (integer, required, minimum=0): Maximum total lines to extract from file

  • line_separator (string, optional, default="\n"): Line break delimiter character

  • charset (string, optional, default="utf-8"): Text encoding enum value Success Response Payload:

{
  "res": {
    "success": true,
    "info": {
      "lines_count": 5,
      "content": "segmented-text-content-block"
    }
  }
}

fs_read_binary_chunk

Description: Chunked streaming read for binary files; returns Base64 encoded byte payloads for safe network JSON-RPC transmission with end-of-stream marker detection. Parameters:

  • file_path (string, required): Target binary file absolute path

  • bytes_to_skip (integer, required, minimum=0): Number of leading bytes to skip before reading chunk

  • max_bytes_to_read (integer, required, minimum=0): Maximum byte length to read in single chunk Success Response Payload:

{
  "res": {
    "success": true,
    "info": {
      "data_base64": "base64-encoded-binary-byte-data",
      "raw_bytes_length": 5,
      "end_of_stream": true
    }
  }
}

fs_write_text

Description: Write UTF or multi-encoded text content to target file, supporting full overwrite or append-only write modes. Parameters:

  • file_path (string, required): Target output file absolute path

  • text (string, required, minLength=1): Raw text content to persist

  • append (boolean, optional, default=false): Append mode flag (false = overwrite entire file)

  • charset (string, optional, default="utf-8"): Text encoding enum value Success Response Payload: Empty info object wrapper with success flag.

fs_write_binary

Description: Decode Base64 encoded binary payload and write raw bytes to target file, supporting append mode for multi-chunk binary uploads. Parameters:

  • file_path (string, required): Target output file absolute path

  • base64_data (string, required, minLength=1): Base64 encoded raw binary byte payload

  • append (boolean, optional, default=false): Append binary data to end of file (false = overwrite) Success Response Payload: Empty info object wrapper with success flag.

4. Content Search & In-Place Replace Tools

fs_search_files_by_content

Description: Recursively scan directory tree and return absolute paths of all files containing matching target text pattern; support regex matching, case insensitivity, and file extension filtering. Parameters:

  • dir_path (string, required): Root directory for recursive content scan

  • recursive (boolean, required): Enable full subdirectory recursion

  • search_term (string, required): Plain text keyword or regular expression pattern

  • is_regex (boolean, optional, default=false): Treat search_term as regex pattern when true

  • ignore_case (boolean, optional, default=true): Case-insensitive pattern matching

  • file_extension (string, optional, default=""): Filter scanned files by extension suffix

  • charset (string, optional, default="utf-8"): Text encoding enum value for file parsing

fs_search_in_files_by_content

Description: Multi-directory bulk content matching, returns structured match results with configurable preceding and trailing context lines around matched content, plus global result count limiting. Parameters:

  • dir_path (string, required): Root scan directory absolute path

  • recursive (boolean, required): Enable full recursive subdirectory traversal

  • search_term (string, required): Search keyword or regex pattern

  • limit (integer, required): Hard maximum limit on total returned matching entries

  • is_regex (boolean, optional, default=false): Enable regular expression matching

  • ignore_case (boolean, optional, default=true): Disable case-sensitive matching

  • lines_before (integer, optional, default=0): Number of context lines preceding each matched line

  • lines_after (integer, optional, default=0): Number of context lines following each matched line

  • file_extension (string, optional, default=""): Filter scanned files by extension suffix

  • charset (string, optional, default="utf-8"): Text encoding enum value for file parsing Success Response Payload:

{
  "res": {
    "success": true,
    "info": {
      "results": [
        {
          "file_path": "/absolute/path/source.py",
          "start_line": 1,
          "end_line": 1,
          "text": "full-matched-line-content-with-context"
        }
      ]
    }
  }
}

fs_search_in_file_by_content

Description: Precision single-file content search, returns structured matching segments with configurable pre/post context lines for code and document inspection workflows. Parameters:

  • file_path (string, required): Target single file absolute path

  • search_term (string, required): Search keyword or regex pattern

  • is_regex (boolean, optional, default=false): Enable regular expression matching logic

  • ignore_case (boolean, optional, default=true): Case-insensitive matching toggle

  • lines_before (integer, optional, default=0): Preceding context lines for each match

  • lines_after (integer, optional, default=0): Subsequent context lines for each match

  • charset (string, optional, default="utf-8"): Text encoding enum value for file parsing Success Response Payload: Structured array of line match objects identical to multi-file search output format.

fs_file_replace

Description: Perform global in-place text replacement within a single target file; return total count of matched and replaced text segments after write. Parameters:

  • file_path (string, required): Target editable file absolute path

  • search_term (string, required): Text substring to locate and replace

  • replacement (string, required): New replacement text payload

  • line_separator (string, optional, default="\n"): Line break delimiter for file parsing Success Response Payload:

{
  "res": {
    "success": true,
    "info": {
      "count": 1
    }
  }
}

5. Image Processing Tools

fs_image_resize

Description: Resize source image to specified width/height dimensions, with native support for aspect ratio preservation and canvas padding to fill exact target resolution dimensions. Parameters:

  • source_path (string, required): Source input image absolute path

  • dest_path (string, required): Resized output image absolute path

  • width (integer, required, exclusiveMinimum=0): Target pixel width dimension

  • height (integer, required, exclusiveMinimum=0): Target pixel height dimension

  • keep_aspect_ratio (boolean, optional, default=true): Lock original image aspect ratio during scaling

  • pad_to_target (boolean, optional, default=true): Add transparent padding to fill exact target width/height when aspect ratio is locked Success Response Payload: Empty info object wrapper with success flag.

fs_image_crop

Description: Extract a rectangular pixel region from source image and export as a standalone output image file. Parameters:

  • source_path (string, required): Source input image absolute path

  • dest_path (string, required): Cropped output image absolute path

  • x (integer, required, minimum=0): Left pixel coordinate of crop region origin

  • y (integer, required, minimum=0): Top pixel coordinate of crop region origin

  • width (integer, required, exclusiveMinimum=0): Pixel width of cropped rectangular region

  • height (integer, required, exclusiveMinimum=0): Pixel height of cropped rectangular region Success Response Payload: Empty info object wrapper with success flag.

fs_image_rotate

Description: Rotate source image clockwise by arbitrary floating-point degree values; automatically expand output canvas dimensions to retain full image content without clipping edges. Parameters:

  • source_path (string, required): Source input image absolute path

  • dest_path (string, required): Rotated output image absolute path

  • degrees (number, required): Clockwise rotation angle in degrees Success Response Payload: Empty info object wrapper with success flag.

6. OCR Text Extraction Tool

fs_ocr_extract_text

Description: Extract human-readable text from raster image files via local Tesseract OCR binary installation. No WASM JavaScript fallback implementation exists; an empty tesseract_bin_path argument will not initialize alternative web-based OCR engines. Parameters:

  • image_path (string, required): Input image absolute path for text recognition

  • tesseract_bin_path (string, optional, default=""): Absolute path to local Tesseract executable binary; empty value uses system PATH lookup only

  • tessdata_path (string, optional, default=""): Absolute directory path containing Tesseract language training data files

  • lang (string, optional, default="eng"): Language code prefix matching available tessdata training files Success Response Payload:

{
  "res": {
    "success": true,
    "info": {
      "content": "full-ocr-extracted-text-from-input-image"
    }
  }
}

Project Build & Development Scripts

All standardized npm-equivalent uv development scripts for source repository contributors:

# Clean compiled build artifacts and temporary output directories
uv run -m scripts.clean

# Compile source code and type validation
uv run -m scripts.build

# Watch source files for incremental development rebuilds
uv run -m scripts.dev

# Full rebuild pipeline: clean artifacts + full source compilation
uv run -m scripts.rebuild

# Launch remote SSE transport server instance
uv run -m scripts.server

# FastMCP interactive development mode
uv run -m scripts.fastmcp

# MCP Inspector debug connection launcher
uv run -m scripts.inspect

# Execute full test suite with compiled test artifacts
uv run -m scripts.test

Core Runtime Dependencies

  • fastmcp: Official Python MCP server runtime framework

  • Pillow: Cross-platform image processing backend for resize, crop, rotate pipelines

  • tesseract: Native Python bindings for local Tesseract OCR binary

  • chardet: Multi-encoding text file detection

  • iconv-lite equivalent backends: Cross-platform text encoding conversion utilities

  • cors: CORS middleware for HTTP/SSE remote transport servers

  • minimist equivalent CLI parser: Command line argument parsing for startup flags

  • pydantic: Strict typed schema validation for all MCP tool input schemas

  • uvicorn / starlette: ASGI HTTP server runtime for remote transport deployments

License

This project is open-sourced under the Apache License 2.0. See the LICENSE file located in the project root directory for complete legal license terms and conditions.

Third-Party Component Licenses

This project integrates multiple open-source dependency libraries including chardet, Pillow, python-magic, and Tesseract bindings. All third-party libraries retain their respective original open-source license agreements and copyright statements.

Important Note: No FFmpeg binary artifacts are bundled within this distribution. End users must comply with FFmpeg’s official licensing terms separately if media processing extensions are enabled externally.

Repository & Issue Tracking

Available Tools

22 tools
fs_copy_directoryA

Copy full directory tree, overwrite controls existing target cleanup.

ParametersJSON Schema
NameRequiredDescriptionDefault
overwriteNo
source_dirYes
copy_dest_dirYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.5/5.0
Behavior3/5

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

With no annotations provided, the description carries the burden of disclosing behavior. It adds 'overwrite controls existing target cleanup,' which hints at how the overwrite parameter affects the operation, but it does not fully explain whether overwrite deletes the entire target directory, only overwrites files, or any other side effects. The statement is ambiguous but provides some value.

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, concise sentence that conveys the core functionality and one key behavioral nuance. Every word earns its place; there is no filler or redundancy.

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

Completeness3/5

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

For a directory copy operation with three parameters, the description is minimal. It does not mention required permissions, error conditions, handling of symlinks/hidden files, or what the output schema contains. The output schema exists but is not shown; still, the description lacks enough context for the agent to anticipate edge cases or failure modes. It is adequate but has clear gaps.

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

Parameters3/5

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

The schema has 0% description coverage, so the description must compensate. It explains the 'overwrite' parameter as controlling existing target cleanup, but it leaves 'source_dir' and 'copy_dest_dir' undefined. These are relatively self-explanatory names, but the description does not fully mitigate the lack of schema documentation, especially for the overwrite semantics.

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 action ('Copy full directory tree') with a specific verb and resource. The phrase 'full directory tree' indicates recursive copying, distinguishing it from sibling tools like fs_copy_file, which handles single files.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives such as fs_copy_file or fs_move_directory. No explicit use cases, prerequisites, or exclusions are mentioned, leaving the agent to infer applicability solely from the tool name.

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

fs_copy_fileC

Copy file with metadata, overwrite toggle.

ParametersJSON Schema
NameRequiredDescriptionDefault
overwriteNo
dest_file_pathYes
source_file_pathYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.8/5.0
Behavior2/5

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

No annotations are provided, so the description must carry the burden of behavioral disclosure. It mentions 'overwrite toggle' which hints at overwrite behavior, but does not state whether overwrite defaults to false, what happens if the destination exists, or what 'metadata' specifically includes (e.g., permissions, timestamps). This leaves significant ambiguity about side effects and error conditions.

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 short phrases, front-loaded with the verb 'Copy' and resource 'file'. There is no filler or redundancy. It is appropriately sized for the tool's simplicity, though other dimensions suffer from the brevity.

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

Completeness2/5

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

Despite being a simple copy operation, the description lacks essential context such as the meaning of 'metadata', the exact overwrite behavior, and any prerequisites or caveats. An output schema exists but is not described; with no annotations, the description is incomplete for reliable tool selection and invocation.

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 must compensate. It only references the 'overwrite' parameter via 'overwrite toggle' and provides no additional meaning for source_file_path or dest_file_path beyond their self-explanatory names. The parameter semantics are largely left to the schema's type and requiredness, which is minimal.

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

Purpose4/5

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

The description clearly identifies the operation as copying a file and mentions a distinguishing feature (metadata preservation) and an overwrite toggle. The resource type 'file' differentiates from sibling tools like fs_copy_directory, though 'with metadata' is somewhat vague and could be interpreted as copying metadata properties without specifics.

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

Usage Guidelines2/5

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

The description does not provide any explicit guidance on when to use this tool versus alternatives. It implies usage for file copying, but no exclusions or conditions are stated. The sibling tools include move and delete operations, but the description does not clarify that this is for copying as opposed to moving or linking, leaving the agent to infer from the name.

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

fs_create_fileC

Create text file with initial content.

ParametersJSON Schema
NameRequiredDescriptionDefault
charsetNoutf-8
contentNo
file_pathYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.8/5.0
Behavior2/5

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

With no annotations, the description carries the full burden. It does not disclose overwrite behavior, error handling, parent directory creation, or the role of charset. Minimal behavioral information is provided.

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, concise sentence that is immediately clear. It is front-loaded and contains no filler, earning a high score for efficiency.

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

Completeness2/5

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

Given the absence of annotations and minimal schema descriptions, the description is insufficient for complete understanding. Key operational details like overwrite behavior, naming rules, and encoding effects are missing, leaving the agent under-informed.

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. It only hints at the 'content' parameter via 'initial content' but says nothing about file_path or charset. Parameter names are somewhat self-explanatory, but the description adds little value.

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

Purpose4/5

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

The description clearly states the action (create) and target (text file) with initial content. It distinguishes from siblings, though not explicitly; fs_write_text could imply writing to an existing file, but the description doesn't make that contrast.

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

Usage Guidelines2/5

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

No guidance on when to use this tool versus sibling tools like fs_write_text or how it relates to file replacement. Context is not provided, so the agent must infer usage.

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

fs_delete_fileA

Delete single regular file, reject directory.

ParametersJSON Schema
NameRequiredDescriptionDefault
file_pathYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.5/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden. It discloses that directories are rejected, but omits crucial behavioral details for a delete operation: irreversibility, permission requirements, symlink handling, and failure behavior. This is dangerously minimal for a destructive action.

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

Conciseness5/5

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

The description is a single, front-loaded sentence with no fluff or redundancy. Every word carries meaning, making it highly efficient.

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

Completeness2/5

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

Although the tool is simple and a skeleton output exists, this is a destructive operation with no annotations. The description covers the basic purpose but lacks essential context about side effects, error cases, and permission requirements. The absence of such context makes it inadequate for safe invocation.

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 has 0% description coverage, and the description only implies that file_path must be a regular file. It adds no information about path format (absolute/relative), resolution, or constraints beyond the directory rejection. The description does not 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 uses a specific verb ('Delete') and resource ('single regular file'), clearly distinguishing this from sibling tools like copy, move, and search operations. It also explicitly notes that directories are rejected, further narrowing the purpose.

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

Usage Guidelines4/5

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

The description states it is for deleting a single regular file and not a directory, which gives clear usage context relative to file-type operations. However, it does not explicitly name alternative tools for other cases, so it stops short of full when-to-use guidance.

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

fs_file_replaceC

In-place text replace, return matched line count.

ParametersJSON Schema
NameRequiredDescriptionDefault
file_pathYes
replacementYes
search_termYes
line_separatorNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations, the description bears full responsibility for behavioral disclosure. It mentions 'in-place' (mutation) and return count, but lacks details on error handling, whether all occurrences are replaced, and the role of line_separator. This is insufficient for a destructive operation.

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

Conciseness4/5

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

The description is only six words, making it highly efficient and front-loaded. While very brief, it avoids redundancy and conveys the core action and return value. It could be slightly more informative without losing conciseness.

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

Completeness1/5

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

For a file mutation tool with four parameters and no annotations, this description is severely incomplete. It omits critical context such as file handling, match semantics, and the line_separator parameter's purpose. The presence of an output schema mitigates the need to detail return format, but other gaps remain.

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, so the description must clarify parameter meanings. It only implies search_term and replacement via 'text replace' but does not explain file_path or line_separator, leaving them ambiguous.

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 operation ('in-place text replace') and the unique return value ('matched line count'). This distinguishes it from sibling tools like fs_write_text (whole-file write) and fs_search_in_file_by_content (read-only search).

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

Usage Guidelines2/5

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

No guidance is provided on when to use this tool versus alternatives. It doesn't mention prerequisites such as file existence, nor does it explain when to choose this over fs_write_text or search tools.

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

fs_get_file_infoC

Get full file/directory metadata.

ParametersJSON Schema
NameRequiredDescriptionDefault
file_pathYes
calc_digestNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.8/5.0
Behavior2/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. However, it only says 'Get full file/directory metadata,' adding no information about error handling, required permissions, return format, or the optional digest calculation. Behavior is under-specified.

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 a single sentence with no unnecessary words, making it concise and front-loaded with the purpose. However, its extreme brevity means it lacks detail, though this does not affect structural efficiency.

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

Completeness2/5

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

Despite having an output schema, the description is incomplete for a tool with two parameters and no annotations. It does not explain calc_digest, error behaviors, or usage context. For a simple metadata getter, it could easily mention key optional parameters and operational details.

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

Parameters1/5

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

The schema has two parameters (file_path and calc_digest) with 0% description coverage. The description does not mention either parameter, leaving calc_digest completely unexplained. It fails to compensate for the lack of schema descriptions.

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

Purpose5/5

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

The description 'Get full file/directory metadata' uses a specific verb and resource, clearly stating the tool's function. It is distinct from sibling tools, which perform different operations like delete, copy, move, or read.

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

Usage Guidelines2/5

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

No usage guidance is provided. The description does not mention when to use this tool versus alternatives, nor does it state any prerequisites, exclusions, or context. It simply states the purpose without any direction.

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

fs_image_cropC

Crop rectangular region from image.

ParametersJSON Schema
NameRequiredDescriptionDefault
xYes
yYes
widthYes
heightYes
dest_pathYes
source_pathYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.7/5.0
Behavior2/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It does not mention side effects such as overwriting dest_path, coordinate system origin, required permissions, or behavior on missing files. For a mutation tool, this is a significant gap.

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

Conciseness3/5

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

The description is a single short sentence, but it is under-specified for a tool with six required parameters. While it is concise, it lacks structure and does not earn its place by providing additional helpful context beyond the name.

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

Completeness2/5

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

Given the tool's complexity (six required parameters) and lack of annotations, the description is far from complete. It does not cover key behavioral aspects like coordinate handling, overwrite rules, or file format support. The presence of an output schema does not compensate for the missing operational context.

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

Parameters1/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 does not explain any parameters, leaving x, y, width, height, source_path, and dest_path without meaning. The description 'rectangular region' only weakly implies coordinates but provides no units, origin, or relationship to the parameters.

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 'Crop rectangular region from image' clearly states the tool's function with a specific verb ('Crop') and a specific resource ('image'), and it differentiates from siblings like fs_image_resize and fs_image_rotate by specifying the crop operation.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives, and no exclusions or alternative tool references. It omits any context about prerequisites or suitability, offering no usage guidance beyond the basic action.

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

fs_image_resizeB

Resize image with ratio lock and padding support.

ParametersJSON Schema
NameRequiredDescriptionDefault
widthYes
heightYes
dest_pathYes
source_pathYes
pad_to_targetNo
keep_aspect_ratioNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.2/5.0
Behavior2/5

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

With no annotations, the description carries the full burden. It mentions 'ratio lock' and 'padding support' but does not explain how these features behave, what defaults apply, what happens to the image when aspect ratio is not locked, or whether dest_path is overwritten.

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

Conciseness5/5

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

The description is a single, front-loaded sentence with no filler. Every word adds value: 'Resize image' states the action, and 'ratio lock and padding support' identifies the key features.

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

Completeness2/5

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

Despite having an output schema, the description is incomplete for a tool with 6 parameters and no parameter descriptions. It fails to clarify core behavioral details like aspect ratio handling, padding behavior, or expected input dimension semantics.

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

Parameters3/5

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

Schema description coverage is 0%, so the description must compensate. It provides hints that 'ratio lock' relates to keep_aspect_ratio and 'padding support' to pad_to_target, but it does not explain the meaning of width and height or how they interact with the optional flags.

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 the specific verb 'Resize' with the resource 'image' and names two key features: 'ratio lock' and 'padding support'. This clearly distinguishes it from sibling tools like fs_image_crop and fs_image_rotate.

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

Usage Guidelines2/5

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

No guidance is provided on when to use this tool versus alternatives. It does not mention exclusions, prerequisites, or contrasting use cases with sibling tools like crop or rotate.

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

fs_image_rotateA

Rotate image clockwise, expand canvas to retain full content.

ParametersJSON Schema
NameRequiredDescriptionDefault
degreesYes
dest_pathYes
source_pathYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.5/5.0
Behavior3/5

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

With no annotations, the description carries the full burden. It discloses a key behavior—expanding the canvas to retain full content—but does not mention side effects such as file overwriting, permission requirements, or whether the operation is read-only. This is an adequate but incomplete disclosure.

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

Conciseness5/5

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

The description is two short sentences, front-loaded with the main action. Every word earns its place, and it is appropriately concise.

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

Completeness2/5

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

While the tool is simple and an output schema exists, the description lacks critical parameter semantics and edge-case behavior (e.g., what happens with non-90-degree rotations). With zero schema coverage, the description should compensate but does not, leaving the agent under-informed.

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

Parameters1/5

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

Schema description coverage is 0%, so the description must explain the parameters, but it does not. The description mentions rotation but gives no meaning to 'degrees' or directionality. This is a significant gap—the agent has no information about what values the parameters should take or their formats.

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 identifies the tool's function: rotating an image clockwise. It specifies the resource (image) and the action (rotate), and the additional detail about expanding the canvas distinguishes it from sibling tools like fs_image_resize and fs_image_crop.

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 implies when to use the tool (when rotation is needed) but does not explicitly mention alternatives or exclusions. It provides clear context but lacks explicit 'when not to use' guidance, so a 4 is appropriate.

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

fs_is_file_existsC

Check filesystem entry existence.

ParametersJSON Schema
NameRequiredDescriptionDefault
file_pathYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.9/5.0
Behavior2/5

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

No annotations are provided, so the description must carry the full burden of behavioral transparency. It only states what the tool does, not what it returns (e.g., boolean? error on missing?), whether it follows symlinks, or what 'entry' encompasses (file/directory). The description is minimal and leaves critical operational behavior implicit.

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

Conciseness3/5

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

The description is a single sentence with no fluff, which is structurally efficient. However, it borders on under-specification, as it omits any detail about return behavior or usage context. For such a simple tool, brevity is acceptable, but it could be improved without adding unnecessary length.

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

Completeness2/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 would expect a brief description to suffice, but the lack of return-type information and usage guidance makes it incomplete for an agent to know how to interpret the result. The presence of an output schema helps but is not shown here; the description itself does not round out the context.

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 has 0% description coverage for file_path, and the description does not compensate. While the parameter name is self-explanatory, the description adds no additional meaning—such as expected format, whether it supports relative/absolute paths, or how the existence check handles invalid inputs.

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 'Check filesystem entry existence.' clearly states the tool's purpose with a specific verb ('check') and resource ('filesystem entry'), and it distinguishes itself from sibling tools that perform operations like deletion (fs_delete_file) or reading (fs_read_full_text). It is immediately clear this is an existence test.

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

Usage Guidelines2/5

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

The description gives no guidance on when to use this tool vs alternatives. It does not mention that it could be a prerequisite before other operations, nor does it state when it should be avoided. Sibling tools like fs_get_file_info also check path validity, so usage context is ambiguous.

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

fs_list_directoryC

Scan directory, return matched absolute path list.

ParametersJSON Schema
NameRequiredDescriptionDefault
recursiveYes
only_filesYes
source_dirYes
file_extensionNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.6/5.0
Behavior2/5

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

No annotations are provided, so the description carries full burden for behavioral disclosure. It merely says 'Scan directory' without stating whether this is read-only, how recursion works, what 'only_files' does, or what error conditions might occur. The behavioral traits are mostly left to the parameter names, which is insufficient.

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

Conciseness3/5

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

The description is a single short sentence, making it concise in word count. However, it lacks any structure that would help an agent parse options or prerequisites. It is under-specified, which reduces the value of its brevity.

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

Completeness2/5

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

With four parameters, a matching filter, and a recursive option, the description is far too thin. It doesn't explain how matching works, what values are acceptable for source_dir, or how recursive and only_files interact. Although an output schema exists, the description still fails to provide sufficient context for correct invocation.

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

Parameters2/5

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

Schema description coverage is 0%, and the description does not explain any of the four parameters. 'Scan directory' implies source_dir, but recursive, only_files, and file_extension are not described. The parameter names provide some hints, but the description adds no additional semantic value beyond simple inference.

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

Purpose4/5

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

The description uses a specific verb ('Scan') and resource ('directory') and states the result ('matched absolute path list'). It clearly distinguishes from sibling file-operation tools, as this is the only directory listing tool. However, 'matched' is ambiguous—it doesn't specify what matching criteria apply (e.g., file extension), so it's not a perfect 5.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives. It doesn't mention when to choose it over the search tools (e.g., fs_search_files_by_content) or how to combine it with other directory operations. No exclusions or alternative suggestions are given.

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

fs_move_directoryB

Move directory, fail if destination exists.

ParametersJSON Schema
NameRequiredDescriptionDefault
dest_dirYes
overwriteNo
source_dirYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.3/5.0
Behavior3/5

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

No annotations are provided, so description must disclose behavior. It does reveal a key failure condition ('fail if destination exists') but omits interaction with the 'overwrite' parameter, permission requirements, and move semantics (e.g., atomicity, parent dir creation). This leaves important behavioral gaps for a mutating operation.

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?

Single concise sentence, front-loaded with verb and resource, zero filler. It states the core operation and one critical constraint in minimal words.

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

Completeness2/5

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

Despite having an output schema, the description is too sparse for a mutation tool. Overwrite semantics, error behavior beyond existence check, and any required preconditions are absent. The two required path parameters and optional overwrite need more explanation for safe use.

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

Parameters1/5

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

Schema description coverage is 0% and the description provides no parameter semantics. The overwrite parameter is entirely unexplained, and source_dir/dest_dir formats or constraints are not described. Description fails to compensate for the schema's lack of documentation.

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' and resource 'directory', clearly distinguishing it from sibling fs_move_file. The fail-if-exists condition adds behavioral specificity beyond a generic move.

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

Usage Guidelines3/5

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

No explicit guidance on when to use vs alternatives like fs_copy_directory or fs_move_file. The context implies usage for moving directories, but the tool doesn't state when to choose it over siblings or when not to use it.

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

fs_move_fileB

Move file, control overwrite behavior.

ParametersJSON Schema
NameRequiredDescriptionDefault
overwriteNo
dest_file_pathYes
source_file_pathYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.1/5.0
Behavior2/5

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

With no annotations, the description bears the full burden of behavioral disclosure. It mentions overwrite control but does not explain what moving entails, such as whether the source is deleted, the default overwrite behavior, or what happens when the destination exists. This is a significant gap for a potentially destructive operation.

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, containing only two short phrases. It is front-loaded with the primary action and includes no filler or redundant information.

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

Completeness2/5

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

For a file-moving operation with overwrite potential and no annotations, the description is too sparse. It fails to state default overwrite behavior, destination-conflict handling, or whether the operation is limited to the same filesystem, leaving critical safety details undisclosed.

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 must compensate. It only vaguely references 'overwrite behavior' and does not clarify the meaning of source_file_path, dest_file_path, or how the overwrite boolean/null value affects the operation. This adds minimal value beyond the raw parameter names.

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

Purpose5/5

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

The description clearly states the action ('Move file') and the specific resource ('file'), which distinguishes it from siblings like fs_move_directory and fs_copy_file. The added phrase 'control overwrite behavior' also signals a key functional aspect.

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

Usage Guidelines2/5

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

No explicit guidance is provided on when to use this tool versus alternatives such as fs_move_directory or fs_copy_file. The tool name and 'Move file' imply the use case, but the description lacks exclusions, prerequisites, or comparative context.

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

fs_ocr_extract_textB

Extract text from image via Tesseract OCR.

ParametersJSON Schema
NameRequiredDescriptionDefault
langNoeng
image_pathYes
tessdata_pathNo
tesseract_bin_pathNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.3/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden. It only states the operation and does not disclose dependencies on Tesseract binaries, potential side effects, error behavior, or whether the image file is modified (it is not specified). This is a notable gap for a tool with zero annotation support.

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

Conciseness5/5

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

The description is a single, direct sentence with no redundant information. It is front-loaded with the key action and resource.

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

Completeness2/5

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

With zero annotations and zero schema descriptions, this minimal description is insufficient for a 4-parameter tool. It does not mention prerequisites like Tesseract installation, output format details, or failure scenarios, even though an output schema exists but is not shown.

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

Parameters2/5

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

Schema description coverage is 0%, and the description does not explain the meaning of image_path, lang, tessdata_path, or tesseract_bin_path. The parameter names are somewhat self-explanatory, but the description adds no semantic value beyond the schema.

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

Purpose5/5

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

The description uses the specific verb 'Extract' with the object 'text' and the source 'image', and specifies the method 'via Tesseract OCR'. This clearly distinguishes it from sibling file and image manipulation tools.

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

Usage Guidelines3/5

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

The description implies use for OCR on images, but provides no explicit guidance on when to use this tool versus alternatives like fs_read_full_text for text files or fs_search_in_file_by_content. There is no mention of exclusions or prerequisites.

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

fs_read_binary_chunkC

Partial binary read, base64 output, 0 unlimited.

ParametersJSON Schema
NameRequiredDescriptionDefault
file_pathYes
bytes_to_skipNo
max_bytes_to_readNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.7/5.0
Behavior3/5

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

The description discloses key behavioral details: base64 output and that a parameter value of 0 means unlimited reading, which is not evident from the schema. However, it omits error handling, edge cases, and how offsets are applied, leaving significant transparency gaps.

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

Conciseness3/5

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

The description is extremely brief, consisting of a fragment with three pieces of information. It is front-loaded and wastes no words, but the lack of structure and ambiguity make it borderline under-specified.

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

Completeness2/5

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

For a tool with three parameters, no annotations, and an output schema, the description is too sparse. It does not explain offset behavior, file path expectations, or how this relates to sibling read tools, leaving significant gaps for the agent.

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

Parameters3/5

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

Given 0% schema description coverage, the description adds meaning to at least one parameter: '0 unlimited' likely clarifies the max_bytes_to_read default. But bytes_to_skip and file_path are left implicit, relying on their names for understanding, so compensation is partial.

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

Purpose3/5

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

The description 'Partial binary read, base64 output, 0 unlimited' indicates the tool reads part of a binary file and returns base64-encoded data, but it is phrased as a fragment rather than a complete sentence. It distinguishes from text reads by mentioning 'binary', but does not explicitly contrast with sibling read tools.

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

Usage Guidelines2/5

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

No usage guidance is provided. The description does not mention when to use this tool over fs_read_full_text or fs_read_text_range, nor any prerequisites or exclusions.

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

fs_read_full_textC

Read full text file.

ParametersJSON Schema
NameRequiredDescriptionDefault
charsetNoutf-8
file_pathYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.6/5.0
Behavior2/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It only states the basic read action and does not explain how the charset parameter affects decoding, how errors like file-not-found are handled, or that the entire file is loaded into memory. The implied 'full' behavior is present but not elaborated.

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 a single, succinct sentence that conveys the core action without waste. It is appropriately short for a simple read operation, though it could benefit from a bit more specificity to balance conciseness with usefulness.

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

Completeness2/5

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

Despite having an output schema, the description lacks essential context: it does not mention text encoding handling, file size considerations, or when to choose this tool over fs_read_text_range. The sibling tools highlight missing comparative guidance, making the description functionally bare.

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

Parameters1/5

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

Schema description coverage is 0%, and the description does not mention file_path or charset at all. While the charset parameter has a generic schema description, the tool description itself adds no semantic meaning to either parameter, leaving the agent to infer usage from names alone.

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

Purpose4/5

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

The description clearly states the action (Read) and the resource (full text file), indicating the tool reads the entire contents of a text file. The word 'full' distinguishes it from the sibling fs_read_text_range, though it does not explicitly name that alternative.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives like fs_read_text_range or fs_read_binary_chunk. There is no mention of scenarios such as needing the entire file versus a range, or handling large files.

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

fs_read_text_rangeC

Read sliced text segment, -1 unlimited.

ParametersJSON Schema
NameRequiredDescriptionDefault
charsetNoutf-8
file_pathYes
lines_to_skipYes
line_separatorNo
max_lines_to_readYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.4/5.0
Behavior2/5

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

With no annotations, the description must disclose behavior, but it only mentions the '-1 unlimited' behavior, which is ambiguous as to which parameter it applies. It does not explain read-only nature, error handling, line counting conventions, or interaction with line_separator. This is insufficient for a file-reading tool.

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

Conciseness2/5

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

The description is extremely concise, but it is under-specified rather than efficiently informative. It lacks necessary details and does not follow a structure that front-loads key information. It reads more like a code comment than a tool description.

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

Completeness1/5

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

Given the tool's complexity (5 parameters, no annotations, no output schema clarity), the description is severely incomplete. It fails to explain the purpose of each parameter, the range semantics, or edge cases. An agent cannot reliably determine how to invoke this tool correctly from the description alone.

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 very little description coverage (0% except for charset), and the description adds only a vague note about '-1 unlimited', which is not tied to a specific parameter. This provides minimal value in clarifying the roles of file_path, lines_to_skip, max_lines_to_read, or line_separator.

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

Purpose4/5

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

The description uses the verb 'Read' with the resource 'sliced text segment', indicating that it reads a portion of a text file. The tool name 'fs_read_text_range' and the presence of sibling tools like 'fs_read_full_text' and 'fs_read_binary_chunk' help distinguish it as a range-based text reader. However, it does not explicitly mention that it operates on a file path or clarify what 'sliced' means precisely.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool instead of alternatives. There is no mention of comparing with 'fs_read_full_text' or 'fs_read_binary_chunk', nor any context about when a range read is appropriate. This leaves the agent to infer usage from the name and schema.

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

fs_search_files_by_contentC

Search dir, return paths of files containing target text.

ParametersJSON Schema
NameRequiredDescriptionDefault
charsetNoutf-8
dir_pathYes
is_regexNo
recursiveYes
ignore_caseNo
search_termYes
file_extensionNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.7/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden of behavioral disclosure. It only says 'Search dir' and 'return paths,' but does not disclose read-only behavior, encoding handling, regex/case sensitivity defaults, or how errors or binary files are handled.

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 a single clear sentence with no wasted words. It is concise and front-loaded, though arguably too sparse to be considered well-structured.

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

Completeness2/5

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

With 7 parameters and no annotations, a one-sentence description is insufficient. It omits key context like search scope, filtering options, and parameter behaviors. The presence of an output schema is noted but does not reduce the need for guidance on how to invoke the tool 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% for most parameters, and the description only indirectly refers to dir_path ('dir') and search_term ('target text'). It provides no meaning for recursive, is_regex, ignore_case, file_extension, or charset, so it fails to compensate for the schema's gaps.

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

Purpose4/5

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

The description states the tool's core purpose clearly: 'Search dir, return paths of files containing target text.' This specifies a verb, resource, and result. However, it does not differentiate from sibling tools like fs_search_in_files_by_content and fs_search_in_file_by_content, which appear to have overlapping functionality.

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

Usage Guidelines2/5

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

There is no guidance on when to use this tool versus alternatives, and no mention of conditions like recursion or file filtering. Given the similar sibling search tools, this lack of usage context is a notable gap.

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

fs_search_in_file_by_contentB

Single file content search with line context.

ParametersJSON Schema
NameRequiredDescriptionDefault
charsetNoutf-8
is_regexNo
file_pathYes
ignore_caseNo
lines_afterNo
search_termYes
lines_beforeNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.3/5.0
Behavior2/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It only says 'search', which implies a read-only operation, but it does not mention safety, default behaviors (e.g., ignore_case defaults to true), support for regex, or how context lines are returned. The phrase 'line context' is minimally informative and largely redundant with the schema's lines_before/lines_after parameters.

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 concise sentence with no wasted words. It front-loads the key facts: single-file scope, content search, and line context. It is appropriately sized for the minimal information it conveys, though it sacrifices substance for brevity.

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

Completeness2/5

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

Given 7 parameters and multiple sibling search tools, the description is too sparse. It does not mention the existence of optional parameters like regex, case sensitivity, or encoding, nor does it explain how line context is configured. The output schema exists, so return format is covered, but the description still leaves the agent guessing about feature availability and prerequisites for a complex search operation.

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

Parameters1/5

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

Schema description coverage is 0%, so the description must compensate by explaining parameter meanings and relationships. It does not mention any of the 7 parameters, nor does it clarify how to use them (e.g., that lines_before/lines_after control context, or is_regex enables regex). The description adds no semantic value beyond what the schema already provides, which is nothing for most parameters.

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 a specific verb ('search') and resource ('single file content'), and adds a distinguishing scope ('single file') that differentiates it from sibling tools like fs_search_files_by_content and fs_search_in_files_by_content which search across multiple files. The mention of 'line context' further clarifies the output nature.

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 explicitly specifying 'single file', which tells the agent when to use this tool. However, it does not name alternatives or state explicit 'when not to use' conditions, 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.

fs_search_in_files_by_contentC

Search multi-file with line context, return matched blocks.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitYes
charsetNoutf-8
dir_pathYes
is_regexNo
recursiveYes
ignore_caseNo
lines_afterNo
search_termYes
lines_beforeNo
file_extensionNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.7/5.0
Behavior2/5

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

No annotations are provided, so the description must fully convey behavioral traits. It only says 'Search multi-file with line context, return matched blocks,' omitting the read-only nature, error handling, performance implications, or output structure. Important behavioral details like case sensitivity, regex support, and recursive traversal are left to the schema, which is not sufficient for a safe and efficient selection.

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

Conciseness3/5

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

The description is an 8-word sentence, which is extremely short and front-loaded with the core action. However, the brevity borders on under-specification; it omits details that are necessary for correct usage, making it less 'appropriately sized' and more 'too terse.' It is not as minimal as 'Process,' but it still sacrifices essential information.

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

Completeness2/5

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

For a tool with 10 parameters, no annotations, and only a minimal description, the contextual information is severely lacking. The description does not address when to use the tool, what the returned blocks contain, how parameters interact (e.g., recursive + file_extension), or any error conditions. The presence of an output schema helps, but the tool still needs a more complete description to function effectively.

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

Parameters1/5

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

Schema description coverage is 0%, and the description does not explain any of the 10 parameters. It does not mention dir_path, search_term, recursive, lines_before/after, is_regex, ignore_case, charset, limit, or file_extension. The description adds no value beyond the raw schema, so agents have no additional semantic clues about parameter relationships or typical usage.

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

Purpose4/5

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

The description clearly states it searches multiple files and returns matched blocks with line context. The phrase 'multi-file' differentiates it from the single-file sibling fs_search_in_file_by_content, and 'line context' suggests richer output than fs_search_files_by_content. However, 'matched blocks' is not fully elaborated, and the resource scope could be more explicit.

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

Usage Guidelines3/5

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

The term 'multi-file' implies a directory-wide search use case, but there is no explicit when-to-use guidance, nor any mention of alternatives or exclusions. Sibling tool names hint at trade-offs, but the description itself does not direct the agent toward or away from any specific scenario.

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

fs_write_binaryD

Write sliced binary bytes, -1 length uses full remaining buffer.

ParametersJSON Schema
NameRequiredDescriptionDefault
appendNo
file_pathYes
base64_dataYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

D1.6/5.0
Behavior1/5

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

With no annotations, the description must disclose behavioral traits, but it only offers a cryptic reference to '-1 length uses full remaining buffer' despite no length parameter in the schema. It fails to explain base64 decoding, overwrite behavior, or append semantics.

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

Conciseness2/5

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

The text is short, but it sacrifices necessary information for brevity and includes a confusing reference to slicing that is not supported by the schema. Under-specification outweighs any conciseness benefit.

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

Completeness1/5

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

For a binary write tool with three parameters and no annotations, the description is fundamentally incomplete. It does not explain input encoding, file handling, or how the append flag interacts with the write.

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

Parameters1/5

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

Schema description coverage is 0% and the description adds no meaningful parameter information. It mentions a length concept absent from the schema, and does not clarify file_path, base64_data, or append.

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

Purpose3/5

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

The description states it writes binary bytes, which is a clear verb+resource, and the binary vs. text nature partially distinguishes it from fs_write_text. However, 'sliced' is vague and could imply offset/length parameters that are not present in the schema, making the purpose less crisp.

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

Usage Guidelines1/5

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

There is no guidance on when to use this tool versus alternatives such as fs_write_text or fs_read_binary_chunk. No mention of append semantics, file creation behavior, or preconditions is provided.

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

fs_write_textC

Write text file, append or overwrite.

ParametersJSON Schema
NameRequiredDescriptionDefault
textYes
appendNo
charsetNoutf-8
file_pathYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.9/5.0
Behavior2/5

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

No annotations are provided, so the description must carry the full burden. It discloses the append/overwrite modes but does not mention whether the file is created if missing, how parent directories are handled, encoding behavior, or any potential side effects or errors.

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

Conciseness3/5

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

The description is a single short sentence, which is concise, but it is under-specified rather than efficiently informative. It lacks necessary details without being unnecessarily verbose.

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

Completeness2/5

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

The tool has an output schema, but the description alone does not explain creation behavior, append semantics details, or how the output schema relates to the operation. The description is incomplete for a file mutation tool.

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 must compensate. It implicitly covers 'text' and 'append' but does not mention 'file_path' or 'charset', leaving these parameters unexplained beyond their names.

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

Purpose5/5

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

The description clearly states the tool writes text files and specifies the append or overwrite modes, distinguishing it from sibling tools like fs_write_binary and fs_create_file. The verb 'write' and resource 'text file' are specific and unambiguous.

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

Usage Guidelines2/5

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

There is no guidance on when to use this tool versus alternatives such as fs_create_file or fs_write_binary. The description provides no context for preferred use cases, prerequisites, or exclusions.

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. 22 tool updatesv0.1.3
    • First observedfs_copy_directory
    • First observedfs_copy_file
    • First observedfs_create_file
    • First observedfs_delete_file
    • First observedfs_file_replace
    • First observedfs_get_file_info
    • First observedfs_image_crop
    • First observedfs_image_resize
    • First observedfs_image_rotate
    • First observedfs_is_file_exists
    • First observedfs_list_directory
    • First observedfs_move_directory
    • First observedfs_move_file
    • First observedfs_ocr_extract_text
    • First observedfs_read_binary_chunk
    • First observedfs_read_full_text
    • First observedfs_read_text_range
    • First observedfs_search_files_by_content
    • First observedfs_search_in_file_by_content
    • First observedfs_search_in_files_by_content
    • First observedfs_write_binary
    • First observedfs_write_text

TDQS

C2.6/5.0
Disambiguation3/5

Most tools are clearly distinct, but the three search tools (fs_search_files_by_content, fs_search_in_files_by_content, fs_search_in_file_by_content) have highly overlapping descriptions and could easily be misselected. Additionally, fs_read_full_text and fs_read_text_range are similar, though they differ by range.

Naming Consistency3/5

The 'fs_' prefix is consistent, and most tools follow a verb_noun pattern (e.g., fs_delete_file, fs_create_file). However, image tools use noun_verb (fs_image_resize, fs_image_crop) and fs_ocr_extract_text deviates, while fs_is_file_exists uses a predicate structure. This mixed convention creates inconsistency.

Tool Count4/5

With 22 tools, the server is slightly heavy but each tool fills a specific niche (files, directories, text, binary, search, images, OCR). The count is on the higher end of reasonable but not excessive for the broad domain.

Completeness2/5

File operations are well-covered, but directory operations are missing create and delete functionality. There is no fs_create_directory or fs_delete_directory, which forces agents to work around these gaps. This is a significant omission for a filesystem server.

Maintenance

ActivityStale
ResponsivenessSyncing

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

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

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    F
    maintenance
    A Model Context Protocol server that provides secure and intelligent interaction with files and filesystems, offering smart context management and token-efficient operations for working with large files and complex directory structures.
    21
    66
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    A comprehensive Model Context Protocol server implementation that enables AI assistants to interact with file systems, databases, GitHub repositories, web resources, and system tools while maintaining security and control.
    81
    2
    MIT
  • F
    license
    A
    quality
    D
    maintenance
    A Model Context Protocol (MCP) server that enables AI assistants to perform comprehensive file operations including finding, reading, writing, editing, searching, moving, and copying files with security validations.
    7
    1
    -
  • F
    license
    Not graded
    quality
    C
    maintenance
    A secure Model Context Protocol server providing HTTP endpoints for AI agent tool execution, including file system operations, shell commands, and LLM-based code generation.
    1
    -

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/kurtzhi/fsext-mcp-server-python'

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