cortex
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| CORTEX_DIR | No | State directory (PID files, search DB, logs) | ~/.cortex |
| CORTEX_SKIP_SYNC | No | Bootstrap skips `uv sync` when set to `1` (dev only) | 0 |
| CORTEX_OBSIDIAN_VAULT | No | Vault location | ~/obsidian-brain |
| CORTEX_EXTRA_SESSION_DIRS | No | Colon-separated extra session dirs to mine | |
| CORTEX_MINER_SETTLE_SECONDS | No | Seconds to wait before mining a completed session | 300 |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| memory_recallA | Search Cortex memories for durable knowledge relevant to a query. Use this when you need to recall prior decisions, conventions, bug fixes, user preferences, or lessons learned from past Claude Code sessions. It searches the full Obsidian-backed memory store via SQLite FTS5, ranks results with a multi-signal scorer (relevance + recency + usage + importance), and expands related-memory links. Behaviour:
Use
Do NOT use for:
Returns: Markdown-formatted memory entries, grouped under a "### Memories" header. Each entry has the memory title and body excerpt. If no matches are found, returns "No memories found for: ". Example: memory_recall(query="jwt auth algorithm", limit=5) → returns the top 5 memories mentioning JWT auth, such as a memory documenting the decision to use RS256 in production. |
| memory_saveA | Save a durable lesson, decision, or convention to persistent memory. Use this to capture knowledge that should survive across Claude Code sessions: user preferences, architecture decisions with rationale, environment quirks, non-obvious bug fixes, or anything you'd otherwise have to re-explain in the next session. Behaviour:
Every save goes through:
Use
Do NOT use for:
Returns: A confirmation like "Memory saved: 63d6570e... 'JWT auth uses RS256'" on success, or an error message (starting with "Memory already exists" or "Memory rejected") on failure. Example: memory_save( content="Use RS256 (not HS256) for JWT in production. HS256 " "requires sharing the signing secret across services " "which leaked via an env var export last quarter (#1247).", title="JWT algorithm — RS256 only in prod", tags="auth,jwt,security,postmortem", scope_id="my-webapp", ) |
| memory_listA | List every memory in a scope, with counts and source breakdown. Use this when you want to see the full inventory of what Cortex has stored — e.g. to audit which projects have the most memories, to check if a specific memory you wrote earlier is still present, or to find a memory whose exact title you remember but whose keywords are ambiguous. Behaviour:
Use
Do NOT use for:
Returns: A markdown listing with the total memory count, source type breakdown (mined/user/import), and one line per memory showing its short ID, title, and project. Memories are sorted newest-first by creation date. Example output: 47 memories Sources: mined:32, user:12, import:3 |
| memory_importA | Bulk-import memories from a file, directory, or chat export. Use this to seed Cortex with existing notes, CLAUDE.md content,
documentation excerpts, or chat logs you want to make searchable.
Each imported item runs through the same security scan and deduplication
as Behaviour:
Use
Do NOT use for:
Returns: A summary like "Imported 12 memories from 18 candidates (rejected 6 duplicates)". Errors are returned as human-readable messages. Example: memory_import( source_path="/home/alice/notes/team-decisions.md", scope_id="my-webapp", ) |
| transcript_searchA | Search raw Claude Code session transcripts for past conversation excerpts. This is the DIFFERENT from Behaviour:
Use
Do NOT use for:
Returns: Markdown-formatted session excerpts with the session id, date, and matched text, or "No matching sessions" if nothing matches. Transcripts older than Claude Code's 30-day retention are not searchable. Example: transcript_search(query="redis connection pool size", limit=3) |
| context_assembleA | Assemble a query-tailored context briefing from all available knowledge. This is the highest-value Cortex tool. It gathers the relevant subset of memories, the project's playbook, and related session transcripts, then uses Claude Haiku to synthesise a focused markdown briefing for the given query. The result is a ready-to-read summary, NOT a raw memory dump — usually 300-800 tokens of distilled relevant knowledge. Behaviour:
Use
Do NOT use for:
Degraded mode: if the Returns: A markdown briefing tailored to the query. Length is typically 300-800 tokens, with headers, bullet lists, and cross-references to memory IDs where relevant. Example: context_assemble( query="help me fix the auth flow on staging", project="my-webapp", ) → returns a brief covering: the RS256 JWT decision, the known bcrypt.compare gotcha, a link to the staging-specific env var issue from last month, etc. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 6 tools
Each tool has a distinct purpose: context_assemble synthesizes briefings, memory_import bulk-imports, memory_list lists, memory_recall searches, memory_save saves, and transcript_search searches transcripts. They are clearly differentiated with no overlap.
All tool names follow a consistent pattern: [domain]_[action] using snake_case (e.g., memory_save, memory_recall, context_assemble). The naming is predictable and uniform.
With 6 tools, the server covers core functionalities (save, search, list, import, context assembly, transcript search) without being excessive or minimal. The scope is well-balanced.
The tool set covers creation, search, listing, and import, but lacks explicit update or delete operations for memories. While this may be intentional, it's a minor gap that could cause agent limitations.