Skip to main content
Glama
TadMSTR

backrest-mcp

by TadMSTR

backrest-mcp

MCP server for Backrest — a web UI and orchestrator for restic backups.

Python/FastMCP rewrite of backrest-mcp-server. Covers the full useful surface of the Backrest REST API with layered safety controls to protect backup data.

Tools

Tool

Description

Requires

get_health

Check reachability + credential health (poll-safe)

get_config

Read Backrest configuration (repos, plans)

list_snapshots

List snapshots; no args → all repos merged

list_snapshot_files

Browse files within a snapshot (by repo_id)

get_summary

30-day dashboard stats per repo and plan

get_operations

Recent operation history with status icons + log refs

get_logs

Read an operation's log output (ref from get_operations)

get_download_url

Signed download URL for a restored file

trigger_backup

Trigger a backup plan (dry_run supported)

BACKREST_READONLY=false

do_repo_task

Run maintenance: prune/check/stats/unlock/index

BACKREST_READONLY=false

cancel_operation

Cancel a running operation

BACKREST_READONLY=false

forget_snapshot

Permanently forget a snapshot (confirm token required)

BACKREST_ALLOW_DESTRUCTIVE=true

restore_snapshot

Restore snapshot to a staging path

BACKREST_ALLOW_DESTRUCTIVE=true

Default state: read-only — only the 8 read tools are registered. No write calls are possible without explicit opt-in. RunCommand, SetConfig, AddRepo, RemoveRepo, and ClearHistory are intentionally never exposed.

API field names target the deployed Backrest v1.13.0 connect-rpc API, which upstream main has since diverged from. See CHANGELOG.md (0.3.0) for the reconciliation notes.

Related MCP server: Keepit MCP

Safety Controls

Backups are critical data. Four controls gate write and destructive operations:

1. Read-only mode (default: on)

BACKREST_READONLY=true   # no write tools registered (default)
BACKREST_READONLY=false  # enables trigger_backup, do_repo_task, cancel_operation

2. Destructive gate (default: off)

BACKREST_ALLOW_DESTRUCTIVE=false  # forget/restore never registered (default)
BACKREST_ALLOW_DESTRUCTIVE=true   # enables forget_snapshot, restore_snapshot
                                   # requires BACKREST_READONLY=false

3. Forget confirmation token

forget_snapshot requires confirm=f"FORGET:{snapshot_id}". The caller must name the exact snapshot being deleted.

4. Restore path guard

restore_snapshot validates the target path against BACKREST_RESTORE_ALLOWED_PREFIX (default: /tmp/backrest-restore/) using os.path.realpath(). Path traversal attempts are blocked. After verifying restored files, move them manually.

5. Audit log

Set BACKREST_AUDIT_LOG=/path/to/audit.jsonl to log all write operations. Credential values are never included.

Configuration

Env var

Default

Purpose

BACKREST_URL

http://localhost:9898

Backrest base URL

BACKREST_USERNAME

Basic Auth username (optional)

BACKREST_PASSWORD

Basic Auth password

BACKREST_READONLY

true

Disable all write tools

BACKREST_ALLOW_DESTRUCTIVE

false

Enable forget/restore (requires READONLY=false)

BACKREST_RESTORE_ALLOWED_PREFIX

/tmp/backrest-restore/

Restore target path guard

BACKREST_AUDIT_LOG

JSONL audit log for write ops

BACKREST_MCP_TRANSPORT

stdio

stdio or http (long-lived PM2 service)

BACKREST_MCP_HTTP_HOST

127.0.0.1

Bind host for http mode (non-loopback refused)

BACKREST_MCP_HTTP_PORT

8626

Bind port for http mode

BACKREST_MCP_AUTH_TOKEN

Bearer token, required in http mode (≥16 chars)

LOG_LEVEL

INFO

Logging verbosity

LOG_FILE

stderr

Log file path

INFLUXDB_URL

Optional InfluxDB metrics

Install

python3 -m venv .venv
source .venv/bin/activate
pip install -e .

For development/testing:

pip install -e ".[dev]"
pytest

Deployment (PM2)

An ecosystem.config.js is included for PM2-managed deployment. Credentials are injected via --env-file to avoid storing them in the config file:

