Desktop Commander MCP Server
Supports containerized deployment of the MCP server with directory mounting to provide filesystem access from Docker containers.
Built as a Node.js server implementing the Model Context Protocol, allowing Claude to interact with the local system through Node.js.
Implements the FastMCP TypeScript framework for MCP functionality, providing type-safe interactions between Claude and system resources.
Integrates Zod schemas for runtime validation of inputs and outputs, enhancing security and reliability of tool operations.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Desktop Commander MCP Servershow me the files in my Downloads folder"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
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()patternDirect Schema Integration: Zod schemas used directly without JSON conversion
Enhanced Error Handling:
UserErrorfor user-facing messages with descriptive contextBuilt-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 toolsClean 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 writecontent(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 createReturns 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 locationReturns 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 copydestination_directory(string, required): Full path of the destination directoryoverwrite(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_stringdryRun(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 locationReturns ASCII tree with visual hierarchy and intelligent filtering
delete_file
Safely delete files with comprehensive validation
Input:
path/file_path/filepath(string): File to deleteReturns 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/moveddestination_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 supportpath(string, optional): Directory to search insearch_type(enum, optional): Filter for 'files', 'folders', or 'both'case_sensitive(boolean, optional): Toggle case sensitivityinclude_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 terminateReturns 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 executeshell(string, optional): Shell to use for executiontimeout_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 fromsearch_pattern(string, optional): Text or regex pattern to search for in outputis_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 terminateReturns 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 forpath(string, required): Directory to search withincontext_lines(number, optional): Lines of context around matchesfile_pattern(string, optional): File pattern filterignore_case(boolean, optional): Case-insensitive searchinclude_hidden(boolean, optional): Include hidden filesmax_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 dependenciesglobal(boolean, optional): Install packages globallyexact(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.jsonargs(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 installrequirements_file(string, optional): Install from requirements.txtuser(boolean, optional): Install to user site-packagesupgrade(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 analyzepackage_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 checkhost(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 requestmethod(enum, optional): HTTP method (GET, POST, PUT, DELETE, etc.)headers(object, optional): Request headersbody(string, optional): Request body for POST/PUT requeststimeout(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 pingcount(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 resolverecord_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 lintlinter(enum, optional): Specific linter to use (auto-detected by default)fix(boolean, optional): Automatically fix linting issuesconfig(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 formatformatter(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 analyzeinclude_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 duplicatesmin_lines(number, optional): Minimum lines for duplicate detectionlanguage(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 checkstrict(boolean, optional): Enable strict type checking modeconfig(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 watchpatterns(string[], optional): Glob patterns for files to watchignore_patterns(string[], optional): Patterns to ignorerecursive(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 monitorlines(number, optional): Number of initial lines to displayfilter(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 monitorrecursive(boolean, optional): Monitor subdirectoriesevents(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 comparefile2(string, required): Second file to comparecontext_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 directoriespattern(string, optional): Test name pattern to matchcoverage(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 forformat(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 changestest_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 benchmarkiterations(number, optional): Number of benchmark iterationswarmup(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:testingDevelopment 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:
NPX (Recommended for Development)
{
"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 toolscreate_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.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden and does well by disclosing key behavioral traits: idempotent behavior ('succeed silently if already exists'), ability to create nested directories, and the constraint 'only works within allowed directories'. It doesn't mention permissions, rate limits, or error conditions, but covers the essential 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four concise sentences, each earning its place: states core functionality, explains nested creation capability, describes idempotent behavior, and provides usage context with constraints. Front-loaded with the essential operation, zero wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter mutation tool with no annotations or output schema, the description is quite complete - it explains what the tool does, its behavior, constraints, and use cases. The main gap is lack of information about return values or error conditions, but given the simplicity of the operation, it's reasonably comprehensive.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage for the single 'path' parameter, the description compensates by explaining what the path represents ('directory or nested directories') and the operational context ('within allowed directories'). It doesn't specify path format or constraints, but adds meaningful context beyond the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
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 ('create', 'ensure exists') and resource ('directory'), distinguishing it from siblings like list_directory or move_file. It explicitly mentions creating nested directories, which differentiates it from simple file operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 ('setting up directory structures for projects or ensuring required paths exist'), but doesn't explicitly state when NOT to use it or name specific alternatives. It implies usage for directory creation rather than file operations, but lacks explicit exclusions.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| dryRun | No | Preview changes using git-style diff format | |
| edits | Yes | ||
| path | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes |
TDQS
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 the tool's read-only nature and scope constraint ('without reading the actual content', 'Only works within allowed directories'), but lacks details on error handling, rate limits, authentication needs, or response format. For a tool with zero annotation coverage, this is adequate but leaves gaps in operational context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
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 supporting details, and uses only three sentences with zero waste. Each sentence adds value: the first defines the tool, the second elaborates on returns, and the third provides usage context and constraints, making it highly efficient and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity (single parameter, no output schema, no annotations), the description covers the purpose, usage, and constraints adequately. However, it lacks details on return values (e.g., what 'comprehensive information' includes beyond listed examples) and error cases, which would be helpful for an agent. It's minimally viable but has clear gaps in completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 compensate. It doesn't explicitly mention the 'path' parameter, but implies it through context ('about a file or directory', 'within allowed directories'), adding semantic meaning about what the parameter represents. However, it doesn't specify format or constraints for the path, so it doesn't fully compensate for the schema gap, warranting a score just above baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action ('Retrieve detailed metadata'), resource ('about a file or directory'), and distinguishes it from siblings by emphasizing it provides metadata 'without reading the actual content', unlike read_file or read_text_file which access content directly. This precise differentiation makes the tool's purpose immediately understandable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 ('perfect for understanding file characteristics without reading the actual content') and mentions a constraint ('Only works within allowed directories'), which helps guide usage. However, it doesn't explicitly name alternatives or specify when not to use it compared to similar tools like list_directory or search_files, leaving some ambiguity.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes |
TDQS
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: it distinguishes files and directories with prefixes, mentions it only works within allowed directories, and describes the output format partially. However, it doesn't cover important aspects like error handling (e.g., what happens if the path doesn't exist), performance characteristics, or whether it's read-only (implied but not stated). The description doesn't contradict any annotations since none are provided.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is appropriately sized with three sentences that are front-loaded: the first sentence states the core purpose, the second adds output details, and the third provides context and constraints. There's minimal waste, though the phrase 'This tool is essential for...' could be considered slightly promotional rather than purely informative.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 1 parameter with low schema coverage, the description is moderately complete. It covers the purpose, output format, and constraints, but lacks details on error handling, performance, and explicit differentiation from siblings. For a tool with no structured metadata, it should do more to compensate, such as explaining return values or usage scenarios more thoroughly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 adds meaning by specifying that the 'path' parameter is for 'a specified path' and contextualizes it with 'Only works within allowed directories,' which helps understand valid inputs. However, it doesn't provide format details (e.g., absolute vs. relative paths) or examples. Given the low schema coverage, the description does a good job but could be more specific.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Get a detailed listing of all files and directories in a specified path.' It specifies the verb ('Get') and resource ('files and directories'), and distinguishes it from siblings like 'directory_tree' by focusing on detailed listing rather than hierarchical structure. However, it doesn't explicitly differentiate from 'list_directory_with_sizes' or 'list_allowed_directories' beyond mentioning 'detailed listing' and 'allowed directories'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides some usage context: 'This tool is essential for understanding directory structure and finding specific files within a directory' and 'Only works within allowed directories.' It implies when to use it (for detailed listings) but doesn't explicitly state when to choose alternatives like 'list_directory_with_sizes' for size information or 'directory_tree' for hierarchical views. No explicit exclusions or prerequisites are mentioned beyond the allowed directories constraint.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| sortBy | No | Sort entries by name or size | name |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| destination | Yes | ||
| source | Yes |
TDQS
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 the operation's behavior (move/rename, fails if destination exists, works across/allowed directories), but lacks details on permissions needed, error handling beyond failure, rate limits, or what the response looks like. It's adequate but has gaps 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is efficiently structured with four sentences that each add value: purpose statement, capability details, failure condition, and constraints. It's front-loaded with the core function and avoids redundancy, making it easy to parse quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given a mutation tool with 2 parameters, 0% schema coverage, no annotations, and no output schema, the description is moderately complete. It covers the basic operation, constraints, and parameter roles, but lacks details on permissions, error messages, return values, or interaction with siblings like 'edit_file' for content changes. It's sufficient for basic use but could be more comprehensive.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 adds meaningful context about parameters: 'source' and 'destination' are explained as paths for moving/renaming, with constraints (must be within allowed directories, destination existence causes failure). This provides good semantic understanding beyond the bare schema types, though it doesn't specify path formats or examples.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
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 ('move or rename files and directories') and distinguishes it from siblings like 'create_directory', 'edit_file', and 'write_file' by focusing on relocation/renaming operations. It explicitly mentions moving between directories and renaming within the same directory, providing clear differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 (moving/renaming files/directories, across directories or within same directory) and mentions a key constraint (fails if destination exists). However, it doesn't explicitly state when NOT to use it or name specific alternatives among siblings like 'rename_file' if such existed, though it distinguishes from other file operations.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| head | No | If provided, returns only the first N lines of the file | |
| path | Yes | ||
| tail | No | If provided, returns only the last N lines of the file |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| paths | Yes |
TDQS
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 traits: efficiency gains, partial failure tolerance ('Failed reads for individual files won't stop the entire operation'), and access restrictions ('Only works within allowed directories'). It doesn't cover rate limits or detailed error handling, but provides substantial context beyond basic functionality.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose, followed by efficiency rationale, output format hint, failure behavior, and access constraintโall in four concise sentences. Each sentence adds value without redundancy, making it well-structured and efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no annotations and no output schema, the description does a good job covering key aspects: purpose, usage context, behavioral traits (partial failures, restrictions), and efficiency. It lacks details on return format (beyond 'content is returned with its path') and error specifics, but for a read operation with one parameter, it's largely complete and helpful.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema description coverage is 0%, but the description doesn't explicitly explain the 'paths' parameter beyond implying it's an array of file paths. It adds minimal semantic value (e.g., no format details or constraints), so it doesn't fully compensate for the coverage gap. With one parameter, a baseline of 3 is appropriate as the description hints at usage without detailed param info.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
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 ('contents of multiple files'), specifying it's for simultaneous reading. It distinguishes from sibling tools like 'read_file' by emphasizing batch efficiency and partial failure tolerance, making the purpose specific and differentiated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context on when to use this tool ('more efficient than reading files one by one when you need to analyze or compare multiple files') and mentions a constraint ('Only works within allowed directories'). However, it doesn't explicitly state when not to use it or name alternatives like 'read_file' for single files, which would elevate it to a 5.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| head | No | If provided, returns only the first N lines of the file | |
| path | Yes | ||
| tail | No | If provided, returns only the last N lines of the file |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| excludePatterns | No | ||
| path | Yes | ||
| pattern | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| content | Yes | ||
| path | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden and effectively discloses key behavioral traits: it's a destructive operation (overwrites without warning), has safety constraints (allowed directories only), and handles text encoding. It doesn't cover error cases or permissions, but provides substantial context beyond basic function.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with core functionality, uses three efficient sentences with zero waste, and each sentence adds critical information (purpose, warning, constraints). It's appropriately sized for a tool with two parameters and no annotations.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (destructive file operation), lack of annotations, and no output schema, the description is mostly complete: it covers purpose, risks, constraints, and content handling. It could benefit from mentioning error responses or success indicators, but provides sufficient context for safe use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 0% description coverage, but the description adds some semantic context: 'path' relates to file location (implied by 'allowed directories') and 'content' is text with encoding. However, it doesn't detail path format, content limitations, or encoding specifics, leaving gaps in parameter understanding.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
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 ('create' and 'overwrite') and resource ('file'), distinguishing it from siblings like edit_file (partial modification) and read_file (read-only). It explicitly mentions handling text content with encoding, which further clarifies its scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for usage ('Use with caution as it will overwrite existing files without warning') and constraints ('Only works within allowed directories'), but does not explicitly name alternatives like edit_file for partial updates or create_directory for directories. This gives good guidance but lacks explicit sibling differentiation.
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.
14 tool updates
v1.0.0- First observed
create_directory - First observed
directory_tree - First observed
edit_file - First observed
get_file_info - First observed
list_allowed_directories - First observed
list_directory - First observed
list_directory_with_sizes - First observed
move_file - First observed
read_file - First observed
read_media_file - First observed
read_multiple_files - First observed
read_text_file - First observed
search_files - First observed
write_file
TDQS
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.
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.
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.
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
A comprehensive Model Context Protocol (MCP) server that enables AI assistants to interact with yoโฆ
A Model Context Protocol (MCP) server for Selise Blocks Cloud integration
MCP server for mandates, delegation, policy-gated execution, credential grants, and audit.
111Model Context Protocol server for the Apideck Unified API. Connect any MCP-compatible agent framework to 100+ accounting systems, HRIS platforms, file storage providers, and more through one integration. More information https://www.apideck.com/mcp-server
Related MCP Servers
- AlicenseAqualityAmaintenanceNode.js server implementing Model Context Protocol (MCP) for filesystem operations.14668,80990,042-
- AlicenseNot gradedqualityDmaintenanceNode.js server implementing Model Context Protocol for secure read-only filesystem operations, allowing Claude to read files, list directories, search files, and get file metadata within specified directories.556MIT
- AlicenseAqualityDmaintenanceNode.js server implementing Model Context Protocol (MCP) for filesystem operations with comprehensive permission controls, allowing secure file and directory manipulation with granular access restrictions.21668,8093-
- -licenseNot gradedqualityNot gradedmaintenanceNode.js server implementing Model Context Protocol (MCP) for filesystem operations, allowing AI systems to read, write, edit files and manage directories within specified allowed paths.668,809-
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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/Nexus-Digital-Automations/mcp-filesystem-updated'
If you have feedback or need assistance with the MCP directory API, please join our Discord server