Filesystem
# MCP Filesystem A Model Context Protocol (MCP) server that exposes resources for each file in a working directory and sends change notifications. ## Status ⚠️ Pre-beta Quality ⚠️ "It works on my machine". Issues are welcome ❤️ ## Features - **Resources**: Creates one MCP resource for each file in your workspace - **Gitignore Support**: Respects `.gitignore` rules - **Change Notification**: Detects file changes, additions, and deletions - **MIME Type Detection and Encoding Handling**: Identifies file types and handles various text encodings ## Setup Install Go: Follow instructions at <https://golang.org/doc/install> Fetch or update this server: ```bash go install github.com/isaacphi/mcp-filesystem@latest ``` Add the following to your client configuration (located at `~/Library/Application Support/Claude/claude_desktop_config.json` for Claude Desktop): ```json { "mcpServers": { "filesystem": { "command": "mcp-filesystem", "args": ["--workspace", "/path/to/your/repository"] } } } ``` Replace `/path/to/your/repository` with the absolute path to your project directory. ## Usage Your client will be able to access and reference all non-ignored files in your repository as MCP resources. Each file is registered as a separate resource with appropriate MIME type detection. ### Client Requirements Your client needs to support the following MCP features: - Resource Listing: The ability to list and access resources exposed by the server - Change Notifications: Support for receiving `notifications/resources/list_changed` events - Resource Content Access: Ability to request and render resource content with appropriate MIME types ## About This project uses: - [mark3labs/mcp-go](https://github.com/mark3labs/mcp-go) for MCP communication - [fsnotify](https://github.com/fsnotify/fsnotify) for file system event monitoring - [go-gitignore](https://github.com/sabhiram/go-gitignore) for parsing `.gitignore` files ## Development Clone the repository: ```bash git clone https://github.com/isaacphi/mcp-filesystem.git cd mcp-filesystem ``` Install dependencies: ```bash go mod download ``` Build: ```bash go build ``` Configure you client to use your local build: ```json { "mcpServers": { "filesystem": { "command": "/full/path/to/your/mcp-filesystem/mcp-filesystem", "args": ["--workspace", "/path/to/repository"], "env": { "DEBUG": "1" } } } } ``` ## Feedback Please submit issues with as many details as you can. Set the `DEBUG` environment variable to enable verbose logging: ```json "env": { "DEBUG": "1" } ``` ## Features on my radar - [x] Resources for each file in workspace - [x] .gitignore support - [x] Change notifications - [ ] Standardize MCP protocol use to work with more clients (Claude Desktop) - [ ] Configurable support for line numbers - [ ] Resource update subscriptions - [ ] Additional ignore patterns (beyond `.gitignore`) - [ ] Debounced notifications for high-volume file changes - [ ] `info`, `create`, `edit`, and `delete` tools