create_page
Create a new page in Notion
Run a Notion todo database from the conversation — create the database, add tasks with due dates and priorities, filter and query it.
LABSCO SUMMARY
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.
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.
Build from source — git clone https://github.com/pbohannon/notion-api-mcp.git
USE CASES
Define the properties — status options, priority, dates — in the same request that creates the database.
Add it with a due date, a priority and a Markdown description, all in one go.
Filter on status and date together, sorted the way you want to read it, rather than eyeballing a board.
Add subtasks that track their own progress under the parent item.
Listed in project code.
create_pageCreate a new page in Notion
get_pageRetrieve a Notion page by its ID
update_pageUpdate a Notion page
archive_pageArchive a Notion page
restore_pageRestore an archived Notion page
get_page_propertyGet a page property item
add_todoAdd a new todo with rich features
search_todosSearch todos with advanced filtering
create_databaseCreate a new database with custom schema in a parent page
query_databaseQuery database with filters and sorting
verify_connectionVerify authentication with Notion API
get_database_infoGet information about the configured database
add_content_blocksAdd content blocks with positioning support
get_block_contentGet content of a specific block by its ID
list_block_childrenList all children of a block
update_block_contentUpdate a block's content by its ID
delete_blockDelete blocks
BEFORE YOU INSTALL
17 tools registered in the project's code.
The documented client runs the server on your machine.
INSTALLATION
# Clone and setup
git clone https://github.com/pbohannon/notion-api-mcp.git
cd notion-api-mcp
uv venv && source .venv/bin/activate
# Install and configure
uv pip install -e .
cp .env.integration.template .env
# Add your Notion credentials to .env:
# NOTION_API_KEY=<YOUR_NOTION_API_KEY>
# NOTION_PARENT_PAGE_ID=<YOUR_NOTION_PARENT_PAGE_ID> # For new databases
# NOTION_DATABASE_ID=<YOUR_NOTION_DATABASE_ID> # For existing databases
# Run the server
python -m notion_api_mcp{
"mcpServers": {
"notion-api": {
"command": "<YOUR_PATH_TO_VENV>/bin/python",
"args": [
"-m",
"notion_api_mcp"
],
"env": {
"NOTION_API_KEY": "<YOUR_NOTION_API_KEY>",
"NOTION_PARENT_PAGE_ID": "<YOUR_NOTION_PARENT_PAGE_ID>",
"NOTION_DATABASE_ID": "<YOUR_NOTION_DATABASE_ID>"
}
}
}
}