Event-sourced memory for Claude Code via Model Context Protocol. Exposes Cortex memory capabilities including hybrid FTS + vector search, decision tracking, work planning, and project status.
Cortex MCP Server has 5 tools with INCONSISTENT quality. All tools have descriptions and input schemas are present with type definitions, but several lack critical parameter documentation and output schema specification. Tool naming follows verb_noun conventions (cortex_search, cortex_get_*), which is good. However, parameter descriptions are sparse or absent, and there is NO documented output schema for any tool. The server appears functional but falls short of production-grade agent tool standards. Schema coverage is incomplete, parameter descriptions are minimal, limiting LLM's ability to reason about valid inputs. No error handling guidance visible in tool definitions.
Get the active work plan and completed steps.
Get recent events ordered by salience and recency.
Get Cortex project status and capabilities.
Search Cortex memory using hybrid FTS + vector search.
Search immortal decisions and rejections.
Output schemas not documented for any tool. LLMs cannot plan downstream calls or extract required data without knowing what fields to expect.
Parameter descriptions are sparse or generic. 'Search query text' for cortex_search is minimal; 'Optional search query' for cortex_search_decisions lacks guidance on expected format or examples.
No constraints on numeric parameters. 'limit' accepts integers with no stated min/max. LLMs could pass absurd values (0, negative, 1000000) that break pagination or timeout the service.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | D | 52 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 0 | - | v1 |
No error handling guidance. Tool definitions do not explain what to do if a search returns no results, if a branch is invalid, or if the Cortex project is uninitialized.
Tool descriptions lack context on WHEN to use each tool. LLMs cannot distinguish between cortex_search (hybrid FTS + vector) and cortex_search_decisions (decisions/rejections only) based on current descriptions.
'branch' parameter is present in all tools but its role is unclear. Is it a filter, a required selector, or optional? Default is 'current branch', but what happens if the current branch is undefined?