Knowledge MCP Server v4.1 — L2 Platform — Hybrid Search + Parent Retrieval + LLM Reranking + Feedback Loop. Unified MCP server for Pack, guides, and DS knowledge with embeddings via OpenRouter and storage in Neon PostgreSQL.
knowledge-mcp has 11 tools with documented descriptions and risk classifications, but critical quality gaps undermine production readiness. Naming is clear and verb-forward (search_, get_, list_, connect_, disconnect_, personal_*, concept_search). Descriptions are present (ranging 45 - 350 chars) and explain functionality, but lack the detail required for LLM decision-making: no explicit WHEN to use each tool vs. similar alternatives, no prerequisites stated, no return value structure documented, no error recovery guidance. Input schemas are partially visible but incomplete: parameters have types (string, number) and optional null unions, but lack constraints (enums, min/max, regex patterns). Output schemas are not documented anywhere in the source, LLMs cannot plan downstream calls or understand what fields will be returned. The tools handle destructive operations (disconnect_source, personal_write) without confirmation-request patterns or explicit warnings about side effects. Three tools (search_documents, get_document, concept_search) have overlapping retrieval semantics with no clear disambiguation. The personal_write tool accepts arbitrary filenames and content without documented path-traversal validation, raising security concerns. Error handling is absent from all tool descriptions, no recovery guidance, no categorization of retryable vs. fatal errors.
Search the concept graph by concept code, name, or definition. Returns matching concepts with relationships.
Connect a GitHub repository as a knowledge source (private mode). Initiates authentication and indexing of the repository.
Disconnect a knowledge source and purge its indexed content (private mode).
Retrieve full document content by source and filename. Supports retrieving document with specific Git SHA.
List documents in a source with optional path filter.
List all available knowledge sources in the corpus.
Output schemas completely undocumented. No description of return types, field names, or data structures for any tool. LLMs cannot plan multi-step calls or extract required IDs for follow-on operations.
Input parameters lack constraints. No enums for categorical fields (source, status), no min/max for limit parameters, no format validation (URL format for repo_url, file path validation for filename). Invites hallucinated/invalid values from LLMs.
Destructive operations (disconnect_source, personal_write) lack confirmation-request or dry-run patterns. No warnings in descriptions that data loss or repository modification will occur. Agents could accidentally delete sources or commit unwanted changes.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 46 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 8 | - | v1 |
Search user's personal memory/knowledge base (private mode only). Searches documents the user has indexed through personal connections.
Trigger reindexing of a connected personal source. Large repos run asynchronously and return a job_id for polling progress.
Poll the status of an async reindex job started by personal_reindex_source.
Write/create content to a personal GitHub repository source. Supports creating new files and updating existing ones.
Search the knowledge base using hybrid routing: entity codes (DP.AGENT.001) via keyword path, natural language via vector path with confidence threshold and fallback to keyword. Returns ranked results with parent retrieval and LLM reranking.
No error handling documented. Descriptions do not explain what errors can occur, whether they are retryable, or what the agent should do next. No recovery guidance or error categorization.
Three similar retrieval tools (search_documents, get_document, concept_search) lack clear disambiguation. Descriptions do not explain when to use each vs. the others, causing LLM confusion and wasteful retries.
personal_write parameter 'filename' has no validation rules documented. No mention of path-traversal protection, allowed characters, max length, or directory restrictions. Security risk: LLM could pass '../../../etc/passwd' or absolute paths.
Descriptions do not state prerequisites or dependencies between tools. E.g., connect_source returns a source name that list_documents needs, but this chain is never documented. Agents cannot infer call order.
Limit parameters (search_documents, memory_search, concept_search) lack min/max constraints. No documentation of default behavior if limit is omitted or set to 0, or max results per call. Could cause context-window explosions or timeouts.