Skip to main content
Glama
moaaz01

MCP File System Server

by moaaz01
README.md
# ๐Ÿ“ MCP File System Server

> A **secure, sandboxed file system server** for the **Model Context Protocol**. Read, write, search, and manage files through any MCP-compatible AI client โ€” with **path traversal protection**, **hidden file controls**, and **size limits**.

[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE)
[![Python 3.10+](https://img.shields.io/badge/python-3.10+-blue.svg)](https://www.python.org/downloads/)

---

## โœจ Features

- **๐Ÿ”ง 5 Tools**: `read_file`, `write_file`, `list_directory`, `search_files`, `get_file_info`
- **๐Ÿ“„ 1 Resource**: `file://{path}` โ€” read files via MCP resource URIs
- **๐Ÿ›ก๏ธ Security-First Architecture**: Sandbox isolation, path traversal prevention, max size limits
- **๐Ÿ”ฅ Hidden File Control**: Block `.hidden` files by default, opt-in with `--allow-hidden`
- **๐Ÿ” Glob-Based Search**: Search by pattern (`*.py`, `*.md`, `data_*.csv`)
- **๐Ÿ“Š Rich Metadata**: File size, timestamps, permissions, text/binary detection
- **๐Ÿ–ฅ๏ธ Dual Transport**: stdio and Streamable HTTP

---

## ๐Ÿš€ Quick Start

```bash
# 1. Setup
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt

# 2. Create sandbox and run
mkdir -p /tmp/mcp-sandbox
python filesystem_server.py --sandbox /tmp/mcp-sandbox
```

---

## ๐Ÿ› ๏ธ Tools Reference

### `read_file(path: str) -> str`
Read a file and return its contents with metadata (size, modified time, SHA256).

### `write_file(path: str, content: str) -> str`
Write content to a file. Creates parent directories automatically.

### `list_directory(path: str) -> str`
List files and directories with sizes and type indicators.

### `search_files(pattern: str, base_path: str = "") -> str`
Search by glob pattern across the entire sandbox.

### `get_file_info(path: str) -> str`
Get detailed metadata: type, size, timestamps, permissions, text/binary detection.

---

## ๐Ÿ›ก๏ธ Security Controls

```
--sandbox PATH          # Required: root directory (all operations restricted)
--allow-hidden          # Allow access to .hidden files and directories
--max-size N            # Max file size in MB (default: 10)
```

| Attack Vector | Protection |
|---------------|------------|
| `../../../etc/passwd` | โŒ Path traversal prevented |
| `~/.ssh/id_rsa` | โŒ Outside sandbox |
| `.env` files | โŒ Blocked by default |
| 100GB file read | โŒ Size limit (configurable) |
| Hidden directory listing | โŒ Filtered by default |

---

## ๐Ÿ“„ Resources

### `file://{path}`
Read a file's raw content via MCP resource protocol.

---

## ๐Ÿ”Œ Connecting to Clients

### Claude Desktop

```json
{
  "mcpServers": {
    "filesystem": {
      "command": "python",
      "args": ["/ABSOLUTE/PATH/mcp-file-system-server/filesystem_server.py", "--sandbox", "/tmp/mcp-sandbox"]
    }
  }
}
```

### Cursor

Settings โ†’ Features โ†’ MCP โ†’ Add Server:
- **Name**: `filesystem`
- **Type**: `command`
- **Command**: `python /ABSOLUTE/PATH/mcp-file-system-server/filesystem_server.py --sandbox /tmp/mcp-sandbox`

---

## ๐Ÿ“ Project Structure

```
mcp-file-system-server/
โ”œโ”€โ”€ filesystem_server.py   # Main server (FastMCP + security)
โ”œโ”€โ”€ requirements.txt
โ”œโ”€โ”€ setup.sh
โ”œโ”€โ”€ README.md
โ””โ”€โ”€ .gitignore
```

---

## ๐Ÿงช Example Usage

```python
# Read a file
read_file("/tmp/mcp-sandbox/data.txt")
# โ†’ "๐Ÿ“„ File: /tmp/mcp-sandbox/data.txt\nSize: 1,234 bytes\n..."

# Write a file
write_file("/tmp/mcp-sandbox/output/report.md", "# Report\n\nHello world!")
# โ†’ "โœ… Written 28 bytes to /tmp/mcp-sandbox/output/report.md"

# Search for Python files
search_files("**/*.py")
# โ†’ "๐Ÿ” 5 file(s) matching **/*.py:\n  ๐Ÿ“„ scripts/process.py (1,234 bytes)\n..."
```

---

## ๐Ÿ“œ License

MIT