Skip to main content
Glama
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