MCP Filesystem Server

by safurrier
Verified
MIT License
5
  • Apple
  • Linux
#!/usr/bin/env python """ Primary entry point to run the MCP filesystem server. Usage: uv run run_server.py [dir1] [dir2] ... [options] For use with MCP Inspector or Claude Desktop: - Command: uv - Arguments: --directory /path/to/mcp-filesystem run run_server.py [dir1] [dir2] This simplified approach eliminates the need for module invocation with -m flag. """ import sys import os import typer from typing import List, Optional from typing_extensions import Annotated from mcp_filesystem.server import mcp app = typer.Typer( name="mcp-filesystem", help="MCP Filesystem Server", add_completion=False, ) @app.callback(invoke_without_command=True) def main( directories: Annotated[ Optional[List[str]], typer.Argument( help="Allowed directories (defaults to current directory if none provided)", show_default=False, ), ] = None, transport: Annotated[ str, typer.Option( "--transport", "-t", help="Transport protocol to use", ), ] = "stdio", port: Annotated[ int, typer.Option( "--port", "-p", help="Port for SSE transport", ), ] = 8000, debug: Annotated[ bool, typer.Option( "--debug", "-d", help="Enable debug logging", ), ] = False, version: Annotated[ bool, typer.Option( "--version", "-v", help="Show version information", ), ] = False, ) -> None: """Run the MCP Filesystem Server. By default, the server will only allow access to the current directory. You can specify one or more allowed directories as arguments. """ if version: show_version() return # Set allowed directories in environment for the server to pick up if directories: os.environ["MCP_ALLOWED_DIRS"] = os.pathsep.join(directories) # Set debug mode if requested if debug: os.environ["FASTMCP_LOG_LEVEL"] = "DEBUG" try: if transport.lower() == "sse": os.environ["FASTMCP_PORT"] = str(port) mcp.run(transport="sse") else: mcp.run(transport="stdio") except KeyboardInterrupt: print("\nShutting down...", file=sys.stderr) sys.exit(0) except Exception as e: print(f"Error: {e}", file=sys.stderr) sys.exit(1) def show_version() -> None: """Show version information.""" try: from importlib.metadata import version as get_version version = get_version("mcp-filesystem") except ImportError: version = "unknown" print(f"MCP Filesystem Server v{version}") print("A Model Context Protocol server for filesystem operations") if __name__ == "__main__": app()