mcp-kb-server
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| DATA_DIR | No | SQLite database location | ./data |
| LOG_LEVEL | No | Winston log level | info |
| QDRANT_URL | No | Qdrant endpoint | http://localhost:6333 |
| ENABLE_QDRANT | No | Enable vector search | false |
| DASHBOARD_PORT | No | Auto-start dashboard on boot | |
| MAX_KB_ENTRIES | No | Per-project KB cap | 500 |
| VACUUM_INTERVAL | No | DB vacuum interval (ms) | 86400000 |
| MAX_MEMORY_ENTRIES | No | Per-project memory cap | 1000 |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| memory.storeC | Store long-term memory. Stores content exactly as provided. |
| memory.searchC | Search long-term memory by substring match over stored content and tags. |
| memory.listA | List all memory entries for a project with pagination. Use when you need to see all memories, not just search results. Returns total_count so you know how many exist. |
| memory.getA | Fetch a single memory entry by ID. Use after memory.search with max_content_length to retrieve the full content of a specific entry. |
| memory.deleteA | Delete a memory entry by ID. Use to remove outdated or incorrect information. |
| memory.updateB | Update an existing memory entry. Replaces content and/or tags. Use to correct or refine stored knowledge. |
| kb.addB | Add a document to the knowledge base. After adding, regenerate the index page with kb.index. |
| kb.searchB | Search the knowledge base using SQLite FTS5 by default; optionally uses Qdrant vector similarity when a vector is provided. Tip: call kb.index first to read the table of contents before searching blind. |
| kb.initA | Scan a project directory for markdown and text files and bulk-import them into the knowledge base. Skips files already present (matched by source path). Returns a summary of what was added and skipped. After running, follow the workflow in .kiro/steering/kb-ingest.md for each added file to extract entities, create cross-references, and update the index and changelog. |
| kb.getA | Fetch a single KB document by ID. Use after kb.search with max_content_length to retrieve the full content of a specific document. |
| kb.indexA | Read or replace the wiki index page (source='_index'). Call with no content to fetch the current index. Call with content to atomically replace it. The index is the LLM's navigation entry point — read it before searching, regenerate it after any kb.add/update/delete. |
| kb.updateA | Update an existing KB document by ID. Replaces title, content, and/or source. After updating, regenerate the index page with kb.index. |
| kb.deleteA | Delete a KB document by ID. After deleting, regenerate the index page with kb.index. |
| summary.projectA | Generate a ground-truth–aware project knowledge snapshot by reading authoritative instruction files, long-term memory, and the knowledge base. This tool does NOT store results automatically. |
| summary.deltaB | Generate a delta (change-only) project knowledge summary by comparing the current authoritative project state against the last stored project summary. This tool does NOT store anything automatically. |
| dashboard.projectsB | Generate an interactive dashboard (HTML written to ./temp) for browsing and managing the knowledge base and project memory. |
| source.ingestA | Ingest one or more documents (md, txt, csv, pdf) into the raw sources layer. After ingesting, follow the workflow in .kiro/steering/kb-ingest.md to extract entities into the KB, create cross-references, and update the index and changelog. |
| source.listB | List all raw sources ingested for a project. |
| source.searchC | Full-text search over ingested raw sources. |
| source.getA | Fetch the full content of a single ingested source by ID. Use after source.search to retrieve the complete text of a specific document. |
| wiki.linkC | Create a cross-reference link between two wiki entries (memory, source, or kb). |
| wiki.linksB | List all cross-reference links for a given entry (inbound, outbound, or both). |
| wiki.lintA | Health-check the wiki: find orphan entries, broken links, stale sources, and missing cross-references. Use lint_mode='semantic' to get an LLM-ready payload for deeper analysis (contradictions, stale claims, missing entity pages, missing cross-references). |
| wiki.exportB | Export all wiki data (raw sources, KB entries, memory) as markdown files to a directory. |
| health.checkA | Get server health status and metrics |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 25 tools
Each tool targets a distinct subsystem (wiki, memory, KB, source, summary, dashboard) and operation. Despite 25 tools, descriptions clearly differentiate them; no two tools appear to perform the same function, and domain prefixes (wiki., memory., kb., etc.) aid disambiguation.
All tools follow a consistent 'noun.verb' pattern (e.g., memory.store, kb.search, source.ingest, summary.project). The naming uses dot-separated domain prefixes and action suffixes uniformly, making the pattern predictable and easy to navigate.
With 25 tools, the count is at the high end of the 'borderline' range (16-25 felt heavy). While the tools are organized across multiple subsystems, the overall surface area is large and could be trimmed to reduce cognitive load, though it remains functionally justifiable.
The server provides good coverage for memory and KB (full CRUD plus index/search), but the source subsystem lacks update and delete operations, and the wiki subsystem only offers lint/export/link without direct create/read/update/delete. These gaps hinder full lifecycle management for those domains.