hiberden-mcp
Use it as a local MCP server to inspect a Hiberden catalog and verify stored archive copies, with read/verify tools exposed by default.
Inventory projects, archives, collections, destinations, tapes, jobs, recent activity, and catalog statistics.
View 3-2-1 coverage roll-ups and full archive details, including size, hashes, copies, statuses, and timestamps.
Search for files across archives and page through per-archive file manifests with per-file SHA-256 checksums.
Inspect tape contents by serial/barcode.
Run
verify_copyin full or fast mode against disk/NAS/tape destinations to re-read the medium and update copy status; fast mode never promotes, and cloud read-back is not performed here.Makes no network requests and needs no API key; catalog/config write and delete tools exist only behind a desktop-set permission tier and are not in this default schema.
hiberden-mcp: Hiberden MCP server
Exposes the Hiberden archive engine (hiberden-core) as Model Context
Protocol tools over the stdio transport
(newline-delimited JSON-RPC 2.0).
MCP is an open, vendor-neutral standard, so this one server is drivable from any MCP client that launches local servers over stdio: Claude Desktop / Claude Code, OpenAI's Agents SDK and Codex CLI, Gemini CLI, Cursor, Windsurf, and others. There is no model and no API key in this process. The client brings the LLM; this binary only answers tool calls against the local catalog. It makes no network requests of its own.
Versions. The Hiberden app (2.0.0, for Windows, macOS and Linux) ships
connector 2.0.0 inside it. The latest release on this repository's releases
page, the standalone connector downloads on cdn.hiberden.app and the
agaveis/hiberden-mcp Docker image are connector 1.3.2. Where this README
describes something the two builds do differently, it names the build.
Read + verify by default
The server advertises and answers the read/verify tools below by default, and
nothing mutates configuration. At the default tier the server writes what
verify_copy records after it checks the medium (the copy's status, its
verify-pass provenance, meaning which algorithm ran and when the last full pass
succeeded, and an audit-log row), an audit-log row for each refused call to a
tool above the tier, and the catalog's per-file index for an archive written
before that index existed, built from its local or NAS copy. Connector 1.3.2
builds that index when find_file or list_archive_files runs; 2.0.0 builds it
once, when the server starts. When the server starts it also creates an empty
catalog if there is none at the path, and opening a catalog from an older
version brings its schema up to date.
Write and delete tools (catalog management, destinations, policies) ARE implemented, but behind a catalog-persisted permission tier that defaults to read-only and is only changeable in the Hiberden desktop app (Settings, then MCP, Access level). A tool above the active tier is not advertised, and a call to one is refused and recorded in the audit log. Deletes also need a separate delete override, off by default. The levels are described at https://hiberden.app/mcp.
Related MCP server: MCP Memory
Read + verify tools (always on)
Tool | Args | What it does |
| none | Top-level projects (containers). For each: name, policy, archive count, and a roll-up of how many of its archives sit in each coverage state. |
|
| The archives (leaves actually written to media). For each: project, size, SHA-256, 3-2-1 coverage, and per-copy status (destination + kind + status). Narrow by project, Collection, and/or a case-insensitive name substring. |
|
| The Collections inside one project (catalog-only organizational nodes): id, name, parent, archive count. |
| none | Library-wide 3-2-1 roll-up: total archives plus counts in unconfigured, unprotected, in_progress, at_risk, and fully_covered. |
|
| Full detail for one archive: project, size, SHA-256, legacy MD5 (if imported), coverage, and every copy with its destination, kind, status, address, and written/verified timestamps. |
| none | Configured destinations (Tape, LocalFs, NAS, Cloud) with id, slot, kind, name, and enabled/retired state. |
| none | Connector 2.0.0 only: every protection policy with its retention, the projects that use it, and each destination it is bound to, with the binding id |
| none | Tapes: serial, volume label, uuid, capacity, used bytes, and copy count. |
|
| One cartridge by barcode: label, capacity, used bytes, and the archives whose copy starts on it. |
|
| Recent copy activity, newest first (default 20): each copy's archive, destination, status, and write/verify timestamps. |
|
| Find a file by name/path fragment across every archive, with the archive and every destination it is stored in. |
|
| The file manifest of one archive from the catalog index (path, size, per-file SHA-256), paginated. The report enabler: client-ready deliverable lists and checksum manifests from the index (a one-time backfill may read a local copy of a pre-index archive). Archives with no buildable index (legacy tape-only imports) report |
|
| Recent background jobs (saves, verifies, restores), newest first: verb, state, archive, destination, bytes, timestamps, and the recorded failure reason on failed/interrupted rows. |
| none | One-call inventory + capacity roll-up: counts, total archived bytes, copies by status, destinations by kind, tape capacity vs. use. |
|
| Re-reads the copy off its medium and compares it to what was recorded. Default |
verify_copy is the differentiator: it is proof from the actual medium, not a
stored flag. Identify the copy by archive_id + destination_id.
Disk and NAS. The copy is re-read and re-hashed. When a copy's file is not found, connector 2.0.0 marks it Missing only if its location answers, and otherwise changes nothing; 1.3.2 marks it Missing whenever its file is not found, including when its disk is unplugged or its share is off.
Tape. It re-reads a tape copy stored as a single .tar file, such as one adopted by the
hiberden scan-tapecommand. Every tape copy the Hiberden desktop writes is stored in parts, whichverify_copycannot read: 2.0.0 refuses those copies and changes nothing, and 1.3.2 can mark them Missing, so do not run 1.3.2'sverify_copyon a tape copy the desktop wrote. On tape, 2.0.0 marks a copy Verified only from a cold read, one where it mounted the cartridge itself (cold: trueunmounts and remounts first). With a different cartridge in the drive, 2.0.0 changes nothing, and it names the cartridge to load when the catalog records which one holds the copy.Cloud (S3). Read-back verify runs in the Hiberden desktop app, not here. For a cloud copy the tool returns a message that the copy was not checked here, so it has neither passed nor failed. That is a not-attempted result, not a verification failure.
Adding archives (writing bytes), save, and restore are not exposed here. Catalog, destination, and policy configuration tools exist behind the permission tier described above; at the default read-only tier they are neither advertised nor accepted.
Catalog selection
The server reads the single catalog shared by the desktop app, the CLI, and this server. Path resolution:
The
HIBERDEN_DBenvironment variable, if set.Otherwise
%LOCALAPPDATA%\Hiberden\catalog.dbon Windows,~/Library/Application Support/Hiberden/catalog.dbon macOS (connector 2.0.0, inside the Hiberden app), or~/.hiberden/catalog.dbon Linux.
The catalog is opened fresh per tool call (sub-millisecond) rather than held for
the process lifetime. With WAL mode and a busy timeout, the desktop app and this
server can run against the same catalog.db at the same time without a
multi-process locking hazard.
All diagnostics go to stderr. stdout carries the JSON-RPC channel; anything written to stdout that is not a JSON-RPC message corrupts the stream.
Linux headless kit
Linux binaries are published on the releases page and at
cdn.hiberden.app. They are built on Ubuntu 22.04, so they run on Ubuntu
22.04+, Debian 12+, and equivalents; verified on debian:bookworm-slim and
ubuntu:22.04.
curl -fsSLO https://cdn.hiberden.app/downloads/hiberden-cli-linux-x86_64
curl -fsSLO https://cdn.hiberden.app/downloads/hiberden-cli-linux-x86_64.sha256
sha256sum -c hiberden-cli-linux-x86_64.sha256 # verify before running it
chmod +x hiberden-cli-linux-x86_64
./hiberden-cli-linux-x86_64 --versionhiberden-mcp-linux-x86_64 is connector 1.3.2, the same build as the Windows
bundle on the releases page. The
CLI (hiberden) catalogs and archives with no display server and no network;
the whole point of the kit is that an air-gapped or headless machine can run
it.
Linux reached general availability on 2026-08-11 at version 1.3.1, alongside Windows. What that does and does not cover, precisely:
Writing a new archive needs a license. Reading your data back never does, license or not. Kits published before GA are ungated and stay that way; entitlement applies from the first post-GA kit onward. Nothing you archive now becomes unreadable later: the format and catalog are identical across platforms.
The desktop app runs on Linux too, as a signed
.deband.AppImagefrom hiberden.app/linux. The macOS build for Apple Silicon is at hiberden.app/download.Tape on Linux is unproven on hardware. The backend targets the open-source LTFS implementation and has never run against a drive on any platform. Use
HIBERDEN_TAPE_FAKE=1to exercise the flows without one.Archives are signed by a per-install Ed25519 identity stored under
~/.hiberden/keys/(owner-only). Like the OS keyrings on other platforms, it keeps the key from other users on the machine; it is not hardware-backed.
Setup
The binary self-installs into known MCP clients:
hiberden-mcp install # auto-detect Claude Desktop / Cursor / Windsurf and write their config
hiberden-mcp install --print # print a paste-ready snippet instead of touching anything
hiberden-mcp uninstall # remove the hiberden entry from detected clients
hiberden-mcp help # show usageinstall writes (or updates) an mcpServers.hiberden entry pointing at this
executable. It is zero-config for the catalog: the entry only pins HIBERDEN_DB
when you already have it set in your environment, otherwise it relies on the
default path for this computer (see Catalog selection above).
Manual configuration
To wire it up by hand, add this to your client's config (Claude Desktop:
claude_desktop_config.json; Claude Code: .mcp.json; Cursor / Windsurf use the
same mcpServers shape). command is the path to the executable. env is
optional: include HIBERDEN_DB only if your catalog lives somewhere other than
the default path.
{
"mcpServers": {
"hiberden": {
"command": "C:/path/to/hiberden-mcp.exe",
"env": { "HIBERDEN_DB": "C:/path/to/catalog.db" }
}
}
}Smoke test (no client needed)
This pipes three requests (initialize, list tools, read coverage) straight into the binary:
printf '%s\n' \
'{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-11-25","capabilities":{}}}' \
'{"jsonrpc":"2.0","id":2,"method":"tools/list"}' \
'{"jsonrpc":"2.0","id":3,"method":"tools/call","params":{"name":"coverage_status","arguments":{}}}' \
| HIBERDEN_DB=path/to/catalog.db hiberden-mcpContainer image
The image on Docker Hub, agaveis/hiberden-mcp, is the same connector binary
in a debian:bookworm-slim container. It carries no catalog: it starts, reports
itself, and advertises the read-only tool surface, but there are no archives to
answer questions about. This is not how you run Hiberden. For real use, install
Hiberden from https://hiberden.app.
The image exists so MCP directories can run their introspection handshake (initialize, then tools/list) against the connector in a Linux sandbox, and so anyone can inspect the advertised tool surface without installing anything.
To point it at a real catalog, mount one and set HIBERDEN_DB:
docker run --rm -i -v /var/lib/hiberden:/cat -e HIBERDEN_DB=/cat/catalog.db agaveis/hiberden-mcpThe connector reads that catalog. At the default tier it writes what a verify records, its audit-log rows and the per-file index for older archives; the write tools unlock only if the catalog's own tier allows them.
Security
Local-only and closed-domain. At the default tier the server reads and verifies; write and delete tools unlock only behind the tier set in the desktop. It makes no network requests of its own and never sends data to Hiberden or any third party.
No API key and no LLM are stored in the binary, so there is nothing to steal there.
verify_copygives ground-truth physical state for a disk or NAS copy: it re-reads and re-hashes the actual medium, so even a manipulated assistant cannot fabricate a "Verified".Tool annotations (
readOnlyHint,destructiveHint, and so on) are hints, not guarantees. Prompt injection is an unsolved industry-wide problem. The architecture here is conservative by design; that is not a claim of immunity.
Privacy
The server runs entirely on your own machine, holds no account or API key, and makes no network requests of its own: it never sends your catalog or your files to Hiberden or any third party. What it writes at the default tier is listed under "Read + verify by default" above. Full details (what the server reads, what it never does, the role of the separate AI client, and credential handling) are in PRIVACY.md, hosted at https://hiberden.app/mcp/privacy.
Tape caveat
Tape support has not been validated on physical tape hardware in this implementation. The design never speaks SCSI directly and treats tape as a filesystem via LTFS tooling. That is an architectural property, not a tested hardware matrix. Do not read these notes as a guarantee for any specific drive or generation.
For testing without a drive, the tape backend can run against a fake backend:
set HIBERDEN_TAPE_FAKE=1 (and optionally HIBERDEN_TAPE_FAKE_ROOT=<dir> to
point at a directory standing in for the mounted volume).
Website: https://hiberden.app
Listing and source: https://github.com/Agaveis/hiberden-mcp
Built and maintained by AgaveIS, Scottsdale, Arizona.
Available Tools
14 toolsarchive_detailARead-only
Full detail for one archive: its project, size, SHA-256, legacy MD5 (if imported), coverage, and where it is stored, with each Destination's kind, status, path, and verification timestamps.
Inputs: archive_id (required).
catalog_statsARead-only
One-call inventory and capacity roll-up for the whole library: project/archive/tape/job counts, total archived bytes, stored copies by status, destinations by kind, and tape capacity vs. use. The fast starting point for utilization reports and health summaries; for the 3-2-1 protection view use coverage_status.
Inputs: no named parameters.
coverage_statusARead-only
The headline 3-2-1 coverage roll-up across the whole library: the total archive count and how many archives are unconfigured, unprotected, in progress, at risk, or fully covered.
Inputs: no named parameters.
find_fileARead-only
Find a file by name or path fragment across EVERY archive at once, and report which archive it is in and every Destination it is stored in (local folder, NAS, tape, cloud) with each Destination's status. Answers "is saved, and where?". Case-insensitive substring match on the file path; pass a filename or a path fragment.
Inputs: query (required), limit.
list_archive_filesARead-only
The file manifest of one archive from the catalog index: each file's relative path, size, and SHA-256 (sha256 is null for entries indexed before per-file capture). Paginated for very large archives. Combine with archive_detail to produce client-ready deliverable lists and per-file checksum manifests. Answers come from the catalog index, not by re-reading the archive; a one-time index backfill may read a LOCAL copy of an archive that pre-dates the index. If the archive has data but no index could be built (e.g. a legacy tape-only import), the response says indexed: false with a note — that is "manifest unavailable", NEVER "the archive is empty".
Inputs: archive_id (required), limit, offset.
list_archivesARead-only
List the archives (the leaves actually written to media). Each archive's project, size, SHA-256, 3-2-1 coverage, and every Destination it is stored at (Destination + kind + status) are included. Optionally narrow with project_id (one container), collection_id (one Collection within a project), and/or name (case-insensitive substring, e.g. "johnson" to find the Johnson family album).
Inputs: name, project_id, collection_id.
list_collectionsARead-only
List the Collections inside one project. Collections are the middle tier of the Project > Collection > Archive model: catalog-only organizational nodes (never written to media). Each entry has the Collection's id, name, parent_collection_id (null at the top level), and the count of archives filed directly in it. Pass a Collection's id to list_archives (collection_id) to see its contents.
Inputs: project_id (required).
list_destinationsARead-only
Every configured Destination: id, slot, kind (tape, localfs, nas, cloud), display name, enabled and retired flags. Retired and disabled Destinations are included; the list is unfiltered. The stored config blob (path or credential reference) is not returned. Source of the destination_id taken by verify_copy and by the policy and destination write tools.
Inputs: no named parameters.
list_jobsARead-only
Recent background jobs (saves, verifies, restores), newest first: verb, state, archive, destination, bytes done/total, timestamps, and — for failed or interrupted jobs — the recorded failure reason. Answers "did last night's backup finish?" and "why did the upload fail?" without opening the app.
Inputs: limit.
list_projectsARead-only
List the top-level projects (containers). Each project owns a protection policy and holds archives; this returns the project's name, policy, archive count, and a roll-up of how many of its archives sit in each coverage state. For the individual archives, use list_archives.
Inputs: no named parameters.
list_tapesARead-only
List known tapes with serial, volume label, uuid, capacity, used bytes, last verified time, and how many archives are stored on each.
Inputs: no named parameters.
recent_activityARead-only
Recent storage activity across the library, newest first: for each event, the archive, its Destination, status, and when it was written and last verified. This is copy-level storage history; for background job runs and recorded failure reasons use list_jobs.
Inputs: limit.
tape_detailARead-only
Everything about one tape, identified by its serial (the barcode operators read off the cartridge): the tape's label, capacity, used bytes, last verified time, the number of archives stored on it, and the list of archives that are stored on this cartridge (id, name, project_id, size). Answers "what is on tape HIB001L9?".
Inputs: serial (required).
verify_copyA
Re-read an archive from one of its destinations and compare it to what was recorded. Default mode "full": re-hash SHA-256 plus the recorded BLAKE3 and the stored signature when present, then mark the copy Verified on a match (Failed on a mismatch, Missing if the file is gone) — the only pass that can promote, and the citable one. Optional mode "fast": a BLAKE3-only re-read that refreshes an already-Verified copy or exposes a mismatch but NEVER promotes (a matching fast pass on an unverified copy returns passed_unpromoted; an archive with no recorded fast hash falls back to a full pass with the reason surfaced). Results and audit rows name the algorithm that ran. Identify which stored archive to check by archive_id + destination_id. Works for disk and NAS destinations, and tape destinations (the cartridge is mounted and read back); cloud read-back runs in the desktop app, not here. NOTE: this is the only always-on tool that writes, and it only ever does so after a genuine read-back.
Inputs: archive_id (required), destination_id (required), mode.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 14 tools
Each tool targets a distinct resource and granularity: list_* for enumeration, *_detail for single-resource lookup, find_file/list_archive_files for file-level search versus manifest, and the two roll-ups (coverage_status vs catalog_stats) explicitly cross-reference each other. There is no realistic query where an agent would be torn between two tools.
The dominant patterns are clear: list_<plural> for enumeration and <noun>_detail for single-item views. The remaining names (coverage_status, catalog_stats, recent_activity, find_file, verify_copy) are descriptive and snake_case, but mix noun-noun and verb-noun forms, so the convention is mostly consistent rather than fully uniform.
14 tools map cleanly onto the archive library's resource types—projects, collections, archives, files, destinations, tapes, jobs—plus cross-cutting views for coverage, activity, stats, and verification. Each tool has a clear purpose and none feels redundant or like filler.
The read/verify surface is strong: every major resource has a listing, most have detail views, file-level search and manifests exist, and job/tape/coverage states are covered. The notable gap is lifecycle management—no restore, policy editing, destination creation, or backup triggers—so agents can inspect and verify but cannot act beyond verification.
Maintenance
Related MCP Connectors
Verifies Bernstein run receipts and hash chains; lists the shipped presets and adapters. Read-only.
Read contacts, projects, documents and log entries, and run read-only queries in HERO Software.
Read-only access to your Brickway LEGO and alt-brick collection: sets, builds, figures, catalog.
Read-only game, setup, place, evidence and travel decision tools with explicit provenance.
Related MCP Servers
- AlicenseAqualityDmaintenanceLocal-first, read-only Codex session aggregator that indexes multiple CODEX_HOME directories into a SQLite database and provides MCP tools for cross-project, archival, and sub-agent history queries.53MIT
- FlicenseNot gradedqualityCmaintenanceEnables read-only access to Kilo Code and Opencode conversation history stored in a local SQLite database, allowing users to list projects and sessions, read messages, and perform full-text keyword searches across all messages.-
- AlicenseNot gradedqualityBmaintenanceProvides read-only search and context-pack creation over a local source library, letting AI assistants retrieve relevant excerpts and audit cited quotations.20MIT
- AlicenseAqualityCmaintenanceEnables local-first search and analysis of Boxes home inventory exports and images, with tools for inventory queries, documentation audits, and signed webhook verification.7Apache 2.0