A file mover tool that stages and executes file moves safely. Works as both a CLI tool and an MCP (Model Context Protocol) server for AI agents.
dotnet tool install --global FileMoverMcpdotnet tool update --global FileMoverMcpdotnet tool uninstall --global FileMoverMcpAfter installation, the fm command will be available globally.
To register as an MCP tool in Claude Code:
claude mcp add filemover -- fm --mcpFor Cursor or other MCP clients, add this to your MCP configuration:
{
"mcpServers": {
"filemover": {
"command": "fm",
"args": ["--mcp"]
}
}
}The workflow is: initialize a session, stage moves, preview, then commit (or cancel).
fm init [path] # Initialize at path (default: current directory)
fm mv <source> <dest> # Stage a file or directory move
fm mv <source> <dest> --overwrite # Allow overwriting existing destination
fm preview # See all staged moves
fm commit # Execute all staged moves
fm cancel # Discard all staged moves
fm help # Show help information# Move files on desktop
fm init "c:/users/adam/desktop"
fm mv "old-folder/file.png" "new-folder/file.png"
fm mv "document.txt" "archive/document-backup.txt"
fm preview
fm commit
# Move an entire directory
fm init
fm mv "source-folder" "dest-folder"
fm commit
# Overwrite an existing file
fm init
fm mv "source.txt" "destination.txt" --overwrite
fm commitIf the destination path includes directories that don't exist yet, they will be created automatically. For example, fm mv "file.txt" "a/b/c/file.txt" will create a/b/c/ if needed.
When you run fm mv, the tool checks whether the source is a file or a directory and handles it accordingly. Directory moves preserve the full internal structure, including nested subdirectories.
If the destination already exists (file or directory), the move will be rejected unless you pass --overwrite. With --overwrite, the existing destination is replaced entirely.
All paths are relative to the session's base directory. Attempting to reference paths outside it will be rejected.
CLI and MCP mode share the same session storage, so you can initialize a session in one mode and commit in the other.
fm --mcpWhen running as an MCP server, the following tools are available:
fm_init(path?: string)- Initialize a sessionfm_move(source: string, destination: string, overwrite: boolean)- Stage a movefm_preview()- Preview staged movesfm_commit()- Execute staged movesfm_cancel()- Cancel sessionfm_help()- Get help
git clone <repository-url>
cd FileMoverMcp
dotnet build FileMoverMcp.sln
dotnet test FileMoverMcp.slnTo run as MCP server during development:
dotnet run --project FileMoverMcp.Cli/FileMoverMcp.Cli.csproj -- --mcpTo package:
dotnet pack FileMoverMcp.Cli/FileMoverMcp.Cli.csproj --configuration ReleaseMIT License