MCP (Model Context Protocol) server for the Rclone RC API. Gives AI assistants the ability to manage cloud storage remotes, copy/sync files, list directories, and more — all through natural language.
Tools are auto-generated from the rclone-openapi spec using the rclone-sdk client. 98 endpoints, organized into selectable toolsets.
A running rclone remote control daemon:
rclone rcd --rc-no-auth
# or with auth:
rclone rcd --rc-user=admin --rc-pass=secretAdd to your .cursor/mcp.json or claude_desktop_config.json:
{
"mcpServers": {
"rclone-mcp-server": {
"command": "npx",
"args": ["-y", "rclone-mcp-server"],
"env": {
"RCLONE_URL": "http://localhost:5572"
}
}
}
}{
"mcpServers": {
"rclone-mcp-server": {
"command": "npx",
"args": ["-y", "rclone-mcp-server"],
"env": {
"RCLONE_URL": "http://localhost:5572",
"RCLONE_USER": "admin",
"RCLONE_PASS": "secret"
}
}
}
}docker build -t rclone-mcp-server .
docker run -i --rm \
-e RCLONE_URL=http://host.docker.internal:5572 \
rclone-mcp-serverFor remote hosting or web-based MCP clients:
npx rclone-mcp-server http --port 3000| Variable | Description | Default |
|---|---|---|
RCLONE_URL |
rclone RC daemon URL | http://localhost:5572 |
RCLONE_USER |
HTTP Basic Auth username | — |
RCLONE_PASS |
HTTP Basic Auth password | — |
RCLONE_TOOLSETS |
Comma-separated toolset list | default |
RCLONE_READ_ONLY |
Set to 1 to disable write tools |
— |
PORT |
HTTP listen port for the http command |
3000 |
rclone-mcp-server [command]
Commands:
rclone-mcp-server stdio Run with stdio transport (default)
rclone-mcp-server http Run with Streamable HTTP transport
Options:
--toolsets Comma-separated list of toolsets
--read-only Only expose read-only tools
--port HTTP port (http command only, default: 3000)
Tools are grouped by API path prefix. Enable only what you need to keep the tool list focused.
| Toolset | Paths | Default |
|---|---|---|
core |
/core/version, /core/stats, /operations/about |
Yes |
config_read |
/config/listremotes, /config/get |
Yes |
operations |
/operations/list, /operations/stat, /operations/size, /operations/copyfile, /operations/movefile, /operations/mkdir, /operations/deletefile |
Yes |
sharing |
/operations/publiclink |
No |
sync |
/sync/* |
No |
jobs |
/job/* |
No |
config_admin |
/config/* (rest) |
No |
operations_advanced |
/operations/* (rest) |
No |
mount |
/mount/* |
No |
serve |
/serve/* |
No |
core_advanced |
/core/*, /rc/* (rest) |
No |
vfs |
/vfs/* |
No |
cache |
/cache/* |
No |
debug |
/debug/* |
No |
backend |
/backend/* |
No |
options |
/options/* |
No |
plugins |
/pluginsctl/* |
No |
fscache |
/fscache/* |
No |
Special values:
default— the three default toolsets (core, config_read, operations)all— every toolset
# Default toolsets (12 tools)
npx rclone-mcp-server
# Everything (98 tools)
RCLONE_TOOLSETS=all npx rclone-mcp-server
# Just file operations and config
npx rclone-mcp-server --toolsets operations,config_read
# Default + mount
npx rclone-mcp-server --toolsets default,mount
# Read-only mode (no copy, delete, sync, etc.)
npx rclone-mcp-server --read-onlyBeyond the call-based tools, the server exposes read-only resources so clients can pull context like a file URL. They are always registered (regardless of toolset) and are safe to enable in read-only mode.
| Resource URI | Description |
|---|---|
rclone://remotes |
List of configured remote names |
rclone://config/dump |
Full config dump with secrets redacted (pass, token, key, auth, …) |
rclone://core/version |
Running Rclone engine / Go version |
rclone://core/stats |
Real-time transfer & job stats |
rclone://jobs/active |
Active background jobs |
rclone://{remote}/{+path} |
Directory listing or file content for a remote path (stat → list / cat; binary or >1MB files return metadata only) |
Examples:
rclone://remotesrclone://core/versionrclone://my-remote/— list the root of remotemy-remoterclone://my-remote/Books/guide.pdf— try to read a file
When --read-only or RCLONE_READ_ONLY=1 is set, only non-mutating tools are registered. This excludes operations like file copy/move/delete, sync, directory creation, mount/unmount, etc. Useful for giving AI assistants safe, read-only access.
The scenarios below build on the base installs from Installation:
use the stdio command/args block you picked there and only swap the env
fields. For the stdio examples below we use the published package via npx;
if you built locally, replace "command": "npx", "args": ["-y", "rclone-mcp-server"]
with "command": "node", "args": ["/path/to/rclone-mcp-server/dist/index.js"].
{
"mcpServers": {
"rclone-mcp-server": {
"command": "npx",
"args": ["-y", "rclone-mcp-server"],
"env": {
"RCLONE_URL": "http://localhost:5572",
"RCLONE_TOOLSETS": "default,jobs"
}
}
}
}For a remote daemon behind a reverse proxy with HTTP Basic Auth:
{
"mcpServers": {
"rclone-mcp-server": {
"command": "npx",
"args": ["-y", "rclone-mcp-server"],
"env": {
"RCLONE_URL": "https://rclone.example.com",
"RCLONE_USER": "your_user",
"RCLONE_PASS": "your_password",
"RCLONE_TOOLSETS": "default,jobs"
}
}
}
}{
"mcpServers": {
"rclone-mcp-server": {
"command": "npx",
"args": ["-y", "rclone-mcp-server"],
"env": {
"RCLONE_URL": "http://localhost:5572",
"RCLONE_TOOLSETS": "default",
"RCLONE_READ_ONLY": "1"
}
}
}
}{
"mcpServers": {
"rclone-mcp-server": {
"command": "npx",
"args": ["-y", "rclone-mcp-server"],
"env": {
"RCLONE_URL": "http://localhost:5572",
"RCLONE_TOOLSETS": "default,jobs,sync,sharing"
}
}
}
}{
"mcpServers": {
"rclone-mcp-server": {
"command": "npx",
"args": ["-y", "rclone-mcp-server"],
"env": {
"RCLONE_TOOLSETS": "all"
}
}
}
}The registered tool names are snake_case versions of each RC endpoint, e.g. /operations/copyfile → operations_copyfile. Since this is often an MCP bridge
to a remote rcd daemon, remote names must carry a trailing colon and there is
no local: remote on the daemon — use a real configured remote (e.g. my-remote:).
{ "fs": "my-remote:", "remote": "" } // `rclone_lsjson` — root
{ "fs": "my-remote:", "remote": "Books", "recurse": true } // recursive
{ "fs": "my-remote:", "remote": "Books/x.pdf" } // `operations_stat` — one file
{ "fs": "my-remote:" } // `operations_size` — totals
{ "fs": "my-remote:" } // `core_about` — quota/capacity# copy one file
{ "srcFs": "my-remote:", "srcRemote": "backup/a.txt",
"dstFs": "other-remote:", "dstRemote": "incoming/a.txt" } // operations_copyfile
# move one file (source removed on success)
{ "srcFs": "my-remote:", "srcRemote": "a.txt",
"dstFs": "my-remote:", "dstRemote": "archive/a.txt" } // operations_movefile
# create / delete a directory or file
{ "fs": "my-remote:", "remote": "new-folder" } // operations_mkdir
{ "fs": "my-remote:", "remote": "tmp/a.txt" } // operations_deletefileDeleting a directory needs the
operations_advancedtoolset. The default tools only includeoperations_deletefile, which removes a single file — it cannot delete directories. Removing empty directories / a directory tree is done byoperations_rmdir/operations_rmdirs/operations_purge, which are grouped underoperations_advanced(default: false). To enable directory deletion, setRCLONE_TOOLSETS=default,jobs,operations_advanced. (mkdiris in the defaultoperationstoolset, so creating directories works out of the box; only deleting them requires the extra toolset.)
Whole-tree copies and syncs can exceed the request timeout. Set _async: true
so the daemon returns a jobid immediately, then poll job_status.
# copy tree src -> dst (additive, no deletes)
{ "srcFs": "source-remote:", "dstFs": "my-remote:", "_async": true } // sync_copy
# mirror dst to src (DESTRUCTIVE — deletes extra dst files)
{ "srcFs": "my-remote:", "dstFs": "source-remote:", "_async": true } // sync_sync
# poll the job
{ "jobid": 17 } // job_status -> until `finished` is trueLong-running tools that accept _async: sync_copy, sync_move, sync_sync,
operations_copyfile, operations_movefile, operations_size, operations_purge,
operations_delete, operations_copyurl, operations_check.
{ "fs": "my-remote:", "remote": "share/folder" } // operations_publiclink
{ "fs": "my-remote:", "remote": "share/folder", "unlink": true } // removeMIT
This project is a secondary refactor based on rclone-ui/rclone-mcp.