notion-mcp
Provides tools for searching, exporting, importing, appending, and creating Notion pages as markdown, managing comments, and uploading images, using Notion's internal API.
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-mcpsearch my workspace for meeting notes"
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.
@shck-dev/notion-mcp
Notion MCP Server — search, export, and import pages as markdown
No workspace admin. No OAuth. No page sharing.
Just paste 3 values from your browser and go.
Features
Search — full-text search across your entire workspace
Export — download any page as clean markdown (headings, lists, to-do, code blocks, tables, links, images with viewable URLs)
Import — write markdown back to Notion pages (replaces content), from a string or local file
Append — add markdown to the end of a page without touching existing content
Create — spin up new child pages, optionally prefilled from a markdown string or file
Images — upload a local image to a page, or reference an external URL
Comments — list open discussions, add new comments, reply to threads
One-command setup —
npx @shck-dev/notion-mcp init: paste a browser "Copy as cURL" and it extracts + saves your credentialsPrompts & resources — a
notion_setupprompt and anotion://guideresource for in-client onboardingZero setup friction — uses the same internal API as the Notion web app; if you can see it in your browser, this server can access it
Related MCP server: Markdown-To-Notion
Tools
Tool | Description |
| Full-text search across all pages in your workspace |
| Export any Notion page as markdown; image links resolve to viewable CDN URLs (pass |
| Write markdown to a Notion page — replaces all existing content |
| Write a local |
| Append markdown to the end of a page (non-destructive) |
| Append a local |
| Create a new sub-page, optionally prefilled with markdown |
| Create a new sub-page from a local |
| Append an image to the end of a page — local file is uploaded to Notion, http(s) URL is referenced as-is |
| List open discussion threads on a page |
| Start a new discussion — inline (anchored to text) or block-level |
| Reply to an existing discussion thread |
| Paste a browser "Copy as cURL" to extract & save credentials |
Why not the official Notion API?
This MCP server | Official Notion API | |
Setup | Paste 3 values from DevTools | Create integration, get admin approval, share pages |
Page access | Everything you can see | Only explicitly shared pages |
Markdown | Bidirectional (export + import) | Read-only blocks API |
Auth | Cookie ( | OAuth / integration token |
Trade-off: The internal API is undocumented and may change. Token expires periodically (re-grab from browser).
Quick start
Easiest: interactive setup
npx @shck-dev/notion-mcp initOpen Notion in Chrome → DevTools (F12) → Network → click any request to notion.so/api/v3/… → right-click → Copy as cURL, then paste it and press Ctrl-D. Your token, user id, and workspace id are extracted and saved to ~/.notion-mcp/config.json. Then register the server — no env block needed:
claude mcp add notion -- npx @shck-dev/notion-mcpPrefer to set the three values by hand? Steps below.
1. Get credentials from your browser
Open notion.so in Chrome
Press F12 → Application → Cookies →
www.notion.soCopy the
token_v2cookie value →NOTION_TOKENPress F12 → Network tab, do any action in Notion
Find a POST request to
api/v3/*, click itFrom Request Headers: copy
x-notion-active-user-header→NOTION_USER_IDFrom Request Body (Payload): find
spaceId→NOTION_SPACE_ID
2. Configure your MCP client
Claude Code
claude mcp add notion -- env NOTION_TOKEN=your_token NOTION_USER_ID=your_user_id NOTION_SPACE_ID=your_space_id npx @shck-dev/notion-mcpClaude Desktop / Cursor / any MCP client
Add to your MCP config (claude_desktop_config.json, .cursor/mcp.json, etc.):
{
"mcpServers": {
"notion": {
"command": "npx",
"args": ["@shck-dev/notion-mcp"],
"env": {
"NOTION_TOKEN": "your_token_v2_value",
"NOTION_USER_ID": "your_user_id",
"NOTION_SPACE_ID": "your_space_id"
}
}
}
}Requirements
Node.js ≥ 18 (for
npx) — or Bun. The published server is compiled to node-compatible JS, so Bun is no longer required to run it.
Limitations
Internal API — undocumented, may break with Notion updates
Token expiry —
token_v2expires periodically; re-grab from browser when auth failsDatabases — database/collection pages don't export rows yet; sub-pages render as links and such pages return an explanatory note instead of empty output
Block granularity — import replaces all content, append adds to the end (no in-place editing of individual blocks)
Lossy markdown — some complex formatting may simplify during conversion (e.g. nested lists flatten on import)
External images — http(s) image URLs added via
notion_add_image(or embedded in markdown) are referenced as-is and not re-uploaded to Notion
License
MIT
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
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/shck-dev/notion-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server