databasedmcp gives your AI assistant databases it keeps between conversations, so everything in this article works from the day you connect it. Free to start, no card.
Get started freeWhy build it yourself
A Day One habit is usually a short entry most days: what happened, how it felt, where you were. What brings you back is looking back, at this day a year ago or at how a hard month went.
That's two tables. Talking is often easier than writing: tell Claude about your day the way you'd tell a friend. It keeps your words as the entry, with a mood and a few tags. Looking back is a query on the date, which means "what was I doing this time last year?" has an answer.
Connect Claude to databasedmcp
databasedmcp is a remote MCP server that gives AI assistants private SQLite databases, with nothing to install.
In Claude on the web, desktop or mobile, open Settings → Connectors, choose Add custom connector and enter https://databasedmcp.com/mcp. Select Connect, sign in to databasedmcp with your email or Google, and select Allow. Then turn databasedmcp on for a conversation from the tools menu.
Claude asks before it runs anything that changes or deletes data. Reading runs without asking.
Any other MCP client works the same way; the docs have the details.
Copy this prompt to build it
Paste this into Claude to set up the database, its tables and its guide in one go. The rest of this article walks through what it makes and how you use it.
Set up a journal for me in databasedmcp, in one go. 1. Create a database called journal, described as "My journal: one entry per day or more, with mood, place and tags, written by Claude from what I tell it". 2. Create two tables: - entries: id, written_on (date, defaults to today), body (required, in my words, lightly tidied, never summarised away), mood (1 is a rough day, 5 is a great one; optional), place (optional), created_at (defaults to now). - entry_tags: entry_id (references entries), tag (lowercase word), one row per pair. 3. Write the database a guide that says what each table is for, to keep my words rather than rewrite them, that adding to today's entry means appending to its body, and the queries for "on this day in past years", "mood by month" and "entries with a tag". From then on: whenever I describe my day, write an entry for it with a mood if I give one and a few tags. If I add more later the same day, append to that entry. When I ask about the past, search my entries. Show me the tables when you're finished.
Ask for the database
You don't write the schema. Describe what you want:
Set up a journal in databasedmcp: entries with the date, my words, a mood from 1 to 5, the place and some tags. Write down whatever I share about my day.
Claude creates a database called journal and its tables:
CREATE TABLE entries (
id INTEGER PRIMARY KEY,
written_on TEXT NOT NULL DEFAULT (date('now')),
body TEXT NOT NULL,
mood INTEGER CHECK (mood BETWEEN 1 AND 5),
place TEXT,
created_at TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP
);
CREATE TABLE entry_tags (
entry_id INTEGER NOT NULL REFERENCES entries(id),
tag TEXT NOT NULL,
PRIMARY KEY (entry_id, tag)
);
It also writes the database a guide on how the tables are meant to be used. The guide comes back with the schema whenever an assistant looks the database up. Claude files things the same way next week as today, and so does any other assistant you connect.
# journal
- **entries**: one row per entry. `body` is in my words, lightly tidied; don't summarise. mood: 1 (rough) to 5 (great), or NULL. To add to today's entry, append to its body.
- **entry_tags**: lowercase tags (family, work, garden), one row per tag per entry.
On this day: `SELECT written_on, mood, body FROM entries WHERE strftime('%m-%d', written_on) = strftime('%m-%d', 'now') AND written_on < date('now') ORDER BY written_on DESC`
Mood by month: `SELECT strftime('%Y-%m', written_on) AS month, round(avg(mood), 1) AS mood, count(*) AS entries FROM entries GROUP BY month ORDER BY month DESC`
By tag: `SELECT e.written_on, e.body FROM entries e JOIN entry_tags t ON t.entry_id = e.id WHERE t.tag = 'garden' ORDER BY e.written_on DESC`
Use it
From here on you talk, and Claude writes the rows. Each request below is one statement:
Good day. Took the kids to the lake at Birchmoor and Leo swam out to the raft for the first time. I'd call it a 5.
INSERT INTO entries (body, mood, place) VALUES (?, ?, ?) RETURNING id -- params: ["Took the kids to the lake. Leo swam out to the raft for the first time.",5,"Birchmoor"]
Claude tags the entry.
INSERT INTO entry_tags (entry_id, tag) VALUES (?, ?), (?, ?) -- params: [1,"family",1,"summer"]
One more thing for today: we had dinner at the pier café and the sunset was ridiculous.
UPDATE entries SET body = body || char(10) || ? WHERE id = ? -- params: ["Dinner at the pier café. The sunset was ridiculous.",1]
I forgot to write yesterday. Long day at work, the launch slipped again. A 2.
INSERT INTO entries (written_on, body, mood) VALUES (date('now', '-1 day'), ?, ?) RETURNING id
-- params: ["Long day at work. The launch slipped again.",2]
Claude tags it work.
INSERT INTO entry_tags (entry_id, tag) VALUES (?, ?) -- params: [2,"work"]
Ask it questions
Once there's data, each report you'd pay for is a single query:
What was I doing on this day in past years?
SELECT written_on, mood, body FROM entries WHERE strftime('%m-%d', written_on) = strftime('%m-%d', 'now') AND written_on < date('now') ORDER BY written_on DESC
How has my mood been, month by month?
SELECT strftime('%Y-%m', written_on) AS month, round(avg(mood), 1) AS mood, count(*) AS entries FROM entries GROUP BY month ORDER BY month DESC
Which tags come up on my bad days?
SELECT t.tag, count(*) AS days FROM entry_tags t JOIN entries e ON e.id = t.entry_id WHERE e.mood <= ? GROUP BY t.tag ORDER BY days DESC -- params: [2]
You can also open the database on the website, page through its rows and run read-only SQL yourself.
What you give up
There are no photos. Day One keeps pictures, audio and video with an entry, fills in the place and weather by itself, and lays it all out in a timeline and on a map. databasedmcp stores text, so a photo stays in your camera roll and the entry can say which one. Nothing nudges you to write, either. The habit is yours to keep.
Think about privacy. Day One has apps for your phone and computer, works offline and can encrypt your journal end to end. Here your entries pass through your chat with Claude and are stored in your databasedmcp account, where you and anyone you invite can read them. If your journal is the most private thing you write, keep that in mind before you move it.
Try it
databasedmcp is free to start, with no card. Free has 100 tool calls a week, enough to set this up and try it for a week. Starter has 1,000 for everyday use.