Skip to main content
Glama

Filesystem MCP

๐Ÿ“– Installation Guide โ€” quick start, manual setup, and troubleshooting

Status: Production-ready ยท 24 tools ยท Dual transport (stdio + HTTP) ยท Port 10742 Reliability: Self-cleaning startup โ€” kills orphaned stdio processes from stale IDE sessions

A FastMCP 3.2.0+ compliant MCP server using the portmanteau pattern for comprehensive file system operations, content search, and code intelligence with concurrency safety. Git lives in git-github-mcp; Docker is deprecated here in favor of docker-mcp.

IMPORTANT

Dual Architecture: Filesystem MCP operates as both a high-concurrency stdio/HTTP MCP Server and a dedicated React Webapp (Port 10743) for real-time visualization and management.

Quick Start

git clone https://github.com/sandraschi/filesystem-mcp
cd filesystem-mcp
just

This opens an interactive dashboard showing all available commands. Run just bootstrap to install dependencies, then just serve or just dev to start.

Manual Setup

If you don't have just installed:

Related MCP server: AgentExecMPC

What can you do with it?

Beyond read/write/list โ€” the nonobvious actions agents reach for:

Verify instead of trusting

file_ops(operation="get_file_hash", path="dist/app.zip")          # streamed sha256, never loads whole file
search_ops(operation="validate_config", path="config.yaml")        # json/yaml/toml/ini, precise error + line
search_ops(operation="run_linter", path="src/", fix=True)          # ruff check --fix, read-only unless fix=True

Understand a codebase in two calls

search_ops(operation="analyze_project", path=".")                  # type, markers, frameworks, top extensions
search_ops(operation="find_symbols", path="src", search_pattern="auth", recursive=True)  # defs, not grep noise
search_ops(operation="find_todos", path="src", recursive=True)     # TODO/FIXME/HACK/XXX/BUG with file:line

Move bulk safely

dir_ops(operation="copy_tree", path="D:/data", destination_path="E:/backup", dry_run=True)  # preview first
dir_ops(operation="copy_tree", path="D:/data", destination_path="E:/backup", engine="robocopy")  # fast lane, Windows
file_ops(operation="compress", path="D:/data")                     # zip without shelling out
file_ops(operation="append_file", path="app.log", content="line")  # locked append, no read-modify-write race

Undo and self-help

file_ops(operation="undo_edit", path="config.json")                # restore pre-edit .bak in one call
host_ops(operation="get_help", tool_name="search_ops")             # every tool documents itself; try it first

Deployment & Security

Built with modern Python patterns, enterprise-grade security, and extensive testing for professional deployment.

Tech Stack

Layer

Technology

Backend

Python 3.12, FastMCP 3.4+, FastAPI/Starlette, uvicorn, structlog, psutil, GitPython

Frontend

React 19, Vite 7, TailwindCSS 3, Lucide, Framer Motion, Zustand, Radix UI

Desktop

Tauri 2 (Rust), NSIS installer, embedded PyInstaller backend

Tooling

uv, just, ruff, Biome, pytest, pre-commit, Playwright

Features

File System Operations (20+ Tools)

  • Concurrency-Safe Operations: Atomic file writes with proper locking for multi-client access

  • Basic Operations: Read, write, list, copy, move, and delete files/directories

  • Advanced Analysis: Find large files, duplicate detection, directory size calculation

  • File Comparison: Side-by-side diff comparison with unified format

  • Content Search: Grep pattern matching, line-based reading, log extraction

  • Batch Operations: Process multiple files simultaneously

  • Path Management: Secure path validation with configurable restrictions

  • Metadata Analysis: Comprehensive file information with type detection

  • Universal Connect: FastMCP 3.2.0+ support for simultaneous stdio + HTTP access

Docker Container Management

  • Container Operations

    • List, create, start, stop, and remove containers

    • Execute commands inside running containers

    • Stream container logs with filtering options

    • Monitor container resource usage and statistics

    • Inspect container details and configuration

  • Image Management

    • List available Docker images

    • Pull, build, and remove images

    • Inspect image details and history

  • Network & Volume Management

    • Create and manage Docker networks

    • Manage Docker volumes and bind mounts

    • Configure container networking

  • Docker Compose Support

    • Deploy and manage multi-container applications

    • Scale services up and down

    • View service logs and status

Git Repository Management

  • Clone repositories with branch and depth control

  • Get repository status (staged, unstaged, untracked changes)

  • Commit changes with custom messages

  • Read repository structure and file contents

  • Manage branches and remotes

System Tools & Help

  • Multilevel Help System: Hierarchical documentation with portmanteau tool examples and use cases

  • System Status Tool: Comprehensive system monitoring with resource usage metrics

  • Interactive Guidance: Context-aware help with parameter validation and suggestions

Advanced Features

  • FastMCP 3.2.0+ Compliance: Modern tool registration with @app.tool() decorators

  • Portmanteau Pattern: Consolidated tool interfaces reducing complexity while maintaining full functionality

  • Enterprise Security: Path traversal protection, permission validation, audit trails

  • Extensive Testing: Unit, integration, and performance tests with 80%+ coverage

  • MCPB Packaging: Professional drag-and-drop installation for Claude Desktop

  • Structured Logging: Comprehensive logging with file output and monitoring

  • Async Operations: Full async/await support for optimal concurrency

  • Pydantic V2: Modern data validation with field_validator and ConfigDict

  • Multilevel Help System: Interactive guidance with portmanteau tool examples and use cases

  • System Monitoring: Resource usage tracking and performance metrics

  • Cross-Platform: Windows, macOS, and Linux support

Installation

Prerequisites

  • uv installed (RECOMMENDED)

  • Python 3.12+

Quick Start

Run immediately via uvx:

uvx filesystem-mcp

Claude Desktop Integration

Add to your claude_desktop_config.json:

"mcpServers": {
  "filesystem-mcp": {
    "command": "uv",
    "args": ["--directory", "D:/Dev/repos/filesystem-mcp", "run", "filesystem-mcp"]
  }
}

Prerequisites

  • Python 3.12+ (FastMCP 3.2.0+ requirement)

  • Docker Engine (for container operations)

  • Git (for repository operations)

Fastest Installation - Production Ready:

pip install filesystem-mcp

Claude Desktop Integration:

  • Open Claude Desktop

  • Settings MCP Servers

  • Add new MCP server:

    {
      "mcpServers": {
        "filesystem-mcp": {
          "command": "filesystem-mcp"
        }
      }
    }

Claude Desktop MCPB Package

One-line install (Claude Desktop):

iwr https://github.com/sandraschi/filesystem-mcp/releases/latest/download/install.ps1 -UseBasicParsing | iex

Or manually:

  1. Download the filesystem-mcp.mcpb package from Releases

  2. Drag & Drop the file to Claude Desktop

  3. Configure settings when prompted (working directory, timeouts, etc.)

  4. Start using 24 professional tools immediately

Installation

Prerequisites

  • uv installed (RECOMMENDED)

  • Python 3.12+

Quick Start

Run immediately via uvx:

uvx filesystem-mcp

Claude Desktop Integration

Add to your claude_desktop_config.json:

"mcpServers": {
  "filesystem-mcp": {
    "command": "uv",
    "args": ["--directory", "D:/Dev/repos/filesystem-mcp", "run", "filesystem-mcp"]
  }
}

Installation

Prerequisites

  • uv installed (RECOMMENDED)

  • Python 3.12+

Quick Start

Run immediately via uvx:

uvx filesystem-mcp

Claude Desktop Integration

Add to your claude_desktop_config.json:

"mcpServers": {
  "filesystem-mcp": {
    "command": "uv",
    "args": ["--directory", "D:/Dev/repos/filesystem-mcp", "run", "filesystem-mcp"]
  }
}

HTTP/HTTPS Mode (For Web Apps)

For web applications or custom MCP clients, run the server in HTTP mode:

# Set environment variables
export MCP_TRANSPORT=http
export MCP_HOST=127.0.0.1  # or 0.0.0.0 for all interfaces
export MCP_PORT=8000

# Run the server
python -m filesystem_mcp

Or use uvicorn directly with the ASGI app:

from filesystem_mcp import http_app
import uvicorn

# Get ASGI app
asgi_app = http_app()

# Run with uvicorn
uvicorn.run(asgi_app, host="127.0.0.1", port=8000)

Or via command line:

uvicorn filesystem_mcp:http_app --host 127.0.0.1 --port 8000

The MCP endpoint will be available at: http://127.0.0.1:8000/mcp/

Quick test:

curl http://127.0.0.1:8000/mcp/

Manual Claude Desktop Configuration

For manual installation or other MCP clients, add to your Claude Desktop configuration file (claude_desktop_config.json):

Windows:

{
  "mcpServers": {
    "filesystem-mcp": {
      "command": "python",
      "args": ["-m", "filesystem_mcp"],
      "env": {
        "PYTHONPATH": "D:\\path\\to\\filesystem-mcp\\src",
        "PYTHONUNBUFFERED": "1",
        "FASTMCP_LOG_LEVEL": "INFO"
      },
      "cwd": "D:\\path\\to\\your\\working\\directory"
    }
  }
}

macOS/Linux:

{
  "mcpServers": {
    "filesystem-mcp": {
      "command": "python",
      "args": ["-m", "filesystem_mcp"],
      "env": {
        "PYTHONPATH": "/path/to/filesystem-mcp/src",
        "PYTHONUNBUFFERED": "1",
        "FASTMCP_LOG_LEVEL": "INFO"
      },
      "cwd": "/path/to/your/working/directory"
    }
  }
}

