Evidence-grounded agent memory with mandatory provenance, on local SQLite or Cloudflare D1
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.
Agent memory that runs with no API key, no LLM, and no embedding provider.
Every memory keeps its source, who may read it, and the evidence that contradicts it.
Website Β· Documentation Β· npm Β· Changelog
Built with C.A.D.I.S Agent.
No account, no key, no configuration β but the CLI runs on Bun 1.2 or newer, and refuses to start without it:
With no environment set, that opens or creates ~/.titen/memory.db, writes a
real organization, workspace, project and owner into it, and serves MCP over
stdio in-process β no HTTP hop, no key to paste, and no outbound network
call. Retrieval is FTS5, so nothing needs an embedding provider or a model.
curl -fsSL https://titen.dev/install.sh | bash does the same in one step: it
adds Bun when it is missing, then installs the titen command.
Point an agent at it:
Already using @modelcontextprotocol/server-memory? Titen serves the same nine
tool names with the same schemas, and answers memory://knowledge-graph too, so
a client does not notice the swap. On the first local-mode start it imports your
existing graph. Pass the old store's path, because that server writes beside
its own install rather than in the directory you launch it from:
Without it Titen still checks the working directory, its node_modules, and
npm's npx cache β and says on stderr when it found nothing, rather than
starting empty in silence. Point titen at a served instance later by setting
TITEN_MCP_URL and TITEN_API_KEY β full setup below.
Audit what any agent memory store has accumulated, including one Titen does not own:
package.json declares none. What it needs is
Bun and one SQLite file; everything else is the standard library and Web APIs.@modelcontextprotocol/server-memory. Eighteen tools β the
nine titen_* plus the nine reference-server names β with search_nodes
routed through real retrieval rather than a substring scan, and your existing
memory.json imported on first run.titen audit reads a reference-server
memory.json, a Mem0 export, or a Titen store, and reports duplicates,
recall loops, secret patterns and staleness with per-item evidence you can
check by hand.@modelcontextprotocol/server-memory?That server had 106,662 downloads in the week of 31 July 2026 β it is the
default memory for a large part of the MCP ecosystem, and it is deliberately
minimal. Reading its published 2026.7.4 tarball: the store is one
newline-delimited JSON file rewritten in full on every mutation, and a search is
String.includes on a lowercased needle. No tokenizer, no stemming, no ranking
β results arrive in insertion order β no scoping or authorization, and no
eviction, so the file grows without bound and every call is O(n) in the whole
graph. Ask it "which service handles refunds" and it matches nothing unless
that exact sentence is stored.
Titen answers the same nine tool names, with the same argument schemas, and the
same memory://knowledge-graph resource, so a client does not notice the swap.
What changes is underneath: search_nodes runs the real retrieval path β FTS5
with stemming, ranked best-first, and the vector index when one is configured β
and every read is scoped to a subject and filtered by authorization before it is
retrieved, not after.
@modelcontextprotocol/server-memory | Titen | |
|---|---|---|
| Search | String.includes, insertion order | FTS5 + stemming, ranked, optional vectors |
| Scope | the whole graph, always | org / subject / project / workspace, enforced pre-retrieval |
| Contradictions | overwritten | kept, linked to evidence, flagged |
| Growth | full-file rewrite, unbounded | SQLite, retention and eviction policies |
| Provider | none | none β no key, no LLM, no embedding provider |
Import is on first start; the switch is above.
Every published memory benchmark measures retrieval on a corpus somebody curated. The failure people actually report is on the write side: a store fills with copies of its own output. The one public audit of a production store found 97.8% of 10,134 entries were junk after 32 days. Nothing measures that.
Five counts β exact duplicate, near duplicate, recall loop, secret pattern, stale β each with per-item evidence you can check by hand. No network, no model, no upload: it opens the path read-only and prints a report; sharing it is your decision. A store that lacks the signal a metric needs is reported as not measurable from this export, never as a failure. There is no composite score and there is no leaderboard.
The detection rules are published in audit rules. Titen's own numbers β including 17.9% duplicates and 96.7% stale in its own store, and a compatibility-surface defect the tool found in Titen itself β are in the self-report.
Titen's default memory model is caller-authored claims. consolidate()
takes statements you wrote, each explicitly linked to a source observation you
already recorded. Titen does not read a transcript and decide on its own what is
worth remembering.
That is deliberate. Every claim has an author, a source, and a scope, which is what makes provenance, permission, conflict, and audit answerable at all. It is also a real cost, and it is the honest comparison point: systems that derive memory from raw dialogue do work Titen hands back to you.
Model-assisted derivation and reflection are implemented and ship in the package, but they are activation-gated and no candidate model has passed the gate β the best result on record is 65.56% against a 90% contract threshold. Treat them as unfinished work with a public gate, not as a feature you can simply switch on. The roadmap carries the current evidence.
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/titen-memory)<a href="https://allmcps.com/mcp/titen-memory"><img src="https://allmcps.com/api/badge/titen-memory?style=directory" alt="Titen Memory on AllMCPs" /></a>