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

ToolDescription
save_noteSave a note. Requires layer. Warns if a similar note already exists. Surfaces flashbacks.
search_notesHybrid semantic search with optional filters. Appends flashbacks for the top result.
list_notesList recent notes by creation date.
list_tagsAll tags with note counts.
list_foldersAll folders with note counts.
get_noteFull note content + backlinks by ID.
update_noteUpdate title, content, or tags. Refuses past notes (suggests an [Amendment] note) and rule notes (user-only).
delete_noteDelete a note by ID.
get_signalsDeterministic un-synthesized patterns (hidden_arc / stale_state / dangling_link / tag_burst).
update_signal_statusTriage a signal, dismiss noise or snooze for later.
list_inferencesList synthesized hypotheses (re-checks staleness first).
get_inferenceOne inference with full provenance (evidence + change/delete markers).
mint_inferencePersist an approved hypothesis. Requires explicit confirmation.

search_notes parameters

ParameterTypeDescription
querystringThe search query (natural language)
limitnumberMax results (default 10)
categorystringFilter to a specific folder
tagstringFilter by tag
date_fromstringISO 8601 date, only notes on or after this date
date_tostringISO 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:

  1. Call list_tags and list_folders to see existing taxonomy
  2. Pick from existing tags/folders rather than inventing new ones
  3. 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 with error: '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 with error: '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.

EnvDefaultBehaviour
MEMEX_INJECT_RULESenabledSet to 0 to disable injection entirely
MEMEX_RULES_MAX_CHARS8000Byte 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:

EnvDefaultMeaning
MEMEX_FLASHBACK_DAYS90minimum age gap, in days
MEMEX_FLASHBACK_DIST0.4maximum vector distance (lower = stricter)
MEMEX_FLASHBACK_LIMIT3max suggestions per surface

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 to new and 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 as stale.
  • mint_inference(...), persist a hypothesis.

Two guardrails make this safe to trust:

  1. Inferences are pull-only, never injected. They're excluded from search_notes and 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.
  2. No auto-mint. mint_inference requires confirmed: 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