cd /path/to/backrest-mcp
pm2 start ecosystem.config.js --env-file /path/to/secrets.env

The secrets file must contain BACKREST_USERNAME, BACKREST_PASSWORD, and (for http mode) BACKREST_MCP_AUTH_TOKEN. All other settings default safely in ecosystem.config.js (BACKREST_READONLY=true, BACKREST_ALLOW_DESTRUCTIVE=false).

HTTP transport

ecosystem.config.js defaults to BACKREST_MCP_TRANSPORT=http, running a long-lived streamable-http service on 127.0.0.1:8626/mcp. HTTP mode fails closed:

  • binds loopback only (non-loopback bind refused unless BACKREST_MCP_ALLOW_NONLOOPBACK=1);

  • requires a BACKREST_MCP_AUTH_TOKEN bearer token of ≥16 chars (generate with python3 -c "import secrets; print(secrets.token_hex(32))").

Clients authenticate with Authorization: Bearer <token>. Set BACKREST_MCP_TRANSPORT=stdio (or unset it) to fall back to per-turn stdio via the backrest-mcp entry point.

Claude Desktop Config

{
  "mcpServers": {
    "backrest": {
      "command": "/path/to/backrest-mcp/.venv/bin/python",
      "args": ["-m", "backrest_mcp.server"],
      "env": {
        "BACKREST_URL": "http://localhost:9898",
        "BACKREST_USERNAME": "your-username",
        "BACKREST_PASSWORD": "your-password",
        "BACKREST_READONLY": "true"
      }
    }
  }
}

Omit BACKREST_USERNAME and BACKREST_PASSWORD if Backrest auth is disabled.

TLS

If connecting to an HTTPS endpoint with a private or self-signed CA:

REQUESTS_CA_BUNDLE=/path/to/ca.crt

httpx respects this env var. Do not disable TLS verification.

Observability

Structured JSON logs via structlog. LOG_LEVEL controls verbosity (default: INFO). Set LOG_FILE to write to a file instead of stderr — exactly one sink is attached, so under PM2 the same line is not also duplicated into error_file. If LOG_FILE cannot be created the server falls back to stderr and says so on stderr rather than failing to start.

LOG_LEVEL applies to this server's own loggers. httpx, httpcore, mcp and nats are held at WARNING regardless, so their wire trace cannot drown the server's own lines.

Optional InfluxDB metrics via pip install -e ".[influxdb]":

Env var

Purpose

INFLUXDB_URL

InfluxDB write URL

INFLUXDB_TOKEN

Auth token

INFLUXDB_BUCKET

Bucket/database (default: backrest-mcp)

Optional NATS publishing via pip install -e ".[nats]":

Env var

Purpose

NATS_URL

NATS server URL. Unset = disabled.

NATS_SUBJECT_PREFIX

Subject prefix (default: backrest); subjects are <prefix>.tool.<tool>

Each tool call emits a backrest_tool measurement with tool tag and duration_ms field.

Failure behaviour

Telemetry is best-effort and never fails a tool call, but it is not silent. An unset env var is the intended disabled state and logs nothing. A backend that is configured and failing warns exactly once per process and is then not retried:

Event

Meaning

influx_init_failed

INFLUXDB_URL set but the client could not be built. Writes disabled for the process.

influx_write_failed

The client built but a write failed — the usual symptom of a wrong or unreachable URL, since InfluxDBClient3 connects lazily. Writes keep being attempted.

nats_init_failed

NATS_URL set but the connection failed. Publishes disabled for the process.

nats_transport_error

First NATS transport error, in place of nats-py's per-attempt ERROR reporting.

nats_publish_failed

The connection succeeded but a publish failed. Publishes keep being attempted.

Every one of these carries the exception class only, never the URL or token — a NATS URL embeds its credentials.

NATS connects fail fast (allow_reconnect=False, two attempts, 2 s connect timeout, 5 s overall deadline) so an unreachable broker delays a tool call by well under a second rather than the ~120 s the library defaults produce.

Auth Architecture

Credentials flow: env vars → BackrestClient.__init__ → httpx Basic Auth tuple → Authorization header. Credentials are never written to logs, audit entries, or MCP tool responses.

