phasespace-labs avatar

Palinode

phasespace-labs/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 tools

Public 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.1

Host where the back-end palinode-api process is reachable

PALINODE_API_PORTdefault: 6340

Port for palinode-api

PALINODE_API_TOKENsecret

Optional 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_FILEsecret

Path to a file containing the bearer token (alternative to PALINODE_API_TOKEN; for docker-secrets style deployments)

PALINODE_MCP_HTTP_HOSTdefault: 127.0.0.1

Bind 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: 6341

Port 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.


View the full README on GitHub

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

Related AI & LLM Tools MCP servers

View all
1raphasouthall avatarNeuroStackraphasouthall/neurostackToken-efficient MCP memory for Markdown vaults. Tiered search, GraphRAG, AI memories.43stars
2mybolide avatarMcp Probe Kitmybolide/mcp-probe-kitSpec-driven dev workflow MCP: start_* orchestration, memory, GitNexus, quality gates.41stars
3artkeyai avatarbhivedartkeyai/bhived-mcpShared memory for AI agents: query proven fixes, avoid known mistakes, and find skills and MCPs.35stars
4diaaaj avatarA Mem Mcpdiaaaj/a-mem-mcpSelf-evolving memory system for AI agents34stars
5oomkapwn avatarEnquire Mcpoomkapwn/enquire-mcpLong-term memory for AI agents — your Obsidian vault as searchable persistent memory.34stars
6selvage-lab avatarSelvageselvage-lab/selvageAn LLM-based code review MCP server with AST-powered smart context extraction33stars