Persistent memory system for AI coding assistants. Auto-captures decisions, patterns, and context from coding sessions. Exposes memory via MCP protocol (Cursor, Cline, Copilot, Claude Desktop).
cortex-memory defines 5 tools with adequate naming (verb-based prefixes) and present descriptions. However, CRITICAL GAPS significantly limit quality: (1) Most parameters lack descriptions, cortex_get_context and cortex_get_decisions have zero parameters, so no description deficit there, but cortex_search has a query parameter WITH description (good). cortex_save_memory has 3 parameters: 'type' (enum, has description), 'content' (HAS description), 'context' (HAS description), all three are well-described. cortex_status has zero parameters. (2) Tool descriptions are SHORT but non-empty: cortex_get_context (107 chars), cortex_search (88 chars), cortex_save_memory (77 chars), cortex_get_decisions (83 chars), cortex_status (99 chars). All within acceptable 10-1024 range and meet the 50-200 chars sweet spot. (3) CRITICAL ISSUE: Output schemas are NOT documented anywhere in the source. The code does NOT show what fields these tools return, only what inputs they accept. Without documented output schemas, LLMs cannot plan downstream tool calls or extract chained IDs. This violates pattern:tool and pattern:response-shaper. (4) Error handling is minimal, no evidence of error recovery guidance, categorization (retryable vs fatal), or actionable error messages in the code shown. (5) Security: No visible injection of secrets, permission gates, or audit logging. (6) Parameter schemas ARE present and mostly good (enums for 'type' in cortex_save_memory), but cortex_search's query parameter lacks constraints (no min/max length, regex, etc.). Overall: naming is solid, descriptions are present and adequate length, parameter schemas are partial, but OUTPUT schemas are completely missing and error handling is absent. This is typical of a community server that works but lacks production polish.
Returns the current working memory (Layer 1) as formatted text. This is the context that should be injected into an AI assistant's prompt.
Returns all architectural decisions (ADRs) recorded for this project.
Saves a new memory, decision, or insight from the current session.
Searches episodic and semantic memory for matching episodes and decisions.
Returns memory health status including health score, entry counts, and warnings.
Output schemas completely undocumented. Tools return data but LLMs cannot see structure of results. Prevents chaining, if cortex_search returns memory_ids, how would an agent know to use them in a follow-up call? LLMs forced to guess field names.
cortex_search query parameter accepts free-form strings with no constraints. Missing min/max length, regex pattern, or guidance on what constitutes a valid query. LLMs may pass absurdly long strings or invalid search syntax.
No error handling guidance in tool definitions. If cortex_search finds zero results, or cortex_save_memory hits a quota, or cortex_status detects critical health issues, what should the LLM do next? No recovery guidance, no error categorization (retryable vs fatal), no actionable messages.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 52 | 2026-07-28+ | v2 |
cortex_save_memory is a destructive tool (WRITE risk) with no dry-run, confirmation, or idempotency hint. If an agent retries after a flaky network, duplicate memories may be saved. No confirm_before_execute pattern.
Tool annotations missing. No destructiveHint, readOnlyHint, or idempotentHint in tool definitions. Modern MCP spec includes these, cortex_save_memory should carry destructiveHint=true, cortex_get_* should carry readOnlyHint=true. This metadata helps clients make safety decisions.