FileSystem MCP Server
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., "@FileSystem MCP Serverlist files in the src directory"
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 Server
Local MCP server for Visual Studio 2022+ that provides code-workspace functionality by giving AI agents selective access to project folders and files
Table of Contents
Related MCP server: File Manager MCP Server
π― Target Environment
This MCP server is optimized for:
Visual Studio 2022+ development workflows
Local development environments without complex workspace setups
Direct folder access scenarios where you need filesystem operations
Development environments that don't use
.code-workspacefilesIndividual project directories rather than multi-root workspaces
Features
Directory Traversal: List contents of allowed directories
File Reading: Read contents of files with allowed extensions
File Writing: Write text/binary content to files β opt-in via
--allow-write(disabled by default)Directory Validation: Check accessibility of configured directories
Hybrid Configuration: Command-line arguments (MCP) + config.json fallback (debugging)
Visual Studio 2022+ Debugging: No-argument startup support
Cross-Platform Path Support: Automatically handles both Windows (
\) and Unix (/) path separatorsSecurity: Access restricted to explicitly specified directories and file types
Local Development Focus: Perfect for Visual Studio 2022+ and similar environments
Installation
From PyPI (Recommended for Users)
pip install vs-filesystem-mcp-serverFrom Source (For Development)
Ensure you have Python 3.10+ installed
Clone the repository
Navigate to the project directory
Install dependencies using uv:
uv sync
Quick Start
For MCP usage: Add the corrected configuration to your
.mcp.jsonFor debugging: Just press F5 in Visual Studio 2022+ - uses config.json automatically
Test your configuration by calling the
init()tool firstIf init() returns errors, check your directory paths and permissions
Configuration Options
Option 1: Config.json File (Simplest - Recommended for Beginners)
The easiest way to get started! Create a config.json file:
For MCP server usage:
Place
config.jsonin the same folder as your.mcp.jsonfile (usuallyC:\Users\YourUsername\)
For debugging from source (Visual Studio 2022+):
Place
config.jsonin the same directory asapp.py(D:/Projects/filesystem_server/)
{
"allowed_dirs": [
"C:/Users/YourUsername/Documents/projects",
"D:/projects",
"D:/Webs"
],
"allowed_extensions": [
".py", ".js", ".ts", ".json", ".md", ".txt",
".yml", ".yaml", ".toml", ".cfg", ".ini", ".cs",
".css", ".scss", ".htm", ".html", ".xml", ".xaml"
],
"allow_write": false
}Note: Set
"allow_write": trueto enablewrite_fileandwrite_file_binarytools.
MCP Configuration (Installed via pip)
Add this to your .mcp.json file (usually C:\Users\YourUsername\ in VS 2022+):
{
"servers": {
"filesystem-server": {
"command": "vs-filesystem-mcp-server"
}
}
}Note: When installed via pip, the command is just vs-filesystem-mcp-server - no path to app.py needed!
MCP Configuration (Running from Source)
If you're developing and running from source code:
{
"servers": {
"filesystem-server": {
"command": "python",
"args": [
"/absolute/path/to/your/project/filesystem_server/app.py"
],
"cwd": "/absolute/path/to/your/project/filesystem_server"
}
}
}Benefits:
β No command-line arguments needed
β Perfect for Visual Studio 2022 debugging (just press F5)
β Works with MCP clients when placed in correct location
β Easy to edit and modify
β Great for testing and development
Usage:
# For debugging in Visual Studio 2022:
python app.py # Uses config.json from same directory as app.py
# For MCP server usage:
# The MCP client automatically finds config.json in the .mcp.json directoryImportant Location Notes:
π§ Debugging:
config.jsongoes next toapp.pyπ MCP Server:
config.jsongoes next to.mcp.jsonπ Different locations for different use cases!
Option 2: Command-Line Arguments (Advanced - For MCP Clients)
Best for production MCP client configurations where you want everything in one place:
When Installed via pip
{
"servers": {
"filesystem-server": {
"command": "vs-filesystem-mcp-server",
"args": [
"--allowed-dirs", "D:/projects", "D:/Webs",
"--allowed-extensions", ".py", ".js", ".ts", ".json", ".md", ".txt"
]
}
}
}When Running from Source
python app.py --allowed-dirs "D:/projects" "D:/Webs" --allowed-extensions ".py" ".js" ".md"
# With write access enabled:
python app.py --allowed-dirs "D:/projects" "D:/Webs" --allowed-extensions ".py" ".js" ".md" --allow-write trueMCP Client Configuration (.mcp.json):
{
"servers": {
"filesystem-server": {
"command": "python",
"args": [
"/absolute/path/to/your/project/filesystem_server/app.py",
"--allowed-dirs", "D:/projects", "D:/Webs",
"--allowed-extensions", ".py", ".js", ".ts", ".json", ".md", ".txt"
],
"cwd": "/absolute/path/to/your/project/filesystem_server"
}
}
}Benefits:
β Self-contained configuration
β No external config files needed
β Version control friendly
β Explicit and visible in MCP setup
Option 3: Hybrid Approach (Best of Both Worlds)
The server automatically uses command-line arguments first, then falls back to config.json if no arguments provided.
How it works:
MCP clients: Use command-line arguments (Option 2)
Visual Studio debugging: Automatically uses config.json (Option 1)
Priority: Command-line args override config.json when present
Benefits:
β Works for both MCP clients and debugging
β No conflicts between different usage scenarios
β Flexible and developer-friendly
β Choose the best option for each situation
Usage
Command Line Examples
# With command line arguments (MCP clients):
python app.py --allowed-dirs "D:/projects" "D:/Webs" --allowed-extensions ".py" ".js" ".md"
# Using config.json fallback (Visual Studio 2022+ debugging):
python app.py
# Show MCP configuration help:
python app.py --help-mcpAvailable Tools
init(directory, file_path)- Validates accessibility of configured directories and can optionally list a directory and/or read a filedirectory(optional): Directory path to list contents (can beNone)file_path(optional): File path to read content (can beNone)Returns
{ "message": "OK", "isError": false, ... }if all directories accessibleReturns error details if any directories are inaccessible
Shows configuration source (command-line args vs config file)
Use this to verify your configuration before using other tools
list_directory(directory, report_progress=True, batch_size=100)- Lists files and subdirectories in a given directory, with optional progress reportingdirectory: The absolute or relative path to the directory (supports both / and \ separators)report_progress(optional): If True, returns progress information and batch details (default: True)batch_size(optional): Number of items to process before reporting progress (default: 100)Returns a list of file and directory names if
report_progressis FalseReturns a dictionary with contents, progress_info, total_items, and processing_time if
report_progressis TrueIf an error occurs, returns a dictionary with
"error"and"error_message"keysNo exceptions are raised - all errors are returned as part of the result
read_file(file_path)- Reads the content of a specified file as textReturns the file content as a string (for text files only)
Not suitable for binary files (images, audio, etc.)
read_file_binary(file_path)- Reads the content of a specified file as base64-encoded binaryReturns
{ "content_base64": <base64 string>, "encoding": "base64", "error": False }on successReturns an error dict if the file is not allowed or not found
Suitable for images, audio, and other binary files
list_resources(directory=None, report_progress=True, batch_size=100)- Lists all resources (files and directories) in a directory (or all allowed directories) in MCP resource formatdirectory(optional): Directory to start from (defaults to all allowed_dirs)report_progress(optional): If True, returns progress information and batches (default: True)batch_size(optional): Number of resources per progress batch (default: 100)Returns a list of resource objects if
report_progressis FalseReturns a dictionary with contents, progress_info, total_items, and processing_time if
report_progressis TrueExample resource object:
{ "id": "D:/projects/example.txt", "type": "file", "name": "example.txt", "path": "D:/projects/example.txt", "metadata": { "size": 1234, "modified": "2025-08-18T12:34:56Z" }, "actions": ["read", "read_binary", "write", "write_binary"] }
get_resource(path)- Gets metadata and actions for a specific file or directorypath: Absolute or relative path to the resourceReturns a resource object (id, type, name, path, metadata, actions) or an error dict
For files, includes size and modified time; for directories, includes type and actions
Does not return file content
write_file(file_path, content)- Writes text content to a specified file (requires--allow-write)file_path: Path to write to (must be within allowed dirs)content: Text string to writeRaises
ValueErrorif write access is disabled, path not allowed, extension not allowed, or IO errorOverwrites existing file
Disabled by default β enable with
--allow-writeflag or"allow_write": truein config.json
write_file_binary(file_path, content_base64)- Writes binary content from base64 to file (requires--allow-write)file_path: Path to write to (must be within allowed dirs)content_base64: Base64-encoded binary dataReturns
{"success": true, "bytes_written": int, "error": false}or error dictOverwrites existing file, suitable for images/binaries
Disabled by default β enable with
--allow-writeflag or"allow_write": truein config.json
Why This Hybrid Approach is Perfect
β MCP clients: Use efficient command-line arguments
β Visual Studio 2022: Zero-friction debugging with config.json fallback
β No conflicts: Priority system handles both scenarios gracefully
β Developer-friendly: Works however you want to run it
β Best of both worlds: MCP efficiency + debugging convenience
Visual Studio 2022+ Debugging
Perfect debugging experience:
β No command-line arguments needed
β Just press F5 to start debugging
β Automatically uses config.json
β Set breakpoints and debug normally
β Full IntelliSense and debugging support
Debugging setup:
Open the project in Visual Studio 2022
Ensure
config.jsonexists (already created for you)Press F5 or Debug > Start Debugging
Server starts with your configured directories
Visual Studio 2022+ Usage Examples
Below are step-by-step examples showing how to call the FileSystem MCP Server from within Visual Studio 2022. These screenshots demonstrate the process using the alias "fss" for the server, which is simply a shorter name for "filesystem-server". You can customize this alias in your .mcp.json fileβthe actual name is up to you.
Note: All images are located in the
images/subfolder.
Step 1: Calling the Server Tool

