
Palinode
Palinode gives your AI agent a git-versioned markdown folder as working memory. It exposes 25+ tools through MCP: save decisions and insights as typed markdown files, search them with hybrid BM25+vector retrieval, compact old entries with LLM-proposed merges, and audit any fact with git blame or diff. The same memory works across Claude Code, Cursor, Windsurf, and VS Code because the MCP server is stateless HTTP pointing at a shared REST API. Session-end hooks auto-capture conversations, the CLI burns 8x fewer tokens than MCP for cron jobs, and if the vector index corrupts you can still grep the markdown. Reach for this when you want agent memory you can read, diff, and roll back like code.
- GitHub stars
- 46
- tools
- 33
- auth
- Secret needed
- transport
- STDIO, HTTP
- env vars
- 7
- last updated
- Nov 11, 2026
Tools
33 toolsPublic tool metadata for what this MCP can expose to an agent.
session_initSession-start context digest for the resolved project scope
Session-start context digest for the resolved project scope
No parameter schema in public metadata yet.
searchHybrid BM25 + vector search with category filter; `resolve` attaches bounded evidence and a resolution per hit
Hybrid BM25 + vector search with category filter; `resolve` attaches bounded evidence and a resolution per hit
No parameter schema in public metadata yet.
resolveWhat memory holds right now for a question or one record — what stands, what replaced what, conflicts with both sides intact, and what is explicitly unknown
What memory holds right now for a question or one record — what stands, what replaced what, conflicts with both sides intact, and what is explicitly unknown
No parameter schema in public metadata yet.
saveStore a typed memory (person, decision, insight, project)
Store a typed memory (person, decision, insight, project)
No parameter schema in public metadata yet.
listBrowse memory files by type, filter by core status
Browse memory files by type, filter by core status
No parameter schema in public metadata yet.
readRead the full content of a memory file
Read the full content of a memory file
No parameter schema in public metadata yet.
ingestFetch a URL and save as research
Fetch a URL and save as research
No parameter schema in public metadata yet.
statusHealth check — file counts, index stats, service status
Health check — file counts, index stats, service status
No parameter schema in public metadata yet.
entitiesEntity graph — cross-references between memories
Entity graph — cross-references between memories
No parameter schema in public metadata yet.
consolidatePreview or run LLM-powered compaction
Preview or run LLM-powered compaction
No parameter schema in public metadata yet.
archiveRetire one memory that's wrong or obsolete — archive it, or supersede it with a named replacement
Retire one memory that's wrong or obsolete — archive it, or supersede it with a named replacement
No parameter schema in public metadata yet.
restoreBring an archived memory back into default recall — the inverse of archive
Bring an archived memory back into default recall — the inverse of archive
No parameter schema in public metadata yet.
unretractWithdraw one preference's mention-level retraction from one memory
Withdraw one preference's mention-level retraction from one memory
No parameter schema in public metadata yet.
forget_withdrawTake a forget request back — restore what it archived, un-strike what it retracted
Take a forget request back — restore what it archived, un-strike what it retracted
No parameter schema in public metadata yet.
archive_expiredArchive ephemeral memories whose TTL has expired
Archive ephemeral memories whose TTL has expired
No parameter schema in public metadata yet.
diffWhat changed in the last N days
What changed in the last N days
No parameter schema in public metadata yet.
blameTrace a fact back to the commit that recorded it
Trace a fact back to the commit that recorded it
No parameter schema in public metadata yet.
traceCompose a fact's full provenance lineage — sources, saved/changed commits, supersession, typed links, recall
Compose a fact's full provenance lineage — sources, saved/changed commits, supersession, typed links, recall
No parameter schema in public metadata yet.
historyGit history for a file with diff stats and rename tracking
Git history for a file with diff stats and rename tracking
No parameter schema in public metadata yet.
rollbackRevert a file to a previous commit (safe, creates new commit)
Revert a file to a previous commit (safe, creates new commit)
No parameter schema in public metadata yet.
pushSync memory to a remote git repo
Sync memory to a remote git repo
No parameter schema in public metadata yet.
triggerProspective recall — auto-inject when a topic comes up
Prospective recall — auto-inject when a topic comes up
No parameter schema in public metadata yet.
lintHealth scan — orphans, stale files, missing fields
Health scan — orphans, stale files, missing fields
No parameter schema in public metadata yet.
reviewAdvisory project-memory review that proposes corrective operations without writing them
Advisory project-memory review that proposes corrective operations without writing them
No parameter schema in public metadata yet.
session_endCapture summary, decisions, and blockers at end of session
Capture summary, decisions, and blockers at end of session
No parameter schema in public metadata yet.
promptList, show, or activate versioned LLM prompts
List, show, or activate versioned LLM prompts
No parameter schema in public metadata yet.
dedup_suggestBefore saving, surface existing files that overlap the draft
Before saving, surface existing files that overlap the draft
No parameter schema in public metadata yet.
orphan_repairFind semantic matches for broken [[wikilinks]]
Find semantic matches for broken [[wikilinks]]
No parameter schema in public metadata yet.
doctorFast diagnostic pass — 18+ checks across paths, services, config, index
Fast diagnostic pass — 18+ checks across paths, services, config, index
No parameter schema in public metadata yet.
doctor_deepFull diagnostic with canary write test (~10–15s)
Full diagnostic with canary write test (~10–15s)
No parameter schema in public metadata yet.
cluster_neighborsFind top-K semantically related files NOT already wiki-linked — surface implicit relationships for cross-link proposals
Find top-K semantically related files NOT already wiki-linked — surface implicit relationships for cross-link proposals
No parameter schema in public metadata yet.
topic_coverageGiven a short topic phrase, return whether any existing wiki page already covers it (binary covered / best_match / similarity)
Given a short topic phrase, return whether any existing wiki page already covers it (binary covered / best_match / similarity)
No parameter schema in public metadata yet.
dependsDependency tree (or unblocked-items list) from depends_on / blocks / parallel_with frontmatter on ProjectSnapshots
Dependency tree (or unblocked-items list) from depends_on / blocks / parallel_with frontmatter on ProjectSnapshots
No parameter schema in public metadata yet.
Sponsors
Configuration
PALINODE_DIR*Path to the markdown-memory directory (e.g. ~/.palinode). Created if missing.
PALINODE_API_HOSTdefault: 127.0.0.1Host where the back-end palinode-api process is reachable
PALINODE_API_PORTdefault: 6340Port for palinode-api
PALINODE_API_TOKENsecretOptional bearer token enforced on every palinode-api request other than /health. Required when PALINODE_API_BIND_INTENT=public. Generate with: python -c 'import secrets; print(secrets.token_urlsafe(32))'.
PALINODE_API_TOKEN_FILEsecretPath to a file containing the bearer token (alternative to PALINODE_API_TOKEN; for docker-secrets style deployments)
PALINODE_MCP_HTTP_HOSTdefault: 127.0.0.1Bind host for the MCP HTTP server. Defaults to loopback; set to 0.0.0.0 only with intentional network exposure (paired with PALINODE_API_BIND_INTENT=public on the back-end).
PALINODE_MCP_HTTP_PORTdefault: 6341Port for the MCP HTTP server
Readme
┌─ palinode ─┐
│ ░░░░░░░░░░ │
│ ▓▓▓▓▓▓▓▓▓▓ │
│ ██████████ │
└────────────┘
Inspectable, correctable project memory for coding agents.
Save a project decision and its reason once. A later session, in the same coding agent or a different one, can find it. You can see what was remembered, trace where it came from, and correct it when it is wrong.
Last week, you chose SQLite for a cache because it avoided operating a database. This week, a changed requirement makes PostgreSQL the better choice. Without the decision and its reason, a fresh agent can repeat the old approach. With Palinode, you save the replacement, retire the original without losing its history, and the next session searches and finds the current decision.
Details
- Repository
- github.com/phasespace-labs/palinode
- Website
- github.com/phasespace-labs/palinode
- Categories
- AI & LLM Tools, Developer Tools, Documents & Knowledge
- Package
palinode- Transport
- STDIO, HTTP
- Auth
- Required
- Registry
- MCP registry, active