MDPlanner Setup
Last updated: March 12, 2026
MDPlanner Setup
MDPlanner is the single source of truth for tasks, notes, decisions, and
progress. It runs in a container and exposes an MCP endpoint that Claude connects
to.
Container Setup
The compose.yml and .env.example are at the cerveau.dev root:
cd cerveau.dev
cp .env.example .env
Edit .env:
MDPLANNER_MCP_TOKEN=replace-with-a-random-secret
MDPLANNER_BRAINS_CONFIG=/cerveau/_configs_/brains.json # enables Brain Manager UI
MDPLANNER_CACHE=1 # enables SQLite FTS5 full-text search
MDPLANNER_BACKUP_INTERVAL=24 # daily backups
MDPLANNER_BRAINS_CONFIG points to brains.json inside the container.
The compose.yml mounts cerveau.dev/ at /cerveau and ~/.claude at
/root/.claude, so the path above works out of the box.
Generate a token:
openssl rand -hex 32
Initialize the Data Directory
Before starting the container for the first time, initialize the data directory:
podman run -it --rm -v ./data:/data ghcr.io/studiowebux/mdplanner:latest init /data
This creates the required folder structure and default files inside ./data.
Generate the Encryption Secret
MDPlanner encrypts sensitive values (GitHub and Cloudflare tokens). Generate a
secret key and add it to .env:
podman run -it --rm ghcr.io/studiowebux/mdplanner:latest keygen-secret
Copy the output and add it to .env:
MDPLANNER_SECRET_KEY=<output from keygen-secret>
Without
initthe server will fail to start. WithoutMDPLANNER_SECRET_KEY
tokens are stored in clear text — set it to enable encryption at rest.
Start:
podman compose up -d
Verify:
curl -s http://localhost:8003/health
Open http://localhost:8003 to confirm the UI loads.
Connect the Brain
Run this from inside your brain directory:
cd cerveau.dev/_brains_/myapp-brain
claude mcp add --transport http mdplanner \
http://localhost:8003/mcp \
--header "Authorization: Bearer YOUR_TOKEN_HERE"
Replace YOUR_TOKEN_HERE with the value from .env.
Verify:
claude mcp list
# mdplanner http http://localhost:8003/mcp
Session Workflow
Claude uses MDPlanner throughout every session:
Boot
- Calls
get_context_pack— single MCP call returning active milestone,
in-progress tasks, top todo tasks, most recent progress note, and decision
and architecture note titles - Checks git state: current branch, recent commits, open PRs
Work
- Creates/updates task comments as work progresses
- Moves tasks to Pending Review after commit (owner moves to Done after verification)
Write Back
- Records decisions as MDPlanner notes
- Logs bugs discovered during work
- Updates architecture notes when structure changes
Close
- Writes a progress note (required by
stop-progress-checkhook) - Leaves unfinished tasks In Progress (Boot resumes them next session)
Hard Rules
| Rule | Description |
|---|---|
| Ticket before work | No code changes without an MDPlanner task |
| One task at a time | Only one task in In Progress |
| Never mark complete | Only the human sets completed: true |
| Never edit decisions | Supersede decision notes; never modify them |
Self-Hosting
MDPlanner is open source: https://github.com/studiowebux/mdplanner
The container image is ghcr.io/studiowebux/mdplanner:latest. Data persists in
the ./data volume.
For the full list of environment variables, see the MDPlanner README.