Model Context Protocol server for LocalRecall knowledge base management tools
LocalRecall MCP server provides 11 well-structured tools with consistent naming (verb_noun pattern: search, add_document, list_files, delete_entry, etc.) and mostly clear descriptions. All tools are explicitly registered in pkg/toolset/localrecall/toolset.go with JSON Schema input definitions. However, several quality gaps reduce the score: (1) Output schemas are undocumented, no tool describes what fields it returns, which breaks the pattern of documented responses; (2) Parameter descriptions, while present, are often minimal (10-30 chars) and lack guidance on constraints, formats, or dependency relationships; (3) No error handling guidance, tools do not explain what to do if a search fails, a collection doesn't exist, or a deletion succeeds; (4) Destructive operations (delete_entry, reset_collection) lack confirmation/dry-run patterns; (5) Missing parameter constraints (e.g., max_results has no min/max bounds, min_similarity lacks validation rules); (6) No discussion of mutual exclusivity in add_document (file_path vs file_content) beyond a bare comment. The server is well above baseline (typical STDIO servers ~45-50) due to solid naming and schema presence, but falls short of A-grade (80+) due to incomplete output documentation and minimal parameter guidance.
Add a document to a LocalRecall collection
Create a new collection in LocalRecall
Delete an entry from a LocalRecall collection
Get the content of a specific entry in a LocalRecall collection
List all collections in LocalRecall
List files in a LocalRecall collection
List external sources for a LocalRecall collection
No output schemas documented. The rubric requires 100% of A+ tools to have documented return types. None of the 11 tools describe their response structure (fields, types, nesting). LLMs cannot plan downstream calls without knowing what data they'll receive.
Parameter descriptions are minimal (10-30 chars) and lack constraint guidance. Examples: 'The search query' (18 chars) doesn't explain format or length limits. 'Maximum number of results to return (default: 5)' (49 chars) doesn't state valid range (1 - 100?). Missing format specs violate baseline of avg 72 chars per param annotation.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 61 | <=2025-11-25 | v2 |
Register an external source for a LocalRecall collection
Remove an external source from a LocalRecall collection
Reset (clear) a collection in LocalRecall
Search content in a LocalRecall collection
Destructive operations (delete_entry, reset_collection) lack confirmation or dry-run patterns. LLMs can delete data irreversibly without explicit user approval. Pattern:confirmation-request suggests a confirmation step before executing.
No error handling guidance. Tools do not explain what to do if a search returns 0 results, a collection doesn't exist, or a document fails to upload. Descriptions lack recovery hints like 'If a collection is not found, call create_collection().' This violates pattern:recovery-guide.
add_document has two mutually exclusive parameters (file_path vs file_content) but describes this only in a code comment, not in the input schema description. LLMs do not read comments, they read parameter descriptions. Must explicitly state 'Exactly one of file_path or file_content must be provided.'
Numeric parameters lack bounds. 'max_results' accepts a 'number' type with no min/max constraint, LLMs could pass 0, negative, or 1e9, causing runtime errors. Should specify range (e.g., 1 - 100) in both description and schema minValue/maxValue properties.
Description for reset_collection is only 'Reset (clear) a collection in LocalRecall' (43 chars, below 50-char baseline for A+ tools). Does not explain consequences or when an LLM should call this vs delete_entry. Should be more explicit about destructive intent.