Configuration Notes:

  • Replace D:\\path\\to\\filesystem-mcp\\src with the actual path to your cloned repository's src directory

  • Set cwd to your preferred working directory for file operations

  • The server supports the following optional environment variables:

    • MCP_TRANSPORT: Set to "http" for HTTP mode, "stdio" for stdio mode (default: "stdio")

    • MCP_HOST: Host address for HTTP mode (default: "127.0.0.1")

    • MCP_PORT: Port number for HTTP mode (default: 8000)

    • FASTMCP_LOG_LEVEL: Set to DEBUG, INFO, WARNING, or ERROR

    • GIT_USERNAME: Default Git username for commits

    • GIT_EMAIL: Default Git email for commits

Installation

Prerequisites

  • uv installed (RECOMMENDED)

  • Python 3.12+

Quick Start

Run immediately via uvx:

uvx filesystem-mcp

Claude Desktop Integration

Add to your claude_desktop_config.json:

"mcpServers": {
  "filesystem-mcp": {
    "command": "uv",
    "args": ["--directory", "D:/Dev/repos/filesystem-mcp", "run", "filesystem-mcp"]
  }
}

Help System & Status Tools

System Operations (portmanteau)

Unified system tool with 20+ operations:

  • Help: get_help - Multilevel help system with tool documentation

  • Status: get_system_status - Comprehensive system monitoring

  • Resources: get_resource_usage, get_cpu_info, get_memory_info, get_disk_usage

  • Processes: get_process_info - Process monitoring and management

  • Network: get_network_info - Network interface information

  • System Info: get_system_info, get_hardware_info, get_software_info

  • Environment: get_environment_info, get_locale_info, get_time_info

  • Security: get_security_info - Basic security information

  • Performance: get_performance_metrics - System performance monitoring

# Get comprehensive help
result = system_operations("get_help", category="filesystem")

# Monitor system status
result = system_operations("get_system_status", include_processes=True, include_disk=True)

# Get resource usage
result = system_operations("get_resource_usage")

Multilevel Help System

Get comprehensive guidance for all portmanteau tools:

# Overview of all categories and tools
system_operations("get_help")

# Detailed help for filesystem operations
system_operations("get_help", category="filesystem")

# Specific tool documentation with examples
system_operations("get_help", category="filesystem", tool_name="filesystem_operations")

Help Categories:

  • filesystem - File reading, writing, directory management, search, analysis

  • docker - Container, image, network, and volume management

  • repository - Git repository operations (clone, commit, branch, merge, etc.)

  • system - System monitoring, status, and help functionality

System Status Monitoring

Monitor system resources and server health:

# Comprehensive system status
system_operations("get_system_status")

# Resource monitoring only
system_operations("get_system_status", include_processes=True, include_disk=True)

# Network and system info
system_operations("get_system_status", include_network=True)

Status Metrics:

  • CPU usage (physical/logical cores, frequency, load)

  • Memory statistics (total, available, usage percentage)

  • Disk usage (total, used, free space)

  • Process information (top CPU consumers)

  • Network interfaces (IP addresses, status)

  • Server health (FastMCP version, tool count, status)

Usage

Starting the Server

# Start the MCP server (default: http://0.0.0.0:8000)
python -m filesystem_mcp

# With custom host and port
python -m filesystem_mcp --host 127.0.0.1 --port 8080

# With debug mode enabled
python -m filesystem_mcp --debug

Available Portmanteau Tools

Filesystem Operations (portmanteau)

Unified filesystem tool with 20+ operations:

  • file_ops: Comprehensive file management (read_file, write_file, edit_file, move_file, undo_edit).

    • Honed Editing: Support for Regex, Multi-occurrence, Indentation Normalization, and Atomic Batch Edits.

    • Reversion: Rapid undo capability via .bak file restoration.

  • calculate_directory_size, find_duplicate_files, find_large_files

  • find_empty_directories, compare_files, read_multiple_files

  • move_file, read_file_lines, search_files

edit_file

Precise text replacement with context validation and advanced matching.

Parameters:

  • path (str): Target file path.

  • old_string (str): Text to find.

  • new_string (str): Replacement text.

  • allow_multiple (bool): If true, replaces all occurrences. Default: false.

  • is_regex (bool): If true, treats old_string as a regex pattern. Default: false.

  • ignore_whitespace (bool): If true, matches regardless of indentation. Default: false.

  • replacements (list): Batch mode! List of {old_string, new_string} for atomic multi-chunk edits.

undo_edit

Reverts the most recent edit to a file by restoring its .bak backup.

Parameters:

  • path (str): Target file path.

# Read a file
result = filesystem_operations("read_file", path="README.md")

# List directory contents
result = filesystem_operations("list_directory", path=".", recursive=True)

# Search for files
result = filesystem_operations("search_files", directory_path=".", pattern="*.py")

Docker Operations (portmanteau)

Unified Docker tool with 25+ operations:

  • Container: list_containers, get_container, create_container, start_container, stop_container, restart_container, remove_container, container_exec, container_logs, container_stats

  • Images: list_images, get_image, pull_image, build_image, remove_image, prune_images

  • Networks: list_networks, get_network, create_network, remove_network, prune_networks

  • Volumes: list_volumes, get_volume, create_volume, remove_volume, prune_volumes

  • Compose: compose_up, compose_down, compose_ps, compose_logs, compose_config, compose_restart

# List running containers
result = docker_operations("list_containers")

# Create and start a container
result = docker_operations("create_container", image="nginx:latest", name="web", ports={"80/tcp": 8080})
result = docker_operations("start_container", container_id="web")

# Get container logs
result = docker_operations("container_logs", container_id="web", tail=100)

Repository Operations โ€” moved

Git lives in git-github-mcp (gitops:git_core / gitops:github_ops). No git tools are registered here anymore.

Developer Tools โ€” live as search_ops

find_todos, find_symbols, validate_json, analyze_project, run_linter (ruff-only), validate_config are live search_ops operations (read-only, tested). Still roadmap: analyze_dependencies, analyze_imports; check_file_sizes/detect_duplicates already exist as find_large_files/find_duplicate_files. Usage: search_ops(operation='find_todos', path='src', recursive=True) โ€” not developer_tool(...).

Command

Description

Key Parameters

analyze_dependencies

Analyze project dependencies from package managers

path

analyze_imports

Analyze Python import statements and dependencies

path, recursive, max_results

analyze_project

Detect project type, frameworks, and structure

path, output_format

check_file_sizes

Analyze file sizes and identify large files

path, recursive, max_results

detect_duplicates

Find duplicate files by content hash

path, recursive, max_results

find_symbols

Search for function/class definitions and usages

path, pattern, recursive

find_todos

Find TODO/FIXME comments in codebase

path, recursive, max_results

run_linter

Execute code linting (ruff, flake8, eslint)

path, fix, encoding

validate_config

Validate configuration files (JSON/YAML/TOML/INI)

path

validate_json

Parse and validate JSON files with structure analysis

path

Usage:

# Find all TODO comments (live)
todos = search_ops(operation='find_todos', path='src', recursive=True)

# Find function definitions (live)
symbols = search_ops(operation='find_symbols', path='src', search_pattern='auth', recursive=True)

# Validate JSON (live)
valid = search_ops(operation='validate_json', path='glama.json')

# Roadmap (not yet): analyze_dependencies, analyze_imports

Example Usage

from filesystem_mcp import app

# Get a list of available portmanteau tools
tools = app.list_tools()
print(f"Available portmanteau tools: {', '.join(tools.keys())}")

# Example: Filesystem operations
try:
    # Read a file
    result = tools["filesystem_operations"]("read_file", path="README.md")
    print(f"File content: {result['content'][:200]}...")

    # List directory contents
    result = tools["filesystem_operations"]("list_directory", path=".", recursive=False)
    print(f"Directory contents: {len(result['files'])} items")

    # Search for Python files
    result = tools["filesystem_operations"]("search_files", directory_path=".", pattern="*.py")
    print(f"Found {result['total_matches']} Python files")

except Exception as e:
    print(f"Filesystem error: {e}")

# Example: Docker operations
try:
    # List running containers
    result = tools["docker_operations"]("list_containers")
    print(f"Running containers: {len(result['containers'])}")

    # Get container details
    if result['containers']:
        container_id = result['containers'][0]['id']
        details = tools["docker_operations"]("get_container", container_id=container_id)
        print(f"Container {container_id}: {details['container']['status']}")

except Exception as e:
    print(f"Docker error: {e}")

# Example: Repository operations live in git-github-mcp (gitops), not here.
# See gitops:git_core (status, log, diff, commit, push, pull, clone, ...).

# Example: System operations
try:
    # Get system status
    result = tools["system_operations"]("get_system_status", include_processes=True)
    print(f"CPU usage: {result['cpu']['usage_percent']}%")
    print(f"Memory usage: {result['memory']['percent']}%")

    # Get help information
    result = tools["system_operations"]("get_help", category="filesystem")
    print(f"Available filesystem operations: {len(result.get('tools', {}))}")

except Exception as e:
    print(f"System error: {e}")

Development

Project Structure

