MCP-FileSystem
Click on "Install 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., "@MCP-FileSystemFind all Python files in my workspace"
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.
Python MCP Filesystem Server
A comprehensive Model Context Protocol (MCP) server that provides AI assistants with secure, controlled filesystem access. Built with Python for easy customization and learning.
Overview
This MCP server enables AI assistants like Claude to interact with your filesystem through a secure, sandboxed interface. It provides 14 powerful tools for file operations, from basic read/write to advanced features like content search and directory tree visualization.
Related MCP server: MCP Filesystem Server
Features
📁 File Operations
read_file - Read file contents
write_file - Create or overwrite files
append_file - Append to existing files
delete_file - Delete files
📂 Directory Operations
list_files - List directory contents
list_directory_tree - Visualize directory structure
create_directory - Create new directories
delete_directory - Delete directories recursively
🔍 Search & Discovery
search_files - Find files by name pattern (wildcards)
search_content - Search text within files
file_exists - Check file/directory existence
get_file_info - Get metadata (size, dates, type)
🔧 File Management
rename_file - Rename files/directories
move_file - Move files/directories
🔒 Security Features
Path validation - Prevents directory traversal attacks
Workspace sandboxing - All operations restricted to designated directory
Error handling - Comprehensive error messages for all operations
Quick Start
Prerequisites
Python 3.10 or higher
pip package manager
Installation
Clone the repository
git clone https://github.com/YOUR-USERNAME/mcp-filesystem-server-python.git cd mcp-filesystem-server-pythonCreate virtual environment
python -m venv venv # Windows venv\Scripts\activate # macOS/Linux source venv/bin/activateInstall dependencies
pip install -r requirements.txtTest the server (optional)
python examples/demo.py
Configuration
Claude Desktop Setup
Add this configuration to Claude Desktop:
Windows: %APPDATA%\Claude\claude_desktop_config.json
macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
{
"mcpServers": {
"filesystem": {
"command": "python",
"args": ["C:\\path\\to\\mcp-filesystem-server-python\\src\\server.py"],
"env": {
"WORKSPACE_DIR": "C:\\path\\to\\your\\workspace"
}
}
}
}Important:
Use absolute paths
On Windows, use double backslashes (
\\) or forward slashes (/)Set
WORKSPACE_DIRto the directory you want Claude to access
Windows Store Claude Desktop
If using Windows Store version, use this location instead:
%LOCALAPPDATA%\Packages\Claude_pzs8sxrjxfjjc\LocalCache\Roaming\Claude\claude_desktop_config.jsonUsage Examples
Basic File Operations
Ask Claude:
"List files in my workspace"Claude will use: list_files tool
Ask Claude:
"Read the file report.txt"Claude will use: read_file tool with path: "report.txt"
Ask Claude:
"Create a file called notes.txt with a bullet list of my tasks"Claude will use: write_file tool
Advanced Operations
Search for files:
"Find all Python files in my workspace"Uses: search_files with pattern "*.py"
Search content:
"Which files contain the word 'TODO'?"Uses: search_content with text "TODO"
Directory tree:
"Show me the structure of my workspace"Uses: list_directory_tree
File metadata:
"Get information about config.json"Uses: get_file_info with path "config.json"
Project Structure
mcp-filesystem-server-python/
├── src/
│ └── server.py # Main MCP server implementation
├── examples/
│ └── demo.py # Standalone demo (test without Claude)
├── requirements.txt # Python dependencies
├── README.md # This file
├── LICENSE # MIT License
└── .gitignore # Git exclusionsDevelopment
Running Standalone
Test the server without Claude Desktop:
python examples/demo.pyThis simulates how Claude would interact with your server.
Manual Testing
Start the server manually to see debug output:
# Windows
set WORKSPACE_DIR=C:\path\to\workspace
python src\server.py
# macOS/Linux
WORKSPACE_DIR=/path/to/workspace python src/server.pyThe server communicates via stdio and expects MCP protocol messages.
Adding New Tools
Add tool definition in
handle_list_tools()functionImplement handler in
handle_call_tool()functionFollow existing patterns for error handling
Test with
examples/demo.py
How MCP Works
Architecture
┌─────────────────┐ ┌──────────────────┐
│ Claude Desktop │ ◄──────► │ MCP Server │
│ (Client) │ stdio │ (src/server.py) │
└─────────────────┘ └──────────────────┘
│
▼
┌─────────────────┐
│ Your Workspace │
│ (Files) │
└─────────────────┘Communication Flow
Claude starts your server → Python process launches
Claude asks: "What tools do you have?" →
handle_list_tools()Your server responds → List of 14 tools
User requests action → "List my files"
Claude calls tool →
handle_call_tool(name="list_files", ...)Your server executes → Reads directory, returns results
Claude shows results → User sees file list
Key Concepts
stdio transport - Communication via standard input/output
Tools - Functions Claude can call with JSON parameters
Handlers - Your Python functions that implement tools
Types - MCP protocol message types (
Tool,CallToolResult, etc.)
Troubleshooting
Claude doesn't see the tools
Check config file path is correct
Verify Python path in config is absolute
Restart Claude Desktop completely
Check Claude Desktop version supports MCP (requires Pro)
"Access denied" errors
Ensure
WORKSPACE_DIRis set correctlyCheck file/directory permissions
Verify paths are within workspace (security feature)
Server not starting
Test Python path: Run the command from config manually
Check dependencies:
pip install -r requirements.txtVerify Python version:
python --version(need 3.10+)
Finding logs
Windows Store version logs may be in:
%LOCALAPPDATA%\Packages\Claude_pzs8sxrjxfjjc\LocalCache\Roaming\Claude\Contributing
Contributions welcome! This is a learning-friendly project.
Ideas for improvements:
Add file copy tool
Add archive/zip tools
Add file watching/monitoring
Add binary file support
Add permission management
More sophisticated search (regex)
License
MIT License - see LICENSE file for details.
Resources
Acknowledgments
Built as a learning project to understand the Model Context Protocol. Perfect for:
Learning MCP server development
Understanding AI-filesystem interaction
Building custom AI tools
Educational purposes
Questions or issues? Open an issue on GitHub! }
**macOS/Linux:** `~/Library/Application Support/Claude/claude_desktop_config.json`
```json
{
"mcpServers": {
"filesystem": {
"command": "/path/to/venv/bin/python",
"args": ["/path/to/file-system-server-python/src/server.py"],
"env": {
"WORKSPACE_DIR": "/path/to/test-workspace"
}
}
}
}Then restart Claude Desktop and ask it to:
"List the files in my workspace"
"Read sample.txt"
"Create a new file called notes.txt with some content"
Option 2: Debug in VS Code
Open this project in VS Code
Install the Python extension
Press F5 or go to Run > Start Debugging
The server starts in debug mode - you can set breakpoints in src/server.py
Project Structure
file-system-server-python/
├── src/
│ └── server.py # Main server implementation (READ THIS!)
├── requirements.txt # Python dependencies
├── .vscode/
│ ├── launch.json # VS Code debug configuration
│ └── mcp.json # VS Code MCP debug config
└── README.md # This fileUnderstanding the Code
Open src/server.py and you'll see:
1. Server Creation (line ~27)
server = Server("simple-filesystem-server")2. Input Validation with Pydantic (lines ~30-40)
class ReadFileInput(BaseModel):
path: str = Field(description="Relative path to file")Pydantic validates inputs automatically, similar to Zod in TypeScript.
3. Tool Registration with Decorators (lines ~43-73)
@server.call_tool()
async def read_file(arguments: dict[str, Any]) -> list[TextContent]:
"""Read the contents of a file"""
# Implementation...Python uses decorators (@server.call_tool()) instead of explicit registration.
4. Path Security (lines ~19-25)
def validate_path(file_path: str) -> Path:
"""Prevent path traversal attacks"""
full_path = (WORKSPACE_DIR / file_path).resolve()
if not str(full_path).startswith(str(WORKSPACE_DIR.resolve())):
raise ValueError("Access denied")
return full_path5. Server Startup (lines ~132-146)
async with stdio_server() as (read_stream, write_stream):
await server.run(read_stream, write_stream, ...)Uses Python's async context manager for clean resource handling.
What You're Learning
This project teaches you:
✅ MCP Server basics - Creating servers in Python
✅ Tool decorators - Using
@server.call_tool()✅ Async/await - Python async programming
✅ Input validation - Using Pydantic models
✅ Error handling - Try/except patterns
✅ Path operations - Using pathlib
✅ Security - Path validation and sandboxing
Development Tips
Virtual Environment
Always activate your virtual environment before working:
# Windows
venv\Scripts\activate
# macOS/Linux
source venv/bin/activateAdding New Tools
Add a new tool by defining an input model and a decorated function:
class DeleteFileInput(BaseModel):
path: str = Field(description="File to delete")
@server.call_tool()
async def delete_file(arguments: dict[str, Any]) -> list[TextContent]:
"""Delete a file from the workspace"""
try:
input_data = DeleteFileInput(**arguments)
full_path = validate_path(input_data.path)
full_path.unlink()
return [TextContent(type="text", text=f"Deleted {input_data.path}")]
except Exception as e:
return [TextContent(type="text", text=f"Error: {str(e)}")]Logging
Use print(..., file=sys.stderr) for logging:
print("Debug info", file=sys.stderr) # Good
print("Debug info") # Bad - interferes with stdioExercises to Try
Add a
file_infotoolReturn file size, modification time, and type
Hint: Use
full_path.stat()
Add a
search_filestoolSearch for text within files
Return matching files and line numbers
Improve error handling
Return specific error messages for different error types
FileNotFoundError, PermissionError, etc.
Python vs TypeScript Version
If you're comparing this to the TypeScript version:
Feature | Python | TypeScript |
Input validation | Pydantic | Zod |
Tool registration | Decorators ( | Method calls ( |
Async |
|
|
Path handling |
|
|
Type hints | Native Python | TypeScript types |
Both versions do the same thing - choose the language you're more comfortable with!
Common Python-Specific Issues
Wrong Python version
# Check version python --version # Should be 3.10+Virtual environment not activated
# You should see (venv) in your prompt # If not, activate it venv\Scripts\activate # WindowsModule not found
# Make sure you installed dependencies pip install -r requirements.txtPath separators on Windows
# Use pathlib - it handles Windows/Unix automatically Path("folder") / "file.txt" # Works everywhere
Next Steps
After mastering this project:
Add more tools (delete, rename, search)
Add resources (learn resource templates in Python)
Move to Project #2 (Note-Taking Server with persistence)
Try the TypeScript version to compare languages
Resources
Troubleshooting
ImportError? Make sure virtual environment is activated and dependencies are installed
Server not responding? Check that you're using stdio transport correctly
Path errors? Remember all paths are relative to WORKSPACE_DIR
Need help? Check the MCP Discord or GitHub Issues
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- Alicense-qualityDmaintenanceA Model Context Protocol (MCP) server that allows AI models to safely access and interact with local file systems, enabling reading file contents, listing directories, and retrieving file metadata.610MIT
- AlicenseAqualityDmaintenanceA Model Context Protocol server that provides secure and intelligent interaction with files and filesystems, offering smart context management and token-efficient operations for working with large files and complex directory structures.2166MIT
- Flicense-qualityFmaintenanceA Model Context Protocol server that extends AI capabilities by providing file system access and management functionalities to Claude or other AI assistants.2135
- AlicenseAqualityCmaintenanceA secure Model Context Protocol server that provides controlled filesystem access within predefined directories, enabling AI models to perform file and directory operations with strict path validation.1647MIT
Related MCP Connectors
A comprehensive Model Context Protocol (MCP) server that enables AI assistants to interact with yo…
A Model Context Protocol server for Wix AI tools
Securely search and manage workspace context files for AI agents and teams.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/dgholamian/MCP-FileSystem'
If you have feedback or need assistance with the MCP directory API, please join our Discord server