Skip to main content
Glama

Desktop Commander MCP Server (Modular FastMCP Implementation)

Comprehensive modular Node.js server implementing Model Context Protocol (MCP) using the FastMCP TypeScript framework. Features enterprise-grade filesystem operations, process management, and terminal session handling with advanced programming techniques.

Features

Comprehensive Tool Categories

  • Filesystem Operations: File reading, writing, editing, copying, moving, and directory management

  • Process Management: System process listing, monitoring, and termination capabilities

  • Terminal Integration: Command execution with session management and output streaming

  • Content Search: Advanced file and code content searching with ripgrep integration

  • ๐Ÿ”ง Package Management: Dependency installation, auditing, and update management for npm and Python packages

  • ๐ŸŒ Network & API: Port checking, HTTP requests, service discovery, and network connectivity testing

  • ๐Ÿ” Code Analysis: Linting, formatting, complexity analysis, duplicate detection, and type checking

  • ๐Ÿ“ File Monitoring: Real-time file watching, log tailing, and directory change tracking

  • ๐Ÿงช Testing: Test execution, coverage reports, continuous testing, and performance benchmarking

Core Filesystem Operations

  • Read multiple files simultaneously with comprehensive error handling

  • Write files with complete content replacement and atomic operations

  • Append content to files with flexible path parameters

  • Edit files with advanced pattern matching and diff generation

  • Create directories recursively with comprehensive validation

  • View directory trees in compact ASCII format with filtering

  • Copy files with comprehensive security validation and overwrite protection

  • Rename/move files with enterprise-grade error handling and integrity verification

  • Delete files with comprehensive validation and safety checks

  • Get detailed file/directory metadata including timestamps and permissions

  • Search files and folders with glob pattern support and filtering options

Advanced System Integration

  • Terminal Session Management: Execute shell commands with persistent session tracking

  • Process Lifecycle Control: List and manage system processes with resource monitoring

  • Code Search Integration: Content searching using ripgrep with regex and context support

  • Resource Templates: File content access through MCP resource interface

FastMCP Framework Advantages

  • Simplified Development: Streamlined tool definition with server.addTool() pattern

  • Direct Schema Integration: Zod schemas used directly without JSON conversion

  • Enhanced Error Handling: UserError for user-facing messages with descriptive context

  • Built-in Testing: Integrated CLI tools for development and debugging

  • Session Management: Automatic client session handling and lifecycle management

Advanced Programming Techniques

  • Design by Contract: Explicit preconditions, postconditions, and invariants

  • Comprehensive Defensive Programming: Multi-layer input validation and security boundaries

  • Type-Driven Development: Runtime type checking with branded types and comprehensive validation

  • Immutability Principles: Pure functions and functional composition patterns

  • Property-Based Testing: Postcondition verification with invariant checking

Modular Architecture

src/
โ”œโ”€โ”€ index.ts                    # Main server entry point and orchestration
โ”œโ”€โ”€ utils/
โ”‚   โ”œโ”€โ”€ security.ts            # Core security validation and path handling
โ”‚   โ””โ”€โ”€ path-helpers.ts        # Shared path schemas and utility functions
โ””โ”€โ”€ tools/
    โ”œโ”€โ”€ filesystem.ts          # File and directory manipulation tools
    โ”œโ”€โ”€ process.ts             # System process management tools
    โ”œโ”€โ”€ terminal.ts            # Command execution and session management tools
    โ”œโ”€โ”€ package-management.ts  # npm and Python package management tools
    โ”œโ”€โ”€ network-api.ts         # Network connectivity and API testing tools
    โ”œโ”€โ”€ code-analysis.ts       # Code linting, formatting, and analysis tools
    โ”œโ”€โ”€ file-monitoring.ts     # File watching and change tracking tools
    โ””โ”€โ”€ testing.ts             # Test execution and coverage analysis tools
  • Clean Separation: Organized into filesystem, process, and terminal tool categories

  • Reusable Utilities: Shared security validation and path handling utilities

  • Maintainable Codebase: Logical organization following enterprise software patterns

  • Scalable Design: Easy addition of new tool categories and functionality

  • 45+ Total Tools: Comprehensive toolset across all categories with advanced programming techniques

Enterprise-Grade Security

  • Triple Path Validation: Defense-in-depth security validation

  • Boundary Enforcement: Comprehensive security boundary checking

  • Descriptive Error Reporting: Security-conscious error messages that prevent information leakage

  • Comprehensive Logging: Built-in logging context for security monitoring and debugging

Note: The server will only allow operations within directories specified via args.

Related MCP server: Readonly Filesystem MCP Server

API

Resources

  • file://{path}: Direct file content access through MCP resource template interface

