Notion
Available Tools
-
notion_search(query?, filter_type?, page_size?): Search across all accessible Notion pages and databases.
query(string, optional, default: ""): Search text. Empty returns all accessible pages.filter_type(string, optional): Filter by "page" or "database"page_size(integer, optional, default: 10, max: 100): Number of results
-
notion_list_databases(page_size?): List all databases shared with the integration.
page_size(integer, optional, default: 10, max: 100)
-
notion_query_database(database_id, filter_json?, sorts_json?, page_size?): Query a database with optional filters and sorts.
database_id(string, required): Database IDfilter_json(string, optional): Filter as a JSON string (e.g.,'{"property": "Status", "select": {"equals": "Done"}}')sorts_json(string, optional): Sorts as a JSON string (e.g.,'[{"property": "Created", "direction": "descending"}]')page_size(integer, optional, default: 10, max: 100)
-
notion_get_page(page_id): Get page properties and metadata.
page_id(string, required)
-
notion_create_page(parent_type, parent_id, title, properties_json?, content_markdown?): Create a new page.
parent_type(string, required): "database" or "page"parent_id(string, required): Parent database or page IDtitle(string, required): Page titleproperties_json(string, optional): Additional properties as a JSON string (e.g.,'{"Status": {"select": {"name": "In Progress"}}}')content_markdown(string, optional): Initial page content in markdown. Paragraphs separated by blank lines become separate blocks.
-
notion_update_page(page_id, properties_json, archived?): Update page properties.
page_id(string, required)properties_json(string, required): Properties as a JSON string (e.g.,'{"Status": {"select": {"name": "Done"}}}')archived(boolean, optional): Set true to archive, false to unarchive
-
notion_get_block_children(block_id, page_size?): Get content blocks of a page.
block_id(string, required): Page or block IDpage_size(integer, optional, default: 50, max: 100)
-
notion_append_blocks(page_id, content_markdown): Append content blocks to a page.
page_id(string, required): Page ID to append tocontent_markdown(string, required): Content as markdown. Supports: headings (# ## ###), bullets (- *), numbered lists (1.), code blocks, quotes (>)
Common Operations
Find pages: notion_search(query) to locate pages and databases by keyword.
Read page content (two-step):
notion_get_page(page_id)— get properties and metadatanotion_get_block_children(page_id)— get the actual content blocks
Add content to existing page: notion_append_blocks(page_id, content_markdown) with markdown-formatted text.
Create new page:
- In a database:
notion_create_page(parent_type="database", parent_id="...", title="...", properties_json='{"Status": {"select": {"name": "To Do"}}}') - As child of a page:
notion_create_page(parent_type="page", parent_id="...", title="...")
Update page properties: notion_update_page(page_id, properties_json='{"Status": {"select": {"name": "Done"}}}') — changes properties only, not content blocks.
Important: filter_json, sorts_json, and properties_json must be JSON strings, not parsed objects.
When creating pages in databases, match the database's property schema. Use notion_query_database first to inspect existing entries.
