A local environment to collect, manage, and own your personal data. Includes an MCP server for AI access and a simple web UI for fast capture.
Strong foundation with 30 well-named tools using consistent verb_noun patterns (export_, upload_, list_, create_, delete_, etc.). All tools have descriptions (avg 180 chars, within baseline 194). Input schemas present and mostly complete with Zod validation. However, several parameter descriptions lack actionable detail (e.g., 'Optional mood' without format guidance), and output schemas are not explicitly documented. Error handling is minimal, no recovery guidance or actionable error messages visible. Missing tool annotations (readOnlyHint, destructiveHint) despite clear risk classifications. Composition is sound: tools are single-responsibility and chainable (e.g., search_journal → update_journal_entry). No security issues detected (no secrets in params). Overall: solid definitions with room for LLM-optimization and error guidance.
Add a new journal entry (title, content, optional tags/mood/entry type). You can optionally include a `summary` you've written yourself, which will be used by exports in summary mode instead of the full content.
Add a new selectable option to a multiselect profile question.
Save a quick, free-form thought or note.
Set the answer to a profile question by id. Pass a string for a text question, or an array of selected options (must already exist on the question) for a multiselect question.
Archive a habit so it's hidden from the default habit list, without losing its history. Use unarchive_habit to bring it back.
Generate summaries for every journal entry that doesn't have one yet, using the configured local summarization backend. Entries that already have a summary are left untouched. Returns counts of processed/skipped entries and any per-entry errors.
Missing tool annotations (readOnlyHint, destructiveHint, idempotentHint). Tools are classified by risk (READ_ONLY, WRITE, DESTRUCTIVE) in metadata but not exposed via MCP tool annotations, preventing clients from applying safety policies.
Output schemas not documented. Tool descriptions do not specify what fields are returned or their types. LLMs cannot plan downstream tool calls or extract required data (e.g., what does create_habit return? Does it include habitId for chaining?).
Parameter descriptions lack actionable constraints. 'Optional mood' and 'Optional tags' do not specify format, length limits, or valid values. LLMs cannot validate input before calling and may pass invalid data.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 62 | 2026-07-28+ | v2 |
Create a new habit to track. Choose a frequency: daily (default), weekly, or monthly -- completion is checked in once per period.
Add a new custom profile question. Type 'text' for a free-text answer, or 'multiselect' for a multiple-choice question (requires at least one option).
Delete an uploaded file and its metadata by id.
Permanently delete a habit and its entire logged history. This cannot be undone -- archive_habit is the reversible alternative.
Delete a journal entry by id.
Permanently delete a custom profile question and its answer.
Delete a saved thought by id.
Generate a full 'Personal Context Export' bundling the user's profile, journal entries, thoughts, habit data, and uploaded file metadata, formatted for use as AI context. Choose markdown (human + AI readable), json (structured), or csv (habit logs only).
Generate a summary for a journal entry using the configured local summarization backend (Ollama by default). Overwrites any existing summary. Requires Ollama to be running locally.
Get a file's metadata. For text-like files (text/*, JSON, XML) the decoded content is included inline; other file types return metadata only, since binary content can't be usefully returned as text.
Get the day-by-day completion history for a single habit, optionally within a date range.
Get the user's fixed personal profile fields: name, age, location, occupation, bio, goals, challenges, and preferences. Use list_profile_questions for the user's custom (free-text or multiple-choice) questions and answers.
List uploaded files (metadata only), optionally filtered to those attached to one journal entry.
List the user's habits, including frequency (daily/weekly/monthly), current streak, longest streak, all-time completion rate, and whether the current period (today/this week/this month) has already been logged. Streaks and completion rate count completed periods only: the current period isn't included until it ends, so a habit logged today still shows its streak through yesterday. This is intended, not an off-by-one error.
List the user's custom profile questions (free-text or multiple-choice) and their current answers. These are user-defined, in addition to the fixed profile fields from get_profile.
List saved quick thoughts, newest first, optionally within an inclusive date range. Date bounds accept a plain date (YYYY-MM-DD) or a full ISO 8601 timestamp.
Record a habit's status for a given date (Y = completed, N = not completed, NA = not applicable). For weekly/monthly habits, the date is snapped to that period (e.g. any day in the week maps to the same weekly check-in). Calling this again for the same habit and period overwrites the previous value.
Remove an option from a multiselect profile question. If it was currently selected, it's also removed from the answer.
Search journal entries by free-text query, tags, mood, and/or date range. Date bounds are inclusive and accept a plain date (YYYY-MM-DD) or a full ISO 8601 timestamp. Returns matches newest-first.
Write or overwrite the summary for a journal entry yourself (e.g. after reading the full entry). Used by exports in summary mode instead of the full content.
Restore a previously archived habit so it shows up in the default habit list again.
Update one or more fields of an existing journal entry by id.
Update one or more fields of the user's personal profile. Only the fields provided are changed; omitted fields are left as-is. Creates the profile if it doesn't exist yet.
Save a file (base64-encoded content) with a title and optional description. Optionally link it to a journal entry via journalEntryId. Capped at 25MB.
No error handling guidance. Tool descriptions do not explain what errors can occur, when to retry, or how to recover. E.g., generate_journal_summary requires Ollama but does not document the failure mode or recovery path.
Pagination not implemented. list_habits, list_files, list_thoughts, search_journal do not accept limit/offset or return total counts. Large result sets will blow context windows.