Anticipatory Memory for AI Agents. A local search engine over markdown documents with full-text search, vector embeddings, semantic search, and LLM-powered reranking. Exposes search and document retrieval as MCP tools and resources.
FlowState QMD exposes 5 tools with complete JSON schemas and descriptions. Tool names follow verb_noun convention (query, fetch_*, get, multi_get, status). Descriptions are substantive (100-250 chars), explaining WHAT and WHEN. However, parameter descriptions lack actionable constraints (ranges, formats, examples of valid values). Output schemas are documented in TypeScript types but not exposed in the MCP tool registration. Error handling is minimal, no recovery guidance or categorization. The 'query' tool's 'searches' parameter accepts an array of objects with enum-constrained 'type' field, which is good; but 'intent' and 'collection' lack validation hints. 'fetch_anticipatory_context' and 'status' tools are defined in bench/tool-calls.ts (not the main server.ts), suggesting they may be inferred rather than formally registered, this caps their scores at 50 per the rubric.
Retrieve anticipatory memory from FlowState cache or live query. Returns cached memories if available, otherwise performs live search on recent conversation context. Provides coding agent project memory for the current turn.
Retrieve a single document by path or docid. Supports line offset notation (file.md:100). Returns full document content with metadata.
Batch retrieve multiple documents by glob pattern or comma-separated list. Returns array of documents up to maxBytes limit.
Full search with query expansion, multi-signal retrieval (lexical, vector, hypothetical), and LLM reranking. Returns ranked documents with snippets and context.
Get index status including total documents, embedding state, and collection information. Returns document counts, vector index availability, and per-collection stats.
Parameter constraints missing: 'limit', 'minScore', 'maxBytes' lack min/max bounds; 'intent' and 'collection' lack format/enum guidance. LLMs will pass unbounded or invalid values.
Output schemas documented in TypeScript types (SearchResultItem, StatusResult, AnticipatoryMemory) but not exposed in MCP tool definitions. LLMs cannot see what fields to expect.
No error handling guidance. Tools return raw errors with no recovery hints (e.g., 'Document not found' vs 'Document not found. Try search() with a partial name.').
fetch_anticipatory_context and status tools defined in bench/tool-calls.ts (benchmark file), not in main server.ts. Unclear if formally registered with MCP server or inferred.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 58 | 2026-07-28+ | v2 |
Parameter descriptions lack actionable format hints. E.g., 'path' in get() says 'Document path (relative to collection) or docid (#abc123)' but does not clarify when to use which or how to construct line offsets.