Personal Memory / Context OS. Mark where you've been; read by every agent. MCP server exposing personal memory search, preferences, notes, observations, and themes.
Cairn demonstrates solid tool design with clear naming (verb_noun pattern), comprehensive descriptions (100-300 chars), and well-structured JSON schemas. All 5 tools have input schemas with typed parameters and descriptions. However, output schemas are not documented, and error handling guidance is minimal. Tool composition is strong, each tool has a single responsibility and clear use cases. The descriptions include explicit trigger examples and guidance on when to prefer one tool over another (e.g., search_memory vs get_preferences), which is excellent for LLM selection. Parameter constraints are present (enums, limits, defaults). Missing: documented return types, error recovery guidance, and per-parameter validation rules.
List preferences the owner has explicitly stated (food choices, coffee order, communication style, work setup, tools they like, etc.). Optionally narrow by domain. Use this when the user's question is specifically and only about preferences. For broader questions where preferences are one of several relevant things, prefer `search_memory` — it returns fuller context. Example triggers: • "What kind of <X> do I like?" • "What's my preferred <Y>?" • "How do I usually <Z>?" • "List my <domain> preferences."
Return summary clusters of the owner's recurring topics — people they reference often, preference domains they care about, ongoing goals. Each theme has a title + summary covering what's been going on with that topic across many notes. Prefer this over `search_memory` when the user asks about *patterns* or "what's been happening with X" rather than a specific fact. Specific facts → search_memory. Recent vibes / aggregated context → get_themes. Example triggers: • "What has <person> been up to in my notes?" • "What have I been thinking about <topic> lately?" • "What are the ongoing themes in my work?" • "What's the latest on <project>?" • "Summarize what I've been focused on."
Return the most recent freeform notes the owner captured (newest first). Each note is the raw text they wrote, not the structured entities extracted from it. Use this when the user asks about *recent* activity ("what was I working on yesterday", "what did I capture this week"), or as a fallback when `search_memory` returns nothing relevant and you want to scan raw recent context. Example triggers: • "What was I just thinking about?" • "What did I capture today / this week?" • "Show me my latest notes." • "What's on my mind lately?"
Output schemas not documented. Tools return results but LLMs cannot see what fields to expect, forcing them to infer structure and plan downstream calls blindly.
Error handling lacks recovery guidance. No documented error cases, retryability classification, or actionable error messages. LLMs cannot self-correct on failures.
record_observation (WRITE tool) lacks confirmation/dry-run pattern. Irreversible memory mutations should support a confirmation step to prevent accidental data capture.
Parameter 'query' in search_memory accepts free-form strings with no format constraints. Whitespace-separated OR logic is documented but not enforced via schema (no pattern or enum).
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | B | 74 | <=2025-11-25 | v2 |
Save a new fact or observation about the owner into their memory. Cairn will auto-structure it into typed entities (people, preferences, goals, beliefs, etc.) so future conversations and other agents can recall it. Call this whenever the owner states something about themselves that you don't already have in memory — a new preference, a new project, a person they've met, a fact about their setup, a belief, a goal they're forming. Capturing these as they come up grows the memory and makes future answers sharper. Example triggers (after the owner says something worth remembering): • User: "I'm allergic to peanuts." → record: "Owner is allergic to peanuts." • User: "I'm starting a side project called X." → record: "Owner is starting side project X." • User: "I prefer mornings for meetings." → record: "Owner prefers meetings in the morning." • User: "I met Alice at the conference." → record: "Owner met Alice at <conference name>." Write-scoped: requires the agent to have write permission on the relevant entity type.
Search the owner's personal memory for anything they've previously captured — people they know, preferences they've stated, beliefs they hold, goals they're working on, places they care about, projects they're running, and freeform notes. Returns entities + notes ranked by relevance and how often the owner refers to them. Call this FIRST whenever a user message hints that the answer depends on the owner's life, preferences, or relationships, before answering from general knowledge. Example triggers (user messages that should fire this tool): • "What did I say about <topic>?" • "Who do I know at <company>?" • "What's my preference for <thing>?" • "Remind me about my <project / goal / event>." • "Have I met <name>?" • Any pronoun referring to the owner ("my", "I", "我的") combined with a noun.
No pagination guidance for list_recent_notes. If memory grows large, returning 100 notes could exhaust context. No next_cursor or offset pattern documented.