AI Decision System
Replayable, offline-verifiable records for AI-assisted go/no-go decisions: experiment promotions, typed model answers and human-approved actions.
翻譯準備中
FastMCP 3.2.0+ server plus webapp for comprehensive file system operations, Git repository management, Docker container control, and developer tools for Claude Desktop integration.
翻譯準備中
開發工具Python · TypeScriptGitHub @sandraschi自行安裝營運者未確認
試用過了嗎? 點一下就好,不需要登入。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
安裝型專案無需部署網域也可驗證。個人儲存庫可透過 GitHub 登入驗證,組織儲存庫可使用上方的儲存庫驗證檔案。
正在載入完整 README。 以下為已儲存的摘錄。
📖 Installation Guide — quick start, manual setup, and troubleshooting
Status: Production-ready · 23 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, Git repository management, and Docker container management with concurrency safety.檢視完整 README ↗📖 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.
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.
If you don't have just installed:
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
Built with modern Python patterns, enterprise-grade security, and extensive testing for professional deployment.
| 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 |
Container Operations
Image Management
Network & Volume Management
Docker Compose Support
@app.tool() decoratorsfield_validator and ConfigDictRun immediately via uvx:
uvx filesystem-mcp
Add to your claude_desktop_config.json:
"mcpServers": {
"filesystem-mcp": {
"command": "uv",
"args": ["--directory", "D:/Dev/repos/filesystem-mcp", "run", "filesystem-mcp"]
}
}
Fastest Installation - Production Ready:
pip install filesystem-mcp
Claude Desktop Integration:
{
"mcpServers": {
"filesystem-mcp": {
"command": "filesystem-mcp"
}
}
}
One-line install (Claude Desktop):
iwr https://github.com/sandraschi/filesystem-mcp/releases/latest/download/install.ps1 -UseBasicParsing | iex
Or manually:
filesystem-mcp.mcpb package from ReleasesRun immediately via uvx:
uvx filesystem-mcp
Add to your claude_desktop_config.json:
"mcpServers": {
"filesystem-mcp": {
"command": "uv",
"args": ["--directory", "D:/Dev/repos/filesystem-mcp", "run", "filesystem-mcp"]
}
}
Run immediately via uvx:
uvx filesystem-mcp
Add to your claude_desktop_config.json:
"mcpServers": {
"filesystem-mcp": {
"command": "uv",
"args": ["--directory", "D:/Dev/repos/filesystem-mcp", "run", "filesystem-mcp"]
}
}
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/
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:
D:\\path\\to\\filesystem-mcp\\src with the actual path to your cloned repository's src directorycwd to your preferred working directory for file operationsMCP_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 ERRORGIT_USERNAME: Default Git username for commitsGIT_EMAIL: Default Git email for commitsRun immediately via uvx:
uvx filesystem-mcp
Add to your claude_desktop_config.json:
"mcpServers": {
"filesystem-mcp": {
"command": "uv",
"args": ["--directory", "D:/Dev/repos/filesystem-mcp", "run", "filesystem-mcp"]
}
}
Unified system tool with 20+ operations:
get_help - Multilevel help system with tool documentationget_system_status - Comprehensive system monitoringget_resource_usage, get_cpu_info, get_memory_info, get_disk_usageget_process_info - Process monitoring and managementget_network_info - Network interface informationget_system_info, get_hardware_info, get_software_infoget_environment_info, get_locale_info, get_time_infoget_security_info - Basic security informationget_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")
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 functionalityMonitor 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:
# 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
Unified filesystem tool with 20+ operations:
read_file, write_file, edit_file, move_file, undo_edit).
.bak file restoration.calculate_directory_size, find_duplicate_files, find_large_filesfind_empty_directories, compare_files, read_multiple_filesmove_file, read_file_lines, search_filesedit_filePrecise 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_editReverts 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")
Unified Docker tool with 25+ operations:
list_containers, get_container, create_container, start_container, stop_container, restart_container, remove_container, container_exec, container_logs, container_statslist_images, get_image, pull_image, build_image, remove_image, prune_imageslist_networks, get_network, create_network, remove_network, prune_networkslist_volumes, get_volume, create_volume, remove_volume, prune_volumescompose_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)
Git lives in git-github-mcp (gitops:git_core / gitops:github_ops). No git tools are registered here anymore.
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
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}")
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
# 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
This project enforces code quality using:
# Format code with Black
black .
# Sort imports with isort
isort .
# Type checking with mypy
mypy .
# Lint with pylint
pylint filesystem_mcp/
pyproject.tomlCHANGELOG.mdgit tag vx.y.zgit push origin vx.y.zContributions are welcome! Please read our Contributing Guidelines for details on how to submit pull requests, report issues, or suggest new features.
This project adheres to SOTA 14.1 industrial standards for high-fidelity agentic orchestration:
print statements in core handlers (T201).noConsoleLog enforcement.stdout/stderr isolation to ensure crash-resistant JSON-RPC communication.just lint, just fix, just dev).bandit and safety.This project is licensed under the MIT License - see the LICENSE file for details.
See CHANGELOG.md for a history of changes to this project.
filesystem mcp-server fastmcp file-operations docker system-monitoring
python mcp model-context-protocol portmanteau concurrency-safe
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:
webapp (or web, frontend) directory.start.bat (Windows) or ./start.ps1 (PowerShell).http://localhost:10742 in your browser.