Getting Started
Create a Notion Integration
Go to notion.so/my-integrations and create a new internal integration. Copy the API key.
Configure MCP Server
Add the Notion MCP server to your ~/.claude/.mcp.json:
{
"mcpServers": {
"notion": {
"command": "npx",
"args": ["-y", "@notionhq/notion-mcp-server"],
"env": {
"NOTION_API_KEY": "your-api-key-here"
}
}
}
}
Share Pages with the Integration
In Notion, open any page or database you want Claude to access. Click ... → Connections → add your integration. Claude can only access pages explicitly shared.
Start Using It
Launch Claude Code and ask it to interact with Notion. Claude will automatically use the MCP tools when needed.
Available Functions
The Notion MCP Server exposes these tools to Claude. Click any function to see details and examples.
Search
Parameters
query | string | Search text to find matching pages or databases |
filter | object | Optional. Filter by "page" or "database" |
sort | object | Optional. Sort by "last_edited_time" ascending or descending |
Example Prompt
What Claude Does
notion_search({
query: "Q1 Marketing Plan",
filter: { property: "object", value: "page" },
sort: { direction: "descending", timestamp: "last_edited_time" }
})
Pages
Parameters
page_id | string | The ID of the page to retrieve |
Example Prompt
What Claude Does
// First searches for the page
notion_search({ query: "project roadmap" })
// Then retrieves it by ID
notion_get_page({ page_id: "abc123-..." })
Parameters
parent | object | Parent page or database ID |
properties | object | Page title and other properties |
children | array | Optional. Block content for the page body |
Example Prompt
What Claude Does
notion_create_page({
parent: { database_id: "work-db-id" },
properties: {
"Name": { title: [{ text: { content: "Meeting Notes - 2026-03-22" }}] },
"Attendees": { multi_select: [{ name: "Alice" }, { name: "Bob" }] }
},
children: [
{ heading_2: { rich_text: [{ text: { content: "Agenda" }}] } },
{ bulleted_list_item: { rich_text: [{ text: { content: "Item 1" }}] } }
]
})
Parameters
page_id | string | The page to update |
properties | object | Properties to change |
Example Prompt
What Claude Does
notion_search({ query: "Homepage Redesign" })
notion_update_page({
page_id: "page-id-here",
properties: {
"Status": { select: { name: "Done" } }
}
})
Blocks (Content)
Parameters
block_id | string | The block ID to retrieve |
Example Prompt
What Claude Does
// Gets the page's child blocks, then reads a specific one
notion_get_block_children({ block_id: "page-id" })
notion_get_block({ block_id: "first-paragraph-id" })
Parameters
block_id | string | The parent block or page ID |
page_size | number | Optional. Number of results (max 100) |
Example Prompt
What Claude Does
notion_search({ query: "Weekly Standup" })
notion_get_block_children({ block_id: "page-id" })
Parameters
block_id | string | The page or block to append to |
children | array | Array of block objects to add |
Example Prompt
What Claude Does
notion_append_block_children({
block_id: "meeting-notes-page-id",
children: [
{ heading_2: { rich_text: [{ text: { content: "Action Items" }}] } },
{ bulleted_list_item: { rich_text: [{ text: { content: "Follow up with design team" }}] } },
{ bulleted_list_item: { rich_text: [{ text: { content: "Update project timeline" }}] } },
{ bulleted_list_item: { rich_text: [{ text: { content: "Send recap email" }}] } }
]
})
Parameters
block_id | string | The block to delete |
Example Prompt
What Claude Does
// Finds the block, then deletes it
notion_get_block_children({ block_id: "planning-page-id" })
notion_delete_block({ block_id: "q4-goals-block-id" })
Databases
Parameters
database_id | string | The database to retrieve |
Example Prompt
What Claude Does
notion_search({ query: "Task Tracker", filter: { property: "object", value: "database" } })
notion_get_database({ database_id: "db-id" })
// Returns: Name (title), Status (select), Priority (select),
// Due Date (date), Assignee (people)
Parameters
database_id | string | The database to query |
filter | object | Optional. Filter conditions |
sorts | array | Optional. Sort criteria |
Example Prompt
What Claude Does
notion_query_database({
database_id: "task-db-id",
filter: {
and: [
{ property: "Priority", select: { equals: "High" } },
{ property: "Status", select: { equals: "In Progress" } }
]
},
sorts: [{ property: "Due Date", direction: "ascending" }]
})
Parameters
parent | object | Parent page ID |
title | array | Database title |
properties | object | Column definitions |
Example Prompt
What Claude Does
notion_create_database({
parent: { page_id: "parent-page-id" },
title: [{ text: { content: "Bug Tracker" } }],
properties: {
"Name": { title: {} },
"Severity": { select: { options: [
{ name: "Critical", color: "red" },
{ name: "High", color: "orange" },
{ name: "Medium", color: "yellow" },
{ name: "Low", color: "green" }
]}},
"Status": { select: { options: [
{ name: "Open" }, { name: "In Progress" }, { name: "Resolved" }
]}},
"Assignee": { people: {} }
}
})
Parameters
database_id | string | The database to update |
title | array | Optional. New title |
properties | object | Optional. Column changes |
Example Prompt
What Claude Does
notion_update_database({
database_id: "bug-tracker-db-id",
properties: {
"Due Date": { date: {} }
}
})
Comments
Parameters
parent | object | Page ID to comment on |
rich_text | array | Comment content |
Example Prompt
What Claude Does
notion_create_comment({
parent: { page_id: "api-design-page-id" },
rich_text: [{ text: { content: "Reviewed - looks good to ship" } }]
})
Parameters
block_id | string | The page or block ID |
Example Prompt
What Claude Does
notion_search({ query: "Sprint Planning" })
notion_get_comments({ block_id: "sprint-planning-page-id" })
Users
Parameters
| No parameters required |
Example Prompt
What Claude Does
notion_list_users()
// Returns: list of users with names, emails, and avatars
Parameters
user_id | string | The user ID to look up |
Example Prompt
What Claude Does
notion_get_page({ page_id: "roadmap-page-id" })
// Extracts last_edited_by user ID from response
notion_get_user({ user_id: "user-id-from-page" })
Tips & Best Practices
Use Natural Language
You don't need to know the API. Just describe what you want: "Create a task called Fix Login Bug with high priority in my project tracker."
Share Pages First
Claude can only access pages connected to the integration. If a search returns nothing, check that the page is shared with your Notion integration.
Chain Operations
Claude can combine multiple operations: "Find all overdue tasks, mark them as urgent, and add a comment explaining why."
Database Power
Databases are where Notion shines with Claude. Query, filter, sort, create entries, and update properties - all through conversation.