filesystem-mcp/
 .github/                # GitHub workflows and templates
 docs/                   # Documentation files
 filesystem_mcp/         # Main package
    __init__.py         # Package initialization
    app.py              # FastAPI application setup
    config.py           # Configuration management
    models/             # Pydantic models
    tools/              # Tool implementations
       __init__.py     # Tool registration
       file_operations/  # File system tools
       docker_operations/ # Docker management tools
       repo_operations/  # Git repository tools
    utils/              # Utility functions
 tests/                  # Test suite
 .gitignore             # Git ignore rules
 LICENSE                # MIT License
 pyproject.toml         # Project configuration and dependencies
 README.md              # This file
 requirements-dev.txt    # Development dependencies

Running Tests

# Install test dependencies
pip install -r requirements-dev.txt

# Run all tests
pytest

# Run tests with coverage report
pytest --cov=filesystem_mcp --cov-report=term-missing

# Run specific test file
pytest tests/test_docker_operations.py -v

Code Style & Quality

This project enforces code quality using:

  • Black - Code formatting

  • isort - Import sorting

  • mypy - Static type checking

  • pylint - Code quality analysis

# Format code with Black
black .

# Sort imports with isort
isort .

# Type checking with mypy
mypy .

# Lint with pylint
pylint filesystem_mcp/

Building and Releasing

  1. Update the version in pyproject.toml

  2. Update CHANGELOG.md

  3. Commit changes with a message like "Bump version to x.y.z"

  4. Create a git tag: git tag vx.y.z

  5. Push the tag: git push origin vx.y.z

  6. GitHub Actions will automatically build and publish the package to PyPI

Contributing

Contributions are welcome! Please read our Contributing Guidelines for details on how to submit pull requests, report issues, or suggest new features.

๐Ÿ›ก๏ธ Industrial Quality Stack

This project adheres to SOTA 14.1 industrial standards for high-fidelity agentic orchestration:

  • Python (Core): Ruff for linting and formatting. Zero-tolerance for print statements in core handlers (T201).

  • Webapp (UI): Biome for sub-millisecond linting. Strict noConsoleLog enforcement.

  • Protocol Compliance: Hardened stdout/stderr isolation to ensure crash-resistant JSON-RPC communication.

  • Automation: Justfile recipes for all fleet operations (just lint, just fix, just dev).

  • Security: Automated audits via bandit and safety.

License

This project is licensed under the MIT License - see the LICENSE file for details.

Changelog

See CHANGELOG.md for a history of changes to this project.

Topics

filesystem mcp-server fastmcp file-operations docker system-monitoring python mcp model-context-protocol portmanteau concurrency-safe

Webapp Dashboard

This MCP server includes a free, premium web interface for monitoring and control. By default, the web dashboard runs on port 10742. (Assigned ports: 10742 (Backend (was 13000)), 10743 (Frontend (was 13001)))

To start the webapp:

  1. Navigate to the webapp (or web, frontend) directory.

  2. Run start.bat (Windows) or ./start.ps1 (PowerShell).

  3. Open http://localhost:10742 in your browser.

Available Tools

24 tools
agentic_file_workflowB

Execute agentic file workflows using FastMCP 2.14.5+ sampling (no tools).

Gathers file system context server-side, then uses ctx.sample() to have the LLM analyze and reason about it. Compatible with Claude Desktop which supports basic sampling but not sampling.tools capability.

Args: See Parameters block.

Return Format

{"success": bool, "operation": str, "summary": str, "result": {"workflow_prompt", "steps_executed", "results", "notes", "execution_summary"}, "quality_metrics": {...}, "recommendations": [...], "next_steps": [...]} On failure: {"success": false, "error": str, "error_type": str, "recovery_options": [...], "diagnostic_info": {...}}

Recovery: If NO_CONTEXT, run from an MCP client that injects Context. If SAMPLING_ERROR, shorten the prompt or check server logs; verify the host supports ctx.sample().

Examples

agentic_file_workflow(workflow_prompt="Find and summarize all TODO comments in src/", available_tools=["search_ops"]) agentic_file_workflow(workflow_prompt="Rename all .bak files in D:/data to .old", available_tools=["file_ops", "dir_ops"])

NameRequiredDescriptionDefault
max_iterationsNo
available_toolsYes
workflow_promptYes

Output Schema

NameRequiredDescription

No output parameters

TDQS

B3.2/5.0
Behavior4/5

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

Goes well beyond the annotations by disclosing the sampling dependency, the NO_CONTEXT requirement for an MCP client that injects Context, the SAMPLING_ERROR failure mode, and a full return/error envelope. The remaining gap is the unexplained interaction between the "no tools" claim and the required available_tools parameter, which leaves the execution model ambiguous.

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

Conciseness4/5

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

Front-loaded with the core mechanism in sentence one, then organized under clear headers (Return Format, Recovery, Examples). "Args: See Parameters block." is pure filler, and the duplicated Return Format block is partly redundant with the existing output schema, but overall it is well-structured rather than bloated.

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?

An output schema exists, so restating the return shape is optional, and the failure/recovery paths are well covered for a tool with a sampling dependency. What's missing is any description of max_iterations semantics or the delegation behavior behind available_tools, which an agent needs to invoke this correctly.

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

Parameters2/5

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

Schema coverage is 0% and the description explicitly defers with "Args: See Parameters block," adding nothing for workflow_prompt or max_iterations (max_iterations is never mentioned at all). Only the examples give indirect shape to workflow_prompt and available_tools, which is insufficient for three undocumented parameters on a non-trivial tool.

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

Purpose3/5

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

The description explains the mechanism (server-side context gathering plus ctx.sample()) and gives illustrative examples, but the actual capability is fuzzy: it says "no tools" yet takes an available_tools list and one example renames files, so it's unclear whether this analyzes files or performs file operations. It also never distinguishes itself from siblings like file_ops, dir_ops, or search_ops, which the examples reference.

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 compatibility note ("Compatible with Claude Desktop which supports basic sampling but not sampling.tools capability") and the two examples imply a usage context, and the Recovery section gives error-conditional guidance. However, there is no explicit rule for when to pick this tool over calling file_ops/search_ops directly, which is the key decision an agent faces given the siblings.

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

compose_configC
Read-onlyIdempotent

Render and validate compose configuration (docker compose config).

Args: See Parameters block.

Return Format

{"success": bool, "action": str, "message": str, "result": {"output": str, "stderr": str}} result.output: rendered YAML.

Examples

compose_config(path="D:/dev/myapp") compose_config(path="D:/dev/myapp", validate=False)

NameRequiredDescriptionDefault
pathNo.
timeoutNo
validateNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

C2.8/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, non-destructive and closed-world, so the safety profile is covered. The description adds that stderr is captured and returned in a structured envelope, which hints at failure visibility, but it never says what happens when validation fails (success=false? exception?) โ€” despite an output schema already documenting the response shape.

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

Conciseness3/5

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

The purpose line is front-loaded and the examples are compact and useful, but "Args: See Parameters block." is a zero-information sentence and the Return Format block largely restates an output schema that already exists. Roughly a third of the text does not earn its place.

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

Completeness2/5

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

For a tool whose parameters are entirely undocumented, the description should carry the load and does not: path semantics, timeout behavior, and the effect of validate=true are all left to guesswork. The examples and return envelope are helpful, but an agent still cannot confidently predict what validation means here.

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

Parameters2/5

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

Schema description coverage is 0% โ€” all three parameters have only types and defaults. The description deflects with "See Parameters block" and then provides no meaning for `timeout` at all, and no explanation of what `validate` toggles or whether `path` is a directory or a compose file. The two examples only weakly illustrate `path` and `validate=False`.

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 names a specific verb pair and resource ("Render and validate compose configuration") and anchors it to the real command "docker compose config". That distinguishes it from sibling compose tools like compose_up/compose_down/compose_logs, though it never explicitly states that it does not start containers.

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

Usage Guidelines2/5

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

There is no when-to-use guidance, no mention of alternatives (e.g. use compose_up to actually launch), and no prerequisites. "Args: See Parameters block." is the only nod to usage, and the examples show call shapes rather than decision criteria.

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

compose_downA

Stop and remove Compose containers (docker compose down).

Recovery: If down fails (e.g. bind mounts in use), stop consumers or use docker CLI for force removal.

Return Format

{"success": bool, "action": str, "message": str, "result": {"output": str, "stderr": str}} On failure: {"success": false, "error": str, "recovery_options": [...]}

Examples

compose_down(path="D:/dev/myapp") compose_down(path="D:/dev/myapp", volumes_prune=True)

NameRequiredDescriptionDefault
pathNo.
timeoutNo
volumes_pruneNo
remove_orphansNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.7/5.0
Behavior4/5

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

Goes well beyond the annotations by naming what is removed (containers), what failure looks like (bind mounts in use), and how to recover. The annotations declare destructiveHint=false, and while removal is recoverable via compose_up, the description never warns that volumes_prune=True deletes persistent volume data โ€” the one truly irreversible action here is undisclosed.

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

Conciseness4/5

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

Front-loaded with the core action, then recovery, then return format and examples โ€” a sensible priority order with no filler prose. The return-format block is partly duplicated by the existing output schema, so a little trimming is possible.

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?

Safety-relevant context (recovery on failure) is present and the output shape is covered, but for a zero-required-parameter, 0%-schema-coverage mutation tool it leaves meaningful gaps: the meaning of remove_orphans, the timeout behavior, and the data-loss implications of volumes_prune.

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

Parameters2/5

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

