A RAG (Retrieval-Augmented Generation) Memory MCP Server that manages knowledge storage and semantic search using ChromaDB and sentence embeddings. Provides tools for learning and searching knowledge points with code block separation and intelligent chunking.
The MCP Knowledge Base Server presents a mixed quality picture. Tool names follow the verb_noun pattern (search_knowledge, learn_knowledge) and are reasonably clear. However, descriptions lack LLM-optimization and critical detail. Parameter schemas are partially visible but lack complete constraint documentation. Output schemas are not documented. The server implements a RAG knowledge base with ChromaDB and sentence transformers, but tool definitions do not adequately prepare an LLM to make informed decisions about when and how to use each tool.
Learns and stores a new piece of knowledge using EmbeddingGemma prompt templates. The content will be formatted with the prompt template: "title: {topic} | text: {content}" before generating embeddings.
Performs a semantic search for knowledge using EmbeddingGemma prompt templates. The query will be formatted with the prompt template: "task: search result | query: {query}" before generating embeddings.
No documented output schemas. LLM cannot predict what fields the tools return, forcing it to reason about response structure and plan downstream actions. search_knowledge returns SearchResult type, but SearchResult definition is imported but not shown in source, must assume LLM cannot see it.
Parameter descriptions lack actionable constraints. The 'topic' parameter in search_knowledge says 'An optional topic to filter the search within. This is an EXACT match, not a prefix or fuzzy match.' This is helpful, but offers no guidance on how to obtain valid topic values or what happens when a user asks for a topic that doesn't exist. The description acknowledges topics look like 'aggregate - Aggregate 定義與核心概念' but tells the user to run a script to list them, impractical for an LLM.
Error handling and recovery guidance absent. Neither tool description explains what happens on failure (e.g., if topic not found, if content is too long, if embedding fails). No guidance on how to handle partial results or retryable errors.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | D | 52 | 2026-07-28+ | v2 |
| 2026-03-09 | D | 50 | - | v1 |
Tool descriptions do not state when to use each tool instead of the other. An LLM given both search_knowledge and learn_knowledge may not understand the distinction: search queries existing knowledge vs. persist new knowledge. Current descriptions assume the distinction is obvious.
The 'topic' parameter in learn_knowledge lacks description detail. It says 'The category or topic of the knowledge (e.g., "DDD", "SOLID")' with examples, but does not specify: must topics match existing topics or can new ones be created? What character limits apply? Is casing sensitive? Can special characters be used?
The 'content' parameter in learn_knowledge says 'Should be clear, descriptive text (not code)' but provides no limits on length, format, or structure. What happens if content is 100KB? If it contains HTML? If it is code despite the warning?