Filesystem Tools

  • read_multiple_files

    • Read multiple files simultaneously with comprehensive error handling

    • Input: paths (string[])

    • Returns content of each file with clear separation and error reporting

  • write_file

    • Completely replace file content with atomic write operations

    • Inputs:

      • path (string, required): Full path of the file to write

      • content (string, required): Complete content to write to the file

    • Returns success message with operation details

    • Security: File path must be within allowed directories

  • create_directory

    • Create directories with recursive parent creation

    • Input: path (string, required): Full path of the directory to create

    • Returns success message confirming directory creation

    • Security: Directory path must be within allowed directories

  • get_file_info

    • Retrieve detailed metadata about files and directories

    • Input: path / file_path / filepath (string): File/directory location

    • Returns JSON with size, timestamps, permissions, and type information

    • Security: Path must be within allowed directories

  • copy_file

    • Copies a file from a specified source path to a target directory

    • Inputs:

      • source_path (string, required): Full path of the file to copy

      • destination_directory (string, required): Full path of the destination directory

      • overwrite (boolean, optional, default: false): Overwrite existing files

    • Returns success message upon completion

    • Security: Source and destination must be within allowed directories

  • append_file

    • Append new content to an existing file

    • Inputs:

      • path / file_path / filepath (string): File location (provide exactly one)

      • content (string): Content to append

    • Returns the complete content of the file after appending

  • edit_file

    • Make selective edits using advanced pattern matching and formatting

    • Features:

      • Line-based and multi-line content matching

      • Whitespace normalization with indentation preservation

      • Multiple simultaneous edits with correct positioning

      • Indentation style detection and preservation

      • Git-style diff output with context

      • Preview changes with dry run mode

    • Inputs:

      • path / file_path / filepath (string): File to edit (provide exactly one)

      • edits (array): List of edit operations with oldText/newText or old_string/new_string

      • dryRun (boolean): Preview changes without applying (default: false)

    • Returns detailed diff and match information

  • bulk_edit โญ Enterprise Scale

    • Performs bulk find-and-replace operations across thousands of files with a single command.

    • Features:

      • Supports up to 100,000 files with intelligent batch processing.

      • Advanced conditional logic (AND/OR/NOT) to precisely target files based on their path.

      • Built-in and custom ignore patterns (node_modules, .git, etc. are ignored by default).

      • Context-aware matching (e.g., only edit if the preceding line contains specific text).

      • Dry-run mode to preview changes before applying them.

    • Inputs:

      • targets (array): Files, folders, or glob patterns to edit.

      • edits (array): A list of find-and-replace operations with optional conditions and context.

      • ignorePatterns (array, optional): Additional patterns to ignore.

      • dryRun (boolean, optional): Preview changes without saving.

    • Returns a comprehensive diff of all changes across all modified files.

  • directory_tree

    • Generate a compact ASCII tree representation of directory structure

    • Input: path / file_path / filepath (string): Directory location

    • Returns ASCII tree with visual hierarchy and intelligent filtering

  • delete_file

    • Safely delete files with comprehensive validation

    • Input: path / file_path / filepath (string): File to delete

    • Returns success message upon deletion

    • Security: File must exist and be within allowed directories

  • rename_file โญ Enhanced with Advanced Programming Techniques

    • Renames or moves a file from a source path to a destination path

    • Inputs:

      • source_path (string, required): Full path of the file to be renamed/moved

      • destination_path (string, required): New full path for the file

    • Returns success message upon successful renaming

    • Advanced Programming Techniques: Design by Contract, Defensive Programming, Type-Driven Development

  • search_files_and_folders

    • Recursively searches for files and folders with comprehensive filtering

    • Inputs:

      • search_term (string, required): Search query with glob pattern support

      • path (string, optional): Directory to search in

      • search_type (enum, optional): Filter for 'files', 'folders', or 'both'

      • case_sensitive (boolean, optional): Toggle case sensitivity

      • include_hidden (boolean, optional): Include hidden files and folders

    • Returns JSON array of matching paths

Process Management Tools

  • list_processes

    • List all running processes with resource usage information

    • Returns JSON array with PID, name, CPU usage, and memory consumption

    • Security: Read-only operation with comprehensive system monitoring

  • kill_process

    • Terminate a running process by its Process ID (PID)

    • Input: pid (number, required): Process ID to terminate

    • Returns confirmation of termination signal sent

    • Security: Dangerous operation with appropriate warnings and confirmations

Terminal Session Tools

  • execute_command

    • Execute shell commands with persistent session management

    • Inputs:

      • command (string, required): Command or program to execute

      • shell (string, optional): Shell to use for execution

      • timeout_ms (number, optional): Command timeout in milliseconds

    • Returns session ID for tracking and output retrieval

    • Security: Commands executed within allowed directory context

  • read_output

    • Read output from running terminal sessions with optional search functionality

    • Inputs:

      • pid (number, required): Session process ID to read output from

      • search_pattern (string, optional): Text or regex pattern to search for in output

      • is_regex (boolean, optional): Set to true if search_pattern is a regular expression (default: false)

      • case_sensitive (boolean, optional): Set to true for case-sensitive search (default: false)

      • search_target (enum, optional): Target stream to search - 'stdout', 'stderr', or 'both' (default: 'both')

    • Returns session output or structured search results with matching lines and line numbers

    • Enhanced Features:

      • Text Pattern Search: Find specific text in terminal output with intelligent escaping

      • Regex Pattern Search: Advanced pattern matching with full regex support

      • Search Target Selection: Search stdout, stderr, or both streams independently

      • Case Sensitivity Control: Toggle case-sensitive or case-insensitive searching

      • Structured Results: Returns match count, line numbers, and matching text for easy parsing

      • Backward Compatibility: Maintains full compatibility when no search parameters provided

    • Security: Read-only access to session output with comprehensive input validation

  • list_sessions

    • List all active terminal sessions

    • Returns JSON array of active sessions with details

    • Security: Read-only operation showing session metadata

  • force_terminate

    • Forcibly terminate a running terminal session

    • Input: pid (number, required): Session process ID to terminate

    • Returns confirmation of termination

    • Security: Session cleanup with proper resource management

Content Search Tools

  • search_code

    • Search for text patterns within file contents using ripgrep

    • Inputs:

      • pattern (string, required): Text or regex pattern to search for

      • path (string, required): Directory to search within

      • context_lines (number, optional): Lines of context around matches

      • file_pattern (string, optional): File pattern filter

      • ignore_case (boolean, optional): Case-insensitive search

      • include_hidden (boolean, optional): Include hidden files

      • max_results (number, optional): Maximum number of results

    • Returns search results with file paths, line numbers, and context

    • Security: Search confined to allowed directories

๐Ÿ”ง Package Management Tools

  • npm_install

    • Install npm dependencies with automatic lock file management and security validation

    • Inputs:

      • packages (string[], optional): Specific packages to install (if empty, installs from package.json)

      • dev (boolean, optional): Install as development dependencies

      • global (boolean, optional): Install packages globally

      • exact (boolean, optional): Install exact versions

    • Returns installation status and dependency tree information

    • Security: Validates package.json and prevents malicious package installation

  • npm_scripts

    • Execute package.json scripts with real-time output streaming

    • Inputs:

      • script (string, required): Script name from package.json

      • args (string[], optional): Additional arguments to pass to the script

    • Returns script execution output and exit status

    • Security: Validates script existence and monitors execution

  • npm_audit

    • Perform security vulnerability scanning of npm dependencies

    • Returns detailed vulnerability report with severity levels and remediation suggestions

    • Security: Identifies and reports security vulnerabilities in the dependency tree

  • npm_outdated

    • Check for package updates and version compatibility

    • Returns list of outdated packages with current, wanted, and latest versions

    • Security: Helps maintain up-to-date dependencies with security patches

  • pip_install

    • Install Python packages with virtual environment support

    • Inputs:

      • packages (string[], required): Python packages to install

      • requirements_file (string, optional): Install from requirements.txt

      • user (boolean, optional): Install to user site-packages

      • upgrade (boolean, optional): Upgrade existing packages

    • Returns installation status and package information

    • Security: Validates package sources and manages dependencies safely

  • dependency_info

    • Show detailed information about installed packages

    • Inputs:

      • package (string, required): Package name to analyze

      • package_manager (enum, required): 'npm' or 'pip'

    • Returns comprehensive package metadata, dependencies, and security information

    • Security: Provides transparency into package dependencies and potential risks

