Notion MCP Server
by mikeysrecipes
This project implements an MCP (Model Context Protocol) server for the Notion API. It allows AI models to interact with Notion data through a standardized protocol.
Last updated: N/A
Notion MCP Server
notion-mcp-sm
This project implements an MCP server for the Notion API.
mcp-demo
Installation
1. Setting up Integration in Notion:
Go to https://www.notion.so/profile/integrations and create a new internal integration or select an existing one.

Creating a Notion Integration token
While we limit the scope of Notion API's exposed (for example, you will not be able to delete databases via MCP), there is a non-zero risk to workspace data by exposing it to LLMs. Security-conscious users may want to further configure the Integration's Capabilities.
For example, you can create a read-only integration token by giving only "Read content" access from the "Configuration" tab:

Notion Integration Token Capabilities showing Read content checked
2. Adding MCP config to your client:
Using npm:
Add the following to your .cursor/mcp.json
or claude_desktop_config.json
(MacOS: ~/Library/Application\ Support/Claude/claude_desktop_config.json
)
{
"mcpServers": {
"notionApi": {
"command": "npx",
"args": ["-y", "@notionhq/notion-mcp-server"],
"env": {
"OPENAPI_MCP_HEADERS": "{\"Authorization\": \"Bearer ntn_****\", \"Notion-Version\": \"2022-06-28\" }"
}
}
}
}
Using Docker:
There are two options for running the MCP server with Docker:
Option 1: Using the official Docker Hub image:
Add the following to your .cursor/mcp.json
or claude_desktop_config.json
:
{
"mcpServers": {
"notionApi": {
"command": "docker",
"args": [
"run",
"--rm",
"-i",
"-e", "OPENAPI_MCP_HEADERS",
"mcp/notion"
],
"env": {
"OPENAPI_MCP_HEADERS": "{\"Authorization\":\"Bearer ntn_****\",\"Notion-Version\":\"2022-06-28\"}"
}
}
}
}
This approach:
- Uses the official Docker Hub image
- Properly handles JSON escaping via environment variables
- Provides a more reliable configuration method
Option 2: Building the Docker image locally:
You can also build and run the Docker image locally. First, build the Docker image:
docker-compose build
Then, add the following to your .cursor/mcp.json
or claude_desktop_config.json
:
{
"mcpServers": {
"notionApi": {
"command": "docker",
"args": [
"run",
"--rm",
"-i",
"-e",
"OPENAPI_MCP_HEADERS={\"Authorization\": \"Bearer ntn_****\", \"Notion-Version\": \"2022-06-28\"}",
"notion-mcp-server"
]
}
}
}
Don't forget to replace ntn_****
with your integration secret. Find it from your integration configuration tab:
Copying your Integration token from the Configuration tab in the developer portal
3. Connecting content to integration:
Ensure relevant pages and databases are connected to your integration.
To do this, you'll need to visit that page, and click on the 3 dots, and select "Connect to integration".

Adding Integration Token to Notion Connections
Examples
- Using the following instruction
Comment "Hello MCP" on page "Getting started"
AI will correctly plan two API calls, v1/search
and v1/comments
, to achieve the task
- Similarly, the following instruction will result in a new page named "Notion MCP" added to parent page "Development"
Add a page titled "Notion MCP" to page "Development"
- You may also reference content ID directly
Get the content of page 1a6b35e6e67f802fa7e1d27686f017f2
Development
Build
npm run build
Execute
npx -y --prefix /path/to/local/notion-mcp-server @notionhq/notion-mcp-server
Publish
npm publish --access public