notion-enhanced
Provides full property type support for Notion database operations, including creating and updating rows with all property types, querying databases with filters and auto-pagination, appending blocks and markdown to pages, and retrieving database schemas.
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-enhanced query my Notion database named 'Tools' and list all entries"
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 Enhanced MCP
Enhanced Notion MCP server with full property type support for database operations.
Features
Full Property Type Support: Create and update database rows with all 24 Notion property types
Auto-Pagination: Query functions automatically fetch ALL results by default (no 100-item limit)
Block Operations: Append any block type (tables, callouts, code, etc.) to pages
Markdown Conversion: Convert markdown to Notion blocks
Schema Introspection: Get database schemas with property definitions
Related MCP server: MCP Notion Server (@suncreation)
Tools
Database Operations
get_database_schema(database_id)- Get database schema with property types and optionsquery_database(database_id, filter, sorts, page_size, start_cursor, fetch_all)- Query database with filtersfetch_all=True(default): Auto-paginates to fetch ALL resultsfetch_all=False: Returns single page withnext_cursorfor manual pagination
create_database_row(database_id, properties, content)- Create row with any property typesupdate_database_row(page_id, properties)- Update row properties
Page Operations
get_page(page_id, include_content)- Get page with properties and content (auto-paginates content blocks)search_pages(query, filter_type, page_size, start_cursor, fetch_all)- Search pages and databasesfetch_all=True(default): Auto-paginates to fetch ALL resultsfetch_all=False: Returns single page withnext_cursorfor manual pagination
append_blocks(page_id, blocks)- Append blocks to pageappend_markdown(page_id, markdown)- Append markdown content
Property Types Supported
Type | Example Value |
title |
|
rich_text |
|
number |
|
select |
|
multi_select |
|
date |
|
checkbox |
|
url |
|
| |
phone_number |
|
status |
|
files |
|
relation |
|
people |
|
Installation
uv tool install .Configuration
Add to ~/.claude.json:
{
"mcpServers": {
"notion-enhanced": {
"type": "stdio",
"command": "notion-enhanced-mcp",
"args": [],
"env": {
"NOTION_TOKEN": "your_notion_token"
}
}
}
}Pagination
By default, query_database and search_pages automatically paginate through ALL results. The Notion API limits responses to 100 items per request, but this MCP handles pagination transparently.
# Fetch ALL rows (auto-pagination, default behavior)
result = query_database(database_id="abc123...")
print(f"Total tools: {result['total_count']}") # e.g., 500
# Manual pagination (for large datasets or streaming)
result = query_database(database_id="abc123...", fetch_all=False)
while result.get('has_more'):
# Process current batch
process(result['results'])
# Fetch next page
result = query_database(
database_id="abc123...",
start_cursor=result['next_cursor'],
fetch_all=False
)Usage Example
# Create a tool row with full properties
create_database_row(
database_id="abc123...",
properties={
"Tool Name": "Morph LLM",
"URL": "https://morphllm.com",
"Tags": ["Coding", "AI", "Developers"],
"Rating": 2,
"Description": "Fast code editing AI"
}
)Available Tools
19 toolsappend_blocksB
Append blocks to a Notion page.
Args: page_id: The ID of the page to append to blocks: List of block objects. Each block should have: - type: Block type (paragraph, heading_1, code, table, etc.) - Additional fields depending on type: - paragraph: {"text": "content"} - heading_1/2/3: {"text": "heading"} - bulleted_list_item: {"text": "item"} - numbered_list_item: {"text": "item"} - to_do: {"text": "task", "checked": false} - code: {"code": "content", "language": "python"} - quote: {"text": "quote"} - callout: {"text": "content", "emoji": "💡"} - divider: {} (no additional fields) - bookmark: {"url": "https://..."} - image: {"url": "https://..."} - table: {"rows": [["a", "b"], ["c", "d"]], "has_column_header": true} after_block_id: Optional block ID to insert after
Returns: List of created blocks
Inputs: blocks (required), page_id (required), after_block_id. Returns: object
append_markdownC
Append markdown content to a Notion page.
Converts markdown to Notion blocks and appends them.
Args: page_id: The ID of the page to append to markdown: Markdown content to append
Returns: Number of blocks created
Inputs: page_id (required), markdown (required). Returns: object
create_commentB
Create a comment on a page or reply to a discussion thread.
Args: page_id: The ID of the page to comment on text: Comment text content discussion_id: Optional discussion thread ID to reply to
Returns: Created comment object
Inputs: text (required), page_id (required), discussion_id. Returns: object
create_databaseB
Create a new database (as a child of a page).
Args: parent_page_id: The ID of the parent page title: Database title properties: Database property schema. Keys are property names, values are property config objects, e.g.: {"Name": {"title": {}}, "Tags": {"multi_select": {"options": []}}}
Returns: Created database with ID and URL
Inputs: title (required), properties (required), parent_page_id (required). Returns: object
create_database_rowA
Create a new row in a Notion database with full property type support.
Args: database_id: The ID of the Notion database properties: Dict of property_name -> value. Supported types: - title: str - rich_text: str - number: int or float - select: str (option name) - multi_select: list[str] (option names) - date: str (ISO 8601) or {"start": str, "end": str} - checkbox: bool - url: str - email: str - phone_number: str - status: str (status name) - files: list[str] (URLs) - relation: list[str] (page IDs) - people: list[str] (user IDs) content: Optional markdown content to add to the page body
Returns: Created page with ID and URL
Inputs: properties (required), database_id (required), content. Returns: object
create_pageA
Create a standalone page (not a database row).
For creating database rows, use create_database_row instead.
Args: parent_type: "page_id" or "workspace" (for top-level pages) parent_id: The ID of the parent page (ignored if workspace) title: Page title properties: Optional additional properties content: Optional markdown content for the page body
Returns: Created page with ID and URL
Inputs: title (required), parent_id (required), parent_type (required), content, +1 more. Returns: object
delete_blockB
Delete (archive) a block.
Args: block_id: The ID of the block to delete
Returns: Deleted block object
Inputs: block_id (required). Returns: object
get_blockC
Retrieve a single block by ID.
Args: block_id: The ID of the block
Returns: Block object with type and content
Inputs: block_id (required). Returns: object
get_block_childrenB
Retrieve children blocks of a block or page.
Args: block_id: The ID of the parent block or page page_size: Number of results per page (max 100) start_cursor: Cursor for pagination fetch_all: If True, auto-paginate all children. Default True.
Returns: Dict with results list and pagination info
Inputs: block_id (required), fetch_all, page_size, start_cursor. Returns: object
get_database_schemaC
Get the schema of a Notion database with all property definitions.
Args: database_id: The ID of the Notion database
Returns: Dict with database title and properties schema
Inputs: database_id (required). Returns: object
get_pageB
Get a Notion page with its properties and optionally content.
Args: page_id: The ID of the page include_content: Whether to fetch page content blocks (auto-paginates all blocks)
Returns: Page info with properties and optionally content
Inputs: page_id (required), include_content. Returns: object
get_selfA
Get the bot user associated with the current token.
Returns: Bot user object with name, type, and workspace info
Inputs: no named parameters. Returns: object
get_userC
Get a user by ID.
Args: user_id: The ID of the user
Returns: User object
Inputs: user_id (required). Returns: object
get_usersC
List all users in the workspace.
Args: page_size: Number of results per page (max 100) start_cursor: Cursor for pagination
Returns: List of user objects
Inputs: page_size, start_cursor. Returns: object
move_pageC
Move a page to a different parent.
Args: page_id: The ID of the page to move parent_type: "page_id" or "database_id" parent_id: The ID of the new parent
Returns: Moved page info
Inputs: page_id (required), parent_id (required), parent_type (required). Returns: object
query_databaseA
Query a Notion database with optional filter and sorts.
Args: database_id: The ID of the Notion database filter: Optional Notion filter object (see Notion API docs) sorts: Optional list of sort objects page_size: Number of results per page (max 100) start_cursor: Cursor for pagination (from previous query's next_cursor) fetch_all: If True, auto-paginate to fetch ALL results. If False, return single page with pagination info. Default True.
Returns: Dict with: - results: List of database rows with parsed properties - total_count: Number of results returned - has_more: Whether more results exist (only when fetch_all=False) - next_cursor: Cursor for next page (only when fetch_all=False and has_more=True)
Inputs: database_id (required), sorts, filter, fetch_all, +2 more. Returns: object
search_pagesB
Search Notion pages and databases.
Args: query: Search query filter_type: Optional filter - "page" or "database" page_size: Number of results per page (max 100) start_cursor: Cursor for pagination fetch_all: If True, auto-paginate to fetch ALL results. Default True.
Returns: Dict with: - results: List of matching pages/databases - total_count: Number of results - has_more: Whether more results exist (only when fetch_all=False) - next_cursor: Cursor for next page (only when fetch_all=False and has_more=True)
Inputs: query (required), fetch_all, page_size, filter_type, +1 more. Returns: object
update_blockA
Update a block's content or archive it.
Args: block_id: The ID of the block to update fields: Block fields to update. Pass the block type key with its content, e.g. {"paragraph": {"rich_text": [...]}} or {"archived": true} to archive.
Returns: Updated block object
Inputs: fields (required), block_id (required). Returns: object
update_database_rowB
Update properties on an existing Notion database row.
Args: page_id: The ID of the page/row to update properties: Dict of property_name -> value to update
Returns: Updated page info
Inputs: page_id (required), properties (required). Returns: object
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 19 tools
Most tools are clearly distinct by resource and action. Minor confusion: append_markdown vs. append_blocks both append content to a page, though one accepts markdown and the other raw blocks. get_block vs. get_block_children are distinct but related; descriptions clarify their difference.
Consistent verb_noun pattern throughout (e.g., get_database_schema, query_database, create_database_row, update_database_row, append_blocks, etc.). No mixing of conventions or ambiguous names.
19 tools for a comprehensive Notion server is reasonable, covering core operations. Slightly heavy but each tool appears to have a distinct role with minimal redundancy.
The surface covers pages, databases, blocks, users, and comments well. Missing explicit delete operations for pages/databases (only blocks can be deleted) and no update for page properties (though update_database_row exists for rows). The get_self and user tools add workspace awareness, but gaps in deletion and page updates are notable.
Maintenance
Related MCP Connectors
MCP-native open-source Notion alternative: read & write pages, databases and kanban boards.
Hosted Notion MCP server for Claude, ChatGPT and Cursor, with each action switched per account.
MCP server for OpenAI API (chat completions, image generation, embeddings) via AceDataCloud
Nifty's MCP server — exposes tasks, projects, messages, and files as tools for AI agents.
Related MCP Servers
- AlicenseAqualityAmaintenanceMarkdown-first MCP server for Notion that provides 7 composite action-based tools consolidating 28+ REST API endpoints, enabling AI agents to efficiently manage pages, databases, blocks, and content with automatic pagination and bulk operations.10269 npm36Apache 2.0
- AlicenseAqualityDmaintenanceAn MCP server that enables LLMs to interact with Notion workspaces via the Notion API, supporting page creation, database management, and content retrieval. It features markdown conversion to optimize token usage and enhanced error handling for more reliable workspace interactions.1923 npm1MIT
- AlicenseAqualityDmaintenanceAn MCP server for Notion API with optimized token efficiency and full database property filtering, enabling AI assistants to manage pages, databases, and blocks.3216 npm1MIT
- AlicenseNot gradedqualityDmaintenanceMCP server for the Notion API, enabling management of pages, blocks, databases, data sources, comments, and users through natural language.11 npm3MIT