๐ŸŒ Network & API Tools

  • check_port

    • Check what services are running on specific network ports

    • Inputs:

      • port (number, required): Port number to check

      • host (string, optional): Host to check (defaults to localhost)

    • Returns service information and connection status

    • Security: Network reconnaissance confined to localhost and specified hosts

  • http_request

    • Make HTTP requests for API testing and development

    • Inputs:

      • url (string, required): Target URL for the request

      • method (enum, optional): HTTP method (GET, POST, PUT, DELETE, etc.)

      • headers (object, optional): Request headers

      • body (string, optional): Request body for POST/PUT requests

      • timeout (number, optional): Request timeout in milliseconds

    • Returns response status, headers, and body

    • Security: Validates URLs and prevents requests to internal/sensitive endpoints

  • localhost_services

    • Detect and list local development servers and services

    • Returns comprehensive list of running local services with ports and process information

    • Security: Scans only localhost interfaces and common development ports

  • ping_host

    • Test network connectivity to specified hosts

    • Inputs:

      • host (string, required): Hostname or IP address to ping

      • count (number, optional): Number of ping packets to send

    • Returns connectivity status and response times

    • Security: Validates hostnames and prevents network abuse

  • dns_lookup

    • Perform DNS resolution for development domains and troubleshooting

    • Inputs:

      • hostname (string, required): Domain name to resolve

      • record_type (enum, optional): DNS record type (A, AAAA, MX, TXT, etc.)

    • Returns DNS resolution results and record information

    • Security: Validates domain names and prevents DNS enumeration attacks

๐Ÿ” Code Analysis Tools

  • lint_code

    • Run code linters (ESLint, Pylint, etc.) for code quality analysis

    • Inputs:

      • path (string, required): File or directory to lint

      • linter (enum, optional): Specific linter to use (auto-detected by default)

      • fix (boolean, optional): Automatically fix linting issues

      • config (string, optional): Path to custom linter configuration

    • Returns linting results with issues, warnings, and suggestions

    • Security: Validates file paths and linter configurations

  • format_code

    • Format code using tools like Prettier, Black, or language-specific formatters

    • Inputs:

      • path (string, required): File or directory to format

      • formatter (enum, optional): Specific formatter to use (auto-detected by default)

      • config (string, optional): Path to formatter configuration

    • Returns formatting results and any issues encountered

    • Security: Validates file paths and formatter configurations

  • code_metrics

    • Analyze code complexity, lines of code, and other metrics

    • Inputs:

      • path (string, required): File or directory to analyze

      • include_tests (boolean, optional): Include test files in analysis

    • Returns detailed code metrics including complexity, maintainability index, and technical debt

    • Security: Confined to allowed directories with comprehensive validation

  • find_duplicates

    • Detect copy-paste code and structural duplicates

    • Inputs:

      • path (string, required): Directory to scan for duplicates

      • min_lines (number, optional): Minimum lines for duplicate detection

      • language (string, optional): Programming language for syntax-aware detection

    • Returns list of duplicate code blocks with locations and similarity scores

    • Security: Validates scan directories and prevents excessive resource usage

  • type_check

    • Perform TypeScript/mypy type validation and analysis

    • Inputs:

      • path (string, required): File or directory to type check

      • strict (boolean, optional): Enable strict type checking mode

      • config (string, optional): Path to type checker configuration

    • Returns type checking results with errors, warnings, and suggestions

    • Security: Validates configuration files and prevents malicious type definitions

๐Ÿ“ File Monitoring Tools

  • watch_files

    • Monitor file changes with pattern matching and real-time notifications

    • Inputs:

      • path (string, required): Directory or file to watch

      • patterns (string[], optional): Glob patterns for files to watch

      • ignore_patterns (string[], optional): Patterns to ignore

      • recursive (boolean, optional): Watch subdirectories recursively

    • Returns real-time file change events with timestamps and change types

    • Security: Confined to allowed directories with resource usage limits

  • tail_logs

    • Real-time log file monitoring with filtering and highlighting

    • Inputs:

      • file (string, required): Log file to monitor

      • lines (number, optional): Number of initial lines to display

      • filter (string, optional): Filter pattern for log entries

    • Returns streaming log content with real-time updates

    • Security: Validates log file paths and prevents excessive memory usage

  • directory_watch

    • Comprehensive directory change tracking with detailed event information

    • Inputs:

      • path (string, required): Directory to monitor

      • recursive (boolean, optional): Monitor subdirectories

      • events (string[], optional): Specific events to track (create, modify, delete, move)

    • Returns detailed directory change events with file metadata

    • Security: Resource-limited monitoring with path validation

  • file_diff

    • Compare file contents and track changes over time

    • Inputs:

      • file1 (string, required): First file to compare

      • file2 (string, required): Second file to compare

      • context_lines (number, optional): Lines of context around changes

    • Returns detailed diff with additions, deletions, and modifications

    • Security: Validates file paths and prevents large file processing abuse

๐Ÿงช Testing Tools

  • run_tests

    • Execute test suites (Jest, pytest, etc.) with comprehensive reporting

    • Inputs:

      • test_runner (enum, optional): Test framework to use (auto-detected by default)

      • path (string, optional): Specific test files or directories

      • pattern (string, optional): Test name pattern to match

      • coverage (boolean, optional): Enable code coverage reporting

    • Returns test results with pass/fail status, execution times, and coverage data

    • Security: Validates test configurations and prevents malicious test execution

  • test_coverage

    • Generate detailed code coverage reports with multiple output formats

    • Inputs:

      • path (string, optional): Directory to analyze coverage for

      • format (enum, optional): Output format (html, json, lcov, text)

      • threshold (number, optional): Minimum coverage threshold

    • Returns coverage statistics and detailed reports

    • Security: Validates paths and prevents unauthorized file access

  • test_watch

    • Continuous testing with file monitoring and automatic test execution

    • Inputs:

      • watch_paths (string[], optional): Directories to watch for changes

      • test_pattern (string, optional): Pattern for test files to execute

    • Returns continuous test results with change detection and execution status

    • Security: Resource-limited watching with path validation

  • benchmark

    • Performance testing and profiling for code optimization

    • Inputs:

      • target (string, required): Function, file, or command to benchmark

      • iterations (number, optional): Number of benchmark iterations

      • warmup (number, optional): Warmup iterations before measurement

    • Returns performance metrics including execution time, memory usage, and statistical analysis

    • Security: Validates benchmark targets and prevents resource exhaustion

