Skip to main content

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

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.1.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.1-py3-none-any.whl (28.9 kB view details)

Uploaded Python 3

File details

Details for the file notion_mcp_server-0.1.1.tar.gz.

File metadata

  • Download URL: notion_mcp_server-0.1.1.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.1.tar.gz
Algorithm Hash digest
SHA256 88720d089d4c1be8266202cc6bffbb5af5ed19f7f3f7c55f4177491949a1ad53
MD5 aba45c33838235e1849ae44dc4a43c16
BLAKE2b-256 2d65958e1975bb86d5e8359c8024125b9a3233226038f1a44094942b4cccb156

See more details on using hashes here.

File details

Details for the file notion_mcp_server-0.1.1-py3-none-any.whl.

File metadata

  • Download URL: notion_mcp_server-0.1.1-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.1-py3-none-any.whl
Algorithm Hash digest
SHA256 8efbcf8a0f48f672f2fe5ad194582d4c505e11cf7d0e780f9fa16aca007bb380
MD5 b7168326c0ea9db2cd3ea4ea9195b6d8
BLAKE2b-256 894452d8ff77e70b997356dcf655dcc0f921316c4653942baf46a2d0118b21fb

See more details on using hashes here.

Release history Release notifications | RSS feed

This release

0.1.1 This release

2 files

0.1.0

2 files

Supported by

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