In this example, the MCP client is configured to use "fss" as the server name. This is just an alias for convenience.
Step 2: Viewing the Server Response

The server responds with the results of your request, such as the output from the read_file() tool.
Note:
The
"fss"alias is used here for brevity. You can use any name you prefer in your.mcp.jsonconfiguration.To change the server name, simply update the key in your
.mcp.jsonfile from"filesystem-server"to any other name you like.
For more details on configuring your MCP client, see the Configuration Options section above.
Editing Your mcp.json File via GitHub Copilot Chat
You can easily edit your mcp.json configuration file directly from Visual Studio using the GitHub Copilot Chat interface. Follow these steps:
Click the Tools icon on the right side of Visual Studio, while in Agent mode.
Click the arrow next to any MCP server in the list.
Choose Edit β the
mcp.jsonfile will open for editing.

This allows you to quickly update your MCP server configuration without leaving the IDE.
Security
Only directories specified in
--allowed-dirsor config.json can be accessedOnly files with extensions in
--allowed-extensionsor config.json can be read or writtenWrite access disabled by default:
write_fileandwrite_file_binaryrequire--allow-writeflag or"allow_write": truein config.jsonAll paths are validated before access
The server runs with the permissions of the user account
Perfect for local development: Secure access to your project directories
Error Handling
The server provides detailed error messages for:
Unauthorized directory access
Invalid file paths
Unsupported file extensions
Missing configuration (shows helpful guidance for both MCP and debugging scenarios)
Directory accessibility issues (via
init()tool)
New Error Handling for list_directory():
The
list_directory()function now returns errors as part of the result list instead of raising exceptionsError format:
["error", "detailed_error_message"]This makes it easier for MCP clients to handle errors gracefully without exception handling
Successful calls return the normal list of directory contents
Troubleshooting
MCP Configuration Issues
Your original config had a missing comma after "D:/Webs". The corrected version above fixes this.
Visual Studio 2022+ Debugging
Ensure config.json exists (already created for your directories)
Start with the
init()tool to validate your configurationSet breakpoints and debug normally
Check output window for configuration source confirmation
Common Issues
Missing configuration: The server shows helpful messages for both MCP and debugging scenarios
Path access errors: Verify your directories exist and are accessible
Permission issues: Check directory permissions on your configured paths
MCP client issues: Use the corrected configuration above
Command Line Reference
python app.py --help # Show help
python app.py --help-mcp # Show MCP configuration examples
python app.py --allowed-dirs DIR1 DIR2 # Set allowed directories
python app.py --allowed-extensions EXT1 EXT2 # Set allowed extensions
python app.py --allow-write true # Enable write tools (disabled by default)
python app.py --allow-write false # Explicitly disable write tools
python app.py --config custom.json # Use custom config file
python app.py # Use config.json fallback (debugging)Cross-Platform Path Support
The filesystem server automatically normalizes paths to handle different operating system conventions:
β Windows Users - Both Formats Work
{
"allowed_dirs": [
"D:\\projects", // Windows-style backslashes
"F:/sd/wipes", // Unix-style forward slashes
"C:\\Users\\Me\\Docs" // Mixed formats work too
]
}β Automatic Path Normalization
Input:
"F:\sd\wipes"(Windows natural format)Normalized:
"F:/sd/wipes"(Python-friendly format)Result: β Works seamlessly, no errors!
β MCP Tool Examples
# All of these work identically:
list_directory("F:\\sd\\wipes") # Windows format
list_directory("F:/sd/wipes") # Unix format
list_directory("F:\\sd/wipes") # Mixed formatWhy This Matters
πͺ Windows users can naturally type
F:\sd\wipesπ§ Unix users can use traditional
F:/sd/wipesπ§ No more path format errors - everything just works
π‘οΈ Security checks work correctly regardless of separator style
Advanced & Real-World MCP Configuration Examples
For more advanced, platform-specific, or legacy MCP client configuration examples (including both "servers" and "mcpServers" formats), see the mcp_configuration_examples.json file in this repository.
This file includes:
Additional real-world setups for Windows, Linux, and macOS
Minimal web development configurations
Multiple directory and file type examples
Migration tips for moving from config.json to command-line arguments
Legacy MCP client support using the
"mcpServers"format
Refer to it if you need more flexibility or are working with a non-standard MCP client.
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.
Latest Blog Posts
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/Oncorporation/filesystem_server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server