Local semantic search, backup, and RAG for AI chats — searchable from a web UI, HTTP API, or MCP. Supports ChatGPT, Claude, Google AI Studio, OpenRouter, LM Studio, and Grok exports.
ThreadShelf MCP defines 5 tools with complete JSON schemas and descriptions. Naming follows verb_noun convention (list_*, search, read_*). Descriptions are adequate (100-200 chars) but lack actionable context for LLM selection. All tools are READ_ONLY, reducing security risk. Schemas are well-formed with proper type definitions and enums. However, parameter descriptions are sparse (many lack guidance on format/constraints), output schemas are undocumented, and error handling is not visible in the tool definitions. The search tool is sophisticated (7 params with enums and constraints) but lacks pagination guidance despite potentially returning large result sets.
Return chunk, file, role, and per-collection stats for a collection or all collections.
List all LanceDB collections discovered locally.
List unique source files indexed inside a collection.
Load and parse a full export file, returning the normalized turn array.
Semantic search over the chosen collection. Returns ranked text snippets with source metadata.
Output schemas not documented. LLMs cannot plan downstream calls or extract fields without knowing what search(), read_thread(), and get_stats() return. Responses must include structured field definitions.
search() accepts 'n' (1-50) but no pagination guidance. If result set exceeds 50, LLMs cannot fetch additional results. Add next_cursor or offset/limit pattern to description.
Parameter descriptions lack format/constraint guidance. 'collection' param says 'Collection name or "all"' but doesn't explain valid naming rules. 'from'/'to' say 'ISO date or YYYY-MM-DD' but lack examples of what LLMs should pass.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 65 | 2026-07-28+ | v2 |
No error handling guidance visible. If search() finds no results, or read_thread() fails to parse a file, what does the LLM see? Error responses must guide recovery (e.g., 'Try a broader query' or 'File format not supported').
read_thread() 'sourceFile' parameter requires 'Absolute path' but no validation rules stated. LLMs may pass relative paths, URLs, or invalid paths. Add constraint: 'Must be an absolute filesystem path to an indexed file.'