Available Tools

8 tools
get_configA

Read the Backrest configuration (repos, plans, global settings).

Returns the full Backrest config as a dict. Does not expose credentials.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the transparency burden. It discloses that the tool returns the full config as a dict and explicitly states it does not expose credentials, which is valuable safety-relevant behavior. It omits potential details like auth/error behavior, but for a simple read-only config getter this is adequate.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences with no fluff. The main purpose is front-loaded in the first sentence, and the second sentence adds an essential behavioral caveat. Every word earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (zero parameters, clear read purpose, and an output schema present), the description is complete. It identifies the target, output format, and a critical data-safety behavior, leaving no significant gaps for an agent to misuse the tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, making schema coverage trivially 100% and the baseline 4. The description adds useful semantic context about the return value (a dict) and credential redaction, though no parameter descriptions are necessary.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Read') and clearly identifies the resource ('Backrest configuration'), listing its main components (repos, plans, global settings). This makes it easily distinguishable from sibling tools like get_health or list_snapshots.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

While it does not explicitly say 'use this when you need the config' or mention alternatives, the resource is uniquely named and unambiguous among the siblings. The context is clear enough that an agent would know when to select it over other tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_download_urlA

Get a signed download URL for a file produced by a restore operation.

Companion to restore_snapshot: after a restore, fetch a URL to download a specific restored file.

ParametersJSON Schema
NameRequiredDescriptionDefault
file_pathYesPath of the file within the restored output to download.
operation_idYesThe restore operation's ID (from get_operations).

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description must carry the full burden. It discloses the basic behavior (getting a URL) and notes the URL is 'signed', but does not explain what signed means (e.g., expiration, permissions). It also lacks information on error cases or side effects. The description is not misleading, but there are clear gaps in explaining the signed URL behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is exactly two sentences, with the most important information first. Every word is purposeful, no redundancy or fluff. It is a model of concise, front-loaded description.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple 2-parameter get tool with an output schema, the description provides essential context: what it does, when to use it, and its relationship to restore_snapshot. It does not explain the signed URL's behavioral details or error handling, but given the tool's simplicity and the presence of an output schema, this is largely adequate. A small gap remains regarding signed URL semantics.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema description provides 100% coverage for both parameters, so the baseline is 3. The description text reinforces that the tool fetches a 'specific restored file' but adds no substantial new meaning beyond the schema. The mention of restore operation context is useful but not a novel addition.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb+resource ('Get a signed download URL for a file') and clearly ties it to restore operations. It distinguishes itself from sibling tools by focusing on the restore output, and the mention 'Companion to restore_snapshot' further clarifies its unique role.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly states when to use this tool: 'after a restore' and 'Companion to restore_snapshot', providing clear context. It does not explicitly mention when not to use it, but the sibling tool list (e.g., list_snapshot_files) implies alternatives for listing files. This is clear usage guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_healthA

Check that Backrest is reachable and credentials are valid.

Wraps GetConfig — the call that returns 200 with valid credentials and 401 when they drift. Returns status "ok", "auth_failed", or "unreachable", plus the configured URL and a repo/plan count when healthy. Read-only; safe to poll.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries full responsibility. It explicitly states 'Read-only; safe to poll,' explains the underlying HTTP behavior (200 vs 401), and discloses the three possible return statuses plus additional data when healthy. This is thorough and goes beyond minimal expectations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise, consisting of two sentences that front-load the purpose and then provide necessary behavioral details. Every sentence adds value without redundancy or fluff.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (no params), the presence of an output schema, and the detailed description of return statuses and safe polling, the description is complete. It covers purpose, behavior, and usage context without leaving significant gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, so the baseline is 4. The description adds no parameter-specific information, but none is needed. It does clarify the output structure, which is useful, though the output schema likely covers that.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'Check that Backrest is reachable and credentials are valid.' This is a specific verb+resource, and it distinguishes itself from sibling tools by focusing on health status rather than returning config, snapshots, or logs.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear context for when to use the tool (health checks, polling) and mentions it wraps GetConfig, implying the alternative if full config is needed. However, it does not explicitly state exclusions or name alternative tools for specific scenarios, so it stops short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_logsC

