A local MCP server providing web search, filesystem operations, SQLite queries, Bible tools, and GraphMERT memory management
Server has 5 tools with mixed quality. Three tools (web_fetch, web_search, listdir) have decent parameter schemas but weak descriptions that lack context for LLM decision-making. graphmert_write and graphmert_search have minimal descriptions. None of the tools document their output schemas explicitly. Parameter descriptions are present but inconsistent, some are specific (e.g., 'Maximum bytes to retrieve'), others generic. Tool naming is acceptable (verb-noun convention), but descriptions fail to explain WHEN to use each tool vs. alternatives, or what the LLM should expect in responses. Error handling is not visible in the tool definitions. No tool annotations (readOnlyHint/destructiveHint) despite clear intent (graphmert_write is a mutation). This is a typical community server in the C-range: functional but lacking LLM-optimization and production polish.
Search GraphMERT memory. Returns top-k results scored by semantic similarity + recency + importance.
Store a memory in GraphMERT. Ollama enriches it with summary, tags, entities, importance.
List directory contents with filtering, sorting, and pagination options
Fetch a URL, strip HTML, and return plain text (size-capped).
Search the web. engine: auto|bing|google|brave|serpapi|searxng
Output schemas are undocumented for all 5 tools. LLMs cannot infer what fields to expect in responses, forcing them to guess or make discovery calls.
Descriptions are too brief and lack WHEN/WHY guidance. 'web_fetch': 65 chars, 'graphmert_write': 93 chars. No guidance on tool selection (when to use web_fetch vs web_search?) or error recovery.
No tool annotations visible. graphmert_write is a write operation but lacks destructiveHint. graphmert_search is read-only but lacks readOnlyHint. These annotations are critical for agent safety.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 44 | <=2025-11-25 | v2 |
| 2026-03-09 | D | 53 | - | v1 |
Enums are documented in description strings (e.g., 'sort_by: name|size|modified') rather than formal JSON Schema enum constraints. LLMs cannot parse pipe-delimited text to infer valid values.
Parameter descriptions are generic or incomplete. 'who' in graphmert_write: 'Source/owner of the memory' does not specify format (username? email? free-form?). 'lang' in web_search: 'Language code' lacks format guidance (ISO 639-1?).
No error handling or recovery guidance visible in tool definitions. No indication of retryable vs fatal errors, timeouts, or fallbacks.