Schema description coverage is 0% across four parameters, so the description must compensate and largely does not: 'timeout' (300s) and 'remove_orphans' (default true, which silently deletes non-compose containers) are never mentioned, and path/volumes_prune appear only as bare example arguments with no explanation of effect or data risk.

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

Purpose5/5

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

States a specific verb pair and resource ('Stop and remove Compose containers') and anchors it to the canonical CLI equivalent ('docker compose down'), which lets an agent distinguish it from compose_up, compose_restart, and compose_ps without opening a schema.

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

Usage Guidelines3/5

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

Gives a recovery path for failure ('stop consumers or use docker CLI for force removal'), which is genuine when-it-fails guidance. But it never says when to prefer compose_down over compose_restart (a sibling that also stops containers) or what happens to running services not managed by the compose file.

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

compose_logsB
Read-onlyIdempotent

Fetch service logs (docker compose logs).

Recovery: If logs empty, verify service names with compose_ps.

Return Format

{"success": bool, "action": str, "message": str, "result": {"output": str, "stderr": str}} On failure: {"success": false, "error": str, "recovery_options": [...]}

Examples

compose_logs(path="D:/dev/myapp", tail=100) compose_logs(path="D:/dev/myapp", services=["web"], since="2026-08-01T00:00:00")

NameRequiredDescriptionDefault
pathNo.
tailNo
sinceNo
untilNo
followNo
timeoutNo
servicesNo
timestampsNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare readOnly/idempotent/non-destructive, so the safety profile is covered. The description adds a recovery path and return shape, but omits the most consequential behavior: that follow=true likely streams/blocks, and that timeout=300 acts as the guard โ€” an agent could hang without knowing this.

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

Conciseness4/5

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

Front-loaded purpose sentence, then recovery, return format and examples in clearly labeled blocks โ€” easy to scan. The return-format block duplicates the existing output schema, so it costs space without adding much, but the overall size is proportionate.

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?

Since an output schema exists, the description needn't restate return values, yet it does while leaving half the input parameters undocumented. For an 8-parameter tool with a blocking-streaming mode, the description is adequate but has clear gaps an agent would fall into.

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

Parameters2/5

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

Schema coverage is 0% across 8 parameters, so the description carries the full burden and largely fails it. Examples illustrate path, tail, services and since, but follow, timeout, until and timestamps are never explained โ€” and these are the parameters whose semantics matter most.

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?

States a specific verb and resource ("Fetch service logs (docker compose logs)"), which is unambiguous on its own. It does not, however, contrast itself with siblings like container_ops or compose_ps beyond the recovery note, so an agent must infer where compose logs ends and container logs begin.

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?

Gives explicit failure-path guidance: "If logs empty, verify service names with compose_ps", naming the alternative and the condition that selects it. It lacks any when-not guidance (e.g. when to prefer container_ops or when follow is appropriate), so it is clear context without exclusions.

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

compose_psA
Read-onlyIdempotent

List compose services as JSON (docker compose ps --format json).

Return Format

{"success": bool, "action": str, "message": str, "result": {"output": str, "stderr": str}} result.output: JSON string from docker compose.

Examples

compose_ps(path="D:/dev/myapp") compose_ps(path="D:/dev/myapp", all_services=True)

NameRequiredDescriptionDefault
pathNo.
timeoutNo
servicesNo
all_servicesNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is fully covered without the description. The description adds the return envelope shape but nothing about behavior such as what happens when no containers are running, whether it auto-creates a project, or how the timeout interacts with a slow stack.

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

Conciseness4/5

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

The core purpose is front-loaded in the first line, followed by clearly headed return-format and example blocks. Slightly wasteful: the Return Format section largely restates the output schema and takes as much space as the actual behavioral content.

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 zero-required-parameter read tool with rich annotations and an output schema, the essentials are present, but the two undocumented parameters (timeout, services) are a real gap an agent could stumble on. The space spent duplicating the output schema would have been better used explaining those inputs.

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

Parameters2/5

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

Schema description coverage is 0%, so the description must carry all four parameters, yet it only illustrates `path` and `all_services` via examples. `timeout` (default 120) and `services` (array filter) are never mentioned anywhere, leaving half the parameters semantically opaque.

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

Purpose5/5

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

States a specific verb (list) and resource (compose services) and anchors it to the exact underlying command (`docker compose ps --format json`), which makes the scope unambiguous. Against siblings like compose_logs, compose_config, and compose_up, an agent can immediately tell this is the service-status lister.

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?

Usage is only implied through two examples (`path=...` and `all_services=True`), which show typical call shapes but never state when to pick this over compose_config or compose_logs, nor any preconditions (e.g. the project must already be running). No exclusions or alternatives are named.

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

compose_restartB

Restart compose services (docker compose restart).

Return Format

{"success": bool, "action": str, "message": str, "result": {"output": str, "stderr": str}} On failure: {"success": false, "error": str, "recovery_options": [...]}

Examples

compose_restart(path="D:/dev/myapp") compose_restart(path="D:/dev/myapp", services=["web"])

NameRequiredDescriptionDefault
pathNo.
timeoutNo
servicesNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=false, idempotentHint=false and destructiveHint=false, so the safety profile is carried by structured data. The description adds the success/failure response shape, but says nothing about downtime, whether containers are recreated, or what happens to in-flight work โ€” the traits that matter most for a non-idempotent restart.

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

Conciseness4/5

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

Front-loaded one-line purpose followed by return format and examples โ€” every block is scannable and none is filler. The return-format block is somewhat redundant given an output schema exists, costing a point.

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 3-parameter mutation tool with zero schema coverage, the definition is workable but thin: it never explains `timeout` or the all-services default, and gives no indication of restart scope or side effects. The return-format section does relieve pressure on describing outputs.

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

Parameters2/5

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

Schema coverage is 0%, so the description must compensate, and it only partially does: the examples show that `path` locates the compose project and that `services` optionally narrows scope, but no parameter is explained. `timeout` is never mentioned, and the behavior when `services` is null (restart everything?) is left to inference.

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

Purpose4/5

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

States a specific verb and resource โ€” restart compose services โ€” and anchors it to the canonical equivalent (docker compose restart). An agent can distinguish it from compose_up/compose_down/compose_ps by the verb alone, though the description never explicitly contrasts those siblings.

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?

Usage is only implied through two examples (restart whole stack via path, or a subset via services). There is no explicit guidance on when to restart versus compose_down + compose_up, nor any stated prerequisites such as requiring a running stack.

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

compose_upA

Start Compose services (docker compose up).

Recovery: If build fails, fix Dockerfile/context; if ports conflict, edit compose or stop conflicting services.

Idempotency: Re-running up is generally safe; may recreate containers per compose semantics.

Return Format

{"success": bool, "action": str, "message": str, "result": {"output": str, "stderr": str}} On failure: {"success": false, "error": str, "recovery_options": [...]}

Examples

compose_up(path="D:/dev/myapp") compose_up(path="D:/dev/myapp", services=["web", "db"], build=True)

NameRequiredDescriptionDefault
pathNo.
buildNo
scaleNo
detachNo
timeoutNo
servicesNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.6/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=false and destructiveHint=false; the description adds real value with a build failure/port conflict recovery path and the note that re-running may recreate containers per compose semantics (consistent with idempotentHint=false). It still doesn't mention permission requirements or that detach defaults to true.

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

Conciseness4/5

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

Front-loaded with the core action, then recovery, idempotency, return format, and examples in scannable sections. The return-format block is largely redundant given the output schema exists, slightly reducing density but not hurting comprehension.

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?

Output schema exists, so restating return shape is unnecessary, and the mutation/recovery context is covered. The remaining gap is the undefined semantics of half the parameters (detach, timeout, scale) plus no note on permissions for a container-mutating 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?

Schema description coverage is 0% across 6 parameters, and the examples only illustrate path, services, and build. Meaning of detach (default true), timeout (default 300), and scale is left entirely to inference, so the description only partially compensates for the schema gap.

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 opens with a specific verb and resource ('Start Compose services (docker compose up)'), which is unambiguous. It doesn't explicitly distinguish itself from siblings like compose_restart or compose_down, but the word 'Start' plus the literal command mapping makes selection clear enough.

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?

It provides recovery guidance after a failed build or port conflict and an idempotency note, which implies when it's appropriate to (re)run. However, there is no explicit statement of when to use this versus compose_restart or compose_down, so the agent must infer boundaries.

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

container_opsC

Docker Container Lifecycle operations.

Operations: list_containers, get_container, create_container, start_container, stop_container, restart_container, remove_container, container_exec, container_logs, container_stats.

Args: See Parameters block.

Return Format

{"success": bool, "action": str, "message": str, "result": {...}}

  • list_containers: {"containers": [{"id", "name", "image", "status", ...}]}

  • container_logs: {"logs": str}

  • container_stats: {"stats": {...}}

Examples

container_ops(operation="list_containers", show_stats=True) container_ops(operation="container_logs", container_id="my-app", tail=50) container_ops(operation="restart_container", container_id="db", timeout=10)

NameRequiredDescriptionDefault
ttyNo
nameNo
tailNo
userNo
forceNo
imageNo
portsNo
sinceNo
stdinNo
untilNo
detachNo
followNo
socketNo
stderrNo
stdoutNo
streamNo
commandNo
timeoutNo
volumesNo
operationNo
show_statsNo
timestampsNo
auto_removeNo
environmentNo
working_dirNo
container_idNo
network_modeNo
restart_policyNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