Utility Tools

  • list_allowed_directories

    • List all directories the server is allowed to access

    • Returns formatted list of allowed directories with security context

Testing and Development

FastMCP Development Tools

# Install dependencies
npm install

# Interactive development and testing (modular architecture)
npx fastmcp dev src/index.ts -- /path/to/allowed/directory

# Web UI inspection with MCP Inspector  
npx fastmcp inspect src/index.ts -- /path/to/allowed/directory

# TypeScript compilation and build
npm run build
npm run watch

# Module-specific testing (development)
npm run test:filesystem
npm run test:process  
npm run test:terminal
npm run test:package-management
npm run test:network-api
npm run test:code-analysis
npm run test:file-monitoring
npm run test:testing

Development Advantages

  • Built-in CLI: Interactive testing environment for rapid development

  • MCP Inspector Integration: Web UI for comprehensive tool testing and debugging

  • Enhanced Error Reporting: Detailed error messages during development

  • Session Management: Built-in debugging capabilities for client sessions

Usage with Claude Desktop

FastMCP implementation maintains full compatibility with Claude Desktop while providing enhanced development experience.

Add this to your claude_desktop_config.json:

{
  "mcpServers": {
    "filesystem": {
      "command": "npx",
      "args": [
        "tsx",
        "/path/to/your/src/index.ts",
        "/Users/username/Desktop",
        "/path/to/other/allowed/dir"
      ],
      "env": {
        "NODE_ENV": "production"
      }
    }
  }
}

Docker

Note: all directories must be mounted to /projects by default.

{
  "mcpServers": {
    "filesystem": {
      "command": "docker",
      "args": [
        "run",
        "-i",
        "--rm",
        "--mount", "type=bind,src=/Users/username/Desktop,dst=/projects/Desktop",
        "--mount", "type=bind,src=/path/to/other/allowed/dir,dst=/projects/other/allowed/dir,ro",
        "--mount", "type=bind,src=/path/to/file.txt,dst=/projects/path/to/file.txt",
        "mcp/filesystem",
        "/projects"
      ]
    }
  }
}

NPX

{
  "mcpServers": {
    "filesystem": {
      "command": "npx",
      "args": [
        "-y",
        "@modelcontextprotocol/server-filesystem",
        "/Users/username/Desktop",
        "/path/to/other/allowed/dir"
      ]
    }
  }
}

Build

Docker build:

docker build -t mcp/filesystem -f src/filesystem/Dockerfile .

License

This MCP server is licensed under the MIT License. This means you are free to use, modify, and distribute the software, subject to the terms and conditions of the MIT License. For more details, please see the LICENSE file in the project repository.

Available Tools

14 tools
create_directoryA

Create a new directory or ensure a directory exists. Can create multiple nested directories in one operation. If the directory already exists, this operation will succeed silently. Perfect for setting up directory structures for projects or ensuring required paths exist. Only works within allowed directories.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes

TDQS

A4.3/5.0
Behavior4/5

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

No annotations are provided, so the description carries the burden of behavioral disclosure. It transparently reveals idempotent behavior ('If the directory already exists, this operation will succeed silently'), supports nested directory creation, and states the allowed-directory restriction. It does not cover edge cases like invalid paths or permission failures, but for a mkdir-style tool, this is substantial transparency.

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

Conciseness5/5

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

The description is concise, using three sentences that front-load the main action and follow with important behavioral details. No redundant information is present; every sentence adds value, from the basic function to the idempotency and the allowed-directory constraint.

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

Completeness5/5

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

Given the tool's simplicity (one parameter, no output schema, no annotations), the description is quite complete. It covers the core action, the nested-directory capability, the silent success for existing directories, and the access restriction. An agent can confidently invoke the tool based on this description alone.

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

Parameters3/5

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

The input schema provides only a 'path' property with no description, and schema description coverage is 0%. The description partially compensates by implying that 'path' can include multiple nested levels ('Can create multiple nested directories in one operation') and must be within allowed directories. However, it does not explicitly explain path format (absolute vs relative) or the exact nature of the path parameter, leaving some ambiguity for a single-parameter tool.

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

Purpose5/5

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

The description clearly states the tool's function with the verb 'create' and resource 'directory', and adds the crucial nuance of 'ensure a directory exists' (idempotency). It distinguishes itself from sibling tools like write_file or delete_file by focusing on directory creation, including the ability to create nested directories.

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 explicit use cases: 'Perfect for setting up directory structures for projects or ensuring required paths exist.' It also includes a constraint ('Only works within allowed directories') that implicitly guides the agent to check list_allowed_directories. However, it does not explicitly mention when not to use the tool or compare it with alternatives.

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

directory_treeA

Get a recursive tree view of files and directories as a JSON structure. Each entry includes 'name', 'type' (file/directory), and 'children' for directories. Files have no children array, while directories always have a children array (which may be empty). The output is formatted with 2-space indentation for readability. Only works within allowed directories.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes

TDQS

A4.2/5.0
Behavior3/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It adds useful context: the output format (JSON with 2-space indentation), structure details (entries include 'name', 'type', 'children'), and the constraint ('Only works within allowed directories'). However, it doesn't cover aspects like error handling, performance implications for large directories, or authentication needs.

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

Conciseness5/5

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

The description is appropriately sized and front-loaded: the first sentence states the core purpose, followed by details on output structure and constraints. Every sentence adds value without redundancy, making it efficient and easy to parse.

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

Completeness4/5

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

Given the tool's moderate complexity (recursive tree generation), no annotations, and no output schema, the description does well by explaining the output format and structure in detail. It covers key aspects like entry fields and the 'children' array behavior. However, it could improve by mentioning potential limitations (e.g., depth limits) or error cases.

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

