Inspiration
I built Dabble Me in 2014 after OhLife shut down. I had been a near-daily user for three years. The trick was that the medium was email: a prompt arrived in my inbox, I replied, and the habit stuck. No extra app or thumbs-only typing. No notification fatigue. It was designed precisely for my sick desire to constantly need Inbox Zero.
Dogfooding this app has become my sacred space now: the first dates with my now wife, photos and how I felt seeing my boys grow up, and the personal growth I would've otherwise missed had I not read how far I've come. The daily email bring these private days back to me, the way Timehop does for public posts.
What it does
Dabble Me is a live, private journal. You can still write by replying to email. PRO users can also search, reflect, and draft in the browser.
With WebMCP enabled , a signed-in tab registers structured tools:
search_journal_entries/list_journal_entries/analyze_journal— read this session’s journal onlyopen_journal_day/open_search_page/open_write_page— move the UI so the person sees the same screendraft_journal_entry— fill the write form and highlight itget_journal_session— tell the agent whether the tab is signed in and whether PRO tools are available
Signup, login, search, and write forms also use declarative toolname / tooldescription attributes so an agent can fill fields without guessing labels. A status banner on the page makes the agent’s action visible.
How we built it
The product was already a Rails app with a remote, OAuth MCP server at /mcp. WebMCP is a different layer: tools run in the page, with the user’s cookie session, not a headless API token.
- Discovery so a client that only has
https://dabble.mecan find the surface:/.well-known/webmcp,/mcp/server-card,/.well-known/ai-catalog.json, plusLinkheaders and/llms.txt - Session JSON at
/webmcp/journal/*that reuses the same search/list/analyze logic as remote MCP, always scoped tocurrent_user public/webmcp.jsthat feature-detectsdocument.modelContext(and the oldernavigator.modelContext), registers tools for the current auth state, fills Summernote on draft, and navigates for “open this day”- Declarative forms for account and journal UI, without
toolautosubmit
Challenges we ran into
The biggest challenge was privacy vs. demo-ability. Journal apps cannot run anonymously. They also cannot require WebAuthn if we want an in-app browser to finish login. The compromise: session cookies, PRO for write/search, and a dedicated demo account...not a real diary.
The second was editors. The write box is Summernote, not a plain <textarea>. A declarative form fill would look done and still leave the rich editor empty. draft_journal_entry has to talk to the editor, then leave Create Entry for the human.
Accomplishments that we're proud of
- This is not a toy journal. Dabble Me has been a real, private, email-first product since the OhLife shutdown in 2014.
- The agent and the user share one interface. When the agent searches or drafts, the page shows it.
- Writes are cooperative by construction: fill and highlight so the draft is reviewed by a human before submitting ai-only entries.
- We kept two complementary layers honest: remote MCP for ChatGPT/Claude connectors, WebMCP for the live tab.
What we learned
WebMCP is not “MCP in a JSON file.” It is a browser API for this document, this session, this user. Discovery helps agents find you. registerTool + execute is what they actually call.
We also learned that the best tool for a journal is often the one that refuses to finish. Submission should be human-reviewed...a feature, not a bug. 😁
What's next for Dabble Me
- More page-state tools: jump to a hashtag, open last year on this day, draft into an existing date the way email replies already append
- Tighter visual feedback when a tool is running (
toolchange,:tool-form-active) - A first-class “agent draft” review state so a filled form is obvious even after a refresh
- Keep the remote MCP server for headless clients, and keep WebMCP for the tab where the human is sitting
Log in or sign up for Devpost to join the conversation.