MCP server for Duplicati backup management — status, logs, run, pause, resume, versions
Project description
mcp-duplicati
MCP server for Duplicati backup management. Exposes 67 tools for inspecting, configuring, scheduling, running, restoring, and maintaining Duplicati backup jobs over the Duplicati web API.
Heads up: this server includes destructive tools that can delete backup jobs, wipe local databases, purge file history, overwrite files on restore, and reclaim storage. See Destructive tools before pointing an agent at a production Duplicati instance. Requires Duplicati 2.0.8+ (JWT auth).
Quick Start
With uvx (recommended):
DUPLICATI_PASSWORD=yourpassword uvx mcp-duplicati
Add to Claude Code:
claude mcp add duplicati -- uvx mcp-duplicati
Then set the env vars (at minimum DUPLICATI_PASSWORD, and DUPLICATI_HOST
if Duplicati is not on localhost:8200) in your Claude Code MCP settings.
mcp.json snippet (e.g. ~/.config/claude/mcp.json or any MCP client config):
{
"mcpServers": {
"duplicati": {
"command": "uvx",
"args": ["mcp-duplicati"],
"env": {
"DUPLICATI_PASSWORD": "yourpassword",
"DUPLICATI_HOST": "http://localhost:8200"
}
}
}
}
Configuration
| Variable | Required | Default | Description |
|---|---|---|---|
DUPLICATI_PASSWORD |
Yes | — | Duplicati web UI password |
DUPLICATI_HOST |
No | http://localhost:8200 |
Duplicati host URL |
DUPLICATI_TIMEOUT |
No | 30 |
HTTP timeout in seconds |
Docker
Note: a prebuilt image is not yet published publicly. The
ghcr.io/aaronckj/mcp-duplicatipackage is currently private, so thedocker runbelow will fail with a 401 for anyone but the maintainer. Use theuvxinstall above, or build the image yourself from this repo:
docker build -t mcp-duplicati .
docker run -i \
-e DUPLICATI_PASSWORD=yourpassword \
-e DUPLICATI_HOST=http://duplicati.example.com:8200 \
mcp-duplicati
This is a stdio MCP server — it speaks MCP over stdin/stdout and exposes no
HTTP port, so there is no network health endpoint. For a liveness probe, call
the health_check MCP tool.
Tools
67 tools, grouped by area. Tools that modify or destroy data are flagged [DESTRUCTIVE] — see the section below.
Server & status
| Tool | Description |
|---|---|
server_info |
Installed version, OS type, machine ID |
get_server_state |
Runtime scheduler/task state (paused, active task, version) |
get_server_settings |
All server-level settings |
get_server_setting |
A single server-level setting by key |
update_server_settings |
Change one server-level setting |
get_ui_settings |
Web UI preferences |
update_ui_settings |
Update web UI preferences |
get_backup_defaults |
Default settings applied to new jobs |
check_updates |
Check for a newer Duplicati release |
get_changelog |
Release changelog / version history |
health_check |
Liveness probe for container monitoring |
Backup jobs
| Tool | Description |
|---|---|
list_backups |
All configured backup jobs |
backup_status |
Last-run statistics for a job |
get_backup |
Full job configuration |
get_backup_statistics |
Detailed file/size/duration statistics |
get_backup_report |
Detailed report of the most recent run |
get_backup_commandline |
Equivalent CLI invocation for a job |
create_backup |
Create a new backup job |
update_backup |
Update an existing job |
delete_backup |
[DESTRUCTIVE] Delete a job's configuration |
import_backup_config |
Create a job from exported JSON |
export_backup_config |
Export a job's config as JSON |
is_backup_overdue |
Check if a job missed its expected interval |
Running, stopping & progress
| Tool | Description |
|---|---|
run_backup |
Run a job immediately |
stop_backup |
[DESTRUCTIVE] Gracefully stop a running job |
abort_backup |
[DESTRUCTIVE] Abort a running job immediately |
is_backup_active |
Check if a job is running/queued |
progress |
Progress of any active backup/restore |
poll_operations |
Long-poll server events since an event ID |
Restore & verify
| Tool | Description |
|---|---|
list_versions |
Restore points (filesets) for a job |
search_backup_files |
Search files within a backup version |
restore_files |
[DESTRUCTIVE] Restore files to a local dir (overwrites) |
verify_backup |
Verify backup integrity against destination |
Maintenance & repair
| Tool | Description |
|---|---|
repair_backup |
[DESTRUCTIVE] Rebuild local DB from destination |
compact_backup |
[DESTRUCTIVE] Remove unused data blocks at destination |
purge_deleted_files |
[DESTRUCTIVE] Purge history for deleted source files |
delete_local_database |
[DESTRUCTIVE] Delete & rebuild a job's local DB |
vacuum_database |
[DESTRUCTIVE] SQLite VACUUM on a job's local DB |
Scheduling
| Tool | Description |
|---|---|
get_backup_schedule |
Get a job's schedule |
set_backup_schedule |
Set/update a job's schedule |
delete_backup_schedule |
[DESTRUCTIVE] Remove a job's schedule (on-demand only) |
Filters & sources
| Tool | Description |
|---|---|
list_backup_filters |
List a job's include/exclude filters |
add_backup_filter |
Add one filter without replacing others |
remove_backup_filter |
[DESTRUCTIVE] Remove a specific filter |
list_filters |
Built-in filter groups |
move_backup_source |
Update a single source path in a job |
get_backup_retention |
Get a job's retention policy |
set_backup_retention |
[DESTRUCTIVE] Replace a job's retention policy |
Tasks
| Tool | Description |
|---|---|
list_tasks |
Queued/running tasks |
get_task |
Details of a task by ID |
stop_task |
[DESTRUCTIVE] Stop/dequeue a task by ID |
abort_task |
[DESTRUCTIVE] Abort a running task by ID |
Logs & notifications
| Tool | Description |
|---|---|
get_logs |
Recent log entries (optionally per job) |
clear_logs |
[DESTRUCTIVE] Clear log entries |
list_notifications |
Pending notifications/alerts |
dismiss_notification |
[DESTRUCTIVE] Dismiss a notification by ID |
dismiss_all_notifications |
[DESTRUCTIVE] Dismiss all notifications |
send_test_notification |
Send a test notification |
Destinations & modules
| Tool | Description |
|---|---|
test_connection |
Test connectivity to a destination URL |
list_sources |
Browse files/folders at a destination |
create_remote_folder |
Create the remote folder/bucket |
list_remote_volumes |
List dblock/dindex/dlist files at the destination |
list_installed_backends |
Installed storage backend modules |
list_encryption_modules |
Installed encryption modules |
list_compression_modules |
Installed compression modules |
Destructive tools
The following tools delete, overwrite, or otherwise mutate data and cannot necessarily be undone. Review carefully before granting an agent unattended access:
delete_backup— deletes a job configuration.delete_backup_schedule— removes a job's automatic schedule.delete_local_database— deletes a job's local SQLite DB (forces a rebuild).vacuum_database— runs SQLite VACUUM on a job's local DB.purge_deleted_files— purges backup history for files removed at source.compact_backup— removes unused data blocks at the destination.repair_backup— rebuilds the local DB from the destination.restore_files— writes files to a local path, overwriting existing files.stop_backup/abort_backup/stop_task/abort_task— interrupt running operations.remove_backup_filter/set_backup_retention— change what data is kept.clear_logs/dismiss_notification/dismiss_all_notifications— discard log/notification records.
delete_backup and delete_backup_schedule change only Duplicati's
configuration; they do not delete backup data at the destination.
Development
git clone https://github.com/aaronckj/mcp-duplicati
cd mcp-duplicati
uv sync --extra dev
uv run pytest -v
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file mcp_duplicati-0.2.0.tar.gz.
File metadata
- Download URL: mcp_duplicati-0.2.0.tar.gz
- Upload date:
- Size: 21.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9626ae4b1496070992f0d58d3be1396454f46a5db14c6ea6c67ff49a68f54d51
|
|
| MD5 |
b4706955dd8dff3d4e143849e8e29479
|
|
| BLAKE2b-256 |
8ea911393e274d2345cacf7f09ae85c00f3068cd3e551455b38a862f15c1ca9a
|
Provenance
The following attestation bundles were made for mcp_duplicati-0.2.0.tar.gz:
Publisher:
publish.yml on aaronckj/mcp-duplicati
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
mcp_duplicati-0.2.0.tar.gz -
Subject digest:
9626ae4b1496070992f0d58d3be1396454f46a5db14c6ea6c67ff49a68f54d51 - Sigstore transparency entry: 1754467821
- Sigstore integration time:
-
Permalink:
aaronckj/mcp-duplicati@0135cc8bee94271857fabf87ca9a8c2003b08721 -
Branch / Tag:
refs/tags/v0.2.0 - Owner: https://github.com/aaronckj
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@0135cc8bee94271857fabf87ca9a8c2003b08721 -
Trigger Event:
push
-
Statement type:
File details
Details for the file mcp_duplicati-0.2.0-py3-none-any.whl.
File metadata
- Download URL: mcp_duplicati-0.2.0-py3-none-any.whl
- Upload date:
- Size: 18.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b3065c8011ebeb475ad9f290fb9fcd95572a8e6a1f73acbdbbd529e1f588eb1c
|
|
| MD5 |
b6a26fd0eae940d1974a984d73f57d1b
|
|
| BLAKE2b-256 |
3c6c27a2102aeef6a3b79b1cc020e958995cccda4a6dfd7f928e777644bc7699
|
Provenance
The following attestation bundles were made for mcp_duplicati-0.2.0-py3-none-any.whl:
Publisher:
publish.yml on aaronckj/mcp-duplicati
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
mcp_duplicati-0.2.0-py3-none-any.whl -
Subject digest:
b3065c8011ebeb475ad9f290fb9fcd95572a8e6a1f73acbdbbd529e1f588eb1c - Sigstore transparency entry: 1754467837
- Sigstore integration time:
-
Permalink:
aaronckj/mcp-duplicati@0135cc8bee94271857fabf87ca9a8c2003b08721 -
Branch / Tag:
refs/tags/v0.2.0 - Owner: https://github.com/aaronckj
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@0135cc8bee94271857fabf87ca9a8c2003b08721 -
Trigger Event:
push
-
Statement type: