Skip to main content
Glama
GeiserX

duplicacy-mcp

by GeiserX

Last backup run

get_backup_history
Read-onlyIdempotent

Retrieve the completed backup run retained for a Duplicacy snapshot, including duration, file and upload counts, chunks, revision, and exit code to monitor backup health.

Instructions

Details of the last completed run of one Duplicacy snapshot: duration in seconds, files total and new, bytes uploaded and new, new chunks, revision, exit_code (0 = success, null = unknown). The exporter keeps only the last run, so this is not a list of past runs. Get valid IDs from list_snapshots.

Input Schema

NameRequiredDescriptionDefault
machineNoOnly this machine, exactly as list_snapshots returns it in machines, for example "nas". Omit for all.
snapshot_idYesDuplicacy snapshot ID, exactly as list_snapshots returns it, for example "photos".
storage_targetNoOnly this storage target, exactly as list_snapshots returns it in storage_targets, for example "b2". Omit for all.

Output Schema

NameRequiredDescriptionDefault
countYes
backupsYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed7 schema fields changedv0.2.1
    • addedInput schema / additionalProperties
      Added value: +false
    • addedInput schema / properties / machine
      Added value: +{
      +  "description": "Only this machine, exactly as list_snapshots returns it in machines, for example \"nas\". Omit for all.",
      +  "maxLength": 256,
      +  "type": "string"
      +}
    • changedInput schema / properties / snapshot_id / description
      Previous value: -"The snapshot ID to query history for"New value: +"Duplicacy snapshot ID, exactly as list_snapshots returns it, for example \"photos\"."
    • addedInput schema / properties / snapshot_id / maxLength
      Added value: +256
    • addedInput schema / properties / snapshot_id / minLength
      Added value: +1
    • addedInput schema / properties / storage_target
      Added value: +{
      +  "description": "Only this storage target, exactly as list_snapshots returns it in storage_targets, for example \"b2\". Omit for all.",
      +  "maxLength": 256,
      +  "type": "string"
      +}
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "additionalProperties": false,
      +  "properties": {
      +    "backups": {
      +      "items": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "exit_code": {
      +            "description": "Exit code of the last run: 0 is success, null means unknown",
      +            "type": [
      +              "null",
      +              "integer"
      +            ]
      +          },
      +          "last_bytes_new": {
      +            "type": "number"
      +          },
      +          "last_bytes_uploaded": {
      +            "type": "number"
      +          },
      +          "last_chunks_new": {
      +            "type": "number"
      +          },
      +          "last_duration_seconds": {
      +            "description": "Duration of the last run, in seconds",
      +            "type": "number"
      +          },
      +          "last_files_new": {
      +            "type": "number"
      +          },
      +          "last_files_total": {
      +            "type": "number"
      +          },
      +          "last_revision": {
      +            "type": "number"
      +          },
      +          "last_success": {
      +            "description": "Time of the last successful run, RFC 3339 in UTC",
      +            "type": "string"
      +          },
      +          "machine": {
      +            "type": "string"
      +          },
      +          "snapshot_id": {
      +            "type": "string"
      +          },
      +          "storage_target": {
      +            "type": "string"
      +          },
      +          "total_bytes_uploaded": {
      +            "type": "number"
      +          }
      +        },
      +        "required": [
      +          "snapshot_id",
      +          "storage_target",
      +          "machine",
      +          "last_duration_seconds",
      +          "last_files_total",
      +          "last_files_new",
      +          "last_bytes_uploaded",
      +          "last_bytes_new",
      +          "last_chunks_new",
      +          "exit_code",
      +          "last_revision",
      +          "total_bytes_uploaded"
      +        ],
      +        "type": "object"
      +      },
      +      "type": [
      +        "null",
      +        "array"
      +      ]
      +    },
      +    "count": {
      +      "type": "integer"
      +    }
      +  },
      +  "required": [
      +    "backups",
      +    "count"
      +  ],
      +  "type": "object"
      +}
  2. First observedv0.1.0

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, non-destructive, and closed-world, so the safety profile is covered. The description adds genuine value beyond them: the exporter retains only the last run (a data-retention constraint the annotation cannot express) and exit_code semantics including null = unknown.

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 tight sentences; the return-value inventory and the last-run caveat are front-loaded, and the ID-source tip closes it with no filler.

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?

An output schema exists, so the return value need not be enumerated, yet the description still summarizes the key fields helpfully. The last-run limitation and ID sourcing are covered; only an explicit contrast with get_backup_status/get_backup_overview is missing.

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%, so all three parameters including machine and storage_target are documented in the schema itself. The description only reinforces that IDs come from list_snapshots, which the schema already states. Baseline 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?

States a specific verb and resource ('Details of the last completed run of one Duplicacy snapshot') and enumerates exactly what is returned (duration, files, bytes, chunks, revision, exit_code). It explicitly rules out the misreading that this is a history list, though it does not distinguish itself from get_backup_status or get_backup_overview.

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?

Gives a concrete prerequisite and routing hint: 'Get valid IDs from list_snapshots.' It also scopes usage by warning the exporter keeps only the last run, so agents won't expect historical data. It stops short of saying when to prefer this over get_backup_status, but the context is clear.

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