C2.7/5.0
Behavior1/5

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

The annotations declare destructiveHint=false, yet the description explicitly lists remove_container and stop_container, which are destructive lifecycle operations. The description also does not disclose irreversible deletion, force semantics, permission requirements, or the danger of calling remove_container.

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

Conciseness4/5

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

The description is front-loaded with the operation list, then return format and examples, so it is easy to scan. The line 'Args: See Parameters block' is wasted space, but the overall structure is efficient and not verbose.

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

Completeness2/5

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

For a 10-operation, 28-parameter tool, the description omits critical operation-specific parameter requirements and destructive behavior details. It does provide the operation list and return format, and an output schema exists, but that is not enough to guide correct invocation of a complex multi-operation tool.

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

Parameters2/5

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

There are 28 parameters with 0% schema description coverage, and the description mostly defers with 'Args: See Parameters block.' The examples mention only a few parameters (show_stats, container_id, tail, timeout) and do not explain operation-specific applicability for the remaining parameters.

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

Purpose4/5

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

The description states the resource and scope clearly: 'Docker Container Lifecycle operations,' followed by an explicit operation list. It does not, however, distinguish this tool from overlapping siblings such as compose_up or host_ops, so sibling differentiation is incomplete.

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 operation list and examples imply when individual operations are useful, such as checking logs or restarting a container. But there is no explicit guidance on when to use this tool versus compose_up, compose_down, or other siblings, and no exclusions or prerequisites are stated.

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

dir_opsC

Directory structure and management operations.

Operations: list_directory, create_directory, remove_directory, directory_tree, calculate_directory_size, find_empty_directories, copy_tree, move_directory.

Args: See Parameters block.

Return Format

{"success": bool, "action": str, "message": str, "result": {...}}

  • result for list_directory: {"items": [...], "total": int}

  • result for calculate_directory_size: {"size_bytes": int, "human_readable": str}

Examples

dir_ops(operation="list_directory", path="D:/Dev/repos", recursive=True) dir_ops(operation="directory_tree", path="D:/Dev/repos/arxiv-mcp/src", max_depth=2) dir_ops(operation="calculate_directory_size", path="D:/data", human_readable=True)

NameRequiredDescriptionDefault
pathNo
engineNoauto
mirrorNo
dry_runNo
patternNo
timeoutNo
exist_okNo
max_depthNo
max_filesNo
operationNo
overwriteNo
recursiveNo
output_formatNotext
create_parentsNo
human_readableNo
include_hiddenNo
destination_pathNo
exclude_patternsNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

C2.4/5.0
Behavior2/5

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

The description lists operation names and a return envelope but discloses no actual behavior: whether remove_directory recurses or fails on non-empty directories, what `mirror` and `overwrite` do to existing destinations, what `dry_run` previews, what the robocopy vs shutil engine selection implies, or what `timeout` governs. Moreover, the enumerated `remove_directory`/`move_directory` operations conflict with the declared destructiveHint=false, so the safety profile an agent reads from annotations is wrong.

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

Conciseness3/5

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

Headers and a compact example block give it a front-loaded, scannable shape, and the operation list is efficient. However, the 'Args: See Parameters block.' line is pure waste, and the Return Format section largely restates the output schema that already exists.

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

Completeness2/5

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

For an 18-parameter, eight-operation mutation tool with zero schema descriptions, the description needs to at least map parameters to operations and flag which combinations are risky; it does neither. The output schema being present excuses the return-format brevity, but the invocation-side gaps (engine choice, dry_run scope, mirror/overwrite interactions, destination_path) are large.

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

Parameters1/5

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

Schema description coverage is 0% across 18 parameters, and the description's only nod to them is 'Args: See Parameters block.' โ€” a pointer to a block that contains no descriptions. Only path, operation, max_depth, recursive, and human_readable appear incidentally in examples; engine, mirror, dry_run, pattern, timeout, exist_ok, max_files, overwrite, output_format, create_parents, include_hidden, destination_path, and exclude_patterns are undocumented everywhere, including which ones apply to which operation.

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 opening line names the resource (directory structure) and the description enumerates all eight supported operations explicitly, so an agent can see the full verb set at a glance. It does not distinguish itself from the sibling `file_ops` or `search_ops` (file-vs-directory scope, listing vs searching), so the sibling differentiation is left implicit.

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

Usage Guidelines2/5

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

The examples show three calls but never say when to pick one operation over another, when to prefer this over `file_ops`, or when a directory operation is unsafe/inappropriate. Nothing signals that remove_directory, move_directory, or copy_directory with mirror=True are destructive paths requiring care, and there are no stated preconditions.

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

file_opsC

Comprehensive file system operations with concurrency-safe writes.

Operations: read_file, write_file, edit_file, delete_file, move_file, copy_file, read_file_lines, read_multiple_files, file_exists, get_file_info, head_file, tail_file, undo_edit, get_file_hash, append_file, touch_file, compress, decompress.

Line indexing: read_file_lines offset is a 0-based line index (0 = first line of the file). The response echoes offset/limit plus first_line_number (1-based number of the first returned line, null when empty) so callers can chain pages via next_steps without guessing.

Write operations (write_file, edit_file, move_file, copy_file) use per-path asyncio.Lock + atomic os.replace() to prevent corruption under concurrent access.

Args: See Parameters block.

Return Format

{"success": bool, "action": str, "message": str, "result": {...}}

  • success: whether the operation succeeded

  • action: the operation performed (e.g. "read_file")

  • message: natural-language summary for the user

  • result: operation-specific payload (file content, info dict, moved path, etc.) On failure, returns {"success": false, "error": str, "error_type": str, "suggestions": [...]}.

Examples

file_ops(operation="read_file", path="C:/Users/me/notes.md") file_ops(operation="write_file", path="D:/data/out.txt", content="hello") file_ops(operation="edit_file", path="D:/data/app.py", old_string="foo", new_string="bar") file_ops(operation="copy_file", path="a.txt", destination_path="b.txt")

NameRequiredDescriptionDefault
pathNo
limitNo
linesNo
offsetNo
contentNo
new_strNo
old_strNo
encodingNoutf-8
is_regexNo
no_backupNo
operationNo
overwriteNo
check_typeNofile
file_pathsNo
new_stringNo
old_stringNo
replace_allNo
replacementsNo
allow_multipleNo
archive_formatNozip
create_parentsNo
ensure_newlineNo
hash_algorithmNosha256
follow_symlinksNo
include_contentNo
destination_pathNo
max_content_sizeNo
max_file_size_mbNo
ignore_whitespaceNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

C2.5/5.0
Behavior1/5

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

The description includes delete_file among supported operations while annotations declare destructiveHint=false, a direct contradiction of the destructive safety signal. Although concurrency-safe writes and return/failure shapes add useful context, the annotation contradiction caps this dimension.

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

Conciseness4/5

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

It is well structured, front-loading operations and then covering line indexing, write safety, return format, and examples. The phrase 'Args: See Parameters block' is wasted, and the return-format section partly duplicates the output schema, but overall it is efficient for such a large tool.

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

Completeness2/5

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

For a 29-parameter multi-operation tool with no schema parameter descriptions, the definition omits operation-specific parameter requirements and destructive/backup behavior. The output schema and return-format section help, but they do not compensate for the missing operational detail.

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

Parameters2/5

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

Schema description coverage is 0% for 29 parameters, yet the description explains only offset/limit line indexing and a few examples. It leaves most parameters, including content, overwrite, no_backup, and the ambiguous old_str/new_str versus old_string/new_string fields, undefined.

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

Purpose4/5

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

The description states the resource and enumerates the 18 file operations, so the tool's scope is clear. It does not, however, distinguish this from siblings like dir_ops or search_ops.

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

Usage Guidelines2/5

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

It lists operations and examples but gives no explicit when-to-use/when-not guidance or routing against sibling tools such as dir_ops and search_ops. Selection between operations is left entirely to inference.

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

get_lock_statusA
Read-onlyIdempotent

Get current per-path file lock status (diagnostic tool).

Returns which file paths currently have active locks - useful for debugging concurrent write contention between Claude Desktop, Cursor, and Windsurf sessions.

Return Format

{"locked_paths": [str], "lock_count": int}

Examples

get_lock_status()

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, non-destructive, closed-world behavior, so the safety profile is covered. The description adds real context beyond that: locks are per-path and span multiple client sessions, which explains why the tool exists. It does not discuss lock staleness or scope limits, which keeps it from a 5.

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

Conciseness4/5

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

The purpose statement and the debugging rationale are front-loaded and earn their place. The '## Return Format' block duplicates the existing output schema, and the '## Examples' section contains only a bare no-argument call, which is filler for a zero-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?

An output schema exists, so return values need not be spelled out, and the description still names the key fields. For a zero-argument diagnostic read, an agent has everything needed to call it correctly; only edge-case behavior (stale locks, empty results) is unaddressed.

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 takes zero parameters, so there is nothing to disambiguate; the example call 'get_lock_status()' confirms no arguments are needed. Baseline for a parameterless schema applies.

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

Purpose4/5

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

States a specific verb and resource: 'Get current per-path file lock status', with the parenthetical '(diagnostic tool)' clarifying its intent. It is clearly distinguishable from the file/dir/host operation siblings, though it does not explicitly contrast with the nearest sibling, test_concurrency_safety.

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?

