A local memory engine any AI tool can use. Structured knowledge with server-side intelligence.
Facthouse MCP server defines 2 read-only tools with detailed descriptions and well-structured schemas. Both tools have comprehensive descriptions (240+ characters each) that explain not just what the tool does but when to call it and how to interpret results. Input schemas use Zod with proper type definitions and parameter descriptions. However, there are gaps in output schema documentation, response structures are returned as JSON strings without formal schema declarations. Tool names follow verb_noun pattern correctly (search_knowledge, get_entity). The descriptions are exceptionally well-written for LLM guidance, including explicit context about prerequisites, result interpretation, and confidence caveats. No security issues detected (read-only tools, no secrets in parameters). Error handling guidance is implicit but not formalized.
Get everything known about a named thing — who or what it is, the facts about it, and how it connects to other things. A "thing" is any subject this store holds knowledge about: a person, an organisation, a project, a place, a product, a system — whatever the store is used for. This is the "tell me about X" tool. Call this WHENEVER a named thing is mentioned or alluded to and knowing it would improve your answer — including indirect references like "my manager", "the Helsinki office", "the payments service". Call it before advising on anything involving that thing, and before asking who or what something is — you may already know. Facts come back most relevant first, each flagged with is_subject. True means the fact is ABOUT this thing; false means it only mentions it. Treat the difference as real when you answer: "Alex's transfer was approved by Robin" is worth knowing when asked about Robin, but it is a fact about Alex, and reporting it as something you know about Robin would be wrong. Other relationship values are the same kind of role — this entity's part in this fact, free text, not a directed graph edge. Do not infer who did what to whom from the wording. If several entity rows share that name under different types (the extractor labelled one thing two ways), facts from all of them come back. Hyphens, underscores, and stray punctuation count as the same letters only when that does not join two names already stored as separate rows. If this store has no entity by that name, facts that mention the wording still come back (is_subject false) rather than an empty miss. found is whether an entity row exists, not whether anything is known.
Search the knowledge base. Call this BEFORE answering questions that might benefit from what this store knows. If you have not called get_session_context (or loaded memory://briefing) this conversation, do that first — otherwise you start without this store's context. Returns facts ranked by relevance with source attribution and confidence scores. Three fields come back. `results` is integrated knowledge: deduplicated, reconciled against everything else known, entities resolved. Each result carries speaker_role when the primary event is known (user, assistant, system, or tool) and speaker when the transcript named the person — who uttered it, not who it is about. `pending` is what was captured recently and not yet consolidated — real, and usually the most recent thing you were told, but not yet checked against existing knowledge, so it may duplicate or contradict a fact in results. Trust results first; use pending to avoid forgetting something you were told minutes ago. `episodes` is filled only when results are empty: a short raw-log window around a keyword hit in the copied transcript, not yet extracted. It is not knowledge of the same standing — do not report it as an integrated fact. When semantic search is enabled, `results` also matches on meaning, so a query can surface a fact that shares none of its words. `pending` and `episodes` never do — they are keyword-only. A just-captured fact is findable by its own words but not yet by a paraphrase of them.
Output schemas not formally documented. Tools return JSON-stringified responses without explicit schema declarations. LLMs cannot parse output structure from tool definitions alone.
No explicit error handling guidance. Tools may return errors but descriptions do not document error cases, recovery paths, or actionable failure messages for LLMs.
Missing pagination documentation. search_knowledge may return large result sets but no limit, offset, or cursor parameters are documented or enforced.
get_entity type parameter is optional but not well-constrained. Description mentions 'Types are whatever this store uses' but no enum, list, or discovery mechanism provided to LLM.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | C | 66 | 2026-07-28+ | v2 |