Give any agent a bitemporal, evidence-first long-term memory. donto_recall · donto_search · donto_memorize over the Model Context Protocol.
donto-memory is an agentic long-term memory built on donto, a bitemporal, paraconsistent, evidence-first claim substrate. This MCP server exposes it as native tools so an agent (Codex, Claude Code, or any MCP client) can remember across sessions and recall what matters at query time — deciding for itself when to do so.
npx -y donto-memory-mcp and it's running; no clone, no setup. (A dependency-free single-file Python variant also ships in the repo.)Run it instantly with npx — no clone, no install. Defaults to the hosted endpoint https://memories.apexpots.com; point it at your own donto-memory with DONTO_MEMORY_URL.
codex mcp add donto-memory -- npx -y donto-memory-mcp
claude mcp add donto-memory -- npx -y donto-memory-mcp
{
"mcpServers": {
"donto-memory": {
"command": "npx",
"args": ["-y", "donto-memory-mcp"],
"env": { "DONTO_MEMORY_URL": "http://127.0.0.1:7900" }
}
}
}
npm package donto-memory-mcp (Node, official MCP SDK) · stdio JSON-RPC 2.0 · protocol 2024-11-05. A dependency-free Python single-file variant (donto_mcp.py) is also in the repo.
donto_recallRecall a holder's OWN memories relevant to a query (hybrid FTS + vector, holder-scoped). Use to answer questions about what a user/agent said, did, or prefers over time.
| param | type | notes |
|---|---|---|
holder | string (required) | memory owner IRI, e.g. user:alice, agent:omega-bot |
query | string (required) | natural-language query |
limit | integer | max rows (default 10) |
Returns ranked rows: {subject, predicate, object, valid_from, valid_to}. Prefer the row with the latest valid_from when an attribute has several values.
donto_searchSubstrate-wide full-text search across ALL of donto (not holder-scoped). Use to find any claim/fact in the store.
| param | type | notes |
|---|---|---|
query | string (required) | |
context_prefix | string | optional ctx: scope filter |
limit | integer | default 10 |
donto_memorizeStore a memory for a holder. Extracts claims (extract=true) or stores raw episodic text (extract=false). Set valid_from to the date the fact became true.
| param | type | notes |
|---|---|---|
holder | string (required) | |
text | string (required) | the content to remember |
valid_from | string | ISO date the fact became true (optional) |
extract | boolean | extract claims (default true) vs raw episodic (false) |
Guidance an LLM agent should follow when using these tools (also machine-readable at /agents.md):
user:<id> or agent:<name>) and reuse it for every memorize/recall for that subject. Recall is holder-scoped: you only see that holder's memories.valid_from when the fact has a date.valid_from is latest (it's the current truth); mention the prior value only if asked about history.donto_search if a substrate-wide lookup is appropriate.Each memorize writes claims/episodic chunks anchored to the holder, with valid-time. recall runs holder-scoped lexical + vector retrieval, RRF-fused, with predicate alignment-closure expansion, and returns ranked evidence-anchored rows. The substrate is paraconsistent: contradictory claims are held (not overwritten) and re-ranked by recency/reality — which is why knowledge-updates and honest abstention are first-class.
The protocol handshake and every tool are verified, and an agent (Codex gpt-5.4) was confirmed to call the tools and ground its answer in recalled memories:
# protocol
initialize -> serverInfo {name: donto-memory, version: 0.1.0}
tools/list -> [donto_recall, donto_search, donto_memorize]
tools/call recall -> rows (isError: false)
# agentic (codex exec, gpt-5.4)
"call donto_recall(holder=…, query=…) then answer"
-> codex invoked mcp_tool_call:donto_recall (x2)
-> answer grounded ONLY in recalled memories ✓
donto-memory itself is independently benchmarked on LongMemEval (faithful, no-cheating; codex reader + judge).