Gives a concrete usage context: 'useful for debugging concurrent write contention between Claude Desktop, Cursor, and Windsurf sessions.' However, it offers no when-not-to-use guidance and never mentions test_concurrency_safety, which appears to be the adjacent diagnostic sibling.

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

host_opsC
Read-onlyIdempotent

Host System Context (Info, Env, Help, User).

Operations: get_help, get_system_info, get_environment_info, get_security_info, get_hardware_info, get_software_info, get_time_info, get_locale_info, get_user_info, get_session_info, get_service_status, get_log_info.

Args: See Parameters block.

Return Format

{"success": bool, "action": str, "message": str, "result": {...}}

  • result for get_system_info: {"platform", "python", "machine", "cpu_cores", "memory_total"}

  • result for get_environment_info: {"variables": {...}}

Examples

host_ops(operation="get_help", category="filesystem") host_ops(operation="get_system_info", detailed=True) host_ops(operation="get_environment_info")

NameRequiredDescriptionDefault
levelNobasic
categoryNo
operationNo
tool_nameNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

C2.8/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, openWorldHint=false, and destructiveHint=false, so the safety profile is covered. The description adds a return envelope and two result shapes, but the example host_ops(operation="get_system_info", detailed=True) references a parameter absent from the schema, which can mislead invocation.

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

Conciseness3/5

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

The description is sectioned and front-loads the host-context purpose, but the 12-operation list duplicates the enum in the schema, 'Args: See Parameters block' is wasted text, and the invalid example consumes space without helping invocation.

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

Completeness2/5

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

This is a complex 12-operation dispatcher with four undocumented parameters and substantial sibling overlap, so the description needs more parameter and selection context. Output schema exists, so return values need not be fully explained, but the missing per-parameter semantics and alternative guidance leave it incomplete.

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

Parameters2/5

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

Schema description coverage is 0% for four parameters, and the description punts with 'Args: See Parameters block.' It gives one category example for get_help but never defines level, tool_name, or the meaning/range of category, and the detailed=True example is not a valid parameter.

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 names host system context and enumerates the specific get_* operations, so the agent can tell it retrieves host information. It does not differentiate these operations from overlapping monitor_* siblings such as monitor_get_system_status and monitor_get_cpu_info.

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

Usage Guidelines2/5

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

The description provides no when-to-use or when-not-to-use guidance, and it never mentions the monitor_* alternatives that retrieve similar system data. The examples show invocation syntax for two operations but do not explain selection criteria.

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

infra_opsC

Docker Images, Networks, and Volumes operations.

Operations: list_images, get_image, pull_image, build_image, remove_image, prune_images, list_networks, get_network, create_network, remove_network, prune_networks, list_volumes, get_volume, create_volume, remove_volume, prune_volumes.

Args: See Parameters block.

Return Format

{"success": bool, "action": str, "message": str, "result": {...}}

  • list_images: {"images": [{"id", "name", "tag", "size", ...}]}

  • pull_image: {"status": str, "image": str}

  • list_volumes: {"volumes": [{"name", "driver", ...}]}

Examples

infra_ops(operation="list_images", all_images=True) infra_ops(operation="pull_image", image="nginx", tag="alpine") infra_ops(operation="create_network", name="app-net", driver="bridge")

NameRequiredDescriptionDefault
rmNo
tagNolatest
ipamNo
nameNo
pathNo
pullNo
forceNo
imageNo
driverNo
labelsNo
squashNo
filtersNo
forcermNo
ingressNo
nocacheNo
nopruneNo
optionsNo
internalNo
platformNo
buildargsNo
operationNo
all_imagesNo
attachableNo
dockerfileNoDockerfile
network_idNo
driver_optsNo
enable_ipv6No
volume_nameNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

C2.7/5.0
Behavior1/5

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

The annotations declare destructiveHint=false, but the description explicitly lists remove_image, prune_images, remove_network, prune_networks, remove_volume, and prune_volumes, which are destructive operations. This directly contradicts the annotation and is a serious safety-signaling inconsistency.

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

Conciseness4/5

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

The description uses clear sections for operations, return format, and examples, with the main domain and operation list front-loaded. It is reasonably concise for a multiplexed tool, though 'Args: See Parameters block' adds little value.

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

Completeness2/5

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

For a 16-operation, 28-parameter tool, the description lists operations and gives a few examples but does not explain operation-specific parameter requirements or safety implications. The output schema exists, but the missing parameter mapping and contradictory destructive hint leave the agent under-equipped.

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

Parameters2/5

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

There are 28 parameters with 0% schema description coverage, and the description mostly says 'Args: See Parameters block.' The examples clarify only a few fields such as all_images, image, tag, name, and driver, leaving most operation-specific parameters undocumented in both the schema and the description.

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

Purpose4/5

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

The description clearly identifies the tool as covering Docker Images, Networks, and Volumes operations and lists the supported operation names. It is specific about the resource domain but does not explicitly differentiate itself from siblings such as container_ops or compose_*.

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 operation list and examples imply when the tool is applicable, particularly for image, network, and volume operations. However, there is no explicit guidance on when to choose this tool over siblings like container_ops, compose_up, or host_ops, nor are exclusions or prerequisites stated.

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

monitor_get_cpu_infoA
Read-onlyIdempotent

Core counts, optional frequency, and per-CPU usage.

Return Format

{"success": bool, "result": {"physical_cores": int, "total_cores": int, "frequency": {...} | None, "usage_per_cpu": [float]}}

Examples

monitor_get_cpu_info()

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already establish this as a read-only, idempotent, non-destructive, closed-world query. The description adds useful behavioral detail by disclosing the exact result shape and noting that frequency may be absent.

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?

It is front-loaded with the core purpose, then gives the return format and a minimal example. There is no filler or redundancy.

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

Completeness5/5

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

For a zero-argument read-only tool with annotations and an output schema, the description is complete enough to call correctly. It even includes the return shape, making the result fully predictable.

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 zero input parameters, so the baseline is 4. The description does not need to explain inputs, and its mention of optional frequency refers to the return value rather than an input parameter.

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

Purpose4/5

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

The description states a specific resource and returned data: physical/total core counts, optional frequency, and per-CPU usage. It is clear but does not explicitly differentiate itself from nearby monitoring siblings like monitor_get_resource_usage or monitor_get_system_status.

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

Usage Guidelines2/5

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

The description gives no guidance on when to use this CPU-specific tool versus the other monitoring tools. The example only shows an empty invocation, not a usage context or alternative.

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

monitor_get_disk_usageA
Read-onlyIdempotent

Per-partition usage (skips mounts that raise PermissionError).

Return Format

{"success": bool, "result": {"partitions": [{"device", "mountpoint", "usage"}]}}

Examples

monitor_get_disk_usage()

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.6/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent and non-destructive, so the bar is lower. The description nevertheless adds real value by disclosing that mounts raising PermissionError are skipped, meaning results can be a partial partition list โ€” a behavior not visible in any structured field.

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

Conciseness4/5

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

Front-loaded with the core purpose in a single clause, and the sections are clearly delimited. The Return Format block is largely redundant given an output schema exists, which costs a little space.

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?

With zero params, full annotation coverage and an output schema present, the definition covers what an agent needs to call it. The one remaining gap is that the 'usage' field's unit (percent vs bytes) is never stated anywhere.

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?

Zero parameters, so the baseline of 4 applies; there is nothing for the description to disambiguate. The example call correctly reinforces that no arguments are needed.

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?

States a specific verb+resource: per-partition disk usage, which is clearly distinguishable from siblings like monitor_get_memory_info or monitor_get_cpu_info. It doesn't explicitly contrast with monitor_get_resource_usage or monitor_get_system_status, which may also surface disk figures.

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

Usage Guidelines2/5

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

No statement of when to use this versus the other monitor_* tools, and no prerequisites or exclusions. The PermissionError note describes behavior during execution, not when to select the tool, so the agent must infer selection from the name alone.

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

monitor_get_memory_infoB
Read-onlyIdempotent

Virtual and swap memory breakdown.

Return Format

{"success": bool, "result": {"virtual": {...}, "swap": {...}}}

Examples

monitor_get_memory_info()

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription

No output parameters

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare this as read-only, idempotent, closed-world, and non-destructive, so the safety profile is covered. The description adds the virtual/swap split and a return-shape example, but does not add deeper behavioral context such as cost, latency, or scope limitations.

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

Conciseness4/5

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

The description is short and front-loads the purpose. The Return Format section duplicates the existing output schema, and the example call is trivial for a no-parameter tool, but neither is verbose enough to be a major flaw.

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 a simple no-parameter, read-only tool with full annotations and an output schema, the description is largely complete. The main remaining gap is the absence of sibling differentiation against broader resource-usage tools.

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 takes zero parameters, so there is no parameter semantics to explain. The baseline for zero-parameter tools is appropriately met.

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 resource and scope: virtual and swap memory breakdown. It is more specific than a generic system-status call, but it does not explicitly distinguish itself from sibling monitor_get_resource_usage or monitor_get_system_status.

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

Usage Guidelines2/5

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

The description gives no explicit guidance on when to use this tool versus alternatives such as monitor_get_resource_usage or monitor_get_system_status. Use is only implied by the tool name and the phrase 'memory breakdown'.

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

monitor_get_network_infoB
Read-onlyIdempotent

Aggregate I/O counters and per-interface addresses and stats.

Return Format

{"success": bool, "result": {"io_counters": {...}, "addresses": {...}, "stats": {...}}}

Examples

monitor_get_network_info()

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription

