Filesystem MCP
Provides tools for managing Docker containers, images, networks, volumes, and Docker Compose applications.
Allows cloning repositories, checking status, making commits, managing branches and remotes, and reading repository structures.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Filesystem MCP list files in /home/user/projects"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
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.
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
justThis 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=TrueUnderstand 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:lineMove 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 raceUndo 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 firstDeployment & 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()decoratorsPortmanteau 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_validatorandConfigDictMultilevel 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-mcpClaude 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)
PyPI Package Install (RECOMMENDED)
Fastest Installation - Production Ready:
pip install filesystem-mcpClaude 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 | iexOr manually:
Download the
filesystem-mcp.mcpbpackage from ReleasesDrag & Drop the file to Claude Desktop
Configure settings when prompted (working directory, timeouts, etc.)
Start using 24 professional tools immediately
Installation
Prerequisites
uv installed (RECOMMENDED)
Python 3.12+
Quick Start
Run immediately via uvx:
uvx filesystem-mcpClaude 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-mcpClaude 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_mcpOr 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 8000The 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\\srcwith the actual path to your cloned repository'ssrcdirectorySet
cwdto your preferred working directory for file operationsThe 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 toDEBUG,INFO,WARNING, orERRORGIT_USERNAME: Default Git username for commitsGIT_EMAIL: Default Git email for commits
Installation
Prerequisites
uv installed (RECOMMENDED)
Python 3.12+
Quick Start
Run immediately via uvx:
uvx filesystem-mcpClaude 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 documentationStatus:
get_system_status- Comprehensive system monitoringResources:
get_resource_usage,get_cpu_info,get_memory_info,get_disk_usageProcesses:
get_process_info- Process monitoring and managementNetwork:
get_network_info- Network interface informationSystem Info:
get_system_info,get_hardware_info,get_software_infoEnvironment:
get_environment_info,get_locale_info,get_time_infoSecurity:
get_security_info- Basic security informationPerformance:
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, analysisdocker- Container, image, network, and volume managementrepository- 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 --debugAvailable 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
.bakfile restoration.
calculate_directory_size,find_duplicate_files,find_large_filesfind_empty_directories,compare_files,read_multiple_filesmove_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, treatsold_stringas 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_statsImages:
list_images,get_image,pull_image,build_image,remove_image,prune_imagesNetworks:
list_networks,get_network,create_network,remove_network,prune_networksVolumes:
list_volumes,get_volume,create_volume,remove_volume,prune_volumesCompose:
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 project dependencies from package managers |
|
| Analyze Python import statements and dependencies |
|
| Detect project type, frameworks, and structure |
|
| Analyze file sizes and identify large files |
|
| Find duplicate files by content hash |
|
| Search for function/class definitions and usages |
|
| Find TODO/FIXME comments in codebase |
|
| Execute code linting (ruff, flake8, eslint) |
|
| Validate configuration files (JSON/YAML/TOML/INI) |
|
| Parse and validate JSON files with structure analysis |
|
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_importsExample 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 dependenciesRunning 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 -vCode 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
Update the version in
pyproject.tomlUpdate
CHANGELOG.mdCommit changes with a message like "Bump version to x.y.z"
Create a git tag:
git tag vx.y.zPush the tag:
git push origin vx.y.zGitHub 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
printstatements in core handlers (T201).Webapp (UI): Biome for sub-millisecond linting. Strict
noConsoleLogenforcement.Protocol Compliance: Hardened
stdout/stderrisolation to ensure crash-resistant JSON-RPC communication.Automation: Justfile recipes for all fleet operations (
just lint,just fix,just dev).Security: Automated audits via
banditandsafety.
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:
Navigate to the
webapp(orweb,frontend) directory.Run
start.bat(Windows) or./start.ps1(PowerShell).Open
http://localhost:10742in your browser.
Available Tools
24 toolsagentic_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_configCRead-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_logsBRead-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_psARead-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_statusARead-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_opsCRead-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_infoARead-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_usageARead-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_infoBRead-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_infoBRead-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_metricsBRead-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_infoARead-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_usageCRead-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_statusBRead-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_opsBRead-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_shutdownADestructive
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
Scored across 24 tools
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.
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.
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.
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
Related MCP Connectors
A MCP server built for developers enabling Git based project management with project and personalโฆ
MCP server for Superserve sandboxes: create, exec, and manage Firecracker microVMs
MCP server for Appcircle mobile CI/CD platform.
MCP server with quote and live cryptocurrency price tools, local and cloud-deployed transports.
Related MCP Servers
- AlicenseNot gradedqualityBmaintenanceBlazing-fast, asynchronous MCP server for seamless filesystem operations.185MIT
- FlicenseAqualityDmaintenanceA FastMCP server that enables AI agents to safely execute shell commands, run code in Python/Node.js/Go, and install packages, all packaged in Docker for secure deployment.32-
- AlicenseNot gradedqualityDmaintenanceA secure, git-aware MCP server for working with local repositories, enabling file management, shell commands, and full git operations within allowed directories.138 npm1GPL 3.0
- FlicenseNot gradedqualityDmaintenanceA Docker-based FastMCP server for dynamic Python code execution with support for multiple MCP clients, automatic validation, runtime installation, and browser automation.-