Fetch the log output for an operation.

ParametersJSON Schema
NameRequiredDescriptionDefault
refYesThe operation's log reference — the "log:" value surfaced by get_operations.
max_bytesNoCap on returned text size; when the log is larger, the tail is kept (errors are usually at the end). Default 100000.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden of behavioral disclosure. It merely states the action with no mention of side effects, preconditions (like needing a valid ref), size limits, or edge cases. The tail behavior for max_bytes is only in the parameter description, not the main description.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence with no wasted words. It is concise but somewhat under-specified; one might expect a bit more context, yet it remains clear and direct.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the existence of an output schema and well-described parameters, the description lacks essential context such as how the 'ref' is obtained, when this tool is appropriate, and its relationship to get_operations. It feels incomplete for a tool that clearly depends on prior operations.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and the parameter descriptions for 'ref' and 'max_bytes' are informative, including the source of the ref and truncation behavior. The main description adds no parameter information, so the baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description 'Fetch the log output for an operation' clearly identifies the action (fetch) and the resource (log output), with the scope of an operation. It is specific enough to distinguish from siblings like get_config or get_health, though it does not explicitly differentiate from get_summary or get_operations.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool or how it relates to siblings. The schema mentions that the 'ref' comes from get_operations, but this is in the parameter description, not the main description. No exclusions or alternatives are stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_operationsA

List recent backup operations, optionally filtered by plan or repo.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of operations to return (default 20).
plan_idNoFilter operations by plan ID.
repo_idNoFilter operations by repo ID (resolved to the repo GUID that the operation selector matches on).

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. The verb 'List' implies a read-only operation, but the description does not explicitly state side effects, permissions, or behavior like ordering or pagination beyond 'recent'. It adds some context via filters but remains minimal.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single concise sentence (11 words), front-loads the primary action and resource, and contains no fluff or repetition. Every word earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is simple, has an output schema to cover return structure, and all parameters are documented in the schema. The description covers the core purpose and options. It could optionally mention that results are ordered by recency (implied by 'recent'), but this is a minor gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3. The description does not add extra meaning beyond the schema; it merely restates that filtering by plan or repo is possible, which the schema already documents.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses the specific verb 'List', names the resource 'backup operations', and specifies scope ('recent') and optional filters (plan or repo). This clearly distinguishes it from sibling tools like get_logs or list_snapshots, which target different resource types.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when to use the tool (when you need recent backup operations), but it does not explicitly state when not to use it or mention alternatives. The optional filters hint at use cases, but no exclusionary guidance is provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_summaryA

Get the Backrest dashboard summary — 30-day stats per repo and plan.

Returns per-repo and per-plan success/warning/failed backup counts, bytes scanned/added, total snapshots, and the next scheduled backup time.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the burden of behavioral disclosure. It clearly states the output (per-repo/per-plan counts, bytes, snapshots, next scheduled time) and the 30-day time range. As a 'Get' operation, it implies read-only behavior, and no side effects are mentioned. This adds useful context without being overly verbose.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences: the first front-loads the core purpose, and the second elaborates on the return details. There is no redundant information, and every word adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity, zero parameters, and presence of an output schema (which likely documents the return structure), the description is complete. It details the content of the summary (counts, bytes, snapshots, next scheduled time) and matches the expected dashboard use case. No critical information is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, so the description is not required to explain parameter semantics. The baseline for no-parameter tools is 4, and the description appropriately describes what the operation returns without any parameter-related gaps.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb 'Get' with a clear resource 'Backrest dashboard summary' and specifies the 30-day stats per repo and plan. This distinguishes it from sibling tools like list_snapshots and list_snapshot_files, which focus on listing individual snapshots rather than aggregated statistics.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context by indicating this returns a high-level dashboard summary, which implies use for overview and monitoring rather than granular inspection. It does not explicitly mention alternatives or when not to use it, but the context is sufficient for an agent to infer appropriate usage.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_snapshot_filesC

