FOR DEVELOPERS AND AI AGENTS

Dabble Me MCP Server

Technical reference for connecting MCP clients and AI agents to Dabble Me.

Dabble Me is an AI journal with MCP: a remote Model Context Protocol server for people looking for a journal app for ChatGPT, a Claude journal integration, a personal journal MCP server, or a journal app for AI reflection. Setting up Claude or ChatGPT yourself? The AI Connector guide is simpler.

Server URL

Remote Streamable HTTP server. OAuth 2.0 with PKCE; no API key or client secret.

https://dabble.me/mcp

Tool calls require a Dabble Me PRO account with a passkey or two-factor authentication.

Quick setup via agent prompt

Click to copy this prompt, then paste it into an AI agent. It reads this guide and either connects Dabble Me itself or tells you which connector to add.

Instructions for AI agents

If you are an AI agent setting up Dabble Me for a user, follow these steps.

  1. If you can change your own MCP configuration, add a remote HTTP MCP server named dabble-me with the URL https://dabble.me/mcp. Do not add an API key, client secret, or custom headers.
  2. Then start your client’s OAuth sign-in so the user can sign in to Dabble Me and approve access. Never ask the user to paste a password, two-factor code, passkey, or token into the chat.
  3. If you cannot add MCP servers yourself (Claude on claude.ai or the Claude apps, or ChatGPT), do not look for a workaround. In Claude, send the user to the Dabble Me Claude plugin. In ChatGPT, send them to the Dabble Me ChatGPT plugin. Step-by-step instructions for people are in the AI Connector guide.
  4. After sign-in, confirm the connection with a read-only tool such as list_entries or analyze_entries for a recent date range. Do not create a test entry. Some clients only load new tools after a reload or in a new chat.
  5. Only Dabble Me PRO accounts with a passkey or two-factor authentication can use the tools. The connection acts as the user who approved it and only reads and writes that user’s journal.

Connect another MCP client

Add https://dabble.me/mcp as a remote Streamable HTTP server. Let the client discover the OAuth metadata, register as a public client, open the authorization page, and exchange the authorization code using PKCE. No API key or client secret is required.

Authentication

OAuth 2.0 + PKCE

Users sign in on Dabble Me’s own domain and approve the mcp:access scope. Dabble Me never asks for a password inside the AI client.

Strong account security

Tool calls require Dabble Me PRO plus a passkey or two-factor authentication. Users review and disconnect clients under Account security → Connected apps.

Available MCP tools

These names and descriptions come from the same metadata exposed to MCP clients.

Search journal entries

search_entries

Find text in the signed-in user’s private Dabble Me journal. Use for requests such as “find every time I mentioned burnout,” searching a quoted phrase, or finding a topic within an inclusive date range. Returns matching entry dates, excerpts, hashtags, and image presence; never searches another user’s journal.

Arguments

query (required)
— Required keyword, topic, or quoted phrase to find in entry text. Examples: burnout, "new job", gratitude.
start_date
— Optional YYYY-MM-DD inclusive start date.
end_date
— Optional YYYY-MM-DD inclusive end date.
limit
— Maximum matching entries to return (1–50; default 50). total_matches still reports the full count.

List journal entries

list_entries

Read the signed-in user’s private Dabble Me journal entries newest first, optionally within an inclusive date range. Use when the user asks to review a period such as last week or last month without requiring a keyword.

Arguments

start_date
— Optional YYYY-MM-DD inclusive start date.
end_date
— Optional YYYY-MM-DD inclusive end date.
limit
— Maximum entries to return (1–50; default 50). total_entries reports the full count in the date range.

Analyze journal patterns

analyze_entries

Summarize patterns in the signed-in user’s private Dabble Me journal over an optional inclusive date range. Returns entry counts, year coverage, top hashtags, average words per entry, and sample highlights for reflection requests such as “summarize my journaling habits this year.”

Arguments

start_date
— Optional YYYY-MM-DD inclusive start date.
end_date
— Optional YYYY-MM-DD inclusive end date.

Create or append a journal entry

create_entry

Write to the signed-in user’s private Dabble Me journal on a calendar day (default: today in the account timezone). Plain text becomes paragraphs. By default, text appends to an existing entry on that day; set merge_with_existing false to fail instead. Optionally attach one image: prefer image_url when you already have a public https URL; otherwise use get_image_upload_url + uploaded_image_key for local bytes; image_base64 only as a small fallback. API documentation: https://dabble.me/mcp-server#tool-create-entry

Arguments

date
— Optional YYYY-MM-DD; omitted means today in the account timezone.
body (required)
— Entry text (plain text; line breaks become paragraphs). HTML is escaped. Use an empty string for an image-only entry when image_url, uploaded_image_key, or image_base64 is set.
merge_with_existing
— When true (default), append to the existing entry for this date if one exists. When false, return an error if the date is already taken.
image_url
— Preferred when a public https image URL is already available. Dabble Me fetches and attaches the image server-side (avoids client sandbox egress allowlists and large base64). Private/loopback hosts are rejected. In production, only https is accepted. Do not combine with uploaded_image_key or image_base64.
uploaded_image_key
— For local image bytes without a public URL: first call get_image_upload_url, PUT the bytes to the returned upload URL with the required headers, then pass the returned uploaded_image_key here. Do not combine with image_url or image_base64.
image_base64
— Last-resort small image as base64: either a data URL (data:image/png;base64,...) or raw base64 bytes. Resize to fit within 800x800 before encoding. If raw, set image_mime_type (e.g. image/png) or it defaults to image/jpeg. Prefer image_url or uploaded_image_key instead.
image_mime_type
— When image_base64 is raw (not a data URL), MIME type of the decoded bytes, e.g. image/png or image/jpeg.

Prepare a journal image upload

get_image_upload_url

Prepare one local image for a new Dabble Me journal entry when you do not already have a public https URL. Returns a short-lived presigned PUT URL, required headers, and an uploaded_image_key. PUT the user-provided bytes to that URL, then pass the key to create_entry. If you already have a public https image URL, skip this tool and pass image_url to create_entry instead. Prefer this flow over base64 for local images.

Arguments

filename
— Original image filename, used only to choose a safe extension. Example: photo.jpg.
content_type (required)
— Image MIME type for the upload, e.g. image/jpeg, image/png, image/webp, image/heic.

Technical questions

How should an AI assistant attach a photo to a journal entry?

Prefer create_entry with image_url when a public https image URL is already available—Dabble Me fetches and attaches it server-side. That path avoids client sandbox egress allowlists and large base64 payloads. Only for local bytes without a public URL, call get_image_upload_url, upload with the returned PUT URL, then pass uploaded_image_key to create_entry. Use image_base64 only as a small last resort.

Claude can’t upload a photo to Dabble Me—what should I check?

If Claude is using get_image_upload_url, its code-execution sandbox must allow HTTPS egress to the Amazon S3 host in the returned upload URL (often a bucket like dabble-me.s3.amazonaws.com). In Claude settings → Capabilities, enable Code execution and file creation, then either allow that specific domain or choose All domains. On Team/Enterprise plans, org owners may control this under Organization settings → Capabilities. If domain allowlist entries under “Package managers only” do not stick, switching to All domains is a known workaround. Prefer create_entry image_url whenever Claude already has a public https image URL—that sidesteps the S3 allowlist entirely.

Can the connector read another user's journal?

No. OAuth binds every tool call to the signed-in Dabble Me account. Tool arguments cannot select another user.