Parameters4/5

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

Schema description coverage is 0%, so the description must compensate for the single parameter 'path'. While it doesn't explicitly mention the 'path' parameter, the context 'Get a recursive tree view' and 'Only works within allowed directories' implies that a path is required to specify the starting directory. This adds meaningful semantics beyond the bare schema, though it could be more direct.

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 purpose with specific verbs ('Get a recursive tree view') and resources ('files and directories'), distinguishing it from siblings like 'list_directory' (flat listing) or 'get_file_info' (single file). It precisely defines what the tool does: returns a JSON structure representing a directory tree.

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 for usage with 'Only works within allowed directories,' indicating a constraint, and implicitly distinguishes it from siblings by specifying a recursive tree view (vs. flat listings in 'list_directory' tools). However, it lacks explicit when-not-to-use guidance or named alternatives for similar tasks.

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

edit_fileA

Make line-based edits to a text file. Each edit replaces exact line sequences with new content. Returns a git-style diff showing the changes made. Only works within allowed directories.

ParametersJSON Schema
NameRequiredDescriptionDefault
dryRunNoPreview changes using git-style diff format
editsYes
pathYes

TDQS

A4.2/5.0
Behavior3/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It does well by describing the edit mechanism ('replaces exact line sequences'), output format ('git-style diff'), and a key constraint ('Only works within allowed directories'). However, it lacks details on error handling, permissions needed, or whether edits are atomic/reversible, which are important for a mutation tool.

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

Conciseness5/5

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

The description is front-loaded with the core purpose in the first sentence, followed by key behavioral details and constraints in subsequent sentences. Every sentence adds value: the edit mechanism, return format, and directory restriction. There's no redundancy or wasted words.

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

Completeness4/5

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

For a mutation tool with 3 parameters, low schema coverage (33%), no annotations, and no output schema, the description does a good job covering purpose, behavior, and constraints. It explains the edit process and output format, but lacks details on error cases, permissions, or what the diff output looks like structurally. Given the complexity, it's mostly complete but has minor gaps.

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

Parameters4/5

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

Schema description coverage is low (33%), with only 'dryRun' having a description. The description compensates by explaining the 'edits' parameter semantics ('Each edit replaces exact line sequences with new content') and implying 'path' is for the text file. It doesn't detail 'path' format or 'edits' array structure, but adds meaningful context beyond the sparse schema.

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

Purpose5/5

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

The description clearly states the tool's purpose with specific verbs ('Make line-based edits', 'replaces exact line sequences') and resource ('to a text file'), distinguishing it from sibling tools like write_file (which presumably writes entire files) and read_file (which only reads). It also mentions the return value ('Returns a git-style diff') which further clarifies its function.

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 for when to use this tool ('Make line-based edits to a text file') and includes an important constraint ('Only works within allowed directories'), which implicitly suggests using list_allowed_directories first. However, it doesn't explicitly state when not to use it or name alternatives (e.g., write_file for full file overwrites), keeping it from a perfect score.

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

get_file_infoA

Retrieve detailed metadata about a file or directory. Returns comprehensive information including size, creation time, last modified time, permissions, and type. This tool is perfect for understanding file characteristics without reading the actual content. Only works within allowed directories.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations, the description carries the burden of disclosure. It states what it returns (size, creation time, permissions, type) and explicitly says it does not read content, implying a read-only behavior. It also discloses the allowed-directories restriction. However, it doesn't describe error behavior (e.g., nonexistent paths) or permission requirements, leaving minor gaps.

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

Conciseness5/5

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

The description is three sentences long, front-loaded with the primary purpose. Each sentence adds value: what it does, what it returns, and when/where it can be used. No redundancy or filler.

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

Completeness4/5

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

For a tool with a single parameter and no output schema, the description covers essential aspects: target type (file/directory), return details, and access restriction. It doesn't cover error handling or return format specifics, but given the tool's simplicity and the absence of annotations, it is reasonably complete.

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

Parameters3/5

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

The schema provides only a 'path' string with 0% description coverage. The description adds that the target can be a file or directory and that it must be within allowed directories, which is helpful. However, it doesn't specify path format (absolute vs relative) or whether trailing slashes matter, so the compensation is partial.

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 'Retrieve' with a clear resource: 'detailed metadata about a file or directory'. It distinguishes itself from siblings like read_file (which reads content) and list_directory (which lists contents), making the purpose unambiguous.

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

Usage Guidelines4/5

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

It explicitly states the tool is for 'understanding file characteristics without reading the actual content', implying when to use it over content-reading tools. It also mentions 'Only works within allowed directories', providing a crucial constraint. It doesn't explicitly name alternatives but the context is clear.

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

list_allowed_directoriesA

Returns the list of root directories that this server is allowed to access. Use this to understand which directories are available before trying to access files.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.4/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden. It describes the tool's purpose and usage context but doesn't disclose behavioral traits like whether this is a cached result, if it requires specific permissions, rate limits, or what format the returned list takes. The description adds value but doesn't fully compensate for the lack of annotations.

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

Conciseness5/5

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

The description is perfectly concise with two sentences that each earn their place. The first sentence states the purpose, the second provides usage guidance. No wasted words, and the most important information (what the tool does) is front-loaded.

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

Completeness4/5

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

For a parameterless tool with no output schema, the description provides good context about what the tool returns and when to use it. However, it doesn't describe the return format or structure, which would be helpful given the lack of output schema. The description is mostly complete but could benefit from return value details.

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

Parameters4/5

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

The tool has 0 parameters with 100% schema description coverage. The description appropriately doesn't discuss parameters since none exist. It focuses instead on the tool's purpose and usage context, which is the correct approach for a parameterless tool.

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

Purpose5/5

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

The description clearly states the tool's purpose with specific verb ('Returns') and resource ('list of root directories that this server is allowed to access'). It distinguishes itself from siblings like 'list_directory' by focusing on allowed/accessible directories rather than directory contents.

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

Usage Guidelines5/5

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

The description explicitly states when to use this tool: 'Use this to understand which directories are available before trying to access files.' This provides clear guidance that this should be used as a preliminary check before file operations, differentiating it from siblings that perform actual file operations.

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

list_directoryA

