MCP Server for Ultimate Brain
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.
Setup
-
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.
Claude Code
# 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 user
Claude Desktop
uvx --from ultimate-brain-mcp ultimate-brain-setup --client claude-desktop
You 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 project
Tools
Tasks (6)
search_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
Projects (4)
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
Notes (4)
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
Tags (3)
search_tags— Filter by PARA typecreate_tag— Create with name, type, parentupdate_tag— Patch tag properties
Goals (4)
search_goals— Filter by statusget_goal_detail— Properties + linked projectscreate_goal— Create with name, status, deadlineupdate_goal— Patch goal properties
Cross-Cutting (3)
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)
Workflow Consolidators (2)
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.
Generic (4)
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
Configuration
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 |
UB_TRANSPORT |
optional | stdio (default) or streamable-http |
UB_HOST, UB_PORT |
optional | Bind address for streamable-http (defaults 127.0.0.1:8000; the container image defaults to 0.0.0.0:8000) |
Docker
The container image serves streamable-http on port 8000 by default:
docker run --rm -p 8000:8000 --env-file .env ghcr.io/bobbyhyam/ultimate-brain-mcp:latest
Point any streamable-http MCP client at http://localhost:8000/mcp. For a
stdio client, override the transport:
docker run --rm -i --env-file .env -e UB_TRANSPORT=stdio ghcr.io/bobbyhyam/ultimate-brain-mcp:latest
Images are published on each release, tagged X.Y.Z, X.Y, and latest.
Development
uv run pytest tests/
uv run mcp dev src/ultimate_brain_mcp/server.py
Contributing
Contributions are welcome — see CONTRIBUTING.md for development setup and guidelines, and CHANGELOG.md for release history.
Metadata
Release files for ultimate-brain-mcp 0.6.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| ultimate_brain_mcp-0.6.1.tar.gz | 161.4 kB | Without provenance | Details for ultimate_brain_mcp-0.6.1.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| ultimate_brain_mcp-0.6.1-py3-none-any.whl | Python 3 | none | any | Details for ultimate_brain_mcp-0.6.1-py3-none-any.whl |
Total release size: 205.0 kB
Release files / ultimate_brain_mcp-0.6.1.tar.gz
| Download URL | ultimate_brain_mcp-0.6.1.tar.gz |
|---|---|
| Size | 161.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
b88fb16a91f64db956e7f84ff6ea6beabc1f0f6b3f3f1a384ae7e56a0b8cb1a5
|
|
BLAKE2b-256 checksum How to use checksums |
08cc602ce500e2aa22b91a46d3b75075b87177ba2fc83d24167c942897a6913b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.12.0 {"installer":{"name":"uv","version":"0.12.0","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / ultimate_brain_mcp-0.6.1-py3-none-any.whl
| Download URL | ultimate_brain_mcp-0.6.1-py3-none-any.whl |
|---|---|
| Size | 43.6 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
f1e825ae423203b79cdaaca3abf0ade19377c66e6e21717c5f211d1049231d79
|
|
BLAKE2b-256 checksum How to use checksums |
f16fd195266006cd8c66e4548db3256b8d2268f50782e74d06225bb9723186a2
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.12.0 {"installer":{"name":"uv","version":"0.12.0","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Security for ultimate-brain-mcp 0.6.1
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.