notion-mpm
Provides tools for interacting with Notion's API, including pages, blocks, databases, users, search, and comments.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@notion-mpm query my Projects database for active projects"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
notion-mpm
Python MCP server + API library for Notion workspace integration.
Provides:
Clean Python API:
from notion_mpm.api import pages; await pages.get_page(token, page_id)MCP server: wraps the API for Claude Desktop (
uv run notion-mpm mcp)20+ tools: pages, blocks, databases, users, search, comments
Setup
cp .env.local.example .env.local
# Add NOTION_API_KEY=secret_...
uv syncCreate a Notion integration at: https://www.notion.so/my-integrations
Then share your pages/databases with the integration inside Notion.
Related MCP server: @node2flow/notion-mcp
Run
uv run notion-mpm setup # verify token + workspace
uv run notion-mpm doctor # health check
uv run notion-mpm mcp # start MCP server (for Claude Desktop)Test
uv run pytest
uv run pytest --cov=src --cov-report=htmlClaude Desktop Config
Add to ~/Library/Application Support/Claude/claude_desktop_config.json:
{
"mcpServers": {
"notion": {
"command": "uv",
"args": ["run", "--directory", "/path/to/notion-mpm", "notion-mpm", "mcp"]
}
}
}API Overview
src/notion_mpm/
├── api/
│ ├── _client.py # Shared httpx client + NotionAPIError
│ ├── pages.py # get, create, update, archive, restore pages
│ ├── blocks.py # get, append, update, delete blocks + helpers
│ ├── databases.py # get, create, update, query databases
│ ├── users.py # list, get, get_bot_user
│ ├── search.py # search pages and databases
│ └── comments.py # get and create comments
├── auth/ # Token management from .env/.env.local
├── cli/ # Click CLI commands
└── server/ # Thin MCP adapter over api/MCP Tools
Category | Tools |
Pages |
|
Blocks |
|
Databases |
|
Users |
|
Search |
|
Comments |
|
Token Scopes
Your integration needs these capabilities (set in Notion integration settings):
Read content — required for all read operations
Update content — required for create/update/archive
Insert comments — required for
create_commentRead comments — required for
get_comments
Release
make publish # patch bump + PyPI + GitHub Release
make publish-minor # minor bump
make publish-major # major bumpAvailable Tools
21 toolsappend_block_childrenA
Append new content blocks to a page or block. Use this to add paragraphs, headings, lists, code blocks, and more.
Inputs: block_id (required), children (required), after.
archive_pageA
Archive (soft-delete) a Notion page. The page can be restored later.
Inputs: page_id (required).
create_commentB
Add a comment to a Notion page. Requires 'insert comments' capability on the integration.
Inputs: text (required), page_id, discussion_id.
create_databaseA
Create a new Notion database as a child of an existing page. Define the property schema (columns) at creation time.
Inputs: title (required), properties (required), parent_page_id (required), is_inline.
create_pageA
Create a new Notion page inside a database or as a sub-page of another page. For database pages, properties must match the database schema.
Inputs: parent (required), properties (required), icon, cover, +1 more.
delete_blockB
Delete a block from a Notion page.
Inputs: block_id (required).
get_blockB
Retrieve a specific block by its ID.
Inputs: block_id (required).
get_block_childrenA
List the direct children of a block or page. Use this to read the content of a Notion page.
Inputs: block_id (required), page_size, start_cursor.
get_bot_userA
Retrieve information about the bot user associated with this integration, including workspace name and owner details.
Inputs: no named parameters.
get_commentsA
Retrieve all comments on a Notion page or block.
Inputs: block_id (required), page_size, start_cursor.
get_databaseA
Retrieve a Notion database schema and metadata by its ID.
Inputs: database_id (required).
get_pageA
Retrieve a Notion page by its ID, including all properties.
Inputs: page_id (required).
get_page_propertyB
Retrieve a specific property value from a Notion page.
Inputs: page_id (required), property_id (required), page_size.
get_userA
Retrieve information about a specific Notion user.
Inputs: user_id (required).
list_usersB
List all users in the Notion workspace.
Inputs: page_size, start_cursor.
query_databaseB
Query a Notion database to retrieve pages matching filter criteria. Supports filtering, sorting, and pagination.
Inputs: database_id (required), sorts, filter, page_size, +1 more.
restore_pageA
Restore a previously archived Notion page.
Inputs: page_id (required).
searchB
Search for pages and databases in the Notion workspace. Only returns content the integration has access to.
Inputs: query, page_size, filter_type, start_cursor, +1 more.
update_blockC
Update the content of an existing block.
Inputs: block_id (required), block_data (required).
update_databaseA
Update a Notion database title, description, or property schema.
Inputs: database_id (required), title, properties, description.
update_pageB
Update a Notion page's properties, icon, or cover image.
Inputs: page_id (required), icon, cover, properties.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 21 tools
Each tool maps to a distinct Notion resource and action. get_page_property targets a specific property vs get_page's full page, and append_block_children vs get_block_children are clearly read vs write. No two tools have overlapping purposes.
All tools follow a verb_noun pattern with snake_case, e.g., get_page, create_database, update_block. The only deviation is 'search', but it is a clear imperative verb that fits the style. No mixed conventions.
21 tools is above the typical 3-15 sweet spot, but the breadth of Notion's API (pages, blocks, databases, users, comments) justifies the count. Each tool serves a specific operation, so it doesn't feel bloated.
Core CRUD and lifecycle operations are covered for pages, blocks, and databases, plus search, comments, and user retrieval. A notable minor gap is lack of database archive/restore operations, but this does not severely hinder common workflows.
Maintenance
Related MCP Connectors
Hosted Notion MCP server for Claude, ChatGPT and Cursor, with each action switched per account.
MCP-native open-source Notion alternative: read & write pages, databases and kanban boards.
Nifty's MCP server — exposes tasks, projects, messages, and files as tools for AI agents.
Persistent memory layer for AI tools. Save and recall notes across Claude and other MCP clients.
Related MCP Servers
- AlicenseAqualityCmaintenanceMCP Server for the Notion API, enabling Claude to interact with Notion workspaces.311,700 npm924MIT
- AlicenseNot gradedqualityDmaintenanceMCP server for the Notion API, enabling management of pages, blocks, databases, data sources, comments, and users through natural language.11 npm3MIT
- FlicenseNot gradedqualityDmaintenanceEnables interaction with Notion workspaces, allowing users to search, query databases, create/update pages, and manage content via natural language through MCP.-
- AlicenseNot gradedqualityDmaintenanceComprehensive MCP server for the Notion API. Provides 22 tools for full CRUD operations on pages, databases, blocks, users, and comments.8 npmMIT