Get a detailed listing of all files and directories in a specified path. Results clearly distinguish between files and directories with [FILE] and [DIR] prefixes. This tool is essential for understanding directory structure and finding specific files within a directory. Only works within allowed directories.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes

TDQS

A4/5.0
Behavior3/5

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

With no annotations provided, the description carries the full burden. It adds useful behavioral details: results are prefixed with [FILE] and [DIR], and the tool is restricted to allowed directories. However, it omits other potentially relevant behaviors like recursion, hidden files, or error handling for invalid paths, so transparency is moderate.

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

Conciseness5/5

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

The description is concise (4 sentences) and each sentence earns its place: purpose, output format, usage context, and a critical constraint. There is no fluff or redundant information, and it is well-structured with front-loaded purpose.

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

Completeness4/5

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

For a simple tool with one parameter and no output schema, the description covers the main aspects: what it does, what results look like, and a usage constraint. It is mostly complete, though it could mention whether the listing is recursive or only immediate children, but given the tool's simplicity, it is sufficiently complete.

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

Parameters3/5

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

The schema description coverage is 0% with only a single 'path' parameter. The description compensates somewhat by implying the path should be a directory ('...in a specified path') and adding the constraint about allowed directories. However, it does not clarify whether the path must be absolute, relative, or what happens for nonexistent paths, so the compensation is partial.

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

Purpose5/5

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

The description clearly states the tool's function: 'Get a detailed listing of all files and directories in a specified path.' This is a specific verb+resource that uniquely identifies the tool as a directory listing operation, distinguishing it from siblings like read_file (content) or search_files.

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

Usage Guidelines4/5

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

The description provides context on when to use the tool: 'essential for understanding directory structure and finding specific files within a directory.' It also notes the constraint 'Only works within allowed directories,' giving clear usage boundaries. It does not explicitly name alternatives, but the purpose is clear enough for an agent to choose it appropriately.

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

list_directory_with_sizesA

Get a detailed listing of all files and directories in a specified path, including sizes. Results clearly distinguish between files and directories with [FILE] and [DIR] prefixes. This tool is useful for understanding directory structure and finding specific files within a directory. Only works within allowed directories.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes
sortByNoSort entries by name or sizename

TDQS

A4/5.0
Behavior3/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It usefully describes output formatting ('[FILE] and [DIR] prefixes'), access restrictions ('Only works within allowed directories'), and the inclusion of sizes. However, it doesn't mention potential limitations like pagination, error conditions for invalid paths, or performance characteristics for large directories, leaving gaps in behavioral understanding.

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 efficiently structured in three sentences: first states core functionality, second details output format, third provides usage context and restriction. Every sentence adds value with no redundancy or fluff, making it easy to parse and front-loaded with key information.

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

Completeness4/5

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

For a tool with 2 parameters, no annotations, and no output schema, the description does well by covering purpose, output format, usage context, and restrictions. However, it lacks details on return values (beyond prefixes), error handling, and parameter specifics, leaving some gaps given the absence of structured metadata.

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 50% (only 'sortBy' has a description), so the description must compensate. It mentions the 'path' parameter ('specified path') but doesn't explain path format or validation. It implies size information in output but doesn't connect to the 'sortBy' parameter's 'size' option. The description adds some context but doesn't fully compensate for the schema's coverage 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 clearly states the verb ('Get a detailed listing') and resource ('files and directories in a specified path'), with specific output details ('including sizes', '[FILE] and [DIR] prefixes'). It distinguishes from sibling tools like 'list_directory' by specifying size inclusion and formatting, and from 'directory_tree' by focusing on flat listing rather than hierarchical structure.

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 for when to use it ('useful for understanding directory structure and finding specific files within a directory') and includes an important exclusion ('Only works within allowed directories'). However, it doesn't explicitly compare to alternatives like 'list_directory' (which might not include sizes) or 'search_files' (for targeted searches), leaving some guidance implicit rather than explicit.

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

move_fileA

Move or rename files and directories. Can move files between directories and rename them in a single operation. If the destination exists, the operation will fail. Works across different directories and can be used for simple renaming within the same directory. Both source and destination must be within allowed directories.

ParametersJSON Schema
NameRequiredDescriptionDefault
destinationYes
sourceYes

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It discloses key failure conditions ('If the destination exists, the operation will fail' and 'Both source and destination must be within allowed directories'), which are valuable beyond the basic move/rename semantics. It does not mention permissions or reversibility, but the disclosed behaviors are material and not redundant with schema or annotations.

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

Conciseness5/5

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

Three sentences, each adding value: the first states purpose, the second adds the fail-fast behavior, and the third adds the allowed-directories constraint. No fluff, front-loaded with the core action, and appropriately sized for a simple two-parameter tool.

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

Completeness4/5

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

The tool is simple and has no output schema or annotations. The description covers the essential context: what the tool does, dual purpose (move/rename), failure conditions, and allowed-path constraints. It could mention what happens if source is missing or if moving directories with contents, but these are likely self-evident. Overall, it's adequately complete for this tool's complexity.

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

Parameters4/5

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

The schema provides only parameter names (source, destination) with no descriptions (0% coverage). The description helps by explaining that the operation 'move[s] files between directories and rename[s] them in a single operation,' implying that 'source' is the original path and 'destination' is the target path/name. It also clarifies constraints on both parameters. This compensates for the lack of schema descriptions, though it could explicitly map the names to roles.

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 purpose: 'Move or rename files and directories.' It specifies the action (move/rename), the resource (files and directories), and distinguishes it from all sibling tools by being the only one that performs moving/renaming. The description also adds detail about moving between directories and renaming within the same directory.

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

Usage Guidelines4/5

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

The description provides clear context for when to use the tool: for moving or renaming files/directories, including moving across directories or renaming in place. It also gives important constraints: fails if destination exists, and operation limited to allowed directories. While it doesn't explicitly name alternatives, none of the sibling tools serve the same purpose, so the usage context is sufficiently clear.

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

read_fileA

Read the complete contents of a file as text. DEPRECATED: Use read_text_file instead.

ParametersJSON Schema
NameRequiredDescriptionDefault
headNoIf provided, returns only the first N lines of the file
pathYes
tailNoIf provided, returns only the last N lines of the file

TDQS

A4.1/5.0
Behavior3/5

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