No output parameters

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and a closed world, so the safety profile is fully covered. The description adds the return envelope shape (success/result with io_counters, addresses, stats), which is modest extra context since an output schema already exists.

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

Conciseness4/5

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

Front-loads the purpose in one sentence, then uses headed sections for return format and example, so an agent can scan it quickly. The Return Format block slightly duplicates the output schema but stays compact.

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 no-argument read-only network info tool with both annotations and an output schema, the description is sufficient to call it correctly. It could add one line on when network data is the right choice versus other monitor_* tools.

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 takes zero parameters, so there is nothing for the description to document; the baseline of 4 applies. The example call with empty parentheses correctly reinforces that no arguments are accepted.

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?

Names a specific verb ('aggregate') and resource ('I/O counters, per-interface addresses and stats'), making clear it is the network-monitoring sibling among monitor_get_* tools. It does not explicitly contrast itself with those siblings, but the resource naming is specific enough to distinguish.

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

Usage Guidelines2/5

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

The description states what the tool returns but never says when to call it, when not to, or which sibling (e.g. monitor_get_performance_metrics vs monitor_get_system_status) to prefer. An agent must infer that this is the network-specific monitoring call.

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

monitor_get_performance_metricsB
Read-onlyIdempotent

Detailed CPU times, memory, swap, disk I/O, and network I/O counters.

Return Format

{"success": bool, "result": {"cpu_times": {...}, "virtual_memory": {...}, "swap_memory": {...}, "disk_io": {...}, "net_io": {...}}}

Examples

monitor_get_performance_metrics()

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription

No output parameters

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare this as a read-only, idempotent, non-destructive, non-open-world operation, so the safety profile is covered. The description adds useful return-shape context via the Return Format block, but does not disclose permissions, rate limits, or other operational behavior beyond that.

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

Conciseness4/5

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

The description is front-loaded with the core purpose in one sentence, then provides return format and an example. It is appropriately short, though the Return Format block is somewhat redundant given that an output schema already exists.

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 zero-parameter, read-only metrics tool with rich annotations and an output schema, the description covers what is needed to invoke it correctly. Its main gap is the lack of sibling differentiation, which would help an agent choose this aggregated performance tool over the narrower CPU, memory, disk, or network tools.

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 zero parameters, so there is no parameter semantics to explain. The description implicitly confirms this with the empty-call example monitor_get_performance_metrics().

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

Purpose4/5

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

The description uses a specific verb and resource ("get performance metrics") and names the concrete counter categories: CPU times, memory, swap, disk I/O, and network I/O. It does not differentiate this aggregated performance view from sibling tools like monitor_get_cpu_info, monitor_get_memory_info, monitor_get_disk_usage, or monitor_get_network_info.

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

Usage Guidelines2/5

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

The description gives no guidance on when to use this tool versus the many narrower monitor_get_* siblings. It states what data is returned but provides no usage context, alternatives, or exclusions.

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

monitor_get_process_infoA
Read-onlyIdempotent

List running processes with optional substring filter on the process name.

Args: See Parameters block.

Recovery: AccessDenied on some PIDs is normal; total_matching reflects filtered list.

Return Format

{"success": bool, "result": {"processes": [{"pid", "name", "cpu_percent", "memory_percent"}], "total_matching": int}}

Examples

monitor_get_process_info(max_processes=10, sort_by="memory_percent") monitor_get_process_info(filter_pattern="python", max_processes=20)

NameRequiredDescriptionDefault
sort_byNocpu_percent
sort_orderNodesc
max_processesNo
filter_patternNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already declare read-only, idempotent, non-destructive behavior, so the bar is lower. The description adds genuinely useful runtime context: AccessDenied on some PIDs is normal and total_matching reflects the filtered list, which an agent could not infer from the schema.

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

Conciseness4/5

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

Front-loaded one-line purpose followed by compact recovery and return-format sections. The 'Args: See Parameters block' line is mild filler, and the return-format block partly duplicates the output schema.

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

Completeness4/5

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

For a 4-param read-only listing tool with an output schema, the description covers purpose, filtering behavior, and a useful recovery note. The main gap is that sort_order and parameter defaults are not described anywhere readable.

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 coverage is 0%, so four parameters (sort_by, sort_order, max_processes, filter_pattern) are undocumented in structured fields. The description names filter_pattern and the examples demonstrate max_processes and sort_by, but sort_order and defaults are never explained in prose.

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?

States a specific verb ('List') and resource ('running processes') plus the filtering scope. It is distinguishable from monitor_* siblings like get_memory_info or get_cpu_info, though it doesn't explicitly contrast with them.

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 examples imply practical usage (limit results with max_processes, filter with filter_pattern), but there is no explicit when-to-use guidance versus siblings such as monitor_get_performance_metrics or container_ops.

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

monitor_get_resource_usageC
Read-onlyIdempotent

CPU, memory, root disk usage, and boot time.

Idempotency: Read-only; safe to retry.

Return Format

{"success": bool, "result": {"cpu_percent": float, "memory": {...}, "disk": {...}, "boot_time": str}}

Examples

monitor_get_resource_usage()

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription

No output parameters

TDQS

C2.8/5.0
Behavior2/5

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

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false, and openWorldHint=false, so "Read-only; safe to retry" merely restates structured data. No additional behavior is disclosed (e.g., cost of sampling, whether values are instantaneous vs averaged, host scope).

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

Conciseness3/5

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

The opening is a noun fragment rather than a front-loaded verb phrase, and the full '## Return Format' JSON block plus an empty '## Examples' line consume most of the text while duplicating the declared output schema. The content is short in absolute terms but poorly allocated.

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?

With an output schema present, the return-format section is redundant, and given a crowded sibling set the definition is missing the one thing that matters: scope relative to the per-resource monitor tools. It is callable but under-specified for correct tool selection.

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 takes zero parameters, so the baseline is 4. The description correctly implies no inputs are needed via the empty-call example, and there is nothing left to disambiguate.

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

Purpose3/5

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

The fragment "CPU, memory, root disk usage, and boot time" identifies the resources read but supplies no verb or object noun ('usage' is only implied by the tool name). It also fails to distinguish itself from obvious siblings like monitor_get_cpu_info, monitor_get_memory_info, monitor_get_disk_usage, and monitor_get_performance_metrics, so an agent cannot tell whether this is an aggregate or a duplicate.

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

Usage Guidelines2/5

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

There is no statement of when to use this aggregate monitor versus the per-resource siblings (cpu/memory/disk/performance), which is the primary ambiguity here. The only conditional-looking line is the idempotency note, which is not usage guidance.

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

monitor_get_system_statusB
Read-onlyIdempotent

Snapshot of OS, CPU count, load, memory, optional disk/network and top processes.

Recovery: If psutil raises AccessDenied, retry with fewer options or run with appropriate permissions.

Return Format

{"success": bool, "result": {"timestamp": str, "system": str, "release": str, "cpu_count": int, "cpu_usage_percent": float, "memory": {...}, "disk": {...}, "processes": [...], "network": {...}}}

Examples

monitor_get_system_status() monitor_get_system_status(include_processes=True, max_processes=20)

NameRequiredDescriptionDefault
include_diskNo
max_processesNo
include_networkNo
include_processesNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

B3.4/5.0
Behavior4/5

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

The readOnlyHint/idempotentHint/destructiveHint=false annotations already define the safety profile, and the description adds real value on top: it discloses the returned sections and a concrete failure-mode recovery path for psutil AccessDenied. It does not state cost/latency or whether include_processes materially slows the call, which is the main remaining gap.

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

Conciseness3/5

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

The lead sentence is well front-loaded and the recovery note is genuinely useful, but the verbatim Return Format block largely duplicates the output schema and consumes a lot of space. The examples are helpful for parameter usage, though one more line on defaults would have earned that space better.

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 no-required-parameter read tool with annotations and an output schema, this is close to complete: it explains what is collected, what the response looks like, and how to recover from permission errors. The missing piece is positioning against the granular monitor_get_* siblings, which matters given a 24-tool namespace.

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 coverage is 0%, so the description must carry the burden, and it only partially does: it mentions optional disk, network and top processes, and the example shows include_processes and max_processes=20. include_disk is never named directly, defaults are not restated, and the meaning/upper bounds of max_processes (what counts as a 'top' process) is never explained.

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 opening sentence names a concrete resource set (OS, CPU count, load, memory, disk/network, top processes) and frames the tool as a single-file 'snapshot', which implicitly separates it from the single-metric siblings monitor_get_cpu_info, monitor_get_memory_info and monitor_get_disk_usage. It never states that distinction explicitly, so the agent must infer it from the aggregate field list.

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

Usage Guidelines2/5

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

There is no statement of when to call this aggregate snapshot versus the many granular monitor_get_* siblings, and no prerequisite notes. The only conditional guidance is a recovery hint (AccessDenied โ†’ retry with fewer options or elevate permissions), which addresses failure handling, not tool selection.

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

search_opsB
Read-onlyIdempotent

Content Analysis, Grep, and Comparison operations.

Operations: grep_file, count_pattern, search_files, extract_log_lines, compare_files, find_duplicate_files, find_large_files, find_todos, find_symbols, validate_json, analyze_project, run_linter, validate_config. find_todos, find_symbols, validate_json.

Pattern semantics (read this before picking an operation):

  • grep_file / count_pattern take a CONTENT regex searched inside file text.

  • search_files takes a FILENAME glob (fnmatch, e.g. ".py", "test_") matched against file names only โ€” it never looks at file content. For content search across a tree, use grep_file with recursive=True.

