grainjournal
An MCP-native journaling server that prompts one question per day and captures your responses verbatim, with no AI rewriting or analysis. It integrates with Claude Desktop, Cline, or cron scripts, storing everything as markdown in your vault.
README
grainjournal
MCP-native journaling with verbatim capture.
A Model Context Protocol server that prompts you to journal one question per day and captures your answers verbatim — no AI reads your words, no AI rewrites them, nothing added.
Why
The journaling space has apps that ingest your raw material and give you back "insights." grainjournal does the opposite. It's a philosophical position: your journal is yours. We don't touch your words. We just make it easier to write and preserve exactly what you wrote.
- MCP-native. Works as an MCP server — integrate it with Claude Desktop, Cline, your AI agent, or run it as a standalone cron job.
- Prompt sequencing. One prompt per day from a curated sequence. Build a life narrative over weeks, not a firehose of generic questions.
- Verbatim capture. When you write, we copy your exact words. Nothing summarized, nothing rewritten, nothing analyzed.
- Markdown as platform. Prompts are
.mdfiles in your vault. Responses are.mdfiles in your vault. Sync is whatever sync you already use. - Silence is fine. If you write nothing, nothing happens. No nudge, no guilt, no follow-up.
Quick Start
Prerequisites
- Python 3.10+
- An Obsidian vault (or any directory of markdown files)
Install
pip install grainjournal-mcp-server
Run as MCP Server
grainjournal --vault ~/my-vault/Journal
This starts the MCP server on stdio transport. Configure it as an MCP client tool in Claude Desktop, Cline, or any MCP-compatible agent.
Run as Cron Scripts
Two standalone scripts:
# Morning — writes today's prompt (run daily ~8AM)
grainjournal-prompt --vault ~/my-vault/Journal
# Evening — checks for written content (run daily ~10PM)
grainjournal-check --vault ~/my-vault/Journal
Or set the GRAINJOURNAL_VAULT environment variable:
export GRAINJOURNAL_VAULT=~/my-vault/Journal
grainjournal-prompt
grainjournal-check
MCP Tools
journal_prompt
Writes today's journal prompt note. One prompt per day from a curated sequence. Idempotent — safe to call multiple times.
Optional parameter: custom_prompt — override today's prompt with your own.
journal_check
Checks today's journal note for user-written content. If content exists beyond the header, captures it verbatim to the resume base. Silent if empty.
The Prompt Sequence
The initial sequence walks through a resume-gap meditation — one question per day:
- Your first job after college
- The bridge between disciplines
- Specific roles and what you did
- Education and study
- A turning-point project
- Your narrative thread — the story you tell yourself
After the sequence wraps, it cycles back with room for custom prompts.
Architecture
grainlocal/Journal/ ← Your Obsidian vault (or any .md directory)
├── 2026-07-12 Journal Prompt.md ← Written by Cron A / journal_prompt
├── 2026-07-12 Journal.md ← Written by you (in Obsidian)
├── 2026-07-13 Journal Prompt.md
├── 2026-07-13 Journal.md
└── .grainjournal-state.json ← Tracking state (auto-managed)
grainjournal-mcp-server/
├── grainjournal/
│ ├── server.py ← MCP server entrypoint
│ ├── vault.py ← Obsidian vault read/write
│ ├── prompts.py ← Prompt sequence + state tracking
│ └── scripts/
│ ├── write_prompt.py ← Cron A
│ └── check_content.py ← Cron B
└── pyproject.toml
Philosophy
The field is surprisingly empty where grainjournal sits:
- MCP-native journaling doesn't exist yet. The entire ecosystem of MCP journal servers is 5 repos with zero stars.
- Verbatim capture is a philosophical position. No tool in this space explicitly says "I will not touch your words."
- Your existing tools, your way. Not a standalone app — works inside whatever you already have.
License
MIT — use it, fork it, build on it. That's the point.
Recommended Servers
playwright-mcp
A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.
Magic Component Platform (MCP)
An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.
Audiense Insights MCP Server
Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.
VeyraX MCP
Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.
graphlit-mcp-server
The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.
Kagi MCP Server
An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.
Neon Database
MCP server for interacting with Neon Management API and databases
E2B
Using MCP to run code via e2b.
Exa Search
A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.
Qdrant Server
This repository is an example of how to create a MCP server for Qdrant, a vector search engine.