agent-knowledge
agent-knowledge
Long-term memory for AI agents — without vector embeddings.
English | 简体中文
A persistent knowledge base and long-term memory layer for AI agents. Conversations, documents, and decisions are auto-compiled into structured knowledge with claim/evidence provenance, append-only timeline, and contradiction detection. Pure Python, local-first, MIT licensed.
Ships as an MCP server (stdio JSON-RPC 2.0) for Claude Code, Cursor, Codex, and any MCP-aware client. 96.6% R@5 on LongMemEval-S with zero vector dependencies — BM25 + Knowledge Graph + RRF only.
Why
LLM memory today is either flat RAG chunks or a key-value preference cache. Neither answers "how did we get here?".
agent-knowledge adds a knowledge-compilation layer: raw material is decomposed into Claims and Evidence, claims about the same entity are merged into a Compiled Truth, and a timeline is kept append-only — rewritten holistically when new evidence arrives. Every fact is traceable to its source, timestamp, and confidence.
Related MCP server: Memsolus MCP Server
Features
🧠 Compiled long-term memory — Claim / Evidence / Compiled Truth / append-only Timeline
🔍 Multi-path retrieval — Exact + BM25 + Knowledge Graph + weighted RRF + TF-IDF reranker
🚫 Zero vector dependencies — no embeddings, no vector database, no external services required
🔌 MCP server — stdio JSON-RPC 2.0, 8 tools + 2 resource URIs, works with Claude Code / Cursor / Codex / any MCP client
🪶 Local-first storage — human-readable YAML vault + SQLite event index, sync-friendly with git
🪝 Auto-capture hooks — 7 built-in hooks for messages, tool calls, decisions, file changes, errors
⚔️ Contradiction detection — polarity-based; surfaces "we used to say X, now we say not-X"
💤 Dream cycle — offline memory consolidation, deduplication, supersession
📊 Benchmarked — 96.6% R@5 / 0.9031 MRR on LongMemEval-S (ICLR 2025)
🪪 MIT licensed, Python 3.10–3.13, pure standard library + PyYAML
Before / After
Scenario: over 10 weeks the team revisits its frontend stack three times — Week 1 picks Vue, Week 6 evaluates React, Week 10 switches to React. All three meeting notes are in the agent's conversation history.
A new teammate asks the agent "what frontend are we on, and why?"
Without — RAG over chat history
The team decided to use Vue as the frontend framework.Vector search returns the highest-similarity chunk (the earliest meeting note). No temporal awareness → stale answer.
With agent-knowledge — ak_query returns the entity (real vault YAML)
name: Frontend stack
entity_type: concept
compiled_truth:
claims:
- text: use React for the dashboard
status: active
confidence: 0.85
evidence:
- source_id: c3a9d1f2
weight: 1.0
- text: use Vue for the dashboard
status: superseded
confidence: 0.65
evidence:
- source_id: a1b2c3d4
weight: 0.7
timeline:
- date: 2026-02-01
title: Decided on Vue
source_id: a1b2c3d4
- date: 2026-03-12
title: Evaluated React
source_id: b5e6f7a8
- date: 2026-04-09
title: Switched to React; Vue ecosystem limits
source_id: c3a9d1f2The agent now sees the current fact, the timeline, the sources, and the superseded prior claim in one call. Its answer naturally becomes "we're on React — switched from Vue in April due to ecosystem limits," with every fact traceable to a source.
Quick Start
pip install compiled-memory # PyPI package; the Python module is `agent_knowledge`
ak init ~/my-knowledge
ak ingest ~/my-knowledge --file ./meeting-notes.md
ak query ~/my-knowledge "why did we pick React?"
ak dream ~/my-knowledge # offline consolidation
ak lint ~/my-knowledge # health checkOr run it as an MCP server, plugged into any MCP-aware client:
ak mcp ~/my-knowledgeCopy-paste configs for Claude Code / Cursor / Codex live in examples/mcp/; the full tool list is in docs/mcp-integration.md. Agents picking up this repo should read AGENTS.md first.
Architecture
┌─────────────────────────────────┐
│ Adapter Layer │ CLI · MCP · pull adapters
├─────────────────────────────────┤
│ UMSF Boundary │ unified data contract
├─────────────────────────────────┤
│ Knowledge Layer (core) │ Compiler · Compiled Truth · Hooks · Dream
├─────────────────────────────────┤
│ Storage │ Vault (YAML) + EventIndex (SQLite)
├─────────────────────────────────┤
│ Search Layer │ Exact + BM25 + Graph + RRF + Reranker
└─────────────────────────────────┘Knowledge Layer — pure Python over local files, no external services
Search Layer — zero dependencies by default; optional embedding model for stronger semantic recall
Adapter Layer — UMSF unifies the boundary; a new agent adapter is ~80 lines
See docs/architecture.md.
Benchmark
LongMemEval-S (ICLR 2025) — 500 questions, ~48 sessions/question, ~115K tokens/question:
Metric | Score |
R@5 | 96.6% |
R@10 | 98.2% |
MRR | 0.9031 |
NDCG@10 | 0.9218 |
Zero vector dependencies — BM25 + Exact Match + RRF only. Full per-type breakdown in BENCHMARK.md.
Documentation
AGENTS.md— project guide for AI agentsdocs/architecture.md— five-layer architecture and data flowdocs/adapters.md— writing a new adapterdocs/mcp-integration.md— MCP server integrationBENCHMARK.md— benchmark reproductionexamples/mcp/— ready-to-use MCP client configs
FAQ
Vector RAG retrieves text chunks by embedding similarity. It cannot tell you whether a fact is current, has been superseded, or contradicts another fact in the corpus. agent-knowledge compiles raw input into structured Claims, merges claims per entity into a Compiled Truth with explicit active / superseded / disputed status, and keeps an append-only timeline — so the agent retrieves the current answer plus its lineage in one call.
You can still bring a vector model in as an optional reranking signal; it is not required.
No. Default retrieval is Exact Match + BM25 + Knowledge Graph + weighted RRF + TF-IDF reranker — all pure Python, all local. agent-knowledge has only one runtime dependency (PyYAML). On LongMemEval-S the vector-free path reaches 96.6% R@5, matching strong embedding-based baselines.
Most memory frameworks store fragments (messages, summaries, or embeddings) and retrieve by similarity. agent-knowledge is built around knowledge compilation instead: every claim has source provenance, every entity has a Compiled Truth, and the timeline is rewritten holistically when new evidence arrives. The output is traceable structured knowledge, not a bag of remembered turns.
Different optimization target — both are valid; pick by what you need.
Yes — it ships as an MCP server (stdio JSON-RPC 2.0). Copy-paste configs are in examples/mcp/:
Claude Code:
examples/mcp/claude-code.jsonCursor:
examples/mcp/cursor.jsonCodex:
examples/mcp/codex.toml
Start the server with compiled-memory-mcp (default vault at ~/.agent-knowledge/vault) or ak mcp /path/to/your/vault.
Nothing leaves your machine by default. The vault is a directory of human-readable YAML files plus a SQLite event index — both git-friendly. No telemetry, no calls home, no required API keys.
Universal Memory Source Format — a small JSON schema that unifies how conversations, tool traces, decisions, and file changes are submitted to the vault. Eight event types, seven source types. It is what lets adapters for different agents (Claude Code, Codex, custom hermes/openclaw slots, …) share the same ingest pipeline. See docs/architecture.md.
Citation
If you use agent-knowledge in research or a publication, please cite:
@software{agent_knowledge_2026,
author = {Yu, Chengxin},
title = {agent-knowledge: long-term memory and knowledge compilation for AI agents},
year = {2026},
url = {https://github.com/yucx-go/agent-knowledge},
version = {0.3.1}
}A CITATION.cff is included for GitHub's automatic citation widget.
License
MIT — see LICENSE.
Available Tools
8 toolsak_dreamB
Run a dream cycle (memory consolidation) over recent sources.
| Name | Required | Description | Default |
|---|---|---|---|
| since_hours | No | Process sources from last N hours (default: 24). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It says 'Run' implies a state-changing action, but lacks details on side effects, prerequisites, idempotency, or what the result is. The '(memory consolidation)' gives some context but not enough.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence that efficiently conveys the core action and scope. There is no redundant information, and it is appropriately sized for a simple one-parameter tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with one parameter and no output schema, the description is adequate but not complete. It lacks details about the outcome of running a dream cycle, any prerequisites (e.g., having ingested sources), or expected return values. The schema covers the parameter, but behavioral completeness is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema covers 100% of the parameter (since_hours) with a clear description and default. The phrase 'recent sources' in the tool description loosely maps to this parameter, reinforcing it but adding no new syntax or format details. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Run' and the resource 'dream cycle' with an explanatory parenthetical '(memory consolidation)'. It distinguishes from siblings like ak_query and ak_ingest by describing a unique operation, though it doesn't explicitly contrast with them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage context is implied by mentioning 'recent sources', suggesting it pairs with ingesting data, but there is no explicit guidance on when to use this tool versus alternatives. The description doesn't provide exclusions or when-not-to-use conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ak_hook_fireA
Fire a single UMSF event for real-time knowledge capture. The event is wrapped in a one-event UMSFDocument and dispatched through the hook system. For multi-event submissions, use ak_ingest_umsf.
| Name | Required | Description | Default |
|---|---|---|---|
| args | No | For 'tool_use' events: structured tool arguments. | |
| name | No | For 'tool_use' events: tool name. For 'error' events: failing tool. | |
| path | No | For 'file_change' events: filesystem path. | |
| role | No | For 'message' events: user / assistant / system / tool. | |
| type | Yes | UMSF event type: message, tool_use, tool_result, decision, file_change, error, session_start, session_end. | |
| agent | No | Agent identifier (claude-code / codex / hermes / external). | external |
| error | No | For 'error' events: error message. | |
| result | No | For 'tool_result' events: stringified tool output. | |
| content | No | Message body / decision text / error description. | |
| metadata | No | Free-form metadata (e.g. session_end events may pass {messages: [...]}). | |
| session_id | No | Session identifier (optional). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the behavioral disclosure burden. It reveals that the event is wrapped in a one-event UMSFDocument and dispatched through the hook system, offering useful internal context. However, it does not mention return values, error handling, or asynchronous execution, which would be valuable for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences: the first states the action and purpose, the second provides an alternative. It is front-loaded, efficient, and contains no redundant information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the 11-parameter schema with complete coverage and the clear alternative to a sibling tool, the description is largely complete. It lacks an example or notes on response behavior, but the essential context for selection and invocation is present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema covers all 11 parameters with descriptions, so the baseline is 3. The description adds no parameter-level detail beyond the schema, but its focus on 'single event' aligns with the schema's type field and does not conflict.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Fire a single UMSF event') with a specific verb and resource, and explicitly distinguishes from the sibling tool ak_ingest_umsf by emphasizing single vs multi-event submissions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance: use this for a single event and use ak_ingest_umsf for multi-event submissions, naming the alternative tool and the condition under which it should be used.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ak_hook_listA
List all registered hooks.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It accurately indicates a non-destructive 'list' operation and clarifies scope ('all' hooks), but it does not mention potential side effects, permissions, or whether hooks are returned in a particular order. For a simple read-only operation, this is adequate but minimal.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence that wastes no words. It states the action and resource clearly without any superfluous information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the low complexity (no parameters, no output schema), the description is sufficiently complete. It conveys the core purpose and implies the return value (a list of hooks). However, it does not specify the format of the returned data or any relevant details about hook attributes, which would require an output schema or additional explanation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters and the schema is empty, making description of parameters unnecessary. The baseline for 0 params is 4, and the description does not need to compensate for any missing schema information because there is nothing to document.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'List all registered hooks' uses a specific verb (list) and a specific resource (registered hooks), making the purpose immediately clear. It also distinguishes itself from siblings like ak_hook_fire and ak_hook_stats by implying enumeration rather than execution or statistics.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It does not mention that this is the appropriate tool for simply viewing hooks, nor does it exclude cases where ak_hook_stats might be more useful. The only context is the name and sibling names, which are not explicitly referenced in the description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ak_hook_statsB
Get hook fire statistics.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. 'Get' implies a read-only operation, but the description does not disclose return format, potential side effects, or any other behavioral traits. It offers minimal transparency beyond the basic operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence with no unnecessary words. It is appropriately sized for a tool with no parameters, and every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Without an output schema or annotations, the description is incomplete. It does not explain what statistics are returned, the time range, or any filtering options, making it insufficient for an agent to fully understand the tool's capabilities.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the schema is trivially complete. The description does not need to add parameter details, and the baseline of 4 is appropriate since no information is missing.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Get hook fire statistics' clearly states a specific verb and resource, and it distinguishes from siblings like ak_hook_fire and ak_hook_list by focusing on statistics rather than actions or listing. However, it is minimal and could be more explicit about what 'hook fire statistics' entails.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives. There is no mention of context, prerequisites, or exclusions, leaving the agent without direction on selecting this over ak_stats or other sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ak_ingestC
Ingest text into the knowledge vault. Extracts claims and entities.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | Text content to ingest. | |
| title | No | Title for the ingested source (optional). | |
| source_type | No | Type of source: text, file, url, conversation. | text |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of disclosing behavioral traits. It mentions that the tool extracts claims and entities, but it does not disclose whether the operation is destructive, appends or replaces data, requires specific permissions, or returns any acknowledgment. The lack of such context for a mutating tool is a significant gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is exceptionally concise, consisting of two short sentences that immediately state the primary purpose and a key behavioral outcome. There is no redundant or filler content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has three parameters, no output schema, and no annotations, yet the description provides minimal context. It omits return values, any side effects, and notably does not explain how it differs from the sibling 'ak_ingest_umsf'. Given the moderately complex operation of ingesting various source types, the description is insufficient for an agent to use it reliably in all contexts.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Since the schema provides full descriptions for all three parameters (text, title, source_type), the description is not required to add parameter details. It adds no extra semantic value beyond the schema, but the schema already covers all parameters, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Ingest text into the knowledge vault') and an added behavior ('Extracts claims and entities'), using a specific verb and resource. However, it does not distinguish this tool from the closely named sibling 'ak_ingest_umsf', leaving ambiguity about which ingest variant to use.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives. The description simply states what it does, with no mention of use cases, exclusions, or comparison to the sibling ingest tool. This leaves the agent without decision criteria for selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ak_ingest_umsfA
Ingest a complete UMSFDocument. Use this for multi-event submissions (full conversations, tool traces, etc.). Each event is fanned out to matching hooks AND the whole document is rendered into a single Source via the standard pipeline.
| Name | Required | Description | Default |
|---|---|---|---|
| doc | Yes | A UMSFDocument as a JSON-serializable dict (see core/umsf.py for schema). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses that events are fanned out to hooks and the document is rendered into a single Source, which is useful. However, it omits details about auth, rate limits, error handling, or reversibility, leaving a partial behavioral picture.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences clearly state the action, purpose, and behavior without filler. Front-loaded with the primary verb and resource, and every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With one well-documented parameter and a clear behavioral description, the tool is mostly complete for its purpose. It could mention return values or error conditions, but the fan-out and rendering behavior is disclosed, making it sufficient for typical use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds 'complete' and 'multi-event' context but does not substantially expand beyond the schema's 'UMSFDocument as a JSON-serializable dict'. The mention of the pipeline adds some meaning, but the schema already provides the core.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool ingests a complete UMSFDocument and specifies it is for multi-event submissions. It distinguishes from siblings like ak_ingest by emphasizing the 'complete document' vs. likely single events, though it does not explicitly name an alternative.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says to use this for multi-event submissions (full conversations, tool traces, etc.), providing clear context. It does not state when not to use it or name specific alternative tools, but the intent is evident.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ak_queryB
Search the knowledge vault for relevant information.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Search query text. | |
| top_k | No | Maximum number of results to return (default: 5). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It only says 'search', which implies read-only behavior, but does not explicitly state that it is non-destructive, nor does it mention return format, ranking, or any side effects. This is minimal transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, clear sentence with no filler words. It is appropriately front-loaded and concise, containing only the essential information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple with well-documented parameters, but there is no output schema, and the description does not describe what the search returns or how results are presented. This is a noticeable gap for a query tool, though the core functionality is clear.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already documents both parameters ('query' and 'top_k') with 100% coverage, so the description adds no additional parameter meaning. A baseline score of 3 is appropriate since the schema handles parameter semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Search') and the resource ('the knowledge vault'), making it specific and distinct from sibling tools like ak_ingest and ak_stats. It unambiguously conveys the tool's purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives, nor any explicit exclusions or prerequisites. It simply states the action without contextual usage direction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ak_statsA
Get vault statistics: source count, entity count, etc.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations, so the description carries full responsibility. It only says 'Get,' vaguely implying read-only, but does not disclose side effects, permissions, or the full scope of statistics returned.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with concrete examples. It is appropriately sized and contains no unnecessary information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description must explain return values. It partially does so with 'source count, entity count, etc.,' but the 'etc.' is vague and leaves the full set of statistics unspecified.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, and the schema already documents this. With an empty schema (100% coverage), the description has no need to explain parameters, earning the baseline score of 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose using the verb 'Get' and identifies the resource as 'vault statistics' with concrete examples ('source count, entity count'). This distinguishes it from sibling tools like ak_query and ak_hook_stats.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives. It does not mention exclusions or differentiate from ak_hook_stats or ak_query.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
8 tool updates
v0.3.1- First observed
ak_dream - First observed
ak_hook_fire - First observed
ak_hook_list - First observed
ak_hook_stats - First observed
ak_ingest - First observed
ak_ingest_umsf - First observed
ak_query - First observed
ak_stats
TDQS
Each tool has a clearly distinct purpose: querying, ingesting text, ingesting UMSF documents, stats, dreaming, hook operations, and hook stats. The two ingest tools are differentiated by input type and use case, and the hook tools are a cohesive subset with clear roles.
All tools share the 'ak_' prefix and use snake_case, but patterns vary slightly: some are action-only (query, ingest, stats, dream), while others include a context prefix (ingest_umsf, hook_fire, hook_list, hook_stats). This is readable and predictable, with minor inconsistency in noun/verb ordering.
With 8 tools, the set is well-scoped for a knowledge vault server. Each tool covers a distinct aspect—query, ingestion, usage stats, memory consolidation, and hook management—without unnecessary bloat or missing core functionality.
The core knowledge vault operations (ingest, query, stats, dream) are covered, plus real-time hook management. Minor gaps include lack of explicit source deletion or listing, but these are not essential for the stated purpose and can be worked around.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Persistent memory and knowledge graphs for AI agents. Hybrid search, context checkpoints, and more.
Evidence-grounded, graph-connected, correctable memory for agents.
Long-term memory for AI agents: durable records, observable retrieval, governed context assembly.
Shared long-term memory for AI agents: save and recall context as a searchable knowledge graph.
Related MCP Servers
- AlicenseNot gradedqualityAmaintenancePersistent shared memory for AI agents. Hybrid search (pgvector + tsvector), knowledge graph, cognitive scoring, and 16-language temporal extraction. 97.2% Recall@10 on LongMemEval with one PostgreSQL query. Works across Claude Code, Cursor, Codex, OpenClaw, and any MCP client.114MIT

Memsolus MCP Serverofficial
AlicenseAqualityDmaintenanceProvides persistent long-term memory for AI agents through semantic search and automated knowledge graph extraction. It enables agents to store, recall, and reason over facts, preferences, and relationships across multiple conversations and sessions.1419MIT- AlicenseAqualityAmaintenancePersistent shared memory for AI coding agents. Stores facts as entity/key/value triples with hybrid semantic search, task checkpoints, and conflict resolution — shared across Claude Code, Codex CLI, and GitHub Copilot.162355AGPL 3.0
- AlicenseNot gradedqualityBmaintenanceLong-term memory for AI agents over MCP — episodic + semantic memory, a temporal knowledge graph, and a dialectic user model, exposed as 32 tools (recall, remember, context, graph, dreaming, peers). Zero dependencies, runs fully offline; leads the LoCoMo benchmark at ~35x fewer LLM calls.2Apache 2.0
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/yucx-go/agent-knowledge'
If you have feedback or need assistance with the MCP directory API, please join our Discord server