The shape of the tooling follows how task databases are actually used: due dates, priorities, statuses, subtasks and multi-condition filters, rather than generic page CRUD. Two Notion constraints carry through and are worth knowing before you start: a database can only be created under a page or wiki database, and once created it cannot be moved to a different parent. The connection step in Notion's own UI is the usual first stumble — until the page is shared with your integration, the token is valid and still cannot see anything.
A Python server over the Notion API, built around task and content management: databases with custom properties, todos with rich text and dates, and block-level content operations.
- create_database — a new Notion database under a page your integration can reach, with your own property schema
- Todos carrying rich text with Markdown and inline code, timezone-aware due dates, priority levels and status values
- Nested subtasks with their own progress, plus categories and tags for organisation
- Filtering with multiple conditions combined by AND/OR, and sorting across several properties at once
- Pagination through large result sets, and search across content
- Content operations at block level: headings, quotes, callouts, code blocks, link previews and hierarchical lists
A Notion internal integration token in NOTION_API_KEY, and either NOTION_PARENT_PAGE_ID to create new databases or NOTION_DATABASE_ID to work with an existing one. The page or database must be connected to your integration through its Add connections menu, or every call fails on permissions. Python with uv. For Claude Desktop the variables have to be in the client config — a .env file alone is not read.
