Powerful MCP server for Notion - read, create, search, and manage pages and databases through Claude
Project description
Notion MCP Server
๐ Powerful Notion integration for Claude โ read, create, search, and manage your entire Notion workspace through natural language.
โจ Features
- ๐ Smart Search โ Find pages and databases instantly
- ๐ Page Management โ Create, read, update, archive, duplicate pages
- ๐จ Full Markdown Support โ Seamless markdown โ Notion blocks conversion
- ๐ Database Operations โ Query with filters, sort, bulk add rows
- โก Productivity Shortcuts โ Quick notes, daily journal, task management
- ๐งฑ Block-Level Control โ Read, update, delete individual blocks
- ๐ฌ Comments Support โ Add and read page comments
- ๐ Learning Dashboard โ Track AI/ML or any learning database progress
- ๐ Privacy First โ All pages private by default
- โก Fast & Async โ Built with FastMCP, schema caching, auto-retry
๐ฌ What You Can Do
Ask Claude things like:
- "Search my Notion for 'machine learning'"
- "Create a page called 'Project Plan' with a roadmap"
- "Add 20 AI/ML topics to my Topics database"
- "Show me all tasks marked Critical priority"
- "What's on my schedule today?"
- "Add a quick note: meeting was great"
- "Show my learning dashboard"
๐ฆ Installation
Prerequisites
- Python 3.10 or higher
- A Notion account
- Claude Desktop, Claude Code, or any MCP-compatible client
Install with uv (recommended)
```bash uv tool install notion-mcp-server ```
Install with pip
```bash pip install notion-mcp-server ```
๐ง Setup (5 minutes)
Step 1: Create a Notion Integration
- Go to notion.so/my-integrations
- Click "+ New integration"
- Name it (e.g., "Claude MCP")
- Select your workspace
- Click Submit
- Copy the Internal Integration Secret (starts with
secret_orntn_)
Step 2: Share Pages with Integration
For each page or database you want Claude to access:
- Open the page in Notion
- Click "..." menu (top right)
- Click "Connections" โ "Connect to"
- Select your integration
๐ก Pro tip: Sharing a parent page automatically gives access to all sub-pages. Create one "Workspace Hub" page and share that.
Step 3: Configure Claude Desktop
Mac/Linux: ```bash ~/Library/Application\ Support/Claude/claude_desktop_config.json ```
Windows: ``` %APPDATA%\Claude\claude_desktop_config.json ```
Add this configuration:
```json { "mcpServers": { "notion": { "command": "uvx", "args": ["notion-mcp-server"], "env": { "NOTION_TOKEN": "secret_your_token_here", "DEFAULT_PRIVACY": "private", "DEFAULT_PARENT_PAGE_ID": "optional_parent_page_id" } } } } ```
Step 4: Restart Claude Desktop
Fully quit (including system tray) and reopen.
Step 5: Test It!
Ask Claude:
"Check my Notion connection"
If you see โ Connected โ you're all set!
๐ Available Tools (22 Total)
๐ Search & Connection
search_notion(query, filter_type, limit)โ Search pages/databasescheck_connection()โ Verify integration works
๐ Page Operations
get_page(page_id_or_url)โ Read page as markdowncreate_page(title, parent_id, content, privacy)โ Create new pageappend_to_page(page_id_or_url, content)โ Append contentupdate_page_title(page_id_or_url, new_title)โ Rename pagearchive_page(page_id_or_url)โ Soft-delete pagerestore_page(page_id_or_url)โ Restore archived pageduplicate_page(page_id_or_url, new_title)โ Clone page
๐ Database Operations
list_databases()โ List all databasesget_database_schema(database_id_or_url)โ See columns and typesquery_database(database_id_or_url, filters, sort_by, ...)โ Query rowsadd_database_row(database_id_or_url, properties, content)โ Add rowupdate_database_row(page_id_or_url, properties)โ Update rowbulk_add_rows(database_id_or_url, rows)โ Add many rows at once
๐งฑ Block Operations
get_block_children(block_id_or_url)โ Read all blocksupdate_block(block_id_or_url, new_content)โ Edit a blockdelete_block(block_id_or_url)โ Delete a block
๐ฌ Comments
add_comment(page_id_or_url, comment_text)โ Add a commentget_comments(page_id_or_url)โ Read comments
โก Productivity Shortcuts
quick_note(content, title)โ Quick note to default parentdaily_journal(entry)โ Append timestamped entry to journaladd_task(title, due_date, priority, status, tags)โ Smart-add taskget_today_tasks()โ Tasks due today or overduecomplete_task(task_name_or_id)โ Mark task doneget_recent_pages(limit)โ Recently edited pageslearning_dashboard()โ Learning progress overview
๐จ Markdown Support
Full bidirectional conversion:
| Markdown | Notion Block |
|---|---|
# Heading 1 |
Heading 1 |
## Heading 2 |
Heading 2 |
### Heading 3 |
Heading 3 |
- bullet |
Bulleted list |
1. numbered |
Numbered list |
- [ ] todo |
To-do (unchecked) |
- [x] done |
To-do (checked) |
> quote |
Quote block |
```code``` |
Code block |
--- |
Divider |
**bold** |
Bold text |
*italic* |
Italic text |
`inline code` |
Inline code |
[link](url) |
Link |
โ๏ธ Configuration
| Environment Variable | Required | Description |
|---|---|---|
| `NOTION_TOKEN` | โ Yes | Your integration secret |
| `DEFAULT_PRIVACY` | โ No | `private` (default) or `public` |
| `DEFAULT_PARENT_PAGE_ID` | โ No | Default parent for new pages |
๐ก Examples
Example 1: Bulk Create Database Entries
"Add 20 AI/ML topics to my Topics database with appropriate categories and priorities"
Claude uses `bulk_add_rows` to create all 20 entries with one command.
Example 2: Daily Workflow
``` You: "What tasks do I have today?" Claude: [shows your today_tasks]
You: "Mark 'Review PR #123' as done" Claude: [calls complete_task]
You: "Add a journal entry: Productive day, finished 5 tasks" Claude: [appends to journal page] ```
Example 3: Smart Querying
"Show me high-priority topics that aren't started yet, sorted by category"
Claude builds a complex filter and returns organized results.
๐ Troubleshooting
"Object not found" errors
The page/database isn't shared with your integration. Fix: Open page โ ... โ Connections โ Connect to your integration.
Empty search results
You haven't shared any pages with the integration yet. Fix: Share at least one page (and its sub-pages will inherit access).
"Cannot create workspace-level page"
Internal integrations can't create pages at workspace root. Fix: Set `DEFAULT_PARENT_PAGE_ID` in your config to a parent page.
Rate limit errors
Notion API allows ~3 requests/second. Fix: Server has built-in auto-retry with exponential backoff.
๐ค Contributing
Pull requests welcome! For major changes, please open an issue first.
```bash git clone https://github.com/KuldeepJha5176/notion-mcp-server cd notion-mcp-server uv sync uv run pytest ```
๐ Security
- Each user provides their own Notion token
- Tokens stored locally in user's environment
- Server never collects, stores, or transmits user data
- All communication is direct: User โ Notion API
- See SECURITY.md for vulnerability reporting
๐ License
MIT โ see LICENSE file.
๐ Acknowledgments
Built with:
- FastMCP โ Excellent MCP framework
- notion-client โ Notion Python SDK
- Anthropic MCP โ The protocol that makes it possible
โญ Show Your Support
If this server helps you, please:
- โญ Star this repo
- ๐ฆ Tweet about it
- ๐ Blog about how you use it
- ๐ Report bugs to make it better
Made with โค๏ธ for the Claude community by Kuldeep Jha
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file notion_mcp_server-0.1.0.tar.gz.
File metadata
- Download URL: notion_mcp_server-0.1.0.tar.gz
- Upload date:
- Size: 22.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.11.14 {"installer":{"name":"uv","version":"0.11.14","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":null,"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
17f787c69362bf92d465aaf935f093e99bcefd3d87912df972735edfb0352fce
|
|
| MD5 |
79f2c24a3f611027416134d6ee4a901c
|
|
| BLAKE2b-256 |
eae3502d64a4b08a9ede4d6c1b9d6f4a07b13e15d1331728d55234cea34c46e4
|
File details
Details for the file notion_mcp_server-0.1.0-py3-none-any.whl.
File metadata
- Download URL: notion_mcp_server-0.1.0-py3-none-any.whl
- Upload date:
- Size: 28.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.11.14 {"installer":{"name":"uv","version":"0.11.14","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":null,"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a0a862f4a21ef140ffb26d8fd993216d2886fae3f5e202fe25347938d622647a
|
|
| MD5 |
ce0d9afa5cfcac74fc1c9a674b20486b
|
|
| BLAKE2b-256 |
e19068c1190ff7bd82dc5db8dcf1b74807162596c9eebc6197ebe7eab9f436fd
|