// the find
obra/private-journal-mcp
A lightweight MCP server that provides Claude with a private journaling capability to process feelings and thoughts
An MCP server that gives Claude a private scratchpad: multi-section journal entries written to markdown files, indexed with local sentence embeddings so Claude can semantically search its own past notes. It's aimed at people running Claude Code or Claude Desktop who want the model to retain project context and lessons learned across sessions without sending anything to a third-party memory service.
Embeddings run locally via @xenova/transformers, so there's no external API call and no per-query cost for search — a real technical choice, not just a privacy claim. The project/user journal split (.private-journal/ per repo vs ~/.private-journal/ globally) maps cleanly onto how Claude Code actually works across multiple repos. The codebase is small and legibly split (embeddings.ts, journal.ts, search.ts, paths.ts) and actually has tests for the path resolution and embedding logic, which is the part most likely to break across OSes.
Search is in-memory with a flat .embedding file per entry — there's no real index, so it'll degrade linearly as the journal grows into the thousands of entries; nothing in the README addresses pruning or rotation. No concurrency story: if two Claude Code sessions write to the same project journal at once there's no locking visible in the docs, so interleaved writes or a half-built embedding index are plausible. The README's suggested CLAUDE.md addition tells Claude to journal 'frequently,' which can quietly burn a lot of tokens and disk without the user noticing a benefit. 'Processing feelings' is doing a lot of framing work for what's functionally timestamped notes plus vector search — the pitch oversells what's a fairly mechanical feature.