notion-enhanced
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| NOTION_TOKEN | Yes | Your Notion integration token |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| 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 |
| 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) |
| 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 |
| 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 |
| append_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 |
| 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 |
| 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 |
| 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) |
| get_blockC | Retrieve a single block by ID. Args: block_id: The ID of the block Returns: Block object with type and content |
| 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 |
| 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 |
| delete_blockB | Delete (archive) a block. Args: block_id: The ID of the block to delete Returns: Deleted block 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 |
| 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 |
| 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 |
| get_selfA | Get the bot user associated with the current token. Returns: Bot user object with name, type, and workspace info |
| 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 |
| get_userC | Get a user by ID. Args: user_id: The ID of the user Returns: User 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 |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
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.