pbs-mcp-server
Manage Proxmox Backup Server datastores, snapshots, verification, prune jobs, sync jobs, garbage collection, and system tasks via the PBS API.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@pbs-mcp-server what datastores do I have?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
pbs-mcp-server
MCP server for Proxmox Backup Server — manage datastores, snapshots, verification, prune jobs, sync jobs, garbage collection, and more via any MCP-compatible AI client.
Tools
Node & System
Tool | Description |
| Get PBS version and repo ID |
| CPU, memory, disk, swap, uptime, load averages |
| List recent tasks (filterable by type, status, running) |
| Get status and log output for a task UPID |
Datastores
Tool | Description |
| List all datastores with retention config |
| Storage usage, dedup factor, GC status |
| List backup groups (vm/ct/host) in a datastore |
| List snapshots, filterable by type/ID/namespace |
| List namespaces in a datastore |
| Start GC on a datastore |
| Start verification on a datastore or group |
| Prune a backup group (supports dry-run) |
| Protect or unprotect a snapshot from pruning |
Jobs & Remotes
Tool | Description |
| List scheduled verification jobs |
| Manually trigger a verification job |
| List configured sync jobs |
| Manually trigger a sync job |
| List scheduled prune jobs |
| List configured remote PBS servers |
Related MCP server: mcp-server-proxmox
Setup
1. Install
npm install -g pbs-mcp-serverOr run directly without installing:
npx pbs-mcp-server2. Create a PBS API Token
In the PBS web UI: Configuration → Access Control → API Tokens → Add
Give it the DatastoreAdmin or Admin role depending on what you need.
3. Configure environment variables
Copy .env.example and fill in your values:
cp .env.example .envKey variables:
Variable | Required | Description |
| Yes | PBS IP or hostname (no port, no trailing slash) |
| No | API port, default |
| Yes* | API token ID, e.g. |
| Yes* | API token secret |
| Yes* | Username for ticket auth (alternative to token) |
| Yes* | Password for ticket auth |
| No | Set to |
| No |
|
| No | HTTP mode port, default |
*Either PBS_TOKEN_ID+PBS_TOKEN_SECRET or PBS_USERNAME+PBS_PASSWORD is required.
Claude Code (stdio)
claude mcp add --transport stdio pbs-mcp-server \
-e PBS_HOST=192.168.1.10 \
-e PBS_TOKEN_ID=user@pbs!mytoken \
-e PBS_TOKEN_SECRET=your-secret \
-e PBS_VERIFY_SSL=false \
-- pbs-mcp-serverClaude Desktop
Add to claude_desktop_config.json:
{
"mcpServers": {
"pbs": {
"command": "pbs-mcp-server",
"env": {
"PBS_HOST": "192.168.1.10",
"PBS_TOKEN_ID": "user@pbs!mytoken",
"PBS_TOKEN_SECRET": "your-secret",
"PBS_VERIFY_SSL": "false"
}
}
}
}HTTP Mode
Start the server in HTTP mode for use with SSE-capable clients:
TRANSPORT=http PBS_HOST=192.168.1.10 PBS_TOKEN_ID=user@pbs!mytoken \
PBS_TOKEN_SECRET=your-secret PBS_VERIFY_SSL=false pbs-mcp-serverHealth check: GET http://localhost:3100/health
MCP endpoint: POST http://localhost:3100/mcp
Development
npm install
npm run build # compile TypeScript
npm run dev # watch modeLicense
MIT
Available Tools
19 toolspbs_get_datastore_usageGet Datastore UsageARead-onlyIdempotent
Get usage statistics for all datastores: total/used/available space, GC status, and deduplication factor.
Returns: For each datastore: name, total, used, available, percent used, GC last-run time, dedup factor, removed/pending bytes/chunks.
Inputs: no named parameters.
pbs_get_node_statusGet PBS Node StatusARead-onlyIdempotent
Returns detailed status of the PBS node: CPU usage, memory, disk, swap, load averages, uptime, and kernel version.
Returns:
CPU model, core count, and current usage percentage
Memory: free / total / used
Root filesystem: available / total / used
Swap: free / total / used
Uptime and load averages
Kernel version
Inputs: no named parameters.
pbs_get_task_statusGet PBS Task StatusARead-onlyIdempotent
Get the status and log output of a specific task by its UPID.
Args:
upid (string): The task UPID
Returns: Task status and log lines.
Inputs: upid (required).
pbs_get_versionGet PBS VersionARead-onlyIdempotent
Returns the Proxmox Backup Server version, release, and repository ID. Use this to confirm connectivity and check which PBS version is running.
Inputs: no named parameters.
pbs_list_datastoresList PBS DatastoresARead-onlyIdempotent
List all configured datastores on the PBS server with their paths, comments, and retention settings.
Returns: Array of datastores with name, path, comment, GC schedule, prune schedule, and keep-* retention counts.
Inputs: no named parameters.
pbs_list_groupsList Backup GroupsARead-onlyIdempotent
List all backup groups in a datastore. Groups are organized by backup type (vm, ct, host) and ID.
Args:
store (string): Datastore name
ns (string, optional): Namespace path (e.g. "ns1/ns2")
Returns: Array of backup groups with type, ID, last backup time, backup count, and owner.
Inputs: store (required), ns.
pbs_list_namespacesList NamespacesARead-onlyIdempotent
List backup namespaces in a datastore.
Args:
store (string): Datastore name
parent (string, optional): Parent namespace to list children of
Returns: Array of namespace paths and their comments.
Inputs: store (required), parent.
pbs_list_prune_jobsList Prune JobsARead-onlyIdempotent
List all configured scheduled prune jobs.
Returns: Array of prune jobs with ID, store, schedule, retention settings, namespace, and disabled status.
Inputs: no named parameters.
pbs_list_remotesList RemotesARead-onlyIdempotent
List all configured remote PBS servers used for sync jobs.
Returns: Array of remotes with name, host, port, auth-id, fingerprint, and comment.
Inputs: no named parameters.
pbs_list_snapshotsList SnapshotsARead-onlyIdempotent
List snapshots in a datastore, optionally filtered by backup type and ID.
Args:
store (string): Datastore name
backup_type (string, optional): Filter by type — "vm", "ct", or "host"
backup_id (string, optional): Filter by backup ID (e.g. "100")
ns (string, optional): Namespace path
Returns: Array of snapshots with type, ID, timestamp, size, protection status, verification state, and file list.
Inputs: store (required), ns, backup_id, backup_type.
pbs_list_sync_jobsList Sync JobsARead-onlyIdempotent
List all configured sync jobs that replicate data between PBS servers.
Returns: Array of sync jobs with ID, local store, remote name, remote store, schedule, remove-vanished flag, namespace settings, and comments.
Inputs: no named parameters.
pbs_list_tasksList PBS TasksARead-onlyIdempotent
List recent tasks on the PBS node. Returns task UPID, type, user, start/end times, and status.
Args:
limit (number): Max tasks to return (default 30, max 200)
running (boolean): If true, only show currently running tasks
typefilter (string): Filter by task type, e.g. "garbage_collection", "verify", "prune", "sync"
statusfilter (string): Filter by status, e.g. "ok", "error"
Returns: List of tasks with UPID, type, user, timestamps, and completion status.
Inputs: limit, running, typefilter, statusfilter.
pbs_list_verification_jobsList Verification JobsARead-onlyIdempotent
List all scheduled verification jobs configured on the PBS server.
Returns: Array of verification jobs with ID, store, schedule, ignore-verified flag, outdated-after, namespace, and comment.
Inputs: no named parameters.
pbs_protect_snapshotProtect/Unprotect SnapshotAIdempotent
Set or remove protection on a backup snapshot. Protected snapshots cannot be pruned or deleted.
Args:
store (string): Datastore name
backup_type (string): "vm", "ct", or "host"
backup_id (string): Backup ID
backup_time (string): Backup timestamp in ISO format (e.g. "2025-03-22T04:00:00Z")
protected (boolean): true to protect, false to unprotect
ns (string, optional): Namespace path
Returns: Confirmation of the protection change.
Inputs: store (required), backup_id (required), protected (required), backup_time (required), +2 more.
pbs_prune_datastorePrune DatastoreADestructive
Run a prune operation on a backup group to remove old snapshots per retention policy. Supports dry-run mode.
Args:
store (string): Datastore name
backup_type (string): Backup type — "vm", "ct", or "host"
backup_id (string): Backup ID (e.g. "100")
dry_run (boolean, optional): If true, only show what would be pruned (default false)
keep_last (number, optional): Keep the last N snapshots
keep_hourly (number, optional): Keep N hourly snapshots
keep_daily (number, optional): Keep N daily snapshots
keep_weekly (number, optional): Keep N weekly snapshots
keep_monthly (number, optional): Keep N monthly snapshots
keep_yearly (number, optional): Keep N yearly snapshots
ns (string, optional): Namespace path
Returns: Task UPID or dry-run results showing which snapshots would be removed/kept.
Inputs: store (required), backup_id (required), backup_type (required), ns, +7 more.
pbs_run_garbage_collectionRun Garbage CollectionA
Start a garbage collection job on a datastore. Returns the task UPID which can be tracked with pbs_get_task_status.
Args:
store (string): Datastore name
Returns: Task UPID for the started GC job.
Inputs: store (required).
pbs_run_sync_jobRun Sync JobA
Manually trigger a configured sync job by ID.
Args:
id (string): Sync job ID
Returns: Task UPID for the started job.
Inputs: id (required).
pbs_run_verification_jobRun Verification JobA
Manually trigger a configured verification job by ID.
Args:
id (string): Verification job ID
Returns: Task UPID for the started job.
Inputs: id (required).
pbs_run_verifyRun VerificationA
Start a verification job on a datastore to check backup integrity. Returns a task UPID.
Args:
store (string): Datastore name
backup_type (string, optional): Only verify this backup type
backup_id (string, optional): Only verify this backup ID
ignore_verified (boolean, optional): Skip already-verified snapshots (default true)
outdated_after (number, optional): Re-verify if last verification is older than this many days
ns (string, optional): Namespace path
Returns: Task UPID for the started verification job.
Inputs: store (required), ns, backup_id, backup_type, +2 more.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 19 tools
Each tool has a clearly distinct purpose, targeting specific resources (version, node, datastores, groups, snapshots) or actions (list, get, run, protect, prune). The two verification-related tools are differentiated by direct execution vs. triggering a configured job.
All tools follow a consistent pattern with the pbs_ prefix and snake_case, using verb_noun structures like 'get_', 'list_', 'run_', and 'protect_'. The slight deviation of 'prune_datastore' as an imperative is still clear and doesn't break the overall consistency.
With 19 tools, the set is on the higher end but remains well-scoped for a Proxmox Backup Server management surface. Each tool covers a distinct aspect of status, datastores, maintenance, jobs, and tasks, justifying the count without being bloated.
The tool set comprehensively covers monitoring, listing, and running maintenance tasks like garbage collection, verify, and prune. Missing create/update/delete operations for datastores, jobs, and remotes, but these are likely outside the intended operational scope and common workflows are fully supported.
Maintenance
Related MCP Connectors
MCP server for Gainium — manage trading bots, deals, and balances via AI assistants
A comprehensive Model Context Protocol (MCP) server that enables AI assistants to interact with yo…
MCP server for OpenAI API (chat completions, image generation, embeddings) via AceDataCloud
One MCP server for the services your AI needs: memory, files, Microsoft 365, kanban and more.
Related MCP Servers
- AlicenseAqualityCmaintenanceMCP server for Proxmox Backup Server. Exposes datastore status, snapshot inventory, garbage collection, verify, and prune over the PBS REST API as 13 LLM-callable tools.171GPL 3.0
- AlicenseBqualityCmaintenanceA Model Context Protocol (MCP) server for Proxmox Virtual Environment that enables AI assistants to manage virtual machines, containers, nodes, and resources through natural language interactions.104MIT
- FlicenseNot gradedqualityDmaintenanceMCP server for Proxmox VE that enables AI assistants to inspect and manage LXC containers, VMs, snapshots, and resource pools via the Proxmox API.-
- AlicenseAqualityDmaintenanceMCP server for managing Proxmox VE resources, VM/CT lifecycle, snapshots, backups, and clones via natural language.23MIT