dakera-mcp
OfficialAn MCP server that gives MCP-compatible AI agents persistent, queryable memory against a Dakera instance (14 core tools by default, expandable on demand).
Store memories —
dakera_storewith content, importance (0–1), tags, memory type (episodic/semantic/procedural/working), TTL/expiry, metadata, session, attachment ref, language.Semantic recall —
dakera_recallfor top_k nearest memories, filterable by tags, type, session, time window, min importance, optional KG neighbours one hop away.Constrained search —
dakera_searchfor semantic match narrowed by tag/type pre-filters.Keyword & hybrid search —
dakera_fulltext_search(BM25) anddakera_hybrid_search(BM25 + vector with tunablevector_weight, optional metadata filters).Bulk listing —
dakera_batch_recallto list memories by tags, importance range, time window, type or session without a query (paged bylimit).Deletion —
dakera_forgetby memory IDs or tags;dakera_batch_forgetbulk-deletes by filters.Session grouping —
dakera_session_start/dakera_session_endto group related memories under a shared context with an optional summary.Knowledge graph —
dakera_knowledge_graphbuilds a similarity-based graph from a seed memory (depth, min similarity).Entity extraction —
dakera_extractpulls entities, topics, key phrases and a summary from free-form text, with a per-request provider override.On-demand tool discovery —
dakera_discover_toolssearches the full catalog by keyword or tier (core/power/admin/meta) anddakera_load_toolsfetches just the schemas you need, keeping token cost low; profiles (core14,admin34,power86,all106) are set per-request or viaDAKERA_MCP_PROFILE.
⚡ dakera-mcp
MCP server for Dakera AI. Gives any MCP-compatible AI agent persistent, queryable memory — with smart token management built in.
Works with Claude, Claude Code, and any MCP-compatible framework.
Part of Dakera AI — the memory engine for AI agents.
The Dakera memory engine scores 88.2% Recall@20 on LoCoMo (1,536 evaluated questions · LLM-judged retrieval recall) — benchmark details
Architecture: 14 core tools + on-demand discovery
Starting every agent session with 60+ tool schemas wastes ~15K tokens before you write a single message. dakera-mcp solves this with hybrid tool exposure:
14 tools loaded by default — the 12 highest-frequency memory operations + 2 meta-discovery tools
On-demand expansion — use
dakera_discover_toolsanddakera_load_toolsto fetch additional tool schemas only when you need them
Default tool set (core profile)
Tool | Purpose |
| Store a memory with importance, tags, and type |
| Semantic recall by query text |
| Advanced memory search with tag/type filters |
| Start a session to group related memories |
| End a session with optional summary |
| Bulk filter-based recall (by tags, importance, time) |
| Delete specific memories by ID |
| Combined vector + BM25 search |
| BM25 full-text search |
| Build a knowledge graph from a seed memory |
| Extract entities and structure from free-form text |
| Bulk delete by tags, type, or time range |
| Search the full tool catalog by keyword or tier |
| Load full schemas for specific tools on demand |
Profiles & token cost
Profile | Tools | ~Tokens | How to enable |
core | 14 | ~3,500 | Default — always loaded |
admin | 34 | ~6,850 |
|
power | 86 | ~18,200 |
|
all | 106 | ~21,600 |
|
Token figures are estimates (JSON bytes / 3). The attachment tools below count in power and all,
but only appear while the connected server has the feature on (see Dakera v0.12).
Accessing additional tools
# In your agent: discover what's available
dakera_discover_tools(tier="power")
→ returns names + descriptions, no schemas loaded
# Load schemas for the tools you want
dakera_load_tools(tools=["dakera_consolidate", "dakera_agent_stats"])
→ returns full inputSchema for each toolProfile selection
The profile controls which tools appear in tools/list. Three ways to set it:
1. Per-request (in tools/list params):
{"profile": "power"}2. Environment variable (applies to all requests):
DAKERA_MCP_PROFILE=power3. Default: core (14 tools, ~3,400 tokens)
Related MCP server: Zep MCP Server
Dakera v0.12
dakera-mcp 0.12.3 works against Dakera v0.11.108 and v0.12.0 – v0.12.3 servers. Every tool keeps its name and arguments; the additions are optional arguments that are sent only when you supply them (or that an older server ignores), and tools that call new routes and say so on a server without them. The 0.12.3 additions (separate neighbourhood context, the unknown-field hint, document import) need a v0.12.3 server.
Dakera server | dakera-mcp 0.12.3 |
v0.12.3 | every tool; the recall tools list neighbourhood context apart in |
v0.12.2 | every tool; the recall tools keep the first |
v0.12.0, v0.12.1 | every tool; |
v0.11.108 | as v0.12.0, and the attachment tools, |
older | not tested |
New with Dakera v0.12.2
Tool / argument | Tier | What it does |
| core | the server ends a session idle for 4 h by default; this sets the session's own timeout ( |
| power |
|
| core | storing into an ended session still succeeds; the answer's |
| core | a note when the server had already ended the session for inactivity (the summary passed is then not saved) or when no such session is reachable |
| power | sessions carry |
| power |
|
| power |
|
| power | content cut to 500 characters by default ( |
| power | derived sentence sub-memories are left out of listings by default since v0.12.2; |
What is new
Tool | Tier | Needs | What it does |
| power | v0.12 |
|
| power | any |
|
| power | any | an agent's startup context in one call: its top memories by importance x recency, no query, no embedding |
| admin | v0.12 | progress of the one-time background re-embed after the upgrade |
| admin | v0.12 | the encryption keyring and the background re-seal (never key material) |
| admin | v0.11+ |
|
| power | v0.12 + | files (or text) a memory can reference with |
| power | v0.12 + | WAV speech to text in any language the model knows ( |
| power | v0.12 + | PNG page as a visual memory (use an agent dedicated to images: the visual lane stores page vectors) |
| power | v0.12 + | status of a transcription / index job |
Per-request lang (en, de, fr, es, it, pt, nl; v0.12) is accepted by dakera_store,
dakera_recall, dakera_recall_associated, dakera_search, dakera_memory_update, dakera_extract,
dakera_auto_tag and the attachment jobs;
dakera_store also takes attachment_ref (sha256:<hex> of an attachment in the agent's own namespace,
_dakera_agent_<agent_id>). Neither is sent unless given, so the same calls work on a v0.11.108 server.
Other optional arguments (all servers): ttl_seconds and metadata on dakera_store; tags,
memory_type and session_id filters on dakera_recall; limit on dakera_batch_recall;
limit / offset on dakera_session_list, dakera_session_memories and dakera_agent_sessions
(the server pages at 50); content_preview_chars on the memory listings and include_derived on
dakera_agent_memories / dakera_wake_up (v0.12.2, ignored by older servers); memory_type on dakera_knowledge_deduplicate; dedup_on_store /
dedup_threshold on dakera_memory_policy_set.
Recall: top_k ranked results, context apart
dakera_recall and dakera_recall_associated return at most top_k ranked results in memories.
They ask the server for neighborhood_mode: "separate", so the session neighbours of the results
(memories written around the same time in the same session) come back in their own
context_memories list: each entry has context_of (the id of the ranked memory it belongs to) and
context_of_rank (that memory's place in memories); its score comes from another search and is not
comparable with the ranked scores. A collapsed result (server flag DAKERA_RECALL_COLLAPSE_DERIVED)
keeps matched_text, the sentence that matched. neighborhood_mode picks separate (default),
inline or off. A server that predates neighborhood_mode (before v0.12.3) appends its context
to memories unmarked: the tools keep the first top_k and say how many items they left out.
Memory content in tool results is stored data: initialize tells the client to reason about it and
never follow instructions found in it.
Documents (Dakera v0.12.3)
A document becomes chunk memories of the agent, each with its heading path and page, imported by a
background job (power tier; listed when /v1/capabilities has documents.enabled):
Tool | What it does |
|
|
| the import job: |
| id, title, media type, chunk count, bytes, pages; |
| every chunk of the document |
A recall result that is a chunk carries citation: document_id, title, page_start /
page_end, heading_path, chunk_index / chunk_count (from memory.metadata._dakera_document).
On a server before v0.12.3 (no documents section in /v1/capabilities) the tools are not listed and
a direct call says they need v0.12.3; DAKERA_DOCUMENTS=0 on the server hides them the same way.
Features the server has off are left out
The opt-in features (attachments, speech to text, image indexing) are off by default on the server.
dakera-mcp asks GET /v1/capabilities (once a minute, 3 s timeout) before it lists tools:
attachmentsoff, or a server without/v1/capabilities(v0.11): thedakera_attachment_*tools are not listed and not returned bydakera_discover_tools; a direct call answers with the variable to set (DAKERA_ATTACHMENTS=1) and makes no request.visionoff:dakera_attachment_index_imageis left out (DAKERA_VISION=1turns it on).A server without
/v1/capabilities(v0.11) also hidesdakera_encryption_statusanddakera_embed_migration_status, whose routes are new in v0.12.The server cannot be asked (down, starting, key refused): nothing is hidden (asked again after 10 s).
The default core profile has no opt-in tools, so it never makes that request.
Errors
Error answers keep the server's text and add a Hint: line for the v0.12 cases: a key pinned to
namespaces gets 403 on node-wide /admin routes (backups, encryption, quotas, config); backup
download, upload and restore need super_admin; 413 (body over a limit, or a hard quota), 501
(feature off), 503 (Retry-After, which the retry logic now honours, up to 8 s) and 429 (rate
limit). A route the server lacks (an older server) and a v0.11 rotation without new_key get a hint
too. Since Dakera v0.12.2 a refused argument gets 400 with a message naming the field
(content: content exceeds maximum of 100000 bytes …, tags[1]: … reserved …); the message is
passed on and the hint names the field to correct (the content limit counts UTF-8 bytes). The 403
hints point at dakera_whoami. From Dakera v0.12.3 the admin key, backup and rotate-key
routes refuse a field they do not know (422); the hint names it. A request that timed out is retried only when it is safe to repeat (GET, PUT, DELETE): a store,
an import or a key rotation is never sent twice.
Run Dakera
The MCP server connects to a Dakera memory server. You need one running first:
docker run -d \
--name dakera \
-p 3000:3000 \
-e DAKERA_ROOT_API_KEY=dk-mykey \
ghcr.io/dakera-ai/dakera:latestFor persistent storage (recommended):
curl -sSfL https://raw.githubusercontent.com/Dakera-AI/dakera-deploy/main/docker-compose.yml \
-o docker-compose.yml
DAKERA_API_KEY=dk-mykey docker compose up -d
curl http://localhost:3000/health # → {"status":"ok"}Full deployment guide (Docker Compose, Kubernetes, Helm): dakera-deploy
Install
npm / npx (Node.js 18+)
# Global install
npm install -g @dakera-ai/dakera-mcp
# Or run directly without installing
npx @dakera-ai/dakera-mcpHomebrew (macOS / Linux)
brew install dakera-ai/tap/dakera-mcpCargo
cargo install dakera-mcpDocker
docker pull ghcr.io/dakera-ai/dakera-mcp:latestThe image is distroless (no shell, no package manager) and runs as the non-root user 65532.
Binary download
Pre-built binaries for macOS, Linux, and Windows are available on the releases page.
Platform | File |
macOS (Apple Silicon) |
|
macOS (Intel) |
|
Linux x64 |
|
Linux arm64 |
|
Windows x64 |
|
Connect
Add to .mcp.json (Claude Code) or claude_desktop_config.json (Claude Desktop):
{
"mcpServers": {
"dakera": {
"command": "dakera-mcp",
"env": {
"DAKERA_API_URL": "http://localhost:3000",
"DAKERA_API_KEY": "your-key"
}
}
}
}dakera_extract_entities calls the ODE sidecar at DAKERA_ODE_URL; those requests currently carry
the Dakera API key as well (tracked in Dakera-AI/dakera#924).
To start with the power profile (exposes up to 86 tools):
{
"mcpServers": {
"dakera": {
"command": "dakera-mcp",
"env": {
"DAKERA_API_URL": "http://localhost:3000",
"DAKERA_API_KEY": "your-key",
"DAKERA_MCP_PROFILE": "power"
}
}
}
}Why This Exists
AI agents forget everything when the session ends. Dakera fixes that. This MCP server gives your agent a persistent memory layer with zero infrastructure overhead — point it at a Dakera instance and it works.
The 14-tool default keeps your context window lean. The meta-tools let you expand on demand when you need advanced operations like bulk vector upsert, knowledge graph traversal, or memory federation.
→ dakera.ai for hosted instance
→ Self-host with dakera-deploy
Documentation
Related
Repo | What it is |
Python SDK | |
TypeScript SDK | |
CLI | |
Self-host Dakera |
dakera.ai · Documentation · Request Early Access
Part of the Dakera AI open-core ecosystem. Built with Rust. Self-hosted. Zero dependencies.
Available Tools
14 toolsdakera_batch_forgetA
Bulk-delete memories matching filters (tags, importance range, time window, type, session); at least one is required. Permanent: to demote instead, use dakera_memory_importance.
Inputs: agent_id (required), tags, session_id, memory_type, +4 more.
dakera_batch_recallA
List memories by filters (tags, importance, time window, type, session) without a query; at most limit (default 100). Use instead of dakera_recall when no semantic search is needed.
Inputs: agent_id (required), tags, limit, session_id, +5 more.
dakera_discover_toolsA
Search the Dakera tool catalog by keyword or tier (core/power/admin/meta) and return names and one-line summaries without loading full schemas. Call this first to find relevant tools, then use dakera_load_tools to fetch only the schemas you need — avoids loading the full catalog upfront.
Inputs: tier, query.
dakera_extractA
Extract entities, topics, key phrases and a summary from text with the provider chain: extractor_override, then the namespace default, then the server default (GLiNER local). For ad-hoc GLiNER types use dakera_auto_tag. Needs a write key for the namespace (for all namespaces when neither namespace nor agent_id is given).
Inputs: text (required), lang, agent_id, namespace, +1 more.
dakera_forgetA
Permanently delete memories by ID or tag. Provide memory_ids for exact removal or tags to bulk-delete all memories sharing those tags. Deletion is immediate and irreversible — prefer dakera_memory_importance to suppress without deleting.
Inputs: agent_id (required), tags, memory_ids.
dakera_fulltext_searchA
BM25 keyword search over indexed documents. Use over vector search when exact-term recall matters (error codes, IDs, names). For semantic+keyword combined use dakera_hybrid_search.
Inputs: query (required), namespace (required), top_k, filter.
dakera_hybrid_searchA
BM25 + vector ANN hybrid search in a single pass. Omit vector for BM25-only mode. Use for RAG when pure semantic or keyword search alone is insufficient. vector_weight: 0.0=BM25, 1.0=vector (default 0.5).
Inputs: text (required), namespace (required), top_k, filter, +4 more.
dakera_knowledge_graphA
Build a knowledge graph from a seed memory using embedding similarity. Use to explore how a concept connects to stored knowledge. For BFS traversal of an existing linked graph use dakera_graph_traverse.
Inputs: agent_id (required), memory_id (required), depth, min_similarity.
dakera_load_toolsA
Fetch the full inputSchema for one or more named tools. Use after dakera_discover_tools. Returns schemas for found tools and a not_found list for unrecognized names.
Inputs: tools (required).
dakera_recallA
Semantic recall: the top_k (default 5) memories closest to a query, optionally narrowed by tags, memory_type or session_id. Session neighbours go in context_memories, outside top_k. include_associated adds KG neighbours one hop away (dakera_recall_associated goes deeper). Best first: rank_score (v0.12.3+) orders them; score may rise.
Inputs: query (required), agent_id (required), lang, tags, +8 more.
dakera_searchA
Semantic search with optional tag and memory-type pre-filters. Prefer over dakera_recall when results must be constrained by tag or type alongside the semantic match.
Inputs: query (required), agent_id (required), lang, tags, +2 more.
dakera_session_endA
Close a session with an optional summary. Call at run end, even on error. A session the server already ended (idle) keeps its state; your summary is then not saved.
Inputs: session_id (required), summary.
dakera_session_startA
Open a session; its session_id groups the memories you store. The server ends a session idle for 4 h by default (v0.12.2+).
Inputs: agent_id (required), metadata, idle_timeout_secs.
dakera_storeC
Persist a memory (fact, decision, context) for an agent. importance defaults to 0.5; use 0.8-1.0 for memories that must survive decay.
Inputs: content (required), agent_id (required), lang, tags, +7 more.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 14 tools
The memory-retrieval surface is crowded: dakera_recall, dakera_search, dakera_fulltext_search, dakera_hybrid_search and dakera_batch_recall all return memories, and recall vs search in particular differ only in framing (session neighbours, pre-filters) that an agent must read carefully to distinguish. Store/forget, forget/batch_forget, session_start/session_end, and discover_tools/load_tools are otherwise clearly separated, and the descriptions do actively steer selection.
All names share the dakera_ prefix and snake_case, with verb-first forms dominating (store, forget, recall, search, extract, load_tools). Minor deviations are the noun-only dakera_knowledge_graph and the noun-first session_start/session_end forms, but the set remains highly predictable.
14 tools is a reasonable scope for a memory/KG server, covering write, delete, retrieval, sessions, graph exploration, extraction and catalog meta-tools. Slightly heavy on the retrieval side, where five near-parallel search tools inflate the count, but nothing feels gratuitous.
Multiple descriptions point agents at tools that are not in this set — dakera_memory_importance (suggested repeatedly as the non-destructive alternative to forgetting), dakera_graph_traverse and dakera_auto_tag — creating guaranteed dead ends. There is also no update/edit or importance-adjust operation, so stored memories can only be created or destroyed, not amended.
Maintenance
Related MCP Connectors
Cloud-hosted MCP server for durable AI memory
Correction-first memory for AI agents. Run it locally or connect any MCP agent to the hosted server.
Persistent, inspectable memory for AI agents with lineage, correction, and a hosted MCP endpoint.
Hosted memory for AI agents over MCP. One memory shared by all your agents.
Related MCP Servers
AlicenseAqualityFmaintenanceAn MCP server that integrates with mem0.ai to help users store, retrieve, and search coding preferences for more consistent programming practices.9662Apache 2.0- AlicenseNot gradedqualityDmaintenanceEnables Claude to store, search, and retrieve persistent memories using Zep Cloud's thread-based memory system for maintaining context across conversations.MIT
- AlicenseNot gradedqualityBmaintenanceA graph-based MCP server that provides AI coding agents with persistent memory to store patterns, track complex relationships, and retrieve knowledge across sessions. It leverages graph structures to handle temporal queries and relational paths that traditional vector stores often miss.257MIT

Recallofficial
AlicenseNot gradedqualityDmaintenanceOpen-source MCP memory server for AI agents — persistent, searchable, tiered memory across sessions. Works over stdio (Cursor, Claude Desktop) or HTTP+SSE. MIT licensed.21 PyPI8MIT