everlog-mcp
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@everlog-mcp what did I journal about on this day in previous years?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
everlog-mcp
A read-only MCP server for the Everlog journal app on macOS. It lets an MCP client (Claude Code, Claude Desktop, ...) search and read your journal entries, tags, photos and statistics straight from Everlog's local database. It never writes to or copies Everlog's data.
Tools
Tool | Purpose |
| Journals with entry count, first/last date, hidden flag |
| Tag paths ( |
| Full-text (FTS5) search plus journal / tag (incl. descendants) / date / bookmarked filters, paging, sorting |
| Full markdown text, metadata, location, weather, AI summary, attachments; optional inline photos |
| An image attachment as a resized JPEG |
| Entries from earlier years on the same month/day |
| Entries and words per year or month |
Dates are Everlog's own local days (America/Denver), YYYY-MM-DD.
Related MCP server: message-container
Install / run
Requires macOS, Python 3.13 and uv.
uv run everlog-mcp # speaks MCP over stdio
uv run pytest -q # tests (synthetic data only)Configuration (environment variable):
EVERLOG_DIR- Everlog data directory. Default:~/Library/Group Containers/group.hummingbird.
Register with a client (examples; not done for you)
claude mcp add everlog -- uv --directory /path/to/Everlog-mcp run everlog-mcpClaude Desktop (claude_desktop_config.json):
{
"mcpServers": {
"everlog": {
"command": "uv",
"args": ["--directory", "/path/to/Everlog-mcp", "run", "everlog-mcp"]
}
}
}macOS permission
Everlog's data lives in a Group Container. The app that launches the server (Claude Desktop, your terminal, ...) may need Full Disk Access or the "access data from other apps" permission in System Settings > Privacy & Security. If the database cannot be opened, tools return an error explaining this.
Privacy
Whatever the tools return (entry text, summaries, photos, locations) is sent to your MCP client's model provider as part of the conversation. Only connect this server to clients and models you are comfortable sharing your journal with. The server itself makes no network connections and logs only counts/timings to stderr.
How it works / data-format notes
Everlog stores Core Data SQLite files
Hummingbird.sqlite(entries, journals, tags, places, weather, AI summaries) andAttachmentData.sqlite(attachment bytes), in WAL mode. Both are opened withmode=ro(neverimmutable, so recent WAL content is visible).At first use the server builds an in-memory SQLite FTS5 index (porter stemming) of entry text plus audio transcriptions, and re-checks
PRAGMA data_versionbefore every call; if Everlog committed changes, the index is rebuilt (about a second for ~10k entries).ZTEXTis the real markdown (ZCONTENTis a placeholder). Columns namedZENCRYPTED*actually hold plaintext and are preferred over their unprefixed twins. Trashed entries are excluded.Timestamps are Core Data epoch (Unix + 978307200). Day filtering uses
ZYEARMONTHDAYID(Everlog's own America/Denver day bucket). Coordinates of 0/0 mean "none".Attachments are referenced in text as
. Blob bytes inZATTACHMENTDATA.ZDATAstart with0x01(inline bytes) or0x02(ASCII UUID of a file under.AttachmentData_SUPPORT/_EXTERNAL_DATA/). When several rows share an identifier the largest payload is used.Images are converted to JPEG (quality 80, longest side <= 1568 px by default) with macOS
/usr/bin/sips, which also handles HEIC.Weather: temperature in deg C, pressure converted from Pa to hPa, humidity 0 means "no data".
License
Available Tools
7 toolsget_attachment_imageARead-onlyIdempotent
Return an image attachment as JPEG, shrunk so its longest side is at most max_size pixels (default 1568). attachment_id is the id from get_entry's attachments list (the 8-char prefix in placeholders also works if unambiguous). Errors if the attachment is not an image or its bytes are missing.
Inputs: attachment_id (required), max_size.
get_entryARead-onlyIdempotent
Get one entry in full: markdown text (attachments shown as placeholders such as [image a1b2c3d4], [audio a1b2c3d4 2:31]) plus date, modified time, journal, tags, location/coordinates/timezone, weather, bookmarked/pinned, word_count, the Everlog AI summary (if any) and an attachments list (attachment_id, type, size/duration, transcription). With include_images=true, up to max_images photos are returned as images after the entry.
Inputs: entry_id (required), max_images, include_images.
journal_statsARead-onlyIdempotent
Writing statistics: entries and total words per year (or month, 'YYYY-MM'), plus totals. Optionally restricted to one journal and/or an inclusive YYYY-MM-DD date range.
Inputs: journal, end_date, group_by, start_date. Returns: object
list_journalsARead-onlyIdempotent
List all journals with entry_count, first_date, last_date (YYYY-MM-DD) and a hidden flag.
Trashed entries are excluded. Use the names with the journal filter of other tools.
Inputs: no named parameters. Returns: result
list_tagsARead-onlyIdempotent
List all tags (hierarchical tags appear as 'Parent/Child') with entry_count, most used first. A tag filter on a parent also matches its descendants.
Inputs: no named parameters. Returns: result
on_this_dayBRead-onlyIdempotent
Entries written on the same month/day in earlier years, newest first, with years_ago. date: YYYY-MM-DD reference day (default: today in America/Denver); only years before it are included. Same result shape as search_entries.
Inputs: date, limit, journal. Returns: object
search_entriesARead-onlyIdempotent
Search and browse journal entries. Returns total match count and a page of results, each with entry_id, date, journal, title, tags, word_count and a snippet (matches wrapped in «»).
query: full-text (SQLite FTS5): words are ANDed; "exact phrase"; prefix*; OR; NOT; stemmed. Invalid syntax falls back to matching all words. Omit to filter without text search. journal: journal name (case-insensitive). tag: tag path; also matches child tags. start_date / end_date: inclusive YYYY-MM-DD bounds on the entry's local day. sort: relevance (default with query) | newest (default without) | oldest. limit: 1-100 (default 20); offset for paging. Fetch full text with get_entry.
Inputs: tag, sort, limit, query, +5 more. Returns: object
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 7 tools
Each tool targets a distinct resource or operation: journal/tag listing, entry search, full-entry fetch, attachment retrieval, date-based recall, and aggregates. The only near-neighbors (search_entries vs on_this_day) are clearly separated by the 'same month/day in prior years' semantics.
Five of seven names follow a clean verb_noun pattern (list_journals, list_tags, search_entries, get_entry, get_attachment_image). on_this_day and journal_stats break the pattern but are readable and unambiguous, so this is a minor deviation rather than a problem.
Seven tools is well-scoped for a journaling server: metadata lists, search, fetch, attachment access, a recall view, and stats. No tool appears redundant or filler.
The surface is purely read-only and covers browsing, retrieval, and stats well, but there is no way to create, update, delete, or tag entries. Agents can read the journal completely but cannot write to it, which is a notable lifecycle gap.
Maintenance
Related MCP Connectors
Private journal MCP server to search, analyze, and create Dabble Me entries securely via OAuth.
Read-only MCP server over the JENRIKS daily photoblog: one photo per day since 2006. No auth.
Query your real net worth, spending, transactions, budgets and portfolio from any MCP client.
Agent-native MCP server over the public saagarpatel.dev corpus. Read-only, stateless.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceRead-only MCP server for Day One journal on macOS, enabling search and browsing of entries, photos, and metadata.2-
- FlicenseNot gradedqualityBmaintenanceEnables AI clients to read and search macOS Messages history through a read-only MCP interface.-
- AlicenseAqualityCmaintenanceLets MCP clients search iMessages, read Apple Notes including checklist state, and look up Contacts on macOS.12MIT
- AlicenseNot gradedqualityBmaintenanceEnables MCP-compatible clients to query a local MoneyWiz SQLite database through a permanently read-only, local-first interface with Decimal-safe per-currency results for accounts, transactions, categories, payees, tags, budgets, scheduled transactions, and cashflow summaries.MIT