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"])

Inputs: available_tools (required), workflow_prompt (required), max_iterations. Returns: object

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)

Inputs: path, timeout, validate. Returns: object

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)

Inputs: path, timeout, volumes_prune, remove_orphans. Returns: object

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")

Inputs: path, tail, since, until, +4 more. Returns: object

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)

Inputs: path, timeout, services, all_services. Returns: object

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"])

Inputs: path, timeout, services. Returns: object

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)

Inputs: path, build, scale, detach, +2 more. Returns: object

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)

Inputs: tty, name, tail, user, +24 more. Returns: object

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)

Inputs: path, engine, mirror, dry_run, +14 more. Returns: object

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")

Inputs: path, limit, lines, offset, +25 more. Returns: object

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()

Inputs: no named parameters. Returns: object

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")

Inputs: level, category, operation, tool_name. Returns: object

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")

Inputs: rm, tag, ipam, name, +24 more. Returns: object

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()

Inputs: no named parameters. Returns: object

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()

Inputs: no named parameters. Returns: object

monitor_get_memory_infoB
Read-onlyIdempotent

Virtual and swap memory breakdown.

Return Format

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

Examples

monitor_get_memory_info()

Inputs: no named parameters. Returns: object

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()

Inputs: no named parameters. Returns: object

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()

Inputs: no named parameters. Returns: object

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)

Inputs: sort_by, sort_order, max_processes, filter_pattern. Returns: object

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()

Inputs: no named parameters. Returns: object

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)

Inputs: include_disk, max_processes, include_network, include_processes. Returns: object

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")

Inputs: fix, path, path2, encoding, +18 more. Returns: object

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)

Inputs: confirm. Returns: object

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)

Inputs: operation, num_clients. Returns: object

Tool Schema Changelog

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

Loading tool schema changelogโ€ฆ

    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
    ResponsivenessLimited data

    Related MCP Connectors

    Related MCP Servers