THINKINGMEMORY · OPEN SOURCE

The memory database
agents recall from

Point your agent at one endpoint. It stores experience and gets back the right context, hybrid-retrieved, ranked, and packed to a token budget, improving as the agent runs. Not a vector store. Not an SDK. A database whose query primitive is recall.

1
recall primitive
68%
smaller context*
Postgres
pgvector substrate
Apache 2.0
open source
memory.thinkingdbx.com / recall
The database

One endpoint between your agents and their memory

Agents remember experience on one side and get packed context back on the other. In between, a database that retrieves, reranks, packs, and curates itself.

your agent ThinkingMemory /v1 · MCP retrieval · rerank Postgres · pgvector POST /v1/remember {text} 201 · stored, embedded server-side POST /v1/recall {intent, budget} fan out: vector · keyword · recency · graph ANN + FTS + graph queries candidate rows candidates[k], fused rerank (cross-encoder) · pack to budget · cite {context [1][2], tokens_saved: 1840} loop [background lifecycle workers] reinforce recalled · decay stale consolidate · resolve contradictions
Agents · remember in
support-bot
coding agent
any MCP client
REST / Python / TS
>_ThinkingMemory
retrievevector, keyword, recency, graph, fused
rerankcross-encoder for precision
packto your token budget, with citations
curatedecay, consolidation, contradictions
Postgres + pgvector · bitemporal · per-tenant RLS
Recall · context out
Ranked, cited context
Packed to token budget
Provenance & audit trail
How recall works

Intent in, the right context out

One call does it all. Send an intent and a token budget; get back a ranked, deduped, cited context window, fused across vector, keyword, recency, and graph retrieval. You never touch a vector. Embeddings are generated server-side by a local model, so there is no API key and no per-call cost.

  recall
# intent in, packed and cited context out
$ curl -X POST $TM/v1/recall -d '{
    "agent_id": "a1",
    "intent": "what is the API rate limit?",
    "token_budget": 2000 }'

{
  "context": "[1] API rate limit is 1000 rpm per tenant.",
  "items": [{ "id": 42, "mtype": "semantic",
              "why": ["vector","keyword","rerank"] }],
  "tokens_used": 16,
  "tokens_saved_vs_dump": 1840
}
What makes it different

A database, not a vector store

Generic Postgres plus pgvector is bad at exactly what agents need. The value lives in four primitives a stitched-together setup cannot easily match.

recall

The query primitive

Send an intent, get the most useful context window, fused across retrievers, reranked, and packed to your budget with citations.

  • Vector, keyword, recency, and graph
  • Cross-encoder rerank for precision
  • Cited context, packed to a token budget
lifecycle

It gets better over time

Background workers keep memory healthy. Each recall boosts what it surfaced; time decays the rest. Useful memories rise, stale ones sink.

  • Salience decay and reinforcement
  • Consolidation and extraction
  • Contradiction resolution and forgetting
bitemporal

Auditable and multi-tenant

Every memory records when it was true and when you learned it. Recall the past, prove how the agent knows things, isolate tenants at the database.

  • Belief over time: recall(as_of=...)
  • Recursive provenance trace and audit log
  • Per-tenant Postgres RLS and partitioning
mcp-native

Framework-agnostic

Ships an MCP server so any MCP-capable agent uses memory as native tools with zero glue, plus a plain REST API for everything else.

  • MCP tools: remember, recall, link, forget
  • REST /v1 plus Python and TS clients
  • Any framework, any LLM
Quickstart

Two calls: remember and recall

You send text, not vectors. The server embeds locally, retrieves, reranks, and packs the context.

  quickstart.sh
export TM=https://memory.thinkingdbx.com
export TM_API_KEY=tm_live_...        # create one in the console, API keys

# store a memory
$ curl -X POST $TM/v1/remember \
  -H "X-API-Key: $TM_API_KEY" -H "Content-Type: application/json" \
  -d '{"agent_id":"support-bot","content":{"text":"Customer ACME prefers email over phone."},"mtype":"semantic"}'

# recall, intent in, packed and cited context out
$ curl -X POST $TM/v1/recall \
  -H "X-API-Key: $TM_API_KEY" -H "Content-Type: application/json" \
  -d '{"agent_id":"support-bot","intent":"How should I contact ACME?","token_budget":512}'
  mcp.json
// register the MCP server with any MCP client
{ "mcpServers": { "thinkingmemory": {
  "command": "npx", "args": ["-y", "@thinkingmemory/mcp"],
  "env": { "TM_API_KEY": "tm_live_...", "TM_BASE_URL": "https://memory.thinkingdbx.com" }
} } }
Managed cloud

Managed recall for your agents

Prefer not to run it yourself? Point your agent at memory.thinkingdbx.com. Lifecycle, bitemporal audit, and per-tenant isolation, fully managed.

Recall, not search

Intent in, cited and token-budgeted context out. No vector wrangling, no reranking glue, no prompt stuffing.

Memory that curates itself

Decay, consolidation, and contradiction resolution run continuously. Useful memories rise, stale ones fade.

Multi-tenant from day one

Row-level isolation, audit trail, and bitemporal history. The things you would otherwise build yourself.

Apache-2.0 open corePostgres + pgvectorMCP-native server-side embeddingscross-encoder rerankbitemporal auditper-tenant RLS
Design partner program

Run ThinkingMemory on your real agents. Help shape what we build.

We are onboarding a small group of design partners: teams who use ThinkingMemory on production agents, meet with the founders monthly, and get lifetime free access to ThinkingMemory Cloud. Limited seats.

Get started

Point your agent at recall

Clone the repo, run init_db, and your agent has a memory database. Open source, Apache-2.0, on Postgres with local embeddings.

Prefer managed? ThinkingMemory Cloud is live. Sign up, get an API key, and your agent has memory in minutes.

  ~/thinkingmemory
$ git clone github.com/mplusm/thinkingmemory
$ cd thinkingmemory && ./init_db.sh
   postgres + pgvector ready
   local embedder loaded

$ tm serve
   recall endpoint live on :8080
  # remember experience, recall the right context

* Measured on the bundled recall benchmark (eval/run_eval.py): packed context vs dumping the full corpus, with 100% recall@5 of the gold memory. Your numbers will vary with corpus size and token budget.