Skip to main content

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.

PyPI version Python 3.10+ License: MIT MCP

โœจ 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

  1. Go to notion.so/my-integrations
  2. Click "+ New integration"
  3. Name it (e.g., "Claude MCP")
  4. Select your workspace
  5. Click Submit
  6. Copy the Internal Integration Secret (starts with secret_ or ntn_)

Step 2: Share Pages with Integration

For each page or database you want Claude to access:

  1. Open the page in Notion
  2. Click "..." menu (top right)
  3. Click "Connections" โ†’ "Connect to"
  4. 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/databases
  • check_connection() โ€” Verify integration works

๐Ÿ“„ Page Operations

  • get_page(page_id_or_url) โ€” Read page as markdown
  • create_page(title, parent_id, content, privacy) โ€” Create new page
  • append_to_page(page_id_or_url, content) โ€” Append content
  • update_page_title(page_id_or_url, new_title) โ€” Rename page
  • archive_page(page_id_or_url) โ€” Soft-delete page
  • restore_page(page_id_or_url) โ€” Restore archived page
  • duplicate_page(page_id_or_url, new_title) โ€” Clone page

๐Ÿ—‚ Database Operations

  • list_databases() โ€” List all databases
  • get_database_schema(database_id_or_url) โ€” See columns and types
  • query_database(database_id_or_url, filters, sort_by, ...) โ€” Query rows
  • add_database_row(database_id_or_url, properties, content) โ€” Add row
  • update_database_row(page_id_or_url, properties) โ€” Update row
  • bulk_add_rows(database_id_or_url, rows) โ€” Add many rows at once

๐Ÿงฑ Block Operations

  • get_block_children(block_id_or_url) โ€” Read all blocks
  • update_block(block_id_or_url, new_content) โ€” Edit a block
  • delete_block(block_id_or_url) โ€” Delete a block

๐Ÿ’ฌ Comments

  • add_comment(page_id_or_url, comment_text) โ€” Add a comment
  • get_comments(page_id_or_url) โ€” Read comments

โšก Productivity Shortcuts

  • quick_note(content, title) โ€” Quick note to default parent
  • daily_journal(entry) โ€” Append timestamped entry to journal
  • add_task(title, due_date, priority, status, tags) โ€” Smart-add task
  • get_today_tasks() โ€” Tasks due today or overdue
  • complete_task(task_name_or_id) โ€” Mark task done
  • get_recent_pages(limit) โ€” Recently edited pages
  • learning_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:

โญ 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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

notion_mcp_server-0.1.0.tar.gz (22.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

notion_mcp_server-0.1.0-py3-none-any.whl (28.9 kB view details)

Uploaded Python 3

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

Hashes for notion_mcp_server-0.1.0.tar.gz
Algorithm Hash digest
SHA256 17f787c69362bf92d465aaf935f093e99bcefd3d87912df972735edfb0352fce
MD5 79f2c24a3f611027416134d6ee4a901c
BLAKE2b-256 eae3502d64a4b08a9ede4d6c1b9d6f4a07b13e15d1331728d55234cea34c46e4

See more details on using hashes here.

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

Hashes for notion_mcp_server-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 a0a862f4a21ef140ffb26d8fd993216d2886fae3f5e202fe25347938d622647a
MD5 ce0d9afa5cfcac74fc1c9a674b20486b
BLAKE2b-256 e19068c1190ff7bd82dc5db8dcf1b74807162596c9eebc6197ebe7eab9f436fd

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page