Universal AI memory access via Model Context Protocol. Semantic search, memory capture, and task management backed by PostgreSQL and BGE-M3 embeddings.
Zakar MCP server has well-structured tool definitions with clear naming (verb_noun pattern) and comprehensive parameter schemas. All 5 tools have descriptions and input schemas with types. However, descriptions are inconsistent in depth, some are detailed (semantic_search: 180 chars), others minimal (get_stats: 80 chars). Output schemas are not documented in the visible code. Error handling guidance is absent. Parameter descriptions are present but some lack constraint details (e.g., 'threshold' lacks explanation of what 0-1 range means semantically). No tool annotations (readOnlyHint/destructiveHint) despite clear risk profiles (write_memory, label_search are WRITE; others READ_ONLY).
Get aggregated stats from Zakar: totals, top topics, top people, type breakdown, unresolved action items.
Label a previous semantic_search result to improve retrieval. Use the search_log_id from the search response. Label a result 'gold' (exactly what was wanted), 'relevant', or 'irrelevant'; or label the whole query 'miss' (omit memory_id) with a note saying what was expected. Labels become eval cases.
List the most recent memories from the Zakar. Defaults to the last 7 days.
Search Zakar for memories related to a query. Hybrid ranking by default: semantic similarity fused with keyword match, plus a gentle recency boost.
Save a thought, decision, insight, or note to the Zakar. The text is embedded for semantic search and metadata (topics, people, action items, type) is auto-extracted server-side.
Output schemas not documented. LLMs cannot plan downstream calls or extract fields without knowing what each tool returns. semantic_search, write_memory, and label_search responses are inferred from code but not formally specified in tool definitions.
Missing tool annotations. write_memory and label_search are destructive (WRITE risk), but lack destructiveHint annotation. semantic_search, list_recent, get_stats are read-only but lack readOnlyHint. Agents cannot distinguish safe from unsafe calls without explicit hints.
get_stats description is 80 chars and lacks actionable context. Does not explain when to call it, what the output structure is, or how to interpret 'unresolved action items'. Violates 10 - 1024 char guideline and lacks WHAT/WHEN/RETURN clarity.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 60 | 2026-07-28+ | v2 |
Parameter 'threshold' in semantic_search lacks semantic explanation. Description says 'minimum similarity 0-1' but does not explain what similarity means (cosine distance? normalized score?) or when to adjust it. LLMs cannot reason about threshold tuning without context.
No error handling guidance. Tools do not document what errors can occur, whether they are retryable, or what the LLM should do next. E.g., semantic_search could fail if embedding service is down, but no recovery hint is provided.