Browse files within a specific snapshot.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathNoDirectory path within the snapshot to list. Defaults to root "/"./
repo_idYesThe repository ID (as shown by list_snapshots / get_config). It is resolved to the repo GUID that the Backrest ListSnapshotFiles API expects.
snapshot_idYesSnapshot ID to browse.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries full responsibility for disclosing behavior. It fails to mention whether listing is recursive or just immediate children, whether both files and directories are returned, any pagination or sorting behavior, or any permissions required. This leaves the agent guessing about the tool's actual behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, clear sentence that is efficiently written and front-loaded. It avoids unnecessary filler, though it may be too brief to convey essential context.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has three parameters and no annotations, the description is far too sparse. It does not explain the browsing behavior, how the path parameter affects results, or any relevant caveats. The presence of an output schema reduces the need to document return values, but the description still fails to provide a complete picture.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema covers all three parameters with descriptive text (e.g., path defaults to '/', repo_id is resolved to a GUID). The description adds no additional parameter information, so a baseline score of 3 is appropriate given 100% schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description 'Browse files within a specific snapshot' uses a clear verb ('browse') and resource ('snapshot'), and the tool name reinforces this. It is distinguished from sibling tools like list_snapshots and get_summary, but it doesn't explicitly mention that browsing can target subdirectories via the 'path' parameter.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives, nor are there any exclusions or prerequisites. The description only states what the tool does, not when it should be called.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_snapshotsB

List snapshots in a Backrest repo, optionally filtered by repo or plan.

ParametersJSON Schema
NameRequiredDescriptionDefault
plan_idNoPlan ID to filter snapshots. Can be combined with repo_id.
repo_idNoBackrest repository ID to list snapshots for. When omitted, all configured repos are enumerated and their snapshots merged (each snapshot is tagged with its repoId).

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden for behavioral disclosure. It only restates the list operation and filtering, omitting return format, pagination, or the merge behavior when repo_id is omitted (which appears only in the schema, not the description).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One sentence with no redundancy, front-loaded with the verb and resource. It is appropriately sized for a simple listing tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is simple and has an output schema, so return values need no explanation. However, the description lacks usage guidance and behavioral details like merge behavior, making it minimally adequate rather than complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% with detailed parameter explanations. The description adds no parameter semantics beyond 'optionally filtered by repo or plan,' so it does not improve on what the schema already provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('List') and resource ('snapshots in a Backrest repo') and notes optional filters. It does not explicitly differentiate from sibling 'list_snapshot_files', but the resource distinction is implied by the tool name.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives like 'list_snapshot_files' or 'get_summary'. The description states only the basic functionality without exclusions or recommended use cases.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

TDQS

A3.7/5.0
Disambiguation5/5

Each tool targets a distinct resource or action: config, health, snapshots, files, operations, logs, summary, and download URLs. There is no meaningful overlap between any pair, and descriptions clarify their specific roles.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern: get_ for single items or status, list_ for collections. The prefixes are uniform and predictable across the entire set.

Tool Count5/5

Eight tools is well-scoped for a backup/monitoring server, covering the key read-only operations without redundancy or excessive fragmentation.

Completeness2/5

The tool set is read-only and missing core lifecycle operations: there is no restore_snapshot tool even though get_download_url references it as a companion, and no tools to create, update, or delete repos/plans or trigger backups. This leaves obvious gaps and dead ends.

Maintenance

ActivityMaintained
ResponsivenessSyncing

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    D
    maintenance
    An MCP server that enables AI assistants to manage restic backups, including listing snapshots, browsing files, and creating new backups. It provides tools for repository maintenance, data restoration, and applying retention policies through the Model Context Protocol.
    1
  • A
    license
    Not graded
    quality
    B
    maintenance
    MCP server for interacting with Keepit backup and data protection services. Enables monitoring, management, and security operations through natural language.
    4
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Enterprise-grade MCP server for Kubernetes operations, supporting local kubeconfig and AWS EKS authentication, with read, write, and destructive operations protected by multi-layer safety guards.
    MIT
  • A
    license
    Not graded
    quality
    A
    maintenance
    An MCP server exposing scoped, read-only enterprise operations tools with fail-closed credential handling. It returns opaque approval IDs for mutations and requires a separate operator approval command to release one-time capabilities.
    MIT

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/TadMSTR/backrest-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server