Auditable memory for AI agents: provable deletion, tamper-evident audit, time-travel recall.
Copy the AI prompt to install this server into Claude Code, Cursor, or another agent β or use 1-click editor setup below.
We haven't yet run this listing's install command through our automated sandbox check. This isn't a red flag β we're steadily working through the catalog.
π‘ Paste the JSON block into your client's configuration file under mcpServers, then restart the application.
The auditable memory layer for AI agents. Give your agent long-term memory β like any memory layer β except every fact carries a receipt (where it came from, when), it runs on plain Postgres, the audit trail is tamper-evident, and any user's data can be provably deleted with a signed certificate.
No database, no API key, no model download required to run that β the core engine has zero dependencies.
Hosted memory is a black box: you can't see where a "memory" came from, you can't cleanly delete one user's data, and you can't prove the history wasn't altered. For a bank, hospital, or insurer β and under GDPR / the EU AI Act β that's a dealbreaker. Attestari is the neutral, self-hostable layer that fixes exactly that.
| Attestari | Typical memory layer | |
|---|---|---|
| Runs on plain Postgres (no graph DB) | β | β (needs Neo4j / a vector service) |
| Provenance on every fact | β | partial |
| Bi-temporal ("what did it know on date D?") | β | β |
| Provable deletion + certificate (GDPR) | β | β |
| Tamper-evident audit trail (hash chain) | β | β |
| Works across model vendors | β | usually locked to one |
The last two rows are the moat. Deletion you can prove: each user's data is
encrypted with their own key; forget() destroys the key, so the content is
unrecoverable β while an immutable log and a signed certificate remain as proof.
A history you can verify: every event is hash-linked, so verify_audit()
catches any edit, insert, or delete β and the proof survives deletion.
as_of any past instant; corrections
supersede old facts without erasing them, so history is always reconstructable.forget(subject_id) crypto-shreds a user's data and
returns a signed DeletionCertificate; content backups and replicas are
covered (key storage needs its own backup policy β see
the threat model).verify_audit() detects
any edit/insert/delete, and the proof survives crypto-shred.conflicts(), not silently dropped.You'll see facts change over time, a bi-temporal query answer differently "as of"
different dates, a provenance trace back to the source, and a forget() that
issues a certificate. No install, no API key, no database.
One facade, Memory, covers the whole surface:
| Method | Returns | What it does |
|---|---|---|
add(text, *, subject_id, valid_from=β¦, source_ref=β¦) | list[str] | Ingest a message; extract, dedup, and supersede facts. |
search(query, *, subject_id, as_of=β¦, limit=5) | list[SearchResult] | Hybrid retrieval with an optional time filter. |
answer(query, **kwargs) | str | None | The single top object for a query. |
timeline(*, subject_id) | list[Edge] | Every fact for a subject, live and superseded. |
get_provenance(fact_id) | Provenance | None | Trace a fact to its source episode + span. |
conflicts(*, subject_id=None) | list[dict] | Conflicts resolved by predicate cardinality. |
resolve_entities(names=None, *, auto=True) | ResolutionResult | Merge duplicate entities (reversible). |
forget(subject_id) | DeletionCertificate | Crypto-shred a subject; return proof. |
verify_audit(deep=False) | AuditReport | Verify the tamper-evident hash chain; deep=True also catches silent edits to event content. |
Three storage tiers, one engine β every guarantee (audit chain, crypto-shred, deep verification, time travel) holds on all three:
| Tier | Storage | For | Setup |
|---|---|---|---|
Memory() | in-memory | tests, demos, determinism | none |
Memory.local() | one SQLite file (~/.attestari/attestari.db) | a personal agent, MCP, prototypes β durable, single-process | none (stdlib) |
Memory.postgres() | Postgres + pgvector | production: concurrent access, indexed hybrid search | one container |
Durable with zero infrastructure (survives restarts; nothing to install or run):
Durable, on Postgres + pgvector (one container, no graph DB):
Already have a Postgres (managed or local)? The schema ships inside the pip package β no clone needed:
As a REST API + visual console:
As an MCP server (any agent β Claude, frameworks β can use it) β exposes
add_memory / search_memory / get_provenance / forget_subject over stdio.
Register it in your MCP client's config (e.g. Claude Desktop's
claude_desktop_config.json); the client launches the process for you:
No reviews yet β be the first to share how this listing worked for you.
Showcase your server listing on GitHub or your project documentation. Embed this dynamic SVG badge to highlight official listing status and live engagement.
[](https://allmcps.com/mcp/attestari)<a href="https://allmcps.com/mcp/attestari"><img src="https://allmcps.com/api/badge/attestari?style=directory" alt="Attestari on AllMCPs" /></a>