notion-mcp
A Notion MCP server that enables searching, exporting, and importing pages as markdown using browser credentials without admin or OAuth setup.
README
<div align="center">
@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.
</div>
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 credentials - Prompts & resources — a
notion_setupprompt and anotion://guideresource for in-client onboarding - Zero 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
Tools
| Tool | Description |
|---|---|
notion_search |
Full-text search across all pages in your workspace |
notion_export_page |
Export any Notion page as markdown; image links resolve to viewable CDN URLs (pass image_dir to download images locally instead) |
notion_import_page |
Write markdown to a Notion page — replaces all existing content |
notion_import_page_from_file |
Write a local .md file to a page — replaces all content |
notion_append_to_page |
Append markdown to the end of a page (non-destructive) |
notion_append_to_page_from_file |
Append a local .md file to the end of a page (non-destructive) |
notion_create_page |
Create a new sub-page, optionally prefilled with markdown |
notion_create_page_from_file |
Create a new sub-page from a local .md file |
notion_add_image |
Append an image to the end of a page — local file is uploaded to Notion, http(s) URL is referenced as-is |
notion_list_comments |
List open discussion threads on a page |
notion_add_comment |
Start a new discussion — inline (anchored to text) or block-level |
notion_reply_comment |
Reply to an existing discussion thread |
notion_init |
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 (token_v2) |
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 init
Open 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-mcp
Prefer 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.so - Copy the
token_v2cookie value →NOTION_TOKEN - Press F12 → Network tab, do any action in Notion
- Find a POST request to
api/v3/*, click it - From Request Headers: copy
x-notion-active-user-header→NOTION_USER_ID - From 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-mcp
Claude 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 fails - Databases — 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
Recommended Servers
playwright-mcp
A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.
Magic Component Platform (MCP)
An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.
Audiense Insights MCP Server
Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.
VeyraX MCP
Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.
graphlit-mcp-server
The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.
Kagi MCP Server
An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.
E2B
Using MCP to run code via e2b.
Neon Database
MCP server for interacting with Neon Management API and databases
Exa Search
A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.
Qdrant Server
This repository is an example of how to create a MCP server for Qdrant, a vector search engine.