inspeximus is a zero-dependency Python memory library and MCP server that deterministically applies fact corrections so old, superseded values never resurface in agent memory.
Copy the AI prompt to install this server into Claude Code, Cursor, or another agent ā or use 1-click editor setup below.
We ran the install command below but it didn't respond within our test window ā this can mean a slow first-time install rather than a real problem.
uvx inspeximusNo response to initialize.
This is an experimental automated check and can have false negatives ā missing environment variables, a slow cold install, etc. It doesnāt necessarily mean somethingās wrong. Last checked 7d ago.
š” Paste the JSON block into your client's configuration file under mcpServers, then restart the application.
Inspect callable tools, capabilities, and parameters exposed to AI agents by Mnemo.
Tamper-evident long-term memory for AI agents. Correct a fact once and the old value stays retired; erase a person and prove it; show an auditor what the agent knew when it acted. One zero-dependency Python file, plus an MCP server.
Quickstart Ā· Docs Ā· vs mem0 and Graphiti Ā· Migrate from mem0 Ā· EU AI Act and GDPR evidence Ā· Claude Code, one line Ā· Transparency log Ā· PyPI
| What you get | |
|---|---|
| A correction that holds | remember(key=...) retires the old value by key. Restating the stale text does not bring it back; revert() does, as a recorded decision. |
| Erasure you can prove | forget_subject() removes every record about a person, leaves a signed content-free tombstone, and erasure_certificate() lets a third party check it with no key. |
| What the agent knew when it acted | A signed, hash-chained action ledger; matches() binds a retained transcript to its entry. |
| When it happened | RFC 3161 timestamps, and a check whether the authority was on the EU trusted list on that date. |
| Evidence an auditor can read | inspeximus compliance labels the evidence by article; export as a draft-sharif-agent-audit-trail-04 file. |
| Any agent, one line | MCP server for Claude Code, Cursor, Windsurf, Codex and Cline; adapters for LangChain, LangGraph, ADK and more. |
Use it when the agent runs for days and the facts it holds will change under it, and when somebody can later ask what it knew and what it erased. That is the whole design brief.
| You have | Reach for |
|---|---|
| An agent that keeps confidently repeating a value you already corrected | remember(key=...): the correction wins, the restatement does not bring the old value back, revert() is a recorded decision |
| A right-to-erasure request, or an auditor asking what the agent knew when it acted | forget_subject() with erasure_certificate(); the signed action ledger with matches() |
| Claude Code, Cursor, Windsurf, Codex or Cline, and no memory between sessions | the MCP server, one config line |
| A framework (LangChain, LangGraph, ADK, Hermes, Haystack) and no way to prove a memory write happened | the adapters and the receipt chain |
agno is the one that is not ours. It ships an official integration example in its own
cookbook, cookbook/11_memory/integrations/inspeximus_integration.py,
merged in agno#10146 on 2026-09-20, alongside
mem0, zep, memori and dakera. Their own README describes it as "inspeximus for
corrections that stay corrected." We did not write that file's home and we do not maintain
it, which is exactly why it is worth listing: it is one integration a reader can check
without taking our word for anything. The same holds for agmi,
an agent-memory integrity scorecard whose maintainer merged our three-row adapter,
agmi/adapters/inspeximus_rows.py,
in agmi#1 after reproducing it himself.
Not the right tool when you want a hosted service with a dashboard, a knowledge graph over documents, or the highest score on a conversational-recall benchmark. mem0, Zep and cognee lead there, and the comparison page says where each of us wins and where we do not.
We measured the one thing the others do not publish: how often a corrected fact comes back.
Each system was run on its own native configuration, same task, same 30 trials:
| system | keeps the correction | resurrects the old value |
|---|---|---|
| inspeximus | 100% | 0% |
| Graphiti 0.x (Neo4j + OpenAI) | 86.7% | 13.3%Ā Ā 95% CI [3.3, 26.7] |
| mem0 2.0.11 (OpenAI native) | 53.3% | 46.7%Ā Ā 95% CI [30.0, 63.3] |
| inspeximus, guard disabled | 0% | ā the control: this is what the guard is doing |
n = 30 per system. mem0 measured at 2.0.11 (2026-07); mem0 is now on 2.0.18 and we have not
re-run it ā the version is stamped rather than the claim being restated as current. Full method,
raw arrays and the re-runnable harness:
RAMR Ā· echo_resistance_backends_result.json
Read the Graphiti row correctly ā its echo defense did not fail. Our own raw output records
echo_attributable_flips: 0out of 26 corrections that were extracted correctly before the echo ran. Graphiti's bi-temporal invalidation held every one of them. The 13.3% above is four pre-echo extraction misses ā the correction never made it into the graph ā which is a different failure from the one this table is about. Stated as the mechanism rather than the headline: on echo-attributable resurrection, Graphiti scores 0%, the same as us, by keeping the supersession link at write time. That is the real finding here: what separates these systems is whether the link is recorded, not who recorded it.
Measured 2026-08-25 against Hindsight 0.9.2 (vectorize-io, 21k stars) and mem0, each in its own native config, n=20. These two need no judge at all ā they read the raw recall payload, so nothing depends on a model reading well:
| inspeximus 2.21.0 | Hindsight 0.9.2 | mem0 | |
|---|---|---|---|
| after a correction, recall returns the new value and not the old one | 20 / 20 | 0 / 20 | 1 / 20 |
| identical writes twice ā same stored state? | byte-identical | 20 / 20 differ | ā |
| model calls to do it | 0 | 60 | 60 |
Both competitors return the corrected value and the retired one, and leave the choice to the caller. That is a defensible design ā a bitemporal store handing back old and new with validity markers is being honest ā but it is a different promise from ours, and the difference is whose job disambiguation is.
The first row is free to verify. No key, no server, no network:
It finishes in milliseconds and prints store-resolved=1.00 (resolved=20 both=0 stale=0 neither=0, n=20).
Adding ,mem0 or ,hindsight reproduces their columns and costs their own extractor calls.
Method, caveats and the cells where we do not win.
The bottom row is the point. Turn our guard off and we score zero ā so the number is the mechanism, not the benchmark being kind to us.
Factual signals from GitHub, npm, and our automated checks ā not a rating.
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/mnemo-2)<a href="https://allmcps.com/mcp/mnemo-2"><img src="https://allmcps.com/api/badge/mnemo-2?style=directory" alt="Mnemo on AllMCPs" /></a>