Args: See Parameters block.

Return Format

{"success": bool, "action": str, "message": str, "result": {...}}

  • grep_file: {"matches": [{"file": str, "line": int, "text": str}], "count": int}

  • count_pattern: {"count": int}

  • compare_files: {"diff": str, "lines": int}

Examples

search_ops(operation="grep_file", path="D:/Dev/repos", search_pattern="assfix", recursive=True) search_ops(operation="find_large_files", path="D:/data", min_size_mb=500) search_ops(operation="compare_files", path="a.txt", path2="b.txt")

NameRequiredDescriptionDefault
fixNo
pathNo
path2No
encodingNoutf-8
end_timeNo
min_sizeNo
max_linesNo
operationNo
recursiveNo
early_exitNo
log_levelsNo
start_timeNo
max_matchesNo
max_resultsNo
min_size_mbNo
context_linesNo
case_sensitiveNo
hash_algorithmNomd5
include_hiddenNo
max_duplicatesNo
search_patternNo
exclude_log_levelsNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

B3/5.0
Behavior3/5

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

Annotations already declare readOnly/idempotent/non-destructive and closed-world, so the safety profile is covered. The description adds valuable behavior ('search_files ... never looks at file content') and partial return shapes. But it is silent on risky-looking surface like fix=true, run_linter, and early_exit, leaving real behavioral questions unanswered against a declared read-only contract.

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

Conciseness3/5

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

Structure is good: operations list first, then the critical pattern semantics, then return format and examples. But it is marred by duplicated text ('find_todos, find_symbols, validate_json.' appears twice) and by return-format detail for only 3 of 13 operations while examples carry more weight than prose should need to.

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

Completeness2/5

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

For a 13-operation, 22-parameter dispatcher with zero schema description coverage, the description is far short of what an agent needs to invoke operations correctly โ€” there is no per-operation parameter mapping and no mention of output for ten operations. An output schema exists, so return-value explanation is largely unnecessary, yet the agent still cannot tell which parameters apply to which operation.

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

Parameters2/5

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

Schema description coverage is 0% across 22 parameters, and the description dismisses them with 'Args: See Parameters block,' which supplies no meaning. Only search_pattern, path, and min_size_mb get any explanation (via the semantics note and an example); the remaining parameters, including fix, hash_algorithm, log_levels, start_time/end_time, and max_duplicates, are undocumented anywhere.

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 names a specific verb family and resource ('Content Analysis, Grep, and Comparison operations') and enumerates all 13 supported operations, so an agent knows the capability surface. It does not, however, distinguish itself from siblings like file_ops or dir_ops, so the boundary with those tools stays ambiguous.

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 'Pattern semantics' section gives a real when-to-use rule between two operations (content regex for grep_file/count_pattern vs filename glob for search_files, plus the recursive=True escape hatch). There is no guidance for when to pick this tool over file_ops/dir_ops, no exclusions, and no guidance for the other eleven operations.

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

server_shutdownA
Destructive

Shut down the filesystem-mcp server process gracefully.

Schedules an orderly exit after a short delay so in-flight responses can flush. Intended for the HTTP daemon; stdio instances exit when the parent closes the stream anyway.

Return Format

{"success": bool, "operation": "shutdown", "result": {"shutdown_in_seconds": int}}

Examples

server_shutdown(confirm=True)

NameRequiredDescriptionDefault
confirmNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior4/5

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

Goes beyond the destructiveHint annotation by explaining the mechanism: a short delay so in-flight responses can flush, plus a concrete return payload with shutdown_in_seconds. It does not say whether the process can be restarted by the agent or whether connections are dropped, so it stops short of full disclosure for a destructive operation.

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

Conciseness4/5

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

Front-loaded with the core action and mechanism, then structured with clear headings. The Return Format and Examples sections are somewhat redundant given an output schema exists and there is only one trivial parameter, but nothing is bloated.

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 one-parameter destructive tool, the description covers scope, mechanism, and return shape. An agent has enough to call it correctly; only the confirm=false behavior and post-shutdown recovery expectations are unstated.

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 coverage is 0% and the single `confirm` parameter has no description. The example `server_shutdown(confirm=True)` hints that confirm gates the action, but the description never states what confirm=false (the default) does โ€” presumably a no-op โ€” leaving the most consequential semantic implicit.

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?

Names a specific verb and resource (shut down the filesystem-mcp server process) and scopes it as an orderly exit. This is clearly distinct from siblings like compose_down or file_ops, which act on containers or files rather than the MCP server itself.

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

Usage Guidelines5/5

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

Explicitly states the target context: 'Intended for the HTTP daemon; stdio instances exit when the parent closes the stream anyway.' That tells an agent both when to use it and when it is pointless, which is exactly the routing information needed.

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

test_concurrency_safetyA

Test that file_ops write/edit locking prevents data corruption under concurrent load.

Simulates num_clients simultaneously writing or editing the same temp file. All should succeed without data corruption if locking is working correctly.

Return Format

{"test_operation": str, "num_clients": int, "successful": int, "errors": [str], "concurrency_safe": bool}

Examples

test_concurrency_safety(operation="write", num_clients=5) test_concurrency_safety(operation="edit", num_clients=10)

NameRequiredDescriptionDefault
operationNowrite
num_clientsNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior4/5

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

Annotations declare readOnlyHint=false and destructiveHint=false; the description adds meaningful context by clarifying the writes target a temp file and that corruption is the observable signal, so an agent understands the blast radius. It does not mention runtime cost or that the result may be nondeterministic, so it falls short of full disclosure.

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

Conciseness4/5

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

Purpose is front-loaded in the first sentence, with the semantics of the simulated load right after. The return format block duplicates the existing output schema, which is slightly wasted space, but the examples justify themselves.

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?

An output schema exists, so the return-format section is redundant rather than necessary; the absence of any contention/timeout expectations or guidance on interpreting concurrency_safe=false is the main remaining gap. For a two-parameter diagnostic tool, this is largely complete.

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

Parameters4/5

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

Schema coverage is 0%, so the description carries the burdenโ€”and it does partially by revealing the operation values 'write' and 'edit' via examples and showing plausible num_clients values. It still never documents the default values (write, 5) or bounds on num_clients, but it adds real meaning beyond the bare schema.

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

Purpose5/5

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

States a specific verb and resource: tests that file_ops write/edit locking prevents corruption under concurrent load. This clearly distinguishes it from get_lock_status (which reports status) and file_ops (which performs the operations).

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?

Explains what the test simulates but never states when an agent should run this test versus checking get_lock_status or invoking file_ops directly. Usage is implied by the 'test' framing rather than stated, and no alternatives are named.

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. 24 tool updatesv3.1.0
    • First observedagentic_file_workflow
    • First observedcompose_config
    • First observedcompose_down
    • First observedcompose_logs
    • First observedcompose_ps
    • First observedcompose_restart
    • First observedcompose_up
    • First observedcontainer_ops
    • First observeddir_ops
    • First observedfile_ops
    • First observedget_lock_status
    • First observedhost_ops
    • First observedinfra_ops
    • First observedmonitor_get_cpu_info
    • First observedmonitor_get_disk_usage
    • First observedmonitor_get_memory_info
    • First observedmonitor_get_network_info
    • First observedmonitor_get_performance_metrics
    • First observedmonitor_get_process_info
    • First observedmonitor_get_resource_usage
    • First observedmonitor_get_system_status
    • First observedsearch_ops
    • First observedserver_shutdown
    • First observedtest_concurrency_safety

TDQS

C2.9/5.0

Scored across 24 tools

Disambiguation2/5

The eight monitor_* tools overlap heavily (get_system_status already returns CPU, memory, disk, network and processes, duplicating get_resource_usage, get_performance_metrics, get_memory_info, get_cpu_info, get_network_info and get_process_info), and host_ops.get_system_info overlaps again. container_ops restart_container/container_logs/container_stats also collide with compose_restart/compose_logs/compose_ps for the same underlying services. The multiplexer design (file_ops, dir_ops, search_ops, container_ops, infra_ops, host_ops) further forces an agent to pick a tool and then an operation, adding a second layer of ambiguity.

Naming Consistency3/5

Most names are snake_case and readable, and the monitor_get_* prefix is consistent, but the set mixes two paradigms: single-action tools (compose_up, compose_down, server_shutdown) alongside six generic *_ops multiplexers that hide dozens of operations. The compose family is split across two conventions (compose_restart vs container_ops restart_container; compose_ps vs container_ops list_containers), so the pattern is not fully predictable.

Tool Count2/5

24 top-level tools is already heavy for a filesystem server, and six of them are multiplexers that expand to roughly 90 operations, so the effective surface is far larger than a filesystem domain warrants. Docker compose, container lifecycle, image/network/volume infra, host introspection and system monitoring are well outside the stated purpose and crowd out the core file tools.

Completeness4/5

Core filesystem coverage is strong: read/write/edit/append/touch/delete/move/copy/exists/info/hash/undo plus full directory management and a solid search/analysis set, with no obvious dead ends for normal file workflows. Gaps are minor (no permissions/chmod, symlink handling, or file watching), though the Docker/host tooling is broad and shallow rather than deep CRUD for a filesystem server.

Maintenance

ActivityActive
ResponsivenessSlow

Related MCP Connectors

Related MCP Servers