MCP Tools
The tools memex exposes to Claude via the Model Context Protocol.
When you connect memex to Claude, it gets access to 13 tools. Claude uses these automatically, you don't have to ask.
Tools
| Tool | Description |
|---|---|
save_note | Save a note. Requires layer. Warns if a similar note already exists. Surfaces flashbacks. |
search_notes | Hybrid semantic search with optional filters. Appends flashbacks for the top result. |
list_notes | List recent notes by creation date. |
list_tags | All tags with note counts. |
list_folders | All folders with note counts. |
get_note | Full note content + backlinks by ID. |
update_note | Update title, content, or tags. Refuses past notes (suggests an [Amendment] note) and rule notes (user-only). |
delete_note | Delete a note by ID. |
get_signals | Deterministic un-synthesized patterns (hidden_arc / stale_state / dangling_link / tag_burst). |
update_signal_status | Triage a signal, dismiss noise or snooze for later. |
list_inferences | List synthesized hypotheses (re-checks staleness first). |
get_inference | One inference with full provenance (evidence + change/delete markers). |
mint_inference | Persist an approved hypothesis. Requires explicit confirmation. |
search_notes parameters
| Parameter | Type | Description |
|---|---|---|
query | string | The search query (natural language) |
limit | number | Max results (default 10) |
category | string | Filter to a specific folder |
tag | string | Filter by tag |
date_from | string | ISO 8601 date, only notes on or after this date |
date_to | string | ISO 8601 date, only notes on or before this date |
Example: "What did we decide about auth last April?" → Claude calls search_notes with query="auth decision", date_from="2025-04-01", date_to="2025-04-30".
save_note behavior
save_note requires a layer parameter, past, state, or rule. The classification rules are baked into the tool description so Claude picks correctly: past for records of what happened (default when in doubt), state for current plans, rule only when you explicitly ask.
Before saving, Claude is instructed to:
- Call
list_tagsandlist_foldersto see existing taxonomy - Pick from existing tags/folders rather than inventing new ones
- Use
[[Title]]wiki-link syntax for references to people, projects, or concepts
If save_note returns a ⚠️ similar notes warning, Claude switches to update_note on the most relevant existing note instead of creating a duplicate.
The response also includes any flashbacks, see Flashback in tool responses below.
update_note layer guards
update_note is layer-aware:
past→ refused witherror: 'PAST_IMMUTABLE'and a suggestion to save a new[Amendment]note that wiki-links back to the original. Claude is instructed to follow the suggestion automatically.rule→ refused witherror: 'RULE_USER_ONLY'. Claude surfaces its proposed change in chat instead of writing it.state→ updates normally.
This keeps your audit trail intact (past records stay frozen) and prevents Claude from silently rewriting its own behaviour rules.
House Rules auto-inject
Notes with layer = 'rule' are appended to the MCP server's instructions on boot, under a ## House Rules section. Claude sees them at the start of every conversation, no search_notes call required. Coding style guides, personal preferences, and policy notes belong here.
| Env | Default | Behaviour |
|---|---|---|
MEMEX_INJECT_RULES | enabled | Set to 0 to disable injection entirely |
MEMEX_RULES_MAX_CHARS | 8000 | Byte budget; overflow truncates with a console.warn |
Changes are picked up on the next Claude Desktop / Claude Code restart.
Flashback in tool responses
Both save_note and search_notes append a 🔗 Flashback section when older notes from a different folder match the current context:
Saved note #142: "Auth approach revisited"
🔗 Flashback, older notes from a different context:
- 124 days ago: #48 "Auth Architecture Decision" (82% match)
For search_notes, the flashback anchor is the top result. Claude is instructed to surface these to you when relevant, they're how "I wrote about this 3 months ago in a different project" connections actually become visible.
Tunable via env:
| Env | Default | Meaning |
|---|---|---|
MEMEX_FLASHBACK_DAYS | 90 | minimum age gap, in days |
MEMEX_FLASHBACK_DIST | 0.4 | maximum vector distance (lower = stricter) |
MEMEX_FLASHBACK_LIMIT | 3 | max suggestions per surface |
get_note + backlinks
get_note returns the full note content and a "Referenced by" section listing every note that links to this one via [[Title]] syntax. Backlinks are resolved at save/update time.
Inference engine tools
These expose the inference engine to Claude. Detection and invalidation stay deterministic in memex; the only LLM step is synthesizing an inference's summary, and Claude does that, never memex.
get_signals(type?, status?), lists un-synthesized patterns. Defaults tonewand re-runs detection (dirty-flagged, so it's free on a static corpus). Use it when you ask "what threads are in my notes", "what haven't I synthesized", or "what should I write about".update_signal_status(id, status), dismiss noise so it never resurfaces, or snooze it. Claude confirms with you before dismissing.list_inferences(status?)/get_inference(id), read stored hypotheses. Staleness is re-checked first, so a changed source shows up asstale.mint_inference(...), persist a hypothesis.
Two guardrails make this safe to trust:
- Inferences are pull-only, never injected. They're excluded from
search_notesand never auto-loaded into Claude's context. Claude pulls them on purpose and cites them as hypotheses ([Inference #42, conf 0.78, from notes #1, #2]) never as facts you "know". This prevents the brain from echoing its own past guesses back as truth. - No auto-mint.
mint_inferencerequiresconfirmed: true, which Claude only sets after you explicitly approve. It presents the hypothesis in chat first; minting in the background is refused at the code level, not just by instruction.
On connect, the server greeting includes a startup count of new signals and stale inferences (a nudge to look), but never their content.
Claude's automatic behavior
Claude is configured to:
- Always search before answering any question that might relate to past conversations, decisions, or projects
- Save at end of conversation when technical decisions were made, key insights emerged, or you explicitly said "remember this"
- Prefer update over save when new content belongs with an existing note