Shared, persistent memory for AI agents: a self-hosted MCP server with semantic search.
Montycat MCP demonstrates solid tool design with consistent naming conventions, comprehensive parameter descriptions, and well-structured schemas. All 12 tools follow a clear verb_noun pattern (montycat_*). Tool descriptions are substantive (100-200 chars typical), and input schemas include types and descriptions for all parameters. However, output schemas are not documented, callers cannot see what fields to expect from responses. Error handling is minimal (no recovery guidance or actionable error messages visible in the code), and there are no tool annotations visible in the source despite the feature flag claiming toolAnnotations=true. The server targets persistent memory operations with clear scope isolation and multi-user support.
Wait for a change to any memory in a keyspace. Returns immediately when a memory is added, updated, or deleted. Long-poll tool for real-time memory watch.
Store multiple memory facts in a single operation for efficiency.
Delete a memory by key. This is permanent and cannot be undone.
Delete all memories from a keyspace. This is permanent and cannot be undone.
Get statistics about a keyspace including memory count and storage size.
Install or start the local Montycat engine. This downloads and installs the engine on this machine if not already present.
Output schemas not documented. Tool responses are not described, callers cannot predict what fields to expect, forcing them to infer structure from trial calls. This violates the pattern:tool-description rule and breaks LLM planning (e.g., what fields does montycat_recall return? How are memories structured?).
No error handling guidance. Tool descriptions do not explain failure modes or recovery steps. E.g., montycat_recall does not state what happens on timeout, empty results, or semantic search failures. LLM has no recovery strategy.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 67 | 2026-07-28+ | v2 |
List all enforced schemas in a keyspace. Use this before writing to a typed keyspace to verify field names and types.
List all memory keys in a keyspace, optionally filtered by a prefix.
Search memories by meaning, keyword, or combination. Returns the most relevant facts stored previously.
Retrieve a specific memory by its key. Returns the exact memory stored, not a search result.
Store a memory fact or preference persistently in a keyspace. Use this to record information that should be recalled in future conversations.
Update an existing memory by key, merging new fields with the stored object.
Destructive operations lack confirmation/dry-run pattern. montycat_forget and montycat_forget_all have DESTRUCTIVE risk but no dry-run, confirmation, or undo capability. Agents can permanently delete all memories without safeguard.
toolAnnotations feature claimed but not visible. Server feature flag states toolAnnotations=true, but no readOnlyHint, destructiveHint, or idempotentHint attributes are visible in tool definitions. Destructive tools (montycat_forget, montycat_forget_all) and irreversible tools (montycat_install_engine) should carry annotations to guide agent behavior.
montycat_await_memory_change lacks timeout documentation. Described as a 'long-poll tool' with optional timeout_sec (default 60s), but no guidance on what happens when timeout expires (returns nothing? an error? a special 'no change' response?). LLM cannot plan retry behavior.
montycat_install_engine marked IRREVERSIBLE with empty schema. No input parameters, no output documented. Does it return a success status? Download URL? Installation path? LLM cannot verify completion or diagnose failures.