Notion MCP Server
Provides tools for creating, retrieving, and updating Notion pages, including managing page properties, metadata, icons, covers, and archive status within Notion databases and workspaces.
Click on "Install 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 MCP Servercreate a new page in my tasks database with title 'Weekly Review' and status 'In Progress'"
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 MCP Server
A Model Context Protocol server for Notion API integration, providing tools to create, retrieve, and update Notion pages.
Features
Create Page: Create new pages in databases or as child pages
Retrieve Page: Get page properties and metadata
Update Page: Modify page properties, icons, covers, and archive status
Retrieve Page Property: Get detailed property information with pagination support
Related MCP server: Notion MCP Server
Installation
cd backend/notion-mcp
npm installConfiguration
Create a .env file with your Notion API key:
NOTION_API_KEY=your_notion_integration_token_here
NOTION_VERSION=2022-06-28
PORT=3003Getting a Notion API Key
Go to Notion Developers
Create a new integration
Copy the "Internal Integration Token"
Share your databases/pages with the integration
Usage
STDIO Transport (Development)
npm run dev:stdioHTTP Transport (Production)
npm run dev:http
# or
npm startAvailable Tools
notion_create_page
Creates a new page in Notion.
Parameters:
parent(required): Parent page or database IDproperties(required): Page properties matching parent schemachildren(optional): Page content as block objectsicon(optional): Page icon (emoji or external URL)cover(optional): Page cover image
Example:
{
"parent": {
"type": "database_id",
"database_id": "d9824bdc-8445-4327-be8b-5b47500af6ce"
},
"properties": {
"Name": {
"title": [{"text": {"content": "New Page"}}]
}
},
"icon": {
"type": "emoji",
"emoji": "📝"
}
}notion_retrieve_page
Retrieves a Notion page by ID.
Parameters:
page_id(required): The page ID to retrievefilter_properties(optional): Specific property IDs to return
notion_update_page
Updates page properties and metadata.
Parameters:
page_id(required): The page ID to updateproperties(optional): Properties to updatein_trash(optional): Archive/restore the pageicon(optional): Update page iconcover(optional): Update page cover
notion_retrieve_page_property
Retrieves detailed property information with pagination.
Parameters:
page_id(required): The page IDproperty_id(required): The property IDpage_size(optional): Number of items per page (max 100)start_cursor(optional): Pagination cursor
Building
npm run buildDevelopment
npm run watch # Watch mode for TypeScript compilationClient Configuration
For HTTP transport, add to your MCP client config:
{
"mcpServers": {
"notion": {
"url": "http://localhost:3003/mcp"
}
}
}For STDIO transport:
{
"mcpServers": {
"notion": {
"command": "node",
"args": ["./dist/index.js"]
}
}
}Health Check
When running HTTP transport:
curl http://localhost:3003/healthError Handling
The server provides detailed error messages for:
Missing API keys
Invalid page/database IDs
Permission errors
Malformed requests
Notion API rate limits
License
MIT
Available Tools
4 toolsnotion_create_pageB
Creates a new page in Notion. Can be a child of a page or database.
| Name | Required | Description | Default |
|---|---|---|---|
| children | No | Optional page content as array of block objects | |
| cover | No | Optional page cover image | |
| icon | No | Optional page icon | |
| parent | Yes | Parent page or database | |
| properties | Yes | Page properties. Must match parent database schema if parent is a database. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It states the tool creates a new page, implying a write operation, but fails to mention critical behavioral aspects such as required permissions, rate limits, error conditions, or what happens on success (e.g., returns a page ID). This leaves significant gaps for an AI agent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise with just two sentences that directly state the tool's purpose and a key usage note. It is front-loaded with the core action and wastes no words, making it easy for an AI agent to parse quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity (5 parameters with nested objects, no output schema, and no annotations), the description is incomplete. It doesn't address what the tool returns, error handling, or behavioral constraints, which are crucial for a creation tool with multiple parameters. The high schema coverage helps but doesn't compensate for the lack of output and behavioral context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema description coverage is 100%, meaning all parameters are documented in the input schema. The description adds no additional parameter semantics beyond what's already in the schema, such as explaining the relationship between 'parent' and 'properties' or providing examples. This meets the baseline for high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Creates a new page') and resource ('in Notion'), which provides a specific verb+resource combination. However, it doesn't explicitly distinguish this tool from its sibling 'notion_update_page' beyond the creation vs. update distinction, missing an opportunity for clearer sibling differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides some usage context by mentioning 'Can be a child of a page or database,' which implies when to use it for hierarchical page creation. However, it lacks explicit guidance on when to choose this tool over alternatives like 'notion_update_page' or prerequisites for successful invocation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
notion_retrieve_pageA
Retrieves a Notion page by ID. Returns page properties, not page content.
| Name | Required | Description | Default |
|---|---|---|---|
| filter_properties | No | Optional list of property IDs to filter the response | |
| page_id | Yes | The ID of the page to retrieve |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It discloses that the tool returns page properties rather than content, which is useful behavioral context. However, it doesn't mention authentication needs, rate limits, error handling, or whether the operation is read-only (implied by 'retrieves' but not explicit).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two concise sentences with zero waste. The first sentence states the core purpose, and the second clarifies the return scope, both earning their place by adding value beyond the tool name.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple retrieval tool with 100% schema coverage and no output schema, the description is reasonably complete. It clarifies the return type (properties vs. content), which addresses a key ambiguity. However, without annotations or output schema, it could benefit from mentioning authentication or error scenarios.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents both parameters (page_id and filter_properties). The description doesn't add any parameter-specific details beyond what the schema provides, such as format examples for page_id or use cases for filter_properties.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action ('Retrieves'), target resource ('a Notion page by ID'), and scope ('Returns page properties, not page content'). It distinguishes from siblings by specifying it retrieves the page itself rather than creating, updating, or retrieving specific properties.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when needing page properties by ID, but doesn't explicitly state when to use this tool versus alternatives like notion_retrieve_page_property for specific properties or notion_update_page for modifications. No exclusions or prerequisites are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
notion_retrieve_page_propertyB
Retrieves a specific property of a Notion page. Use for properties with more than 25 references.
| Name | Required | Description | Default |
|---|---|---|---|
| page_id | Yes | The ID of the page | |
| page_size | No | Number of items to return (max 100) | |
| property_id | Yes | The ID of the property to retrieve | |
| start_cursor | No | Cursor for pagination |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It mentions a constraint ('properties with more than 25 references'), which adds some context, but fails to cover key aspects like whether this is a read-only operation, potential rate limits, authentication needs, or error handling. For a tool with no annotations, this leaves significant gaps in understanding its behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is highly concise with only two sentences, each serving a clear purpose: the first states the tool's function, and the second provides usage guidance. There is no wasted text, and it is front-loaded with the core action, making it efficient and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity (4 parameters, no output schema, no annotations), the description is somewhat complete but has notable gaps. It clarifies the purpose and offers basic usage guidance, but without annotations or an output schema, it lacks details on behavioral traits, return values, and broader context, making it adequate but not fully comprehensive.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage, clearly documenting all four parameters (page_id, page_size, property_id, start_cursor) with their purposes and constraints. The description doesn't add any additional parameter details beyond what the schema provides, so it meets the baseline score of 3 where the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Retrieves') and resource ('a specific property of a Notion page'), making the purpose understandable. However, it doesn't explicitly differentiate from sibling tools like 'notion_retrieve_page' (which retrieves the entire page rather than a specific property), so it doesn't reach the highest score for sibling distinction.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides some usage context by specifying 'Use for properties with more than 25 references,' which implies when to prefer this tool over alternatives. However, it doesn't explicitly mention when not to use it or name specific alternatives (e.g., 'notion_retrieve_page' for properties with fewer references), leaving the guidance somewhat implied rather than comprehensive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
notion_update_pageC
Updates properties of a Notion page. Can also update icon, cover, or archive/restore pages.
| Name | Required | Description | Default |
|---|---|---|---|
| cover | No | Page cover image to update | |
| icon | No | Page icon to update | |
| in_trash | No | Set to true to archive/delete the page, false to restore it | |
| page_id | Yes | The ID of the page to update | |
| properties | No | Properties to update. Keys are property names/IDs, values are property values. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden but lacks critical behavioral details. It mentions update operations but doesn't disclose permission requirements, whether changes are reversible, error handling, or response format. For a mutation tool with zero annotation coverage, this is insufficient.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that front-loads the core purpose and lists additional capabilities. It avoids redundancy and wastes no words, though it could be slightly more structured for clarity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with 5 parameters, no annotations, and no output schema, the description is incomplete. It lacks behavioral context, error information, and guidance on proper usage, leaving significant gaps for an AI agent to operate effectively.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, providing detailed documentation for all 5 parameters. The description adds minimal value beyond the schema by listing icon, cover, and archive/restore as capabilities, but doesn't explain parameter interactions or usage nuances. Baseline 3 is appropriate when schema does heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Updates' and resource 'properties of a Notion page', with additional capabilities for icon, cover, and archive/restore operations. It distinguishes from siblings like notion_create_page (creation) and notion_retrieve_page (reading), though not explicitly named.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives is provided. The description mentions what it can do but doesn't specify prerequisites, constraints, or differentiate from sibling tools like notion_retrieve_page_property for property-specific operations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
TDQS
The tools are mostly distinct, with each handling a specific aspect of page management (create, retrieve, update). However, 'notion_retrieve_page' and 'notion_retrieve_page_property' could cause confusion, as the latter is a specialized case of the former, potentially leading to misselection when an agent needs general page info versus a specific property.
All tool names follow a consistent 'notion_verb_noun' pattern using snake_case, with clear verbs like create, retrieve, and update. This predictability makes it easy for agents to understand and use the toolset without naming conflicts or style mismatches.
With 4 tools, the count is borderline for a Notion integration, as it covers basic CRUD operations but feels thin. A typical Notion server might include additional tools for databases, blocks, or search to provide more comprehensive coverage, making this set somewhat limited in scope.
The toolset covers create, retrieve, and update operations for pages, but has notable gaps. There is no delete tool, and it lacks support for databases, blocks, or search functionalities, which are core to Notion's domain. This incompleteness may require agents to work around missing operations for full lifecycle management.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Create, search and manage Knowtis collaborative notes from AI assistants.
MCP-native open-source Notion alternative: read & write pages, databases and kanban boards.
Streamline your Attio workflows using natural language to search, create, update, and organize com…
Google NotebookLM via natural language: create notebooks, add sources (PDF, URL, YouTube) and ask gr
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables interaction with Notion workspaces through the Notion API. Provides tools to search, read, create, and update Notion pages and databases with real-time synchronization.991MIT
- AlicenseNot gradedqualityDmaintenanceEnables AI assistants to interact with Notion workspaces through the Notion API. Supports searching, reading, creating pages, and querying databases with filters and sorting capabilities.991MIT
- AlicenseNot gradedqualityDmaintenanceEnables interaction with Notion workspaces through the Notion API, allowing users to search, read, comment on, and create pages and databases using natural language commands.172,212MIT
- AlicenseNot gradedqualityNot gradedmaintenanceEnables AI workflows to integrate with Notion workspaces, supporting page and database creation, queries with filters and sorting, content updates, and workspace-wide search operations.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/michaelwaves/notion-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server