Palinode — Claude Code MCP server: what it does, how to install
Keeps project memory in Git-tracked Markdown files for AI agents. It prevents agents from repeating discarded technical choices across coding sessions.
claude mcp add --env PALINODE_DIR=<PALINODE_DIR> --env PALINODE_API_HOST=<PALINODE_API_HOST> --env PALINODE_API_PORT=<PALINODE_API_PORT> --env PALINODE_API_TOKEN=<PALINODE_API_TOKEN> --env PALINODE_API_TOKEN_FILE=<PALINODE_API_TOKEN_FILE> --transport stdio palinode -- uvx palinodeWhat Palinode does
Palinode uses plain Markdown files with YAML headers as the ground truth for agent context. A file watcher updates a single SQLite index that couples FTS5 keyword indexing with vector search. The hybrid engine merges both streams with Reciprocal Rank Fusion. This pairs exact identifier matches with semantic queries.
Periodic compaction consolidates records into clean summaries. Every compaction becomes a Git commit. Your agent can run palinode_diff, check lines with palinode_blame, or undo bad edits with palinode_rollback. Hybrid indexing will fail without Python 3.11+, Git, and Ollama serving the bge-m3 model or a configured remote endpoint.
What it helps with
- retain technical decisions across separate agent sessions
- query past project context with hybrid keyword and vector retrieval
- inspect note history with git blame and diff tools
- revert mistaken memory updates via rollback tools
Example prompts for the agent
- Search project memory for why we migrated from SQLite to PostgreSQL.
- Save our architectural decision to adopt Redis for job queues.
- Inspect the blame and diff for the latest database caching note.
How to install Palinode
Platform CLI
claude mcp add --env PALINODE_DIR=<PALINODE_DIR> --env PALINODE_API_HOST=<PALINODE_API_HOST> --env PALINODE_API_PORT=<PALINODE_API_PORT> --env PALINODE_API_TOKEN=<PALINODE_API_TOKEN> --env PALINODE_API_TOKEN_FILE=<PALINODE_API_TOKEN_FILE> --transport stdio palinode -- uvx palinodeReplace <…> with your own values. 2 more environment variables are in the server README. uvx runs the command named after the package; if the README names another one, use uvx --from palinode <command>
Platform CLI
codex mcp add palinode --env PALINODE_DIR=<PALINODE_DIR> --env PALINODE_API_HOST=<PALINODE_API_HOST> --env PALINODE_API_PORT=<PALINODE_API_PORT> --env PALINODE_API_TOKEN=<PALINODE_API_TOKEN> --env PALINODE_API_TOKEN_FILE=<PALINODE_API_TOKEN_FILE> -- uvx palinodeReplace <…> with your own values. 2 more environment variables are in the server README. uvx runs the command named after the package; if the README names another one, use uvx --from palinode <command>
Config file
{
"mcpServers": {
"palinode": {
"command": "uvx",
"args": [
"palinode"
],
"env": {
"PALINODE_DIR": "<PALINODE_DIR>",
"PALINODE_API_HOST": "<PALINODE_API_HOST>",
"PALINODE_API_PORT": "<PALINODE_API_PORT>",
"PALINODE_API_TOKEN": "<PALINODE_API_TOKEN>",
"PALINODE_API_TOKEN_FILE": "<PALINODE_API_TOKEN_FILE>"
}
}
}
}Replace <…> with your own values. 2 more environment variables are in the server README. uvx runs the command named after the package; if the README names another one, use uvx --from palinode <command>
Config file
{
"servers": {
"palinode": {
"type": "stdio",
"command": "uvx",
"args": [
"palinode"
],
"env": {
"PALINODE_DIR": "<PALINODE_DIR>",
"PALINODE_API_HOST": "<PALINODE_API_HOST>",
"PALINODE_API_PORT": "<PALINODE_API_PORT>",
"PALINODE_API_TOKEN": "<PALINODE_API_TOKEN>",
"PALINODE_API_TOKEN_FILE": "<PALINODE_API_TOKEN_FILE>"
}
}
}
}Replace <…> with your own values. 2 more environment variables are in the server README. uvx runs the command named after the package; if the README names another one, use uvx --from palinode <command>
Platform CLI
gemini mcp add -e PALINODE_DIR=<PALINODE_DIR> -e PALINODE_API_HOST=<PALINODE_API_HOST> -e PALINODE_API_PORT=<PALINODE_API_PORT> -e PALINODE_API_TOKEN=<PALINODE_API_TOKEN> -e PALINODE_API_TOKEN_FILE=<PALINODE_API_TOKEN_FILE> palinode uvx palinodeReplace <…> with your own values. 2 more environment variables are in the server README. uvx runs the command named after the package; if the README names another one, use uvx --from palinode <command>
Step by step, with commands for each platform: How to add an MCP server to Claude Code, Codex, Cursor, VS Code, Gemini CLI and more
Questions about Palinode
How to install Palinode in Claude Code?
Run `claude mcp add palinode -e PALINODE_DIR=<PALINODE_DIR> -e PALINODE_API_TOKEN=<PALINODE_API_TOKEN> -e PALINODE_API_TOKEN_FILE=<PALINODE_API_TOKEN_FILE> -- uvx palinode`. Replace the placeholders with your actual directory path and token credentials.
What does Palinode do?
It provides inspectable project memory stored in versioned Markdown files. It queries those files through SQLite with FTS5 and vector search, letting agents recall, update, and revert decisions.
What dependencies are required for Palinode to run?
The server requires Python 3.11+, Git, and an active Ollama instance with bge-m3 or another supported embedding provider.