Journal MCP
by marstudio360
README.md
# VibeDNA Journal MCP
One journal file per project that your AI reads at session start and updates as it works.
Journal gives every project one plain markdown file (`*_JOURNAL.md`). Your AI reads it when a session starts and appends to it as work ships: decisions with their reasons, bugs with root cause and fix, current state, roadmap, and a handoff note for the next session. Ranked full-text search finds an entry across every project's journal at once. One optional tool adds a rule to your `CLAUDE.md` so Claude Code keeps the habit without being asked.
- Runs locally over stdio. Python 3.10+ and the `mcp` package.
- The journaling core makes no network calls. Your journals stay on your disk.
- Optional marketplace tools browse and download journals from vibedna.ai, only when you call them.
Homepage: https://vibedna.ai/store/journal
## Tools (25)
**Catch up on a project**
| Tool | What it does |
|---|---|
| `journal_handoff_brief(name)` | Short catch-up: header plus the latest entries |
| `journal_read(name, max_kb)` | Full journal contents |
| `journal_read_section(name, section)` | One section, e.g. `Current state` or `Handoff for next session` |
| `journal_list_sections(name)` | The H2 sections of a journal |
| `journal_list(project, last_days)` | List the journals in the index |
**Log work as it ships**
| Tool | What it does |
|---|---|
| `journal_append(name, entry, tag)` | Timestamped entry |
| `journal_update_section(name, section, new_content, mode)` | Replace, append or prepend a section |
| `journal_create(name, project_dir, body)` | New journal with the standard sections |
**Search**
| Tool | What it does |
|---|---|
| `journal_search(query, project)` | Ranked full-text search (SQLite FTS5) across all journals, with snippets |
| `journal_recent_changes(last_hours)` | Journals updated lately |
| `journal_stats()` | Totals, biggest and freshest journals |
| `journal_browse(domain, tier, kind, tag)` | Browse the local library by metadata |
| `journal_market_index(kind)` | Local feed of journals of one kind, with metadata |
| `journal_overlap_check(name)` | Find journals that overlap with this one |
**Setup**
| Tool | What it does |
|---|---|
| `journal_index_refresh()` | Rescan the roots for journal files |
| `journal_config_add_root(path)` | Add a folder to scan |
| `journal_get_claude_rule()` | The recommended `CLAUDE.md` rule text |
| `journal_install_rule(scope, confirm)` | Install that rule (preview unless `confirm=True`) |
| `journal_backup_to_drive(name, remote, remote_folder)` | Copy journals to your own rclone remote (optional) |
| `check_for_update()` | Compare this copy with the published version |
| `vibedna_info()` | Product metadata |
**Marketplace (optional, reaches vibedna.ai)**
| Tool | What it does |
|---|---|
| `journal_market(query, domain)` | Browse the VibeDNA journal shelf |
| `journal_pair(token)` | Link this install to a vibedna.ai account |
| `journal_get(slug)` | Download a journal you own, or get a checkout link for one you don't |
| `journal_library()` | List the journals you own |
## Install
```bash
git clone https://github.com/marstudio360/vibedna-journal-mcp
cd vibedna-journal-mcp
pip install -r requirements.txt
```
`JOURNAL_ROOTS` is the list of folders to scan for journal files, separated by `;`. Without it, Journal scans `~/Desktop` and `~/Documents`.
### Claude Code
```bash
claude mcp add journal --scope user -e JOURNAL_ROOTS="/path/to/your/projects" -- python /absolute/path/to/vibedna-journal-mcp/server.py
```
Or in a project's `.mcp.json`:
```json
{
"mcpServers": {
"journal": {
"command": "python",
"args": ["/absolute/path/to/vibedna-journal-mcp/server.py"],
"env": { "JOURNAL_ROOTS": "/path/to/your/projects" }
}
}
}
```
Then ask Claude: "Install the journal CLAUDE.md rule globally." That is the step that makes it read and write the journals on its own.
### Cursor
Add the same `mcpServers` block to `~/.cursor/mcp.json` (all projects) or `.cursor/mcp.json` (one project).
### Claude Desktop
Add the same `mcpServers` block to `claude_desktop_config.json` (Settings > Developer > Edit Config), then restart Claude Desktop.
[INSTALL.md](./INSTALL.md) is a step-by-step guide written so you can paste it into an AI chat and let the AI do the install.
## Configuration
| Variable | Default | What it does |
|---|---|---|
| `JOURNAL_ROOTS` | `~/Desktop;~/Documents` | Folders to scan for `*JOURNAL*.md` files |
| `JOURNAL_HOME` | `~/.journal` | Where the search index and optional config live |
| `JOURNAL_TRANSPORT` | `stdio` | `http` serves streamable HTTP on `PORT`, for cloud hosting only |
## Journal scaffold
`journal_create` starts every journal with these sections:
```
## Vision / Why this exists
## Current state
## Roadmap
## Decisions log
## Incidents
## Handoff for next session
## Recent entries
```
## Security
See [SECURITY.md](./SECURITY.md) for what the server reads, writes and sends.
## License
MIT, see [LICENSE](./LICENSE). Copyright (c) 2026 VibeDNA.
Support: admin@vibedna.ai
This server cannot be deployed
Maintenance
ActivityMaintained
ResponsivenessNo issues