cairn
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
No arguments | |||
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 is the project's Cairn brain: ideas, tasks, decisions, notes and a daily journal kept as plain Markdown in the repo. Before answering questions about why the project works the way it does, search it (decisions record the reasons). When the user settles on something, capture it as a decision; when work is agreed, capture a task; when you finish a step, log it to the journal and move the task with update_note. Call context first for a one-page brief of open tasks, accepted decisions and active ideas.
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
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| searchA | Search ideas, tasks, decisions, notes and journal pages. Every word must match; titles and tags rank first. Use it before answering 'why did we...' questions. |
| read_noteA | Read one note in full (frontmatter and Markdown body) plus the notes that link to it. |
| list_notesB | List notes, optionally filtered by type, status (e.g. task todo/doing/done, decision accepted) or tag. |
| contextA | One-page project brief: goals, open tasks, accepted decisions, active ideas and the recent log. Read this first. |
| recentB | What happened lately: journal entries of the last N days and the most recently changed notes. |
| code_todosB | TODO, FIXME and HACK comments found in the repo's code, with file:line. |
| captureA | Create a note from one line. Prefix picks the kind: 'idea:', 'todo:', 'decision:', 'note:', 'feedback:'; #tags become tags. Example: 'decision: cache in SQLite, not Redis #storage'. |
| update_noteA | Change a note in place: set its status (task todo/doing/done, idea raw/exploring/ready/parked, decision proposed/accepted/superseded), add or remove tags, or append Markdown. Other fields are kept as they are. |
| logA | Add a timestamped line to today's journal page. 'todo:'/'idea:'/'decision:' lines also create that note and link it. |
| precedent_briefB | Before starting a delegated goal: a brief built from the user's own history. Draft Definition of Done, hidden asks (what they asked for next after similar goals), closest past prompts, lessons, related notes, their working profile, the queue and the work loop. |
| queue_nextA | The next open item of the work queue (tasks tagged #queue), skipping items blocked on the user (#needs-me). |
| queue_addA | Add a follow-up to the work queue instead of asking the user. auto: safe to run unattended; needs_me: blocked until the user acts (a login, a purchase, a decision only they can make). |
| precedent_logA | When a goal is done: record what was delivered and any correction the user made, so the next brief learns from it. queue_path also marks that queue task done. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
| project-brief | Open tasks, accepted decisions, active ideas and the recent log, as context for this chat. |
| precedent | Hand over a goal: the brief from your own precedents plus the loop to build, verify, publish and log it without check-ins. |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
| context | Open tasks, accepted decisions, active ideas, recent log |
| 0001-plain-markdown-in-the-repo | decision (accepted) |
| 0002-github-is-the-backend | decision (accepted) |
| 0003-no-vanity-metrics | decision (accepted) |
| 0004-sign-in-through-a-tiny-worker | decision (accepted) |
| agents-as-members | idea (ready) |
| cross-brain-links | idea (raw) |
| proof-of-work-profiles | idea (exploring) |
| structured-debates | idea (exploring) |
| 2026-11-05 | journal |
| claim-built-cairn | note |
| design-principles | note |
| collect-feedback | task (doing) |
| debate-note-type | task (todo) |
| editorial-redesign | task (done) |
| explore-and-profiles | task (done) |
| join-requests-inbox | task (todo) |
| mcp-server | task (todo) |
| ship-v1 | task (done) |
| sign-in-with-github | task (done) |
TDQS
Scored across 13 tools
Most tools have clearly distinct roles: read_note (single full note), list_notes (filtered enumeration), search (keyword match), capture (create), update_note (mutate). The main overlap is between summary-style tools — context, recent, precedent_brief and queue_next all answer variants of 'what should I look at' — but the descriptions draw usable boundaries (project brief vs. recent activity vs. pre-goal history vs. next queue item).
There is a loose family pattern (read_note, list_notes, update_note, queue_add, queue_next, precedent_brief, precedent_log) but it is mixed with bare nouns/verbs: search, context, recent, capture, log, code_todos. The prefix grouping (note/queue/precedent) helps readability, yet the overall convention is inconsistent.
13 tools sits comfortably in the sensible range for a notes/tasks/decisions server and each maps to a real operation. A few (precedent_brief, precedent_log) are narrow, workflow-specific additions rather than core surface, so the set is slightly heavier than strictly necessary.
Creation (capture, log, queue_add), retrieval (search, read_note, list_notes, context, recent) and in-place mutation (update_note) are covered, but there is no delete, archive, or supersede-by-removal operation for notes, and journal entries appear append-only. Queue items can only be completed indirectly via precedent_log's queue_path, leaving dead ends for basic lifecycle management.