Exposes Mnemolis as an MCP tool server via Streamable HTTP transport. Mnemolis is a unified local knowledge search API for self-hosted homelabs that searches across multiple sources including offline knowledge (Kiwix), weather forecasts, news (RSS), live web search (SearXNG), service monitoring (Uptime Kuma), and Home Assistant entity states.
The Mnemolis server exposes a single, well-architected search tool with comprehensive parameter documentation and sensible defaults. The tool name 'search' follows verb-noun convention; descriptions are detailed and actionable, explaining WHEN to use each source option. Parameter schemas are fully typed with clear constraints. However, the tool lacks formal enum enforcement for the 'source' parameter (a deliberate tradeoff documented in mcp_server.py comments), and output schema is not formally documented. Error handling provides connection diagnostics but lacks structured recovery guidance. The server demonstrates strong domain knowledge and thoughtful API design, placing it in the B+ range despite the enum constraint tradeoff.
Search across local and remote knowledge sources via Mnemolis. Automatically selects the best source based on the query.
Source parameter lacks enum constraint. Code comment documents this as deliberate (to avoid $ref resolution bug in FastMCP), but means invalid source values are only caught at runtime by Mnemolis routing logic, not at MCP protocol layer. Agents cannot know valid options from the schema alone.
Output schema not formally documented. The tool description mentions it 'returns result text from the selected source', but lacks explicit JSON schema defining response structure (e.g., whether result is a string, object with metadata, or structured list).
Error handling provides connection diagnostics ('Is the container running?') but lacks structured recovery guidance. Generic exception catch returns 'Error: {e}' without categorizing errors as retryable vs user-fixable vs fatal.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | A | 80 | <=2025-11-25 | v2 |
Synthesize parameter is boolean but its behavior depends on SYNTHESIS_ENABLED server config, creating implicit dependency not captured in schema. Documentation explains this in detail, but tool doesn't validate or report if synthesis is disabled.
The FastMCP implementation has no tool annotations (readOnlyHint, destructiveHint, idempotentHint). The search tool is read-only and idempotent, these should be declared.