With no annotations provided, the description carries full burden. It states the basic operation but doesn't disclose behavioral aspects like file size limits, encoding handling, error conditions, or performance characteristics. The deprecation warning is valuable context but doesn't cover operational behavior.

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

Conciseness5/5

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

Two sentences, zero waste. The first sentence states the purpose, the second provides critical deprecation guidance. Every word earns its place and the most important information (deprecation) is appropriately positioned.

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 file reading tool with 3 parameters, no annotations, and no output schema, the description is incomplete. It doesn't explain return format, error handling, or the relationship between 'complete contents' and the head/tail parameters. The deprecation warning is helpful but doesn't compensate for missing operational context.

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 67% (2 of 3 parameters described). The description mentions 'complete contents' which contradicts the optional head/tail parameters that allow partial reading. This creates confusion rather than adding semantic value beyond what the schema provides.

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

Purpose5/5

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

The description clearly states the specific action ('Read the complete contents') and resource ('a file as text'), distinguishing it from siblings like read_media_file or read_multiple_files. The deprecation notice further clarifies its relationship to read_text_file.

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

Usage Guidelines5/5

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

The description explicitly states when NOT to use this tool ('DEPRECATED: Use read_text_file instead'), providing clear alternative guidance. This directly addresses the agent's decision-making between this deprecated tool and its replacement.

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

read_media_fileA

Read an image or audio file. Returns the base64 encoded data and MIME type. Only works within allowed directories.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes

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 full burden of behavioral disclosure. It adds context about the return values (base64 encoded data and MIME type) and the directory restriction, which are useful beyond basic functionality. However, it lacks details on permissions, error handling, or performance aspects, leaving gaps for a tool with no annotation coverage.

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

Conciseness5/5

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

The description is appropriately sized with three concise sentences that are front-loaded: it states the action, return values, and constraint efficiently. Every sentence adds value without redundancy, making it easy to parse and understand quickly.

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?

Given no annotations, no output schema, and low schema coverage, the description provides basic completeness by covering purpose, returns, and a constraint. However, for a tool that reads media files, it lacks details on supported formats, size limits, or error cases, which are important for contextual understanding. It's 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 input schema has 1 parameter with 0% description coverage, so the description must compensate. It doesn't explicitly mention the 'path' parameter or provide additional semantics beyond the directory constraint implied in the description. The baseline is 3 since the schema coverage is low, but the description adds minimal param-specific 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 verb 'Read' and resource 'image or audio file', specifying the action and target. It distinguishes from siblings like 'read_file' and 'read_text_file' by focusing on media files, though it doesn't explicitly contrast them. The purpose is specific but could be more precise about sibling differentiation.

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

Usage Guidelines3/5

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

The description implies usage by stating 'Only works within allowed directories', providing some context about constraints. However, it doesn't explicitly guide when to use this tool versus alternatives like 'read_file' or 'read_text_file', nor does it mention prerequisites or exclusions beyond the directory restriction. Usage is implied but not fully articulated.

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

read_multiple_filesA

Read the contents of multiple files simultaneously. This is more efficient than reading files one by one when you need to analyze or compare multiple files. Each file's content is returned with its path as a reference. Failed reads for individual files won't stop the entire operation. Only works within allowed directories.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathsYes

TDQS

