notion-mcp-server

notion-mcp-server

Enables natural language interaction with Notion workspace, including search, page/database management, markdown conversion, and productivity shortcuts.

Category
访问服务器

README

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)

uv tool install notion-mcp-server

Install with pip

pip install notion-mcp-server

🔧 Setup (5 minutes)

Each user needs their own Notion integration token. Tokens are personal — they grant access only to the pages you explicitly share with your integration. No .env file is needed when using uvx; your token goes directly in the Claude config JSON (Step 3).

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:

~/Library/Application\ Support/Claude/claude_desktop_config.json

Windows:

%APPDATA%\Claude\claude_desktop_config.json

Add this configuration:

{
  "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"
      }
    }
  }
}

🗂 Alternative: Project-level Setup via .mcp.json

Instead of editing the global Claude Desktop config, you can enable the Notion MCP server per-project by adding a .mcp.json file to the root of any codebase. This is ideal for team projects or when you want the server scoped to a specific workspace.

Create .mcp.json in your project root:

{
  "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"
      }
    }
  }
}

💡 Tip: Add .mcp.json to your .gitignore if it contains your NOTION_TOKEN, or use environment variable references and keep secrets in a local .env file.

Supported by Claude Code, Cursor, Windsurf, and other MCP-compatible editors that respect project-level config files.


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.

🧑‍💻 Local Development Setup

If you're contributing or want to run from source, use a .env file instead of the config JSON:

git clone https://github.com/KuldeepJha5176/notion-mcp-server
cd notion-mcp-server
cp .env.example .env
# Edit .env and add your NOTION_TOKEN
uv sync
uv run notion-mcp

Your .env file:

NOTION_TOKEN=secret_your_token_here
DEFAULT_PRIVACY=private
DEFAULT_PARENT_PAGE_ID=   # optional

The .env file is only for local development. Regular users should use the env block in the Claude config JSON as shown in Step 3.

🤝 Contributing

Pull requests welcome! For major changes, please open an issue first.

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

推荐服务器

Baidu Map

Baidu Map

百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。

官方
精选
JavaScript
Playwright MCP Server

Playwright MCP Server

一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。

官方
精选
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。

官方
精选
本地
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。

官方
精选
本地
TypeScript
VeyraX

VeyraX

一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。

官方
精选
本地
graphlit-mcp-server

graphlit-mcp-server

模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。

官方
精选
TypeScript
Kagi MCP Server

Kagi MCP Server

一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。

官方
精选
Python
e2b-mcp-server

e2b-mcp-server

使用 MCP 通过 e2b 运行代码。

官方
精选
Neon MCP Server

Neon MCP Server

用于与 Neon 管理 API 和数据库交互的 MCP 服务器

官方
精选
Exa MCP Server

Exa MCP Server

模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。

官方
精选