agent-knowledge
Uses Hugging Face embedding models (local or API) to generate semantic embeddings that power hybrid search and memory ranking.
Uses OpenAI's embedding API to produce semantic embeddings for knowledge entries and session data, enhancing search relevance and retrieval.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@agent-knowledgesearch my sessions for the fix to the pagination bug"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
agent-knowledge
Cross-session memory and recall for AI coding assistants -- works with Claude Code, Cursor, OpenCode, Cline, Continue.dev, and Aider out of the box. Git-synced knowledge base, hybrid semantic+TF-IDF search, auto-distillation with secrets scrubbing.
Benchmark: R@5 = 97.2% (sparse) / 98.8% (hybrid) on longmemeval_s and 86.0% (sparse) / 88.4% (hybrid) on the harder longmemeval_m split — the public LongMemEval academic benchmark (Wu et al. 2024, ICLR 2025), full 500 questions per split, no LLM, no API key, runs entirely offline. +8.6pp to +13.2pp R@5 over the paper's official flat-bm25 baseline in apples-to-apples reproduction. Full per-category table, reproduction instructions, and paper-comparison details in bench/README.md.
Why
AI coding sessions are ephemeral. When a session ends, everything it learned -- architecture decisions, debugging insights, project context -- is gone. The next session starts from scratch.
agent-knowledge solves this with two complementary systems:
Knowledge Base -- a git-synced markdown vault of structured entries (decisions, workflows, project context) that persists across sessions and machines.
Session Search -- TF-IDF ranked full-text search across session transcripts from all your coding tools, so agents can recall what happened before -- regardless of which tool was used.
Related MCP server: Doclea MCP
Supported Tools
Sessions from all major AI coding assistants are auto-discovered -- if a tool is installed, its sessions appear automatically.
Tool | Format | Auto-detected path |
Claude Code | JSONL |
|
Cursor | JSONL |
|
Codex CLI | JSONL |
|
Aider | Markdown/JSONL |
|
Continue.dev | JSON |
|
Cline | JSON | VS Code globalStorage |
OpenCode | SQLite |
|
No configuration needed. Additional session roots can be added via the AGENT_KNOWLEDGE_EXTRA_SESSION_ROOTS env var (comma-separated paths).
Features
Host-agnostic session search -- unified search across every major AI coding assistant (Claude Code, Cursor, Codex CLI, Aider, Continue.dev, Cline, OpenCode). No host name is baked into configuration — the adapter registry probes installed host roots at startup.
Hybrid search -- semantic vector similarity blended with TF-IDF keyword ranking
Git-synced knowledge base -- markdown vault with YAML frontmatter, auto commit and push on writes
Automatic staleness detection --
knowledge_analyze(action: "stale_by_code_activity")cross-references file paths mentioned in each entry body againstfilesModifiedin recent session summaries. Pairs with a symbol-presence precision layer: identifiers the entry quotes (inline backticks + fenced blocks) are checked in the touched file; if they still exist, confidence downweights ×0.3. Entries withevergreen: trueare exempt.Search-gap tracking --
knowledge_analyze(action: "search_gaps")surfaces zero-result queries over the lastsince_days, grouped by token-Jaccard similarity. The clearest signal for "what entries should I write next?".Section-priority context packer --
knowledge(action: "wakeup")assembles a multi-section bundle (identity→active_tasks→recent_decisions→known_gotchas→last_session_summary→top_weighted→semantic_fallback) within a token budget (default 800, override viatoken_budgetorAGENT_KNOWLEDGE_WAKEUP_BUDGET). Unused section budget redistributes to later sections.Scored + gated promoter -- session insights promoted via a 6-signal weighted scorer with three independent gates (
minScore,minRecallCount,minUniqueQueries). Runs automatically in background, on demand viaknowledge_admin(action: "promote"), or benchable offline vianpm run bench:promote. Emits an auditable.dreams/YYYY-MM-DD.mddiary every run.Pluggable adapter system -- add support for new tools by implementing the
SessionAdapterinterfaceEmbeddings -- local (Hugging Face), OpenAI, Claude/Voyage, or Gemini providers
Fuzzy matching -- typo-tolerant search using Levenshtein distance
6 search scopes -- errors, plans, configs, tools, files, decisions
6 MCP tools -- consolidated action-based interface (
knowledge,knowledge_search,knowledge_session,knowledge_graph,knowledge_analyze,knowledge_admin)Evergreen entries --
evergreen: truein frontmatter exempts an entry from decay in ranking AND makes it append-only under promotion. Dashboard renders a push-pin badge on these cards.Author attribution -- optional
author: <string>frontmatter surfaces as a muted chip on each card.Code graph resolution --
calls,imports,inheritsedge types for code structure; directed BFS traversal (outbound/inbound/both);bulk_linkfor efficient ingestion;unlink_by_originfor clearing stale code edges before re-ingest;code:prefixed node IDs distinguish code from knowledgeTemporal knowledge graph -- edges support
valid_from/valid_tovalidity windows;as_ofqueries return point-in-time snapshots;invalidateaction marks facts as ended without deleting themHybrid scoring boosts -- proper-noun and temporal-proximity boosts on top of TF-IDF + semantic blend, capped at +66.7%, short-circuit when no signals are present
Category as boost (not filter) -- opt into
category_mode: "boost"so a wrong category guess down-ranks instead of discarding the right answerVerbatim session indexing -- per-message chunks (≥30 chars) embedded into the vector store so raw conversation is retrievable; toggle with
AGENT_KNOWLEDGE_INDEX_VERBATIM=falseConfigurable git URL --
knowledge_admin(action: "config")for runtime setup, persisted at XDG/AppData locationCross-machine persistence -- knowledge syncs via git, sessions read from local storage of each tool
Real-time dashboard -- browse, search, and manage at
localhost:3423Secrets scrubbing -- API keys, tokens, passwords, private keys automatically redacted before git push
Knowledge graph -- relationship edges between entries (related_to, supersedes, depends_on, contradicts, specializes, part_of, alternative_to, builds_on) with BFS traversal
Confidence/decay scoring -- entries scored by access frequency and recency; auto-promotion from candidate to established to proven
Memory consolidation -- TF-IDF duplicate detection on write (warns of similar entries) plus
knowledge_analyze(action: "consolidate")for batch dedup scanningReflection cycle --
knowledge_analyze(action: "reflect")surfaces unconnected entries and generates structured prompts for the agent to identify new graph connectionsAuto-linking on write -- new entries automatically linked to top-3 similar existing entries when cosine similarity > 0.7
Confidence metadata — entries tagged
extracted(user-written) orinferred(auto-distilled, 0.85× search rank multiplier);confidence_scorefield carries the model's certainty 0-1Knowledge analysis —
knowledge_analyzeactionsgod_nodes(most-connected entries),bridges(cross-category connectors),gaps(isolated entries)Knowledge brief —
knowledge_analyze(action: "brief")returns a cached ~200 token summary (core concepts, active projects, recent decisions, stale and gap counts) for session-start orientationEdge provenance — graph edges track
origin(manual, auto-link, distill, reflect) so analysis can distinguish user judgment from automated heuristicsDeterministic pre-extraction in distillation — session summaries now include git commits, error patterns, URLs accessed, and packages changed extracted via regex from bash/tool output (no LLM cost)
Freshness metadata on every search hit — every knowledge result carries
freshness: { body_age_days, last_accessed, access_count, verified_at, verification_age_days, evergreen }. Agent reads the trust signal and decides; we impose no policy demotion.Per-category decay windows — the "Unused" filter and bytype chart honor per-category thresholds (projects 180d, people 365d, decisions 90d, workflows 60d, notes 30d) so identity-shaped content doesn't look stale just because it isn't re-read weekly.
Lifecycle hooks —
SessionStartauto-wakeup + ingest-freshness check,UserPromptSubmitfirst-prompt targeted injection,PreCompactmemory-flush nudge + distill,SessionEnddistill. Six hook scripts total, all fail-open, each toggleable via anAGENT_KNOWLEDGE_*env var. Seedocs/HOOKS.md.Replaces host auto-memory — on hosts with a per-session memory system (Claude Code's
~/.claude/projects/*/memory/, similar in other IDEs), route durable user facts and feedback to agent-knowledge instead. Auto-memory is machine-local and invisible to other machines; agent-knowledge is git-synced, cross-machine, searchable, and surfaces in wakeup. See the Claude Code integration note indocs/USER-MANUAL.md.
Codebase Ingestion
The knowledge-ingest skill populates or updates the knowledge base from a codebase directory. It uses tree-sitter for zero-token structural extraction (classes, functions, imports, call graphs, rationale comments), then clusters files into subsystems and creates knowledge entries + graph edges via existing MCP tools. Subsequent runs are incremental — only changed files are reprocessed.
/knowledge-ingest ./my-projectUses the Agent Skills standard — works with Claude Code, OpenCode, Cursor, Codex CLI, and Gemini CLI. See Ingestion Guide for details.
Supported languages: TypeScript, JavaScript, Python, Go, Rust, Java, C, C++.
Quick Start
Install from npm
npm install -g agent-knowledgeOr clone from source
git clone https://github.com/keshrath/agent-knowledge.git
cd agent-knowledge
npm install && npm run buildOption 1: MCP server (for AI agents)
Add to your MCP client config (Claude Code, Cline, etc.):
{
"mcpServers": {
"agent-knowledge": {
"command": "npx",
"args": ["agent-knowledge"]
}
}
}The dashboard auto-starts at http://localhost:3423 on the first MCP connection.
See Setup Guide for client-specific instructions (Claude Code, Cursor, Windsurf, OpenCode).
Option 2: Standalone server (for REST/WebSocket clients)
node dist/server.js --port 3423MCP Tools (6)
Knowledge Base
Tool | Action | Description | Parameters |
|
| List entries by category and/or tag |
|
| Read a specific entry |
| |
| Create/update entry (auto git sync) |
| |
| Delete an entry (auto git sync) |
| |
| Manual git pull + push | -- | |
| Return L0 identity + L1 top-weighted entries (token-budgeted) |
|
Search
Tool | Description | Parameters |
| General hybrid TF-IDF + semantic (no |
|
Scoped session-only recall (when |
|
Response shape: {mode: "general" | "scoped", sessions, knowledge}. Scoped mode returns knowledge: [] by design.
Scopes: errors, plans, configs, tools, files, decisions, all.
Search knobs:
mmr: trueapplies Maximal Marginal Relevance re-ranking (kills near-duplicate clusters in top-K).mmr_lambda0-1, default 0.7.category_mode: "boost"(default) gives matching-category entries a 1.25× score multiplier instead of dropping non-matches. Pass"filter"for hard-filter behavior.explain: trueattachesscore_components: {bm25, decay, maturity, confidence, category_boost, mmr_penalty}to every knowledge hit.
Sessions
Tool | Action | Description | Parameters |
|
| List sessions with metadata |
|
| Retrieve full session conversation |
| |
| Session summary (topics, tools, files) |
|
Knowledge Graph
Tool | Action | Description | Parameters |
|
| Create/update edge between entries |
|
| Remove edges between entries |
| |
| Mark edges as expired (set valid_to) |
| |
| List edges |
| |
| Directed BFS traversal from an entry |
| |
| Batch-create edges (code graph ingestion) |
| |
| Delete all edges by origin |
|
Knowledge types: related_to, supersedes, depends_on, contradicts, specializes, part_of, alternative_to, builds_on
Code structure types: calls, imports, inherits
Traverse directions: outbound (source→target), inbound (target→source), both (default, undirected)
Analysis
Tool | Action | Description | Parameters |
|
| Find near-duplicate entries |
|
| Find unconnected entries for linking |
| |
| Most-connected entries (degree centrality) |
| |
| Cross-category connectors (betweenness) |
| |
| Isolated entries (0-1 edges) by maturity |
| |
| Cached ~200 token knowledge base summary | -- |
Admin
Tool | Action | Description | Parameters |
|
| Vector store statistics | -- |
| View or update configuration |
| |
| Re-embed all knowledge entries (useful on provider switch) | -- | |
| Delete embeddings for sessions no longer on disk |
| |
| Reclaim free pages in the vector store | -- | |
| Scored + gated promoter |
|
Scored promoter
Every project-level candidate is scored on six signals (relevance 0.30, frequency 0.24, query-diversity 0.15, recency 0.15, consolidation 0.10, conceptual-richness 0.06) and gated on minScore ≥ 0.5, minRecallCount ≥ 2, minUniqueQueries ≥ 2. All three gates must pass. Background auto-promotion is controlled by the same auto_distill config flag; invoke on demand with knowledge_admin(action: "promote").
promote_mode: "explain"(default) — score + gate candidates, write diary, DO NOT touch the KB.promote_mode: "apply"— promote candidates that pass, write diary, git-commit.Every run drops
~/agent-knowledge/.dreams/YYYY-MM-DD.mdwith per-candidate signal breakdowns and gate outcomes. The.-prefixed dir is git-tracked but excluded from list/search.Grounded rehydration: a candidate is skipped if its source session file no longer exists on disk (prevents promoting deleted content).
Entries with
evergreen: truefrontmatter are never overwritten by promotion — activity is appended.
Write-bench harness: npm run bench:promote — offline replay with auto-labeling by "referenced in later sessions". Compares gated promoter to a naive "ship all" baseline, reports precision / recall / F1. Use it to gate signal-weight or threshold changes before rolling them out.
REST API
Method | Endpoint | Description |
GET |
| List knowledge entries |
GET |
| Search knowledge base |
GET |
| Read a specific entry |
GET |
| Most-connected entries |
GET |
| Cross-category connectors |
GET |
| Isolated entries |
GET |
| Knowledge base brief |
GET |
| List sessions |
GET |
| Search sessions (TF-IDF) |
GET |
| Scoped recall |
GET |
| Read a session |
GET |
| Session summary |
POST |
| Write entry (HTTP clients) |
GET |
| Health check |
Architecture
graph LR
subgraph Storage
KB[(Knowledge Base<br/>~/agent-knowledge<br/>Git Repository)]
end
subgraph Session Sources
CC[(Claude Code<br/>JSONL)]
CU[(Cursor<br/>JSONL)]
OC[(OpenCode<br/>SQLite)]
CL[(Cline<br/>JSON)]
CD[(Continue.dev<br/>JSON)]
AI[(Aider<br/>MD / JSONL)]
end
subgraph agent-knowledge
KM[Knowledge Module<br/>store / search / git]
AD[Session Adapters<br/>auto-discovery]
SE[Search Engine<br/>TF-IDF + Fuzzy]
DS[Dashboard<br/>:3423]
MCP[MCP Server<br/>stdio]
end
subgraph Clients
AG[Agent Sessions]
WB[Web Browser]
end
KB <-->|git pull/push| KM
CC --> AD
CU --> AD
OC --> AD
CL --> AD
CD --> AD
AI --> AD
AD --> SE
KM --> MCP
SE --> MCP
KM --> DS
SE --> DS
MCP --> AG
DS --> WBKnowledge Graph
Entries and code symbols can be connected via typed, weighted edges stored in a dedicated edges SQLite table. Eleven relationship types are supported — 8 for knowledge edges and 3 for code structure:
Knowledge: related_to, supersedes, depends_on, contradicts, specializes, part_of, alternative_to, builds_on
Code structure: calls, imports, inherits
knowledge_graph(action: "link")creates or updates an edge (with optional strength 0-1)knowledge_graph(action: "unlink")removes edges (optionally filtered by type)knowledge_graph(action: "list")lists edges for an entry or relationship typeknowledge_graph(action: "traverse")performs directed BFS traversal from a starting entry. Supportsdirection(outbound,inbound,both) andrel_typefilterknowledge_graph(action: "bulk_link")batch-creates edges in a single transaction (for code graph ingestion)knowledge_graph(action: "unlink_by_origin")deletes all edges with a specific origin (for clearing stale code edges before re-ingest)
Code Graph
Code structure edges are created by the knowledge-ingest skill during codebase ingestion. They use code: prefixed node IDs:
code:src/auth/middleware.ts # file node
code:src/auth/middleware.ts::validateToken # symbol nodeQuery examples:
# Who calls validateToken?
knowledge_graph({ action: "traverse", entry: "code:src/auth.ts::validateToken", direction: "inbound", rel_type: "calls", depth: 3 })
# What breaks if I change this function?
knowledge_graph({ action: "traverse", entry: "code:src/auth.ts::validateToken", direction: "inbound", rel_type: "calls", depth: 5 })
# Combined: callers + knowledge context (decisions, design rationale)
knowledge_graph({ action: "traverse", entry: "code:src/auth.ts::validateToken", depth: 2 })Auto-linking
When knowledge with action: "write" creates or updates an entry, it automatically finds the top-3 most similar existing entries via cosine similarity and creates related_to edges for any pair scoring above 0.7.
Confidence & Decay Scoring
Each knowledge entry has a confidence score tracked in the entry_scores SQLite table. Search results are ranked using:
finalScore = baseRelevance * 0.5^(daysSinceLastAccess / 90) * maturityMultiplierEntries mature automatically based on access count:
Stage | Accesses | Multiplier |
| < 5 | 0.5x |
| 5-19 | 1.0x |
| 20+ | 1.5x |
Frequently accessed entries rise in search rankings; stale entries decay over time.
Search Capabilities
TF-IDF Ranking -- results scored by term frequency-inverse document frequency. Rare terms boost relevance. Global index cached for 60 seconds.
Fuzzy Matching -- Levenshtein edit distance with sliding window. Configurable threshold (default 0.7).
Scoped Recall via knowledge_search with the scope parameter:
Scope | Matches |
| Stack traces, exceptions, failed commands |
| Architecture, TODOs, implementation steps |
| Settings, env vars, configuration files |
| MCP tool calls, CLI commands |
| File paths, modifications |
| Trade-offs, rationale, choices |
Integrations
REST Write Endpoint
POST /api/knowledge accepts { category, filename, content } and runs the full write pipeline: git pull → file write → embedding index → auto-link → git push → duplicate check. Returns { path, autoLinks?, duplicateWarnings?, git } with status 201.
This enables HTTP-based writes from other services without an MCP connection.
agent-tasks KnowledgeBridge
agent-tasks has a built-in KnowledgeBridge that auto-pushes learning and decision artifacts to agent-knowledge on task completion. Entries land in decisions/ with frontmatter tags (agent-tasks, project name, artifact type), are auto-indexed with embeddings, and auto-linked to similar entries. No configuration needed — if agent-knowledge is running at localhost:3423, it works.
Testing
npm test # 563 tests across 35 files
npm run test:watch # Watch mode
npm run lint # ESLint on src/ and tests/
npm run typecheck # tsc --noEmit
npm run check # typecheck + lint + format + testEnvironment Variables
All env vars live under the AGENT_KNOWLEDGE_* prefix. No host name is baked in — the adapter registry auto-detects installed AI coding hosts (.claude, .cursor, .codex, .aider, .continue, OpenCode) without configuration.
Core
Variable | Default | Description |
|
| Git-synced knowledge base directory |
| -- | Git remote URL (auto-clones if dir missing) |
|
| Auto-distill session insights into the knowledge base |
|
| Index raw session message chunks into the vector store so conversation is retrievable later. Set |
| (platform config) | Override the primary host data root. Leave unset in the common case — adapters auto-detect every well-known host root under |
| -- | Extra session directories, comma-separated. Added to whatever auto-detection finds. |
|
| Dashboard HTTP/WebSocket port |
Embeddings
Variable | Default | Description |
|
|
|
|
| TF-IDF vs semantic blend weight ( |
| -- | Override provider default model |
|
| Seconds before unloading the local model ( |
| (auto) | ONNX / OMP thread count for the local provider |
API keys
Project-scoped overrides win over the standard keys. Set either; the scoped form lets you run agent-knowledge with a different key than the rest of your environment.
Variable | Fallback | Description |
|
| OpenAI embeddings |
|
| Claude / Voyage embeddings |
|
| Gemini embeddings |
Hooks
Variable | Default | Description |
|
| Auto-inject a |
|
| Tokens for the wakeup bundle |
|
| Run a targeted |
|
| Tokens for first-prompt injection (clamp |
|
| Max knowledge hits attached to the first prompt (clamp |
|
| Before pre-compaction, nudge the agent to save context via |
External tool overrides
Variable | Default | Description |
|
| Override where OpenCode's session DB lives (OpenCode's own env, honored by our adapter) |
Documentation
Setup Guide — installation, client setup (Claude Code, OpenCode, Cursor, Windsurf), hooks, skills
Ingestion Guide — codebase ingestion skill, tree-sitter extraction, incremental updates
Architecture — source structure, design principles, database schema
Dashboard — web UI views and features
License
Available Tools
6 toolsknowledgeA
Knowledge base CRUD, sync, and session-start hydration. Actions: "list" (browse entries), "read" (get entry content), "write" (create/update entry, auto git sync), "delete" (remove entry, auto git sync), "sync" (manual git pull + push), "wakeup" (return token-budgeted section-priority context bundle — identity, active_tasks, recent_decisions, known_gotchas, last_session_summary, top_weighted, semantic_fallback — call once at session start).
| Name | Required | Description | Default |
|---|---|---|---|
| tag | No | Filter by tag (action=list) | |
| path | No | Relative path to the entry, e.g. 'projects/my-project.md' (action=read, delete) | |
| action | Yes | Action to perform | |
| content | No | Full markdown content for the entry (action=write) | |
| category | No | Category (action=list: filter; action=write: target directory). One of: projects, people, decisions, workflows, notes | |
| filename | No | Filename with or without .md extension (action=write), e.g. 'my-project.md' | |
| sections | No | [wakeup] Comma-separated, ordered section list. Valid: identity, active_tasks, recent_decisions, known_gotchas, last_session_summary, top_weighted, semantic_fallback. Default: all seven in that order. Omit to preserve v1.8.0 behaviour. | |
| token_budget | No | [wakeup] Max tokens to render (chars/4 estimate, default 800) | |
| section_budgets | No | [wakeup] Per-section token-budget overrides, e.g. {"identity": 200, "top_weighted": 400}. Unspecified sections split the remainder evenly. Unused budget redistributes to later sections. |
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 — and it does disclose meaningful side effects: write/delete trigger auto git sync, sync is a manual git pull+push, and wakeup returns a token-budgeted section-priority bundle. This is solid disclosure for a mutation-capable tool; it only omits reversibility (e.g., whether delete is recoverable from git history) and confirmation behavior.
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 purpose is front-loaded and the content is dense and informative, but it is presented as one long run-on sentence without line breaks or structural separation, making the six actions and their caveats harder to parse at a glance. Fewer words could be used; the parentheticals are useful but poorly delimited.
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 high-complexity tool (9 params, 6 actions, enums, nested objects) with no output schema, the description explains wakeup's return bundle but not the return values for the other five actions (e.g., what list returns, what read returns on success/failure). The schema covers parameter semantics well, but the absence of output descriptions for the remaining actions leaves gaps.
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 input schema already documents all nine parameters with action-scoped descriptions. The description adds value on top by explaining wakeup semantics — section ordering, defaults, budget behavior — but does not substantially enrich the other parameters beyond what the schema states. A baseline of 3 is appropriate given the high schema coverage.
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 states a clear purpose ('Knowledge base CRUD, sync, and session-start hydration') and enumerates six concrete actions with brief one-line definitions. It implicitly distinguishes from siblings (search, graph, analyze) by being the CRUD/sync/wakeup orchestrator, though it never names the siblings or their differing responsibilities explicitly.
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 conveyed per-action ('call once at session start' for wakeup, 'auto git sync' for write/delete) and the verb definitions imply when each is appropriate. However, with five siblings present, there is no explicit when-to-use-versus-alternative guidance (e.g., when to prefer knowledge_search over this tool's list action), and no exclusions are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
knowledge_adminB
Admin operations: view vector store stats, view/update configuration, rebuild embeddings, prune orphan session embeddings, or VACUUM the database. Use action "status" for index stats, "config" to view or update settings, "rebuild_embeddings" to re-embed all knowledge entries (useful when switching providers), "prune_orphans" to delete embeddings for sessions no longer present on disk, "vacuum" to reclaim free pages.
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes | Action: status (vector store stats), config (view/update settings), rebuild_embeddings (re-embed all entries), prune_orphans (delete embeddings for missing sessions), vacuum (reclaim free pages), promote (run the scored promoter — see promote_mode) | |
| vacuum | No | Run VACUUM after pruning (action=prune_orphans, default true) | |
| git_url | No | Git remote URL (action=config). Set to empty string to remove. | |
| min_score | No | [promote] Minimum composite score to promote (default: 0.5). | |
| memory_dir | No | Local knowledge base directory (action=config). Empty to reset. | |
| auto_distill | No | Enable/disable scheduled promotion (action=config) | |
| force_vacuum | No | Run VACUUM even if no orphans were pruned (action=prune_orphans) | |
| promote_mode | No | action=promote mode (default: explain). "explain" returns score breakdowns without writing; "apply" promotes candidates that pass all gates. | |
| min_recall_count | No | [promote] Minimum recall count gate (default: 2). | |
| min_unique_queries | No | [promote] Minimum unique-query gate (default: 2). |
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, and it does disclose destructive effects for prune_orphans ('delete embeddings') and vacuum ('reclaim free pages'). However, it understates rebuild_embeddings' destructive rewriting of existing embeddings, and it completely omits the 'promote' action's behavior (apply vs explain modes, write behavior vs read-only). For a tool with several destructive operations, the disclosure is partial.
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 core operations are front-loaded in the opening sentence, with each action's purpose expanded in a single subsequent sentence. The structure is efficient and scannable. Minor deduction for the slightly run-on single-sentence expansion and for leaving out promote, which makes the list feel incomplete rather than intentionally concise.
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 complex admin tool with 10 parameters, 6 actions, no output schema, and no annotations, the description should be comprehensive — but it covers only 5 of 6 actions and omits the entire promote workflow with its 4 dedicated parameters (promote_mode, min_score, min_recall_count, min_unique_queries). An agent reading only the description would never learn a whole callable mode exists, which is a significant completeness gap.
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 schema already documents all 10 parameters, giving a baseline of 3. The description adds marginal value by linking rebuild_embeddings to the provider-switching use case, but it adds no semantics beyond the schema for the config params (git_url, memory_dir, auto_distill) and leaves the promote-related parameters entirely unexplained in prose despite them being a substantial cluster of the schema.
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 states a clear purpose — administrative operations on the knowledge/vector store — and enumerates five concrete actions (status, config, rebuild_embeddings, prune_orphans, vacuum) with their effects. It clearly distinguishes itself from the read/search siblings. However, it silently omits the 'promote' action that exists in the schema enum, and the umbrella phrase 'Admin operations' is vague until the action list clarifies it.
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 gives actionable when-to-use context for rebuild_embeddings ('useful when switching providers') and explains what each action accomplishes, which implicitly routes the agent to the right action. But it provides no guidance for the 'promote' action (its dedicated params min_score, min_recall_count, min_unique_queries, promote_mode are never narrated), and it never states when NOT to use the tool or how it differs from siblings beyond 'admin' framing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
knowledge_analyzeA
Analysis tools: find duplicates, unconnected entries, most-connected concepts (god nodes), bridge entries, knowledge gaps, zero-result search queries, stale-by-code-activity entries, or generate a compact knowledge brief. Actions: consolidate, reflect, god_nodes, bridges, gaps, brief, search_gaps, stale_by_code_activity.
| Name | Required | Description | Default |
|---|---|---|---|
| top_n | No | Number of results (action=god_nodes default: 10, action=bridges default: 5) | |
| action | Yes | Action: consolidate (find duplicates), reflect (find unconnected entries), god_nodes (most-connected entries), bridges (cross-cluster connectors), gaps (entries with 0-1 edges), brief (compact knowledge base summary), search_gaps (zero-result knowledge_search queries grouped by similarity — the single best signal for "what entries should I write next?"), stale_by_code_activity (entries whose referenced file paths were modified in recent sessions after the entry body was last edited — automatic staleness signal, v1.8.1). | |
| category | No | Scan only this category (omit for all) | |
| min_count | No | [search_gaps] Minimum occurrence count per merged group (default: 1). Raise to surface only repeated misses. | |
| threshold | No | Similarity threshold 0-1 (action=consolidate, default: 0.5) | |
| since_days | No | [search_gaps] Lookback window in days (default: 30). Only queries logged within this window are considered. | |
| max_entries | No | Max unconnected entries to include (action=reflect, default: 20) | |
| group_similarity | No | [search_gaps] Jaccard token similarity threshold for merging near-duplicate queries (default: 0.35, range 0-1). Low because short queries yield low Jaccard even when topically related. | |
| min_touching_sessions | No | [stale_by_code_activity] Minimum distinct sessions that must have modified one of the entry's referenced files for it to be flagged (default: 1). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description bears the full disclosure burden, yet it is internally contradictory on the consolidate action: the verb implies merging/mutation while the gloss '(find duplicates)' implies read-only discovery. There is no statement about whether any action mutates entries, what output shape results, or performance implications — a real gap for a multi-action analysis 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?
Purpose is front-loaded in the first sentence and the whole description runs roughly 60 words with no filler. The trailing 'Actions:' enumeration is partially redundant with the schema enum but serves as a useful name→semantic mapping, earning 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?
This is a complex tool — 9 parameters, 8 actions, no output schema, no annotations. All action semantics are enumerated, but the description is silent on per-action return formats and on whether any action (notably consolidate) has side effects, both material for an analysis surface of this breadth.
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% and the schema's parameter descriptions are unusually rich (per-action defaults, the Jaccard rationale for group_similarity, min_count semantics). The tool description adds little beyond re-listing action names, so the schema-carrying baseline of 3 is correct.
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 enumerates eight distinct analyses with denotative glosses (duplicates, unconnected entries, god nodes, bridges, gaps, zero-result queries, stale-by-code-activity, brief), clearly binding the tool to knowledge-base entry analysis. This differentiates it from siblings like knowledge_search (querying) and knowledge_admin (admin actions) without needing to open a schema.
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?
Each action carries clear context, e.g., 'gaps (entries with 0-1 edges)', 'bridges (cross-cluster connectors)', and search_gaps is explicitly framed as 'the single best signal for what entries should I write next?'. Missing, however, are explicit when-not or alternative statements that route selection against sibling tools at the tool level.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
knowledge_graphB
Knowledge graph operations with temporal validity and code structure support. Create/remove edges, traverse via directed BFS, bulk-import code graph edges. Relationship types: related_to, supersedes, depends_on, contradicts, specializes, part_of, alternative_to, builds_on, calls, imports, inherits. Code structure types (calls/imports/inherits) are created by knowledge-ingest and use "code:" prefixed node IDs.
| Name | Required | Description | Default |
|---|---|---|---|
| as_of | No | ISO date — only return edges valid at this date (action=list/traverse, optional) | |
| depth | No | Max traversal depth in hops (action=traverse, default: 2) | |
| edges | No | Array of edges to create (action=bulk_link). Each: { source, target, rel_type, strength?, origin? } | |
| entry | No | Entry path for filtering (action=list) or BFS start (action=traverse) | |
| action | Yes | Action: link (create edge), unlink (remove edge), invalidate (set valid_to), list (list edges), traverse (directed BFS), bulk_link (batch-create edges), unlink_by_origin (delete all edges from a specific origin) | |
| origin | No | Edge origin to delete (action=unlink_by_origin). E.g. "tree-sitter" to clear code graph before re-ingest. | |
| source | No | Source entry path (action=link/unlink/invalidate), e.g. 'projects/my-project.md' | |
| target | No | Target entry path (action=link/unlink/invalidate), e.g. 'decisions/architecture.md' | |
| rel_type | No | Relationship type (required for link, optional filter for unlink/invalidate/list) | |
| strength | No | Edge strength 0-1 (action=link, default: 0.5) | |
| valid_to | No | ISO date the fact stopped being true (action=link/invalidate). For invalidate, defaults to today. | |
| direction | No | Traversal direction (action=traverse, default: both). outbound: follow source→target (what does X call?). inbound: follow target→source (who calls X?). both: undirected (default, preserves legacy behavior). | |
| valid_from | No | ISO date the fact became true (action=link, optional). Null/omitted = unbounded. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden. It discloses temporal validity and that code structure edges are created by knowledge-ingest, which is useful. However, it does not warn about destructive side effects of unlink/invalidate or the scope of bulk operations, leaving behavioral uncertainty.
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 reasonably concise, using three sentences to cover operations, relationship types, and code structure nuance. It could tighten by omitting the redundant relationship list from the enum, but it remains front-loaded and readable.
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?
No output schema is present, and the description does not describe return values for actions like list or traverse. It also omits details about state mutations (e.g., irreversibility of unlink). Given the tool's complexity and no annotations, this is a significant gap.
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 description coverage is 100%, so baseline is 3. The description adds minimal value: it re-lists relationship types (already in the enum) and notes the 'code:' prefix for node IDs. It does not explain parameter interactions beyond what the schema already states.
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 performs knowledge graph operations: create/remove edges, traverse via BFS, bulk-import code edges. It also lists relationship types and code structure specifics. However, it does not explicitly contrast with sibling tools like knowledge_search or knowledge_analyze, so differentiation relies on the implicit 'graph' focus.
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 explicit guidance on when to use this tool versus siblings. It does not mention when not to use it, nor does it reference alternative tools. The code structure note implies a use case, but there is no clear routing or exclusion.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
knowledge_searchA
Search across sessions AND knowledge entries. Returns {mode, sessions, knowledge}. General mode (no scope): hybrid TF-IDF + semantic over both sources, with optional MMR diversity and category boost. Scoped mode (scope set): sessions-only filtered recall for a specific domain (errors, plans, configs, tools, files, decisions).
| Name | Required | Description | Default |
|---|---|---|---|
| mmr | No | Apply Maximal Marginal Relevance re-ranking to knowledge results (default: false). Trades a small amount of top-1 relevance for diversity in the top-K. | |
| role | No | Filter by message role (default: all, ignored when scope is set) | |
| query | Yes | Search query -- supports keywords and phrases | |
| scope | No | Search scope (optional): errors (stack traces), plans (architecture, TODOs), configs (settings, env vars), tools (MCP tool calls), files (file paths, code refs), decisions (trade-offs, choices), all (no filter). When set, response mode switches to "scoped" and results are sessions-only. | |
| ranked | No | Use TF-IDF ranking (default: true, ignored when scope is set). Set false for regex mode. | |
| explain | No | When true, each knowledge hit carries `score_components` (bm25, decay, maturity, confidence, category_boost, mmr_penalty). | |
| project | No | Restrict search to sessions from this project | |
| category | No | Knowledge category hint (optional). By default applied as a boost (non-matching kept, matching +25%). Pass category_mode="filter" for the legacy hard-filter behavior. | |
| semantic | No | Blend semantic vector similarity with TF-IDF (default: true). Falls back to pure TF-IDF if embeddings unavailable. | |
| mmr_lambda | No | MMR tradeoff 0-1 (default: 0.7). 1.0 = pure relevance; 0.0 = pure diversity. | |
| max_results | No | Maximum number of results to return (default: 20) | |
| category_mode | No | How `category` is applied to knowledge results (default: "boost"). "boost" keeps all entries but gives matching-category entries a 25% score boost; "filter" restricts to matching category only. |
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, and it excels. It reveals the return shape ({mode, sessions, knowledge}), explains the hybrid ranking (TF-IDF + semantic), discloses fallback behavior (pure TF-IDF if embeddings unavailable), details the boost/filter semantics of category, and even mentions the 'score_components' breakdown when explain=true. This is comprehensive transparency for a read-only search 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 dense but well-organized: it leads with the core action and return format, then systematically explains the two modes and key behaviors. Every sentence adds distinct information (modes, ranking, fallback, category handling) with no filler. It is long, but each phrase earns its place given the tool's complexity.
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 tool with 12 parameters, 4 enums, and no output schema, the description covers the critical decision points: mode selection, source scope, ranking approach, category application, and MMR parameter meaning. It explains the return envelope and the score breakdown for explain mode. No essential usage context appears missing; the schema handles parameter-level details, and the description supplies the higher-level orchestration model.
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 each parameter is already described. The description adds meaningful context beyond the schema by explaining how scope switches modes, how category boost/filter interacts with category_mode, the MMR tradeoff (lambda 1.0 = pure relevance, 0.0 = diversity), and that 'role' is ignored in scoped mode. This is valuable semantic glue, though it doesn't cover every parameter explicitly – some are only in the schema.
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 opens with a specific verb and resource: 'Search across sessions AND knowledge entries.' It immediately clarifies the dual-source nature and then distinguishes two modes (general vs. scoped) with clear scope semantics. This cleanly differentiates it from sibling tools like knowledge_session or knowledge_graph, which are likely more specialized.
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 on when to use general mode (no scope) vs. scoped mode ('scope' set), including that scoped mode is sessions-only and filtered by domain. It mentions the behavior of parameters like 'role' being ignored when scope is set. However, it does not name any sibling tools as alternatives or give exclusion conditions, so the guidance is strong but not complete.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
knowledge_sessionA
Session operations: list sessions, get a full conversation, or get a summary. Use action "list" to browse sessions, "get" to retrieve messages, "summary" for a quick overview.
| Name | Required | Description | Default |
|---|---|---|---|
| tail | No | Only return the last N messages (action=get) | |
| limit | No | Max sessions to return (action=list, default: 20, max: 500) | |
| action | Yes | Action to perform | |
| offset | No | Skip first N sessions (action=list, default: 0) | |
| project | No | Filter by project name (substring match) | |
| session_id | No | Session UUID (required for get, summary) | |
| include_tools | No | Include tool_use and tool_result messages (action=get, default: false) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full responsibility for behavioral disclosure. It states the actions but does not mention whether operations are read-only, side effects, required permissions, error behavior (e.g., invalid session_id), or any rate limits. For a tool with three read-like actions, this is a notable gap; the agent is left to infer safety and failure modes.
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 short sentences with zero waste. It front-loads the core concept 'Session operations' and immediately explains the three actions. Every sentence contributes to understanding the tool, making it highly efficient.
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 description provides enough to invoke the tool correctly for the three actions, but it omits the response format entirely. Since there is no output schema, the agent is unaware of what each action returns (e.g., list returns an array, get returns messages). For a multi-action tool, this is a moderate gap, though the actions are simple enough that an agent might infer typical behavior.
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?
All seven parameters are fully described in the schema (100% coverage), so the schema carries the heavy lifting. The description adds context for how the action parameter drives behavior (list vs get vs summary) and clarifies the purpose of some parameters indirectly (e.g., tail for get, limit for list), but it does not add new semantic detail beyond the schema. This aligns with the coverage baseline of 3.
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: 'Session operations: list sessions, get a full conversation, or get a summary.' It identifies three distinct actions (list, get, summary) and explicitly differentiates from sibling tools by focusing on session operations, which none of the sibling names (knowledge, knowledge_search, knowledge_admin, knowledge_graph, knowledge_analyze) cover.
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 per-action guidance: 'Use action list to browse sessions, get to retrieve messages, summary for a quick overview.' This clarifies when to use each action, but it does not mention when to favor this tool over siblings such as knowledge_search or knowledge_analyze. There is no explicit exclusion or alternative routing at the tool level, though the action-level guidance is useful.
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.
6 tool updates
v1.9.7- First observed
knowledge - First observed
knowledge_admin - First observed
knowledge_analyze - First observed
knowledge_graph - First observed
knowledge_search - First observed
knowledge_session
TDQS
Each tool targets a distinct functional domain: CRUD operations, cross-source search, session management, admin/maintenance, graph relationships, and analysis/insights. The action-based sub-operations are clearly scoped, and there is no meaningful overlap between tools.
All tool names follow the consistent pattern `knowledge_<verb_noun>` using snake_case throughout. The naming convention is uniform, with descriptive suffixes (search, session, admin, graph, analyze) that clearly differentiate purposes.
Six tools is an ideal count for a knowledge-management server. Each tool encapsulates a distinct set of related operations (CRUD, search, sessions, admin, graph, analysis), providing comprehensive functionality without overwhelming the agent.
The toolset covers the full lifecycle of a knowledge base: creating/reading/updating/deleting entries, searching across sessions and entries, managing session history, performing administrative tasks (embeddings, vacuum), maintaining knowledge graph relationships, and deriving analytical insights. No obvious gaps exist; even advanced features like bulk graph import and orphan pruning are included.
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
Shared memory for coding agents. Stop re-explaining your codebase every session.
- AmberOAuthcom.ambermem
Long-term memory for AI assistants. Hybrid retrieval, query expansion, auto-topics.
Persistent memory and knowledge management for AI agents with semantic search and 50+ tools.
Persistent memory and knowledge graphs for AI agents. Hybrid search, context checkpoints, and more.
Related MCP Servers
- AlicenseBqualityCmaintenanceProvides AI assistants with persistent memory of your project architecture, development history, and technical decisions, allowing them to give context-aware coding help without needing repeated explanations.16612MIT

Doclea MCPofficial
AlicenseNot gradedqualityCmaintenanceProvides persistent memory for AI coding assistants, storing and retrieving architectural decisions, patterns, and solutions across sessions using semantic search, while also offering git integration for commit messages and code expertise mapping.MIT- AlicenseAqualityDmaintenanceProvides persistent memory for AI agents using hybrid search (vector embeddings + BM25) with neural reranking, enabling storage and retrieval of insights, debugging solutions, and patterns across coding sessions.8MIT
- AlicenseNot gradedqualityDmaintenanceProvides AI coding assistants with persistent, context-rich memory of a codebase, including documentation and git history, enabling recall across sessions.104Apache 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/keshrath/agent-knowledge'
If you have feedback or need assistance with the MCP directory API, please join our Discord server