Private Journal MCP Server
MCP server for a private Claude journal: logs reflections, observations and project notes locally and searches them by meaning, with no outbound calls
- 457 ★ on the repository
- Last commit
- MIT
Extended access
Why this level
- Writes personal reflections and technical notes to the home directory and project repository without encryption
- On first run downloads and runs an embeddings model that processes every entry's text on the machine
Install
- Works in
In your terminal, with SkillFoxx CLI
npx skillfoxx add mcp/private-journal-mcp-serverDetects the agents on your machine, shows the access level and pins the version.
Other ways to install
Access and checks
How we reviewExtended accessThe tool runs code or makes network calls and only reads external data.
- Writes personal reflections and technical notes to the home directory and project repository without encryption
- On first run downloads and runs an embeddings model that processes every entry's text on the machine
This is third-party code. Review the repository files before installing.
What it does
Private Journal MCP Server gives Claude a process_thoughts tool with six optional sections: reflections, observations, project_notes, user_context, technical_insights, world_knowledge. Project notes land in a .private-journal folder inside the repository, personal thoughts and user observations go to ~/.private-journal in the home directory. Each entry gets a microsecond timestamp and a YAML header. Search runs through search_journal: a natural-language query is turned into a vector by the @xenova/transformers model and compared against the embedding files of every entry. All of this runs on the machine, with no outbound API calls. list_recent_entries shows recent entries for a chosen number of days, and read_journal_entry opens one file by the path a search result returned. The server starts through npx with no install: the MCP configuration points the command at npx with the argument github:obra/private-journal-mcp. The PRIVATE_JOURNAL_PATH variable moves both the project and the personal journal into one directory, useful for containers where the usual home-directory lookup does not apply.
Who it is for. For developers who want Claude Code to keep technical observations and project context between sessions and find them by meaning, not by exact word match.
Good fit when
- Claude Code hits a project detail worth remembering next session, and process_thoughts with the project_notes section captures it
- An old note needs to surface by meaning rather than an exact phrase: search_journal with a result limit and a section filter
- Several projects share one machine, and each project's entries should stay next to its repository in .private-journal
- A container environment has no normal home directory: PRIVATE_JOURNAL_PATH sets one path for both the project and personal journal
- Checking what Claude logged recently through list_recent_entries filtered to project or user
Not a fit when
- A team needs a shared knowledge base: the journal is local to one machine and does not sync between people
- Entries must survive project restructuring predictably: search depends on embedding files regenerated on startup
- You want notes in one file for manual editing: the format spreads them across dated folders with a separate embedding file per entry
- You need sync with an external notes service: the server never sends data to any service
Example request
Write to the private journal why we chose this cache structure, and find my old notes about testing this moduleMCP
- Transport
- stdio
- Authentication
- not required
Environment variables
PRIVATE_JOURNAL_PATH- Moves both the project and personal journal into one chosen directory instead of the separate default paths.
Limitations
Search runs only locally through the @xenova/transformers model, so the first launch spends time downloading the model and building an index over every existing entry. The journal is not encrypted: files sit in plain text in .private-journal and the home directory, readable by anyone with filesystem access. .private-journal ends up in the repository unless it is added to .gitignore, risking a commit of personal notes. The server offers no way to delete or edit a single entry: the only cleanup is removing files by hand.
How to disable. Remove the private-journal entry from the MCP client configuration. The .private-journal folder in the project and ~/.private-journal in the home directory can be deleted by hand if the entries are no longer needed: the server does not touch them once removed from the config.
FAQ
How do I install Private Journal MCP in Claude Code?
Run claude mcp add-json private-journal '{"type":"stdio","command":"npx","args":["github:obra/private-journal-mcp"]}' -s user. The server runs through npx with no separate install.
Where are journal entries stored?
Project notes live in a .private-journal folder inside the repository, and personal thoughts and user observations go to ~/.private-journal. PRIVATE_JOURNAL_PATH moves both journals into one chosen directory.
How does search work if I don't remember the exact phrase?
search_journal turns the query into a vector with the local @xenova/transformers model and compares it to entries' embedding files, so it finds entries close in meaning, not just matching words.
Does any journal data leave the machine?
No. All processing, including building search vectors, runs locally; the server makes no outbound API calls and does not sync files to any service.
How do I keep the project journal out of git?
Add .private-journal to the repository's .gitignore. The server does not exclude the folder from version control on its own.
Discussion
No questions or reviews yet.
Related
MCP serversMinutes
minutes
A local-first MCP server for meeting memory: on-device recording and transcription into Markdown, searchable from Claude Code, Codex, Cursor and any MCP client
A local MCP server for safe read, search and edit of notes in an Obsidian vault, restricted to the vault root
Obsidian MCP Server
obsidian-mcp-server
An MCP server for an Obsidian vault: read, search and precisely edit notes, sections, frontmatter and tags
Obsidian MCP
obsidian-mcp
A local MCP server for Obsidian vaults: reads and edits explicitly configured folders of Markdown files, Obsidian need not be open
An MCP server for an Obsidian vault via the Local REST API plugin: search, read, append and patch notes
A Rust MCP server for a folder of Markdown notes: an agent searches and reads notes and sees backlinks, tags, tasks and version history
Comparison with similar tools
Entries that share the main search query, and how they differ.
| Entry | Official | Authentication | Repository stars | Main difference |
|---|---|---|---|---|
| Private Journal MCP Server (this entry) | no | not required | 457 | |
| MegaMemory | no | not required | 725 | an entity and decision graph for coding agents, not a personal journal with user-context sections |
| OpenContext | no | 1,269 | a CLI project-context store for reuse across sessions, with no personal-observations section |
README in short
The front page covers the four MCP tools and the entry format with its YAML header and category sections. The configuration section shows a one-liner for Claude Code and a manual JSON snippet for other clients, plus the PRIVATE_JOURNAL_PATH variable and the --journal-path CLI flag. The README ends with tips for prompting Claude to use the journal more often.