Claude Code
Plugin
Section titled “Plugin”mor ships as a Claude Code plugin. Installing it gives you the MCP server (notes tools), slash commands (/mor:remember, /mor:notes-consolidate, /mor:notes-review), and skills automatically.
claude plugin marketplace add laat/morclaude plugin install morTo update to the latest version, uninstall and reinstall:
claude plugin uninstall morclaude plugin install morMCP server (manual)
Section titled “MCP server (manual)”If you prefer to configure the MCP server without the plugin, add to your Claude Code MCP config:
{ "mcpServers": { "mor": { "command": "mor", "args": ["mcp"] } }}See MCP Server for available tools and filtering options.
CLAUDE.md instruction
Section titled “CLAUDE.md instruction”Claude Code has its own built-in memory system. To make it check mor first, add this to ~/.claude/CLAUDE.md:
## Notes
When the user asks to recall, find, check, or reuse something theypreviously saved or remembered — use the `mor` MCP server tools(`notes_search`, `notes_read`, `notes_list`). This is the user'sprimary note store containing code snippets, files, and referencenotes. Always check mor before saying something wasn't found.Memberberry hook
Section titled “Memberberry hook”Auto-surface relevant notes on each prompt via a UserPromptSubmit hook. Instead of injecting full content, it outputs lightweight hints (title, ID, description) so Claude can decide whether to read more via MCP tools.
HTTP hook
Section titled “HTTP hook”Requires mor serve running. Add to ~/.claude/settings.json:
{ "hooks": { "UserPromptSubmit": [ { "hooks": [ { "type": "http", "url": "http://localhost:7677/hooks/memberberry" } ] } ] }}If you configured mor serve with a bearer token, add the Authorization header:
{ "hooks": { "UserPromptSubmit": [ { "hooks": [ { "type": "http", "url": "http://localhost:7677/hooks/memberberry", "headers": { "Authorization": "Bearer $MOR_TOKEN" }, "allowedEnvVars": ["MOR_TOKEN"] } ] } ] }}Shell hook
Section titled “Shell hook”Standalone alternative that doesn’t require mor serve:
mkdir -p ~/.claude/hooks && curl -sO --output-dir ~/.claude/hooks https://mor.yapping.no/hooks/memberberry.sh && chmod +x ~/.claude/hooks/memberberry.shScript source
#!/usr/bin/env bash# Memberberry hook for Claude Code# Hints at relevant mor notes so Claude can choose to read them.## Configure in ~/.claude/settings.json:# "hooks": {# "UserPromptSubmit": [{ "command": "/path/to/memberberry.sh" }]# }
set -euo pipefail
input=$(cat)session_id=$(echo "$input" | jq -r '.session_id')prompt=$(echo "$input" | jq -r '.prompt')
# Skip short prompts and slash commandsif [ ${#prompt} -lt 10 ] || [[ "$prompt" == /* ]]; then exit 0fi
cache_dir="/tmp/mor-memberberry"mkdir -p "$cache_dir"cache_file="$cache_dir/$session_id"touch "$cache_file"
hits=$(mor find "$prompt" --limit 3 --json 2>/dev/null) || exit 0
# Filter out already-surfaced notesnew=$(echo "$hits" | jq --slurpfile seen <(jq -R . "$cache_file") ' [.[] | select(.id as $id | $seen | map(select(. == $id)) | length == 0)]')
count=$(echo "$new" | jq 'length')[ "$count" -eq 0 ] && exit 0
# Record surfaced IDsecho "$new" | jq -r '.[].id' >> "$cache_file"
# Output hints — just enough for Claude to decide whether to read moreecho ""echo "[mor] Potentially relevant notes (use mor MCP tools to read if needed):"echo "$new" | jq -r '.[] | " - \(.title) [\(.id[0:8])]" + (if .description then " — \(.description)" else "" end)'Then add to ~/.claude/settings.json:
{ "hooks": { "UserPromptSubmit": [ { "command": "~/.claude/hooks/memberberry.sh" } ] }}Requires jq and mor on PATH.
Behavior
Section titled “Behavior”- Searches top 3 notes per prompt
- Deduplicates within a session (won’t re-surface the same note)
- Skips short prompts (<10 chars) and slash commands