# Memory that keeps its word: memory, obligations and proofs in one MCP endpoint

> Source: <https://dev.to/mrpkk/memory-that-keeps-its-word-memory-obligations-and-proofs-in-one-mcp-endpoint-1792>
> Published: 2026-10-23 06:34:55+00:00

Most agent memory systems answer one question: *what did we say before?* That is useful, and it is also where most of them stop.

An agent that remembers a fact but cannot be held to a promise is still an agent you have to babysit. So we built the boring part too.

**Memory.** `soma_remember` stores a fact with tags and importance. `soma_recall` searches by meaning — full-text BM25, word stems and tags merged with reciprocal rank fusion. `soma_reflect` builds an observation and records which facts it came from (`derived_from` edges). Facts live outside the context window, so long memory does not mean a long prompt.

**Obligations.** `soma_send` creates a signed envelope: goal, task, recipient, token budget, mandate, price — all named *before* work starts. `soma_claim` takes it exclusively; `soma_complete` closes it with a signed receipt. A refusal always names the rule that rejected it.

**Proofs.** Every envelope is signed with Ed25519. `soma_verify` checks the signature offline, because the public key travels with the signature. No call back to the node, no trust in our server required.

A memory without a benchmark is a belief. We keep a small honest one: ten bilingual questions (Russian and English), and the expected answer must be in the top 3.

```
tests/test_recall_quality.py — recall@3: 10/10
```

That test caught two real failures: Russian word forms ("подпись" vs "подписан") and English cost questions ranking a tool description above the price. Both are fixed in the ranking, not in the test.

The ideas for multi-channel retrieval, temporal filters and observations came from reading Hindsight (MIT). Credit where it is due: the category moves fast, and the honest thing is to measure against it.

`soma_export` returns every fact and every envelope as one JSON. No lock-in, no "we will delete it for you". If the node is not useful, you take your memory and go.

Source: [https://github.com/mrpkk/soma-protocol](https://github.com/mrpkk/soma-protocol) (MIT). MCP registry: `io.github.mrpkk/soma-protocol`.

If you run agents that must remember, promise and prove — the demo is one click away, and I would rather hear what is missing than what is nice.
