Java MCP Filesystem Server
A secure Java-based MCP server that provides controlled filesystem access to AI assistants.
Java MCP Filesystem Server
A Model Context Protocol (MCP) server implementation in Java that provides filesystem access to AI assistants. This multi-module project offers three different transport mechanisms (stdio, HTTP, SSE) all sharing common business logic for file operations.
Features
Multiple Transport Options
- stdio: Standalone application for command-line integration (Claude Desktop, etc.)
- HTTP: Servlet-based implementation for HTTP communication
- SSE: Server-Sent Events servlet for real-time streaming
Comprehensive File Operations
The server exposes 10 MCP tools for filesystem manipulation:
read_file: Read the complete contents of a single fileread_multiple_files: Efficiently read multiple files in one operationwrite_file: Create new files or overwrite existing onesedit_file: Make line-based edits with diff preview supportcreate_directory: Create single or nested directory structureslist_directory: List contents of a directory with type indicatorsdirectory_tree: Get a recursive JSON tree view of directoriesmove_file: Move or rename files and directoriessearch_files: Recursively search for files matching glob patternsget_file_info: Retrieve detailed file metadata (size, timestamps, permissions)
Requirements
- Java 25
- Gradle 9.x (for building from source)
- Servlet container (Tomcat, Jetty, etc.) for HTTP/SSE modules
- GraalVM (optional, for native image compilation)
Building from Source
- Clone the repository:
git clone <repository-url>
cd mcp-server-filesystem
- Build all modules:
./gradlew clean build
This creates the following artifacts:
- stdio:
stdio/build/libs/stdio-1.0.0.jar- Standalone application JAR - http:
http/build/libs/http-1.0.0.war- HTTP servlet WAR file - sse:
sse/build/libs/sse-1.0.0.war- SSE servlet WAR file - tools:
tools/build/libs/tools-1.0.0.jar- Shared library JAR
- Build individual modules:
./gradlew :stdio:build
./gradlew :http:build
./gradlew :sse:build
- Build native executable (optional, requires GraalVM):
./gradlew :stdio:nativeCompile
The native executable will be created at stdio/build/native/nativeCompile/mcp-server-filesystem and offers faster startup times and lower memory footprint.
Usage
Option 1: stdio Transport (Standalone)
The stdio transport uses stdin/stdout for communication.
java -jar stdio/build/libs/stdio-1.0.0.jar
Or run the native executable (if built with GraalVM):
./stdio/build/native/nativeCompile/mcp-server-filesystem
Configuring with Claude Desktop
Add to your claude_desktop_config.json:
{
"mcpServers": {
"filesystem": {
"command": "java",
"args": [
"-jar",
"/absolute/path/to/stdio-1.0.0.jar"
]
}
}
}
Option 2: HTTP Transport (Servlet)
- Deploy the WAR file to your servlet container:
cp http/build/libs/http-1.0.0.war $TOMCAT_HOME/webapps/
- The HTTP endpoint will be available at:
http://localhost:8080/v1/mcp
- Setup tomcat
server.xml
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true">
<Context path="/v1" docBase="http-1.0.0.war" reloadable="true" />
</Host>
Option 3: SSE Transport (Servlet)
- Deploy the WAR file to your servlet container:
cp sse/build/libs/sse-1.0.0.war $TOMCAT_HOME/webapps/
- The SSE endpoints will be available at:
SSE endpoint: http://localhost:8080/v2/sse
Messages endpoint: http://localhost:8080/v2/messages
- Setup tomcat
server.xml
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true">
<Context path="/v2" docBase="sse-1.0.0.war" reloadable="true" />
</Host>
Development Commands
# Run all tests
./gradlew test
# Run tests for tools module
./gradlew :tools:test
# Build without tests
./gradlew build -x test
# Generate test coverage report
./gradlew :tools:test jacocoTestReport
Key Dependencies
io.modelcontextprotocol.sdk:mcp:0.15.0- MCP SDK for Javajakarta.servlet:jakarta.servlet-api:6.1.0- Servlet APIio.github.java-diff-utils:java-diff-utils:4.12- Diff generation for edit operationscom.fasterxml.jackson.core:jackson-databind:2.19.1- JSON processing- Spock Framework 2.4-M6-groovy-4.0 - Testing
Security Considerations
IMPORTANT: This implementation has no path validation or directory restrictions. All filesystem operations are unrestricted and limited only by the permissions of the user running the server.
- No Path Restrictions: File operations can access any path the user has permissions for
- User Permissions: The server runs with the same permissions as the user who starts it
- Production Use: Consider implementing path validation before deploying in production environments
Note: Tool schema descriptions reference "allowed directories" but this feature does not exist in the current implementation.
Tool Examples
Reading a File
{
"tool": "read_file",
"parameters": {
"path": "/Users/myuser/documents/example.txt"
}
}
Editing a File with Preview
{
"tool": "edit_file",
"parameters": {
"path": "/Users/myuser/documents/example.txt",
"edits": [
{
"oldText": "Hello World",
"newText": "Hello MCP"
}
],
"dryRun": true
}
}
Searching for Files
{
"tool": "search_files",
"parameters": {
"path": "/Users/myuser/projects",
"pattern": "*.java",
"excludePatterns": ["**/build/**", "**/target/**"]
}
}
Troubleshooting
Common Issues
- Server won't start: Verify Java 25 is installed and in your PATH
- WAR deployment fails: Ensure your servlet container supports Jakarta Servlet API 6.1 3Permission errors: The server can only access files the running user has permissions for
Debugging
Check application logs (stdout/stderr for stdio, container logs for HTTP/SSE) for error messages.
Version History
- 1.0.0 - Multi-module architecture with stdio, HTTP, and SSE transports
- 0.7.2 - Previous version with single module implementation
Contributing
Contributions are welcome! Please ensure:
- Code follows Java naming conventions
- New tools are added to the shared
toolsmodule - Tool schemas are properly defined in
ToolSchemas.java - Changes are tested with an MCP client
- Tests are written using Spock Framework in the
toolsmodule
License
[Specify your license here]
Author
Bruno Rozendo
Acknowledgments
- Built with the Model Context Protocol SDK for Java
- Inspired by the TypeScript reference implementation
Servidores relacionados
peekaboo-mcp
A minimal MCP server providing read-only access to the file system.
Download Assistant MCP
A universal file download assistant supporting secure and batch processing of any file type.
Desktop Commander MCP
Execute terminal commands and edit local files on your desktop.
Excel/CSV MCP Server
Read, analyze, and manipulate data in Excel (XLSX, XLS) and CSV files with advanced filtering and analytics.
MCP Apple Notes
Perform semantic search and retrieval augmented generation over your Apple Notes.
Filesystem MCP Server
Provides AI agents with secure access to local filesystem operations like reading, writing, and managing files and directories.
Editor MCP
A server for file operations, allowing reading, editing, and managing text files through a standardized API.
Vulcan File Ops
MCP server that gives Claude Desktop and other desktop MCP clients filesystem powers—read, write, edit, and manage files like AI coding assistants.
PDF to PNG
A server that converts PDF files to PNG images. Requires the poppler library to be installed.
FilerMoverMcp
A file mover tool that stages and executes file moves safely. Works as both a CLI tool and an MCP server for AI agents.