A4.7/5.0
Behavior5/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 reveals key behaviors: simultaneous reading, return format (content plus path), partial failure handling ('Failed reads for individual files won't stop the entire operation'), and path restrictions ('Only works within allowed directories'). This goes well beyond the minimal and covers critical behavioral traits.

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

Conciseness5/5

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

The description is four sentences with no wasted words. It front-loads the core purpose, then efficiently adds efficiency rationale, return format, failure behavior, and permission scope. Every sentence earns its place.

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

Completeness5/5

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

Given the tool has only one parameter, no annotations, and no output schema, the description is remarkably complete. It covers return format, failure handling, scope restrictions, and the comparative advantage over single-file reads. It leaves little ambiguity for an agent deciding when and how to invoke this tool.

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

Parameters4/5

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

The schema has one parameter 'paths' with zero description coverage. The description compensates by explaining the purpose of paths indirectly ('Each file's content is returned with its path as a reference') and adds a constraint ('Only works within allowed directories'). It clarifies the parameter's role, though it does not specify path format (e.g., absolute vs relative).

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

Purpose5/5

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

The description clearly states the tool reads multiple files simultaneously, using a specific verb and resource. It distinguishes itself from the sibling 'read_file' by noting it is 'more efficient than reading files one by one', which clarifies its unique purpose.

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

Usage Guidelines4/5

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

The description provides clear usage context: 'when you need to analyze or compare multiple files'. It implies the alternative of reading files individually, but does not explicitly name 'read_file' as an alternative or specify when not to use this tool. This is clear guidance but lacks explicit exclusions or named alternatives.

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

read_text_fileA

Read the complete contents of a file from the file system as text. Handles various text encodings and provides detailed error messages if the file cannot be read. Use this tool when you need to examine the contents of a single file. Use the 'head' parameter to read only the first N lines of a file, or the 'tail' parameter to read only the last N lines of a file. Operates on the file as text regardless of extension. Only works within allowed directories.

ParametersJSON Schema
NameRequiredDescriptionDefault
headNoIf provided, returns only the first N lines of the file
pathYes
tailNoIf provided, returns only the last N lines of the file

TDQS

A4.6/5.0
Behavior4/5

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

With no annotations provided, the description carries full burden and does well: it discloses error handling ('provides detailed error messages'), encoding support ('Handles various text encodings'), and operational constraints ('Only works within allowed directories'). It doesn't mention performance characteristics like rate limits or file size limits, but covers core behavioral aspects adequately.

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 efficiently structured: first sentence states core purpose, second adds behavioral context, third provides usage guidance, fourth explains parameter usage, and fifth states constraints. Every sentence adds value with zero redundancy, and key information is front-loaded.

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

Completeness4/5

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

For a read operation with 3 parameters and no output schema, the description is quite complete: it covers purpose, usage, parameters, constraints, and error behavior. The main gap is lack of output format details (what the returned text looks like, encoding specifics), but given it's a text read tool, this is partially mitigated by the clear purpose statement.

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

Parameters4/5

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

Schema description coverage is 67% (2 of 3 parameters have descriptions). The description adds significant value: it explains the purpose of 'head' and 'tail' parameters ('read only the first N lines'/'read only the last N lines'), which the schema descriptions only partially cover. However, it doesn't explain the 'path' parameter beyond what's implied, leaving some semantic 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 clearly states the specific action ('Read the complete contents'), resource ('a file from the file system'), and scope ('as text'). It distinguishes from siblings like 'read_file' (which might handle binary) and 'read_multiple_files' (which handles multiple files) by specifying text-only, single-file operation.

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

Usage Guidelines5/5

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

Explicit guidance is provided: 'Use this tool when you need to examine the contents of a single file.' It also distinguishes from alternatives by mentioning 'head' and 'tail' parameters for partial reading, and clarifies scope with 'Only works within allowed directories' (contrasting with unrestricted file access tools).

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

search_filesA

Recursively search for files and directories matching a pattern. Searches through all subdirectories from the starting path. The search is case-insensitive and matches partial names. Returns full paths to all matching items. Great for finding files when you don't know their exact location. Only searches within allowed directories.

ParametersJSON Schema
NameRequiredDescriptionDefault
excludePatternsNo
pathYes
patternYes

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It effectively describes key behavioral traits: recursive search through subdirectories, case-insensitive partial matching, returns full paths, and the constraint of searching only within allowed directories. It doesn't mention performance characteristics, rate limits, or error conditions, but covers the essential operational behavior well.

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 efficiently structured with 4 sentences, each adding distinct value: the core functionality, search behavior, return value, use case, and constraint. No sentence is redundant or wasted. It's appropriately sized for a search tool with 3 parameters and no annotations.

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

Completeness4/5

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

For a search tool with 3 parameters, 0% schema coverage, no annotations, and no output schema, the description does well to explain the recursive pattern matching behavior and constraints. It could benefit from mentioning the excludePatterns parameter or providing examples of pattern syntax, but covers the essential operational context adequately given the complexity.

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

Parameters4/5

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

With 0% schema description coverage and 3 parameters, the description adds significant value by explaining the pattern matching behavior ('case-insensitive and matches partial names'), recursive nature ('searches through all subdirectories'), and starting point ('from the starting path'). While it doesn't explicitly name each parameter, it provides crucial context about how the pattern and path parameters work together.

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 purpose with specific verbs ('recursively search for files and directories') and resources ('files and directories matching a pattern'), distinguishing it from siblings like list_directory (non-recursive listing) or get_file_info (single file metadata). It explicitly mentions the recursive nature and pattern matching, which differentiates it from simpler listing tools.

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

Usage Guidelines4/5

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

The description provides clear context about when to use this tool ('Great for finding files when you don't know their exact location') and constraints ('Only searches within allowed directories'), but doesn't explicitly mention when NOT to use it or name specific alternatives. It implies usage vs. list_directory (which doesn't search recursively) but doesn't state this directly.

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

write_fileA

Create a new file or completely overwrite an existing file with new content. Use with caution as it will overwrite existing files without warning. Handles text content with proper encoding. Only works within allowed directories.

ParametersJSON Schema
NameRequiredDescriptionDefault
contentYes
pathYes

TDQS

A4/5.0
Behavior4/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 explicitly warns about destructive overwriting ('will overwrite existing files without warning'), mentions text encoding ('proper encoding'), and notes path constraints ('Only works within allowed directories'). This is strong transparency for a write tool.

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

Conciseness5/5

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

The description is three sentences, front-loaded with the primary action, and each sentence adds crucial information (overwrite semantics, caution, encoding, directory restriction). It is concise without being underspecified.

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

Completeness4/5

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

For a simple two-parameter write_file tool with no output schema and no annotations, the description provides essential context: the destructive nature, text handling, and directory restrictions. It does not mention return values or error behavior, but these are less critical for a straightforward write operation.

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

Parameters3/5

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

The input schema provides no descriptions (0% coverage), so the tool description must compensate. It indirectly explains that 'content' is the new text payload and that 'path' refers to a file location subject to allowed directories, but it does not elaborate on path formats, file type restrictions, or any content size limits. Some meaning is added but not comprehensive.

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

Purpose5/5

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

The description opens with a specific verb plus resource: 'Create a new file or completely overwrite an existing file with new content.' This clearly distinguishes it from sibling render_file by emphasizing complete overwrite, and it is easy to understand exactly what the tool does.

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

Usage Guidelines3/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โ€”for creating or fully replacing filesโ€”but does not explicitly name alternatives like edit_file for partial modifications. The cautionary phrase 'Use with caution' gives some situational context, but there is no explicit when-to-use versus when-not-to-use guidance.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 14 tool updatesv1.0.0
    • First observedcreate_directory
    • First observeddirectory_tree
    • First observededit_file
    • First observedget_file_info
    • First observedlist_allowed_directories
    • First observedlist_directory
    • First observedlist_directory_with_sizes
    • First observedmove_file
    • First observedread_file
    • First observedread_media_file
    • First observedread_multiple_files
    • First observedread_text_file
    • First observedsearch_files
    • First observedwrite_file

TDQS

A4.2/5.0

Scored across 14 tools

Disambiguation4/5

Most tools have distinct purposes, but there is some overlap between list_directory and list_directory_with_sizes, which could cause confusion as they serve similar functions with only a minor difference in output. Additionally, read_file is deprecated in favor of read_text_file, which clarifies the distinction but adds redundancy. Overall, the tools are well-separated by function, with clear boundaries for operations like create_directory, move_file, and search_files.

Naming Consistency5/5

All tool names follow a consistent snake_case pattern with a clear verb_noun structure, such as create_directory, edit_file, and search_files. There are no deviations in naming conventions, making the set predictable and easy to understand. The consistency enhances usability and reduces cognitive load for agents.

Tool Count5/5

With 14 tools, the server is well-scoped for desktop file management, covering essential operations like reading, writing, moving, listing, and searching files and directories. Each tool serves a specific purpose without unnecessary duplication, and the count aligns with the complexity of the domain, providing comprehensive coverage without being overwhelming.

Completeness5/5

The tool set offers complete coverage for desktop file management, including CRUD operations (create_directory, write_file, read_text_file, move_file for update/delete via moving, and get_file_info for retrieval), along with utilities for listing, searching, and metadata access. There are no obvious gaps; agents can perform all typical file system tasks within the allowed directories, ensuring no dead ends in workflows.

Related MCP Connectors

Related MCP Servers