An MCP server for managing Thomas Frank's Ultimate Brain Notion system. Provides 30 workflow-oriented tools for Tasks, Projects, Notes, Tags, and Goals using the PARA methodology, plus a daily_review_snapshot consolidator that returns everything a daily review needs in one call.
-
Create a Notion integration and share your Ultimate Brain databases with it.
-
Run the setup command for your client. It will auto-discover your data sources from Notion and write the config file.
# Project scope (writes .mcp.json in current directory)
uvx --from ultimate-brain-mcp ultimate-brain-setup --client claude-code --scope project
# User scope (writes ~/.claude.json)
uvx --from ultimate-brain-mcp ultimate-brain-setup --client claude-code --scope useruvx --from ultimate-brain-mcp ultimate-brain-setup --client claude-desktopYou can also pass your Notion secret via environment variable to skip the prompt:
NOTION_INTEGRATION_SECRET=secret_... uvx --from ultimate-brain-mcp ultimate-brain-setup --client claude-code --scope projectsearch_tasks— Filter by name, status, project, priority, due date (due_onfor a single day), My Day, labels, parent task, completion datecreate_task— Create with name, status, due, priority, project, labels, tag_ids, locationupdate_task— Patch any task properties (incl. tag_ids and location)complete_task— Mark done with recurrence handlingget_my_day— My Day tasks sorted by priorityget_inbox_tasks— Unprocessed tasks needing triage
search_projects— Filter by status, tagget_project_detail— Properties + task breakdown + recent notescreate_project— Create with name, status, deadline, tag, goalupdate_project— Patch project properties
search_notes— Filter by type, project, tag, favorite, dateget_note_content— Properties + page body as plain textcreate_note— Create with type, project, tags, URLupdate_note— Patch note properties
search_tags— Filter by PARA typecreate_tag— Create with name, type, parentupdate_tag— Patch tag properties
search_goals— Filter by statusget_goal_detail— Properties + linked projectscreate_goal— Create with name, status, deadlineupdate_goal— Patch goal properties
daily_summary— My Day, overdue, inbox, active projects/goals (counts only)archive_item— Archive any UB itemset_page_content— Replace or append page body content (markdown → blocks)
daily_review_snapshot— One call returns current time + IANA timezone, all five daily-review buckets (completed today, overdue or due today, due tomorrow, on My Day, inbox), the deduplicated outstanding union, project + area-tag lookup tables, and the live Tasks schema (Location property type, valid options, Labels options). Replaces ~7 separate read calls.bulk_update_tasks— Apply multiple task patches concurrently with per-row results. Never raises on a single failure — surfaces each failed row through the results list so the caller can retry or skip.
query_database— Query any secondary databaseget_page— Fetch any page by IDget_page_content— Page properties plus body as plain textupdate_page— Update any page properties
Set these in .env (or pass via the MCP client config):
| Var | Required | Purpose |
|---|---|---|
NOTION_INTEGRATION_SECRET |
yes | Notion integration token |
UB_TASKS_DS_ID, UB_PROJECTS_DS_ID, UB_NOTES_DS_ID, UB_TAGS_DS_ID, UB_GOALS_DS_ID |
yes | Primary data source IDs |
UB_TIMEZONE |
optional | IANA name (e.g. Europe/London). Used by daily_review_snapshot to resolve now/today/tomorrow. Falls back to TZ, then UTC. |
UB_*_DS_ID (Work Sessions, Books, etc.) |
optional | Secondary data sources surfaced via query_database |
uv run pytest tests/
uv run mcp dev src/ultimate_brain_mcp/server.py