Self-hosted memory
for AI agents.
Dakera stores what your agents learn and recalls it by meaning, keyword or relationship. One binary on your own infrastructure, with no external APIs.
No account required · Self-hosting is free.
- 88.2%LoCoMo
- ~1 msvector search p95 · 50k vectors
- 14core MCP tools
- 1binary to deploy
Your agents forget
everything they learn.
Without memory, every session starts from zero. Agents lose what they learned in earlier conversations, and you pay to re-teach the same context again and again.
- Sessions are isolated silos
- Knowledge evaporates at scale
- Context stuffing is a dead end
- Every session builds on the last
- Knowledge compounds across agents
- Relevant memories, not a bigger prompt
Illustrative numbers.
Recall that feels like reasoning.
Each fact an agent stores becomes a memory linked to related people, events and decisions. A recall combines vector, full-text and knowledge-graph signals, so an answer can be found several hops away from the question.
See what your agents
remember.
The Dakera Dashboard shows the health of your memory layer, lets you browse and recall memories, and maps what your agents know. Take a look before you install.






One binary.
Everything included.
A typical memory stack combines a vector store, an embedding service, a graph database and a session store. Dakera runs embeddings, vector and full-text indexing, reranking, the knowledge graph and session storage in one Rust process. SDKs and an MCP server connect to it.
- Knowledge graph
- Entity extraction, typed edges, traversal
- Dashboard + CLI
- Inspect memories, run queries, monitor agents
- External services
- None required
Multilingual. Multimodal.
Multi-vector.
The new retrieval and media features are opt-in. Deployments on v0.11.108 upgrade in place and can roll back with one command.
lang.colbert-small, a RaBitQ search mode, rerank controls and GET /v1/capabilities.Integrate in minutes.
Native SDKs for Python, TypeScript, Go and Rust, and a REST API for every other language. Claude, Cursor and Windsurf connect through the MCP server with one config block.
from dakera import DakeraClient
client = DakeraClient(base_url="http://localhost:3000", api_key="dk-your-key")
client.store_memory(agent_id="assistant-1", content="User prefers TypeScript")
response = client.recall(agent_id="assistant-1", query="language preference")
print(response.memories[0].content)
import { DakeraClient } from "@dakera-ai/dakera"
const client = new DakeraClient({ baseUrl: "http://localhost:3000", apiKey: "dk-your-key" })
await client.storeMemory("assistant-1", { content: "User prefers TypeScript" })
const response = await client.recall("assistant-1", "language preference")
console.log(response.memories[0].content)
import dakera "github.com/dakera-ai/dakera-go"
client := dakera.NewClientWithOptions(dakera.ClientOptions{BaseURL: "http://localhost:3000", APIKey: "dk-your-key"})
client.StoreMemory(ctx, "assistant-1", dakera.StoreMemoryRequest{Content: "User prefers TypeScript"})
resp, _ := client.Recall(ctx, "assistant-1", dakera.RecallRequest{Query: "language preference"})
fmt.Println(resp.Memories[0].Content)
use dakera_client::{DakeraClient, RecallRequest, StoreMemoryRequest};
let client = DakeraClient::builder("http://localhost:3000").api_key("dk-your-key").build()?;
client.store_memory(StoreMemoryRequest::new("assistant-1", "User prefers TypeScript")).await?;
let response = client.recall(RecallRequest::new("assistant-1", "language preference")).await?;
println!("{}", response.memories[0].content);
# Store a memory
curl -X POST http://localhost:3000/v1/memory/store \
-H "Authorization: Bearer dk-your-key" -H "Content-Type: application/json" \
-d '{"agent_id":"assistant-1","content":"User prefers TypeScript"}'
# Recall
curl -X POST http://localhost:3000/v1/memory/recall \
-H "Authorization: Bearer dk-your-key" -H "Content-Type: application/json" \
-d '{"agent_id":"assistant-1","query":"language preference"}'
// MCP server entry for Claude Desktop, Cursor or Windsurf
{
"mcpServers": {
"dakera": {
"command": "dakera-mcp",
"env": {
"DAKERA_API_URL": "http://localhost:3000",
"DAKERA_API_KEY": "dk-your-key",
"DAKERA_MCP_PROFILE": "core"
}
}
}
}
// 14 core tools by default. Set DAKERA_MCP_PROFILE to admin, power or all for more.
docker run -p 3000:3000 -e DAKERA_ROOT_API_KEY=dk-your-key ghcr.io/dakera-ai/dakera:0.12.2
88.2% Recall@20 on LoCoMo.
No LLM post-processing.
Scored on the LoCoMo dataset: 10 conversations, 1,536 evaluated questions, across temporal, multi-hop, entity and implicit reasoning. No LLM in the retrieval path.
The self-hosted binary is free today.
Cloud is coming.
Dakera Cloud adds managed hosting, an SLA and team monitoring. Join the waitlist to reserve founder pricing before launch.
Common
questions
Answers to the questions we hear most about Dakera. For anything else, open an issue on GitHub.
Open an issueDAKERA_MODEL. No external API calls and no per-call cost.dakera-mcp) exposes 14 core tools (90+ available via profiles). Add it to the Claude Desktop, Cursor or Windsurf configuration and your assistant keeps its memory across sessions. No code changes are required.DAKERA_ROOT_API_KEY and start it on any Linux server or Kubernetes cluster; the image includes its default models, so it is ready in seconds without network access.DAKERA_TELEMETRY=0 or DO_NOT_TRACK=1; see the telemetry page. Dakera Cloud (managed hosting, SLA, team monitoring) will be priced separately; join the waitlist to lock in founder pricing before launch.DAKERA_MCP_PROFILE=power or all to expose more of the 90+ tools. Connect it to Claude Desktop, Cursor or Windsurf with one config block. All memory stays on your infrastructure.