CAT
/MCP
SkillsMCPMarketplacesDigestToolsAdvertise

This week in Claude

Every Monday: Claude Code, Agent SDK, MCP, and the Anthropic platform moves worth your time.

Skills by Category
Frontend DevelopmentBackend & APIsTesting & QASecurityDevOps & CI/CDGit & Pull RequestsDocumentationCode Review & QualityAI & Agent BuildingSkill Development
MCP Servers by Category
Sales & MarketingWeb & Browser AutomationDatabasesAI & LLM ToolsCloud & InfrastructureCommunication & MessagingDeveloper ToolsDesign & CreativeDocuments & KnowledgeSearch & Web Crawling
Marketplaces by Category
AI Agents & OrchestrationLLM IntegrationDevelopment ToolsFrontend & UIBackend & APIsDatabasesTesting & Code QualityDevOps & CloudSecurity & ComplianceGit & Version Control

Cross AI Tools

Discover Claude Code plugins, extensions, and tools. Automatically updated directory of Anthropic Claude AI marketplaces with development tools, productivity plugins, and integrations.

Resources

  • Browse Skills
  • Browse MCP Servers
  • Browse Marketplaces
  • Plugins Reference

Community

  • About
  • Tools
  • Feedback
  • Privacy Policy
  • Advertise

Built for the Claude Code community with Claude Code by @mertduzgun

Independent project, not affiliated with Anthropic

Notion Mcp

shck-dev/notion-mcp
114 toolsauthSTDIOregistry active
Summary

Connects to Notion's internal web API using browser credentials (token_v2, user ID, space ID) instead of the official integration flow. Exposes full-text search across your workspace, bidirectional markdown conversion (export pages to markdown with clean formatting, import or append markdown back into pages), page creation, image uploads, and comment management. Skips the OAuth dance and admin approval process by using the same endpoints the web app calls. Trade-off is token expiry and reliance on an undocumented API. Useful when you want programmatic Notion access without workspace admin permissions or need markdown-based workflows that the official blocks API doesn't support. Includes a one-command setup that extracts credentials from a cURL command copied from DevTools.

CodeRabbit
CodeRabbit
AI writes the code. CodeRabbit catches the slop.
Try For Free →
Keep your Mac awake
Keep your Mac awake
Keep your Mac awake while Claude Code and 40+ AI agents run. Sleeps when they're idle.
One time payment $9 →
Context.devContext.dev
Context.dev
Integrate web data into your AI product. One API to scrape website & brand data.
Get API Key Now →
Make your agent a DeFi expert
Make your agent a DeFi expert
Agent, run crypto. Access onchain data & trade routes via 1inch.
Install now →
Make money from your Skills
Make money from your Skills
On Capafy, your Skill runs online 24/7 as an agent product, and you get paid every time someone uses it.
Start earning →
AppSignal
AppSignal
Monitor with ease. Code with confidence.
Start Free Trial →
CodeRabbit
CodeRabbit
AI writes the code. CodeRabbit catches the slop.
Try For Free →
Keep your Mac awake
Keep your Mac awake
Keep your Mac awake while Claude Code and 40+ AI agents run. Sleeps when they're idle.
One time payment $9 →
Context.devContext.dev
Context.dev
Integrate web data into your AI product. One API to scrape website & brand data.
Get API Key Now →
Make your agent a DeFi expert
Make your agent a DeFi expert
Agent, run crypto. Access onchain data & trade routes via 1inch.
Install now →
Make money from your Skills
Make money from your Skills
On Capafy, your Skill runs online 24/7 as an agent product, and you get paid every time someone uses it.
Start earning →
AppSignal
AppSignal
Monitor with ease. Code with confidence.
Start Free Trial →

Tools

Public tool metadata for what this MCP can expose to an agent.

14 tools
notion-searchPerform a search over: - "internal": Semantic search over Notion workspace and connected sources (Slack, Google Drive, Github, Jira, Microsoft Teams, Sharepoint, OneDrive, Linear). Supports filtering by creation date and creator. - "user": Search for users by name or email. Au...9 params

Perform a search over: - "internal": Semantic search over Notion workspace and connected sources (Slack, Google Drive, Github, Jira, Microsoft Teams, Sharepoint, OneDrive, Linear). Supports filtering by creation date and creator. - "user": Search for users by name or email. Au...

Parameters* required
querystring
Semantic search query over your entire Notion workspace and connected sources (Slack, Google Drive, Github, Jira, Microsoft Teams, Sharepoint, OneDrive, or Linear). For best results, don't provide more than one question per tool call. Use a separate "search" tool call for each search you want to perform. Alternatively, the query can be a substring or keyword to find users by matching against their name or email address. For example: "john" or "john@example.com"
filtersobject
Optionally provide filters to apply to the search results. Only valid when query_type is 'internal'.
page_urlstring
Optionally, provide the URL or ID of a page to search within. This will perform a semantic search over the content within and under the specified page. Accepts either a full page URL (e.g. https://notion.so/workspace/Page-Title-1234567890) or just the page ID (UUIDv4) with or without dashes.
page_sizeinteger
Maximum number of results to return (default 10). Lower values reduce response size.
query_typestring
one of internal · user
teamspace_idstring
Optionally, provide the ID of a teamspace to restrict search results to. This will perform a search over content within the specified teamspace only. Accepts the teamspace ID (UUIDv4) with or without dashes.
data_source_urlstring
Optionally, provide the URL of a Data source to search. This will perform a semantic search over the pages in the Data Source. Note: must be a Data Source, not a Database. <data-source> tags are part of the Notion flavored Markdown format returned by tools like fetch. The full spec is available in the create-pages tool description.
content_search_modestring
one of workspace_search · ai_search
max_highlight_lengthinteger
Maximum character length for result highlights (default 200). Set to 0 to omit highlights entirely.
notion-fetchRetrieves details about a Notion entity (page, database, or data source) by URL or ID. Provide URL or ID in `id` parameter. Make multiple calls to fetch multiple entities. Pages use enhanced Markdown format. For the complete specification, fetch the MCP resource at `notion://d...3 params

Retrieves details about a Notion entity (page, database, or data source) by URL or ID. Provide URL or ID in `id` parameter. Make multiple calls to fetch multiple entities. Pages use enhanced Markdown format. For the complete specification, fetch the MCP resource at `notion://d...

Parameters* required
idstring
The ID or URL of the Notion page, database, or data source to fetch. Supports notion.so URLs, Notion Sites URLs (*.notion.site), raw UUIDs, and data source URLs (collection://...).
include_transcriptboolean
include_discussionsboolean
notion-create-pages## Overview Creates one or more Notion pages, with the specified properties and content. ## Parent All pages created with a single call to this tool will have the same parent. The parent can be a Notion page ("page_id") or data source ("data_source_id"). If the parent is omitt...2 params

## Overview Creates one or more Notion pages, with the specified properties and content. ## Parent All pages created with a single call to this tool will have the same parent. The parent can be a Notion page ("page_id") or data source ("data_source_id"). If the parent is omitt...

Parameters* required
pagesarray
The pages to create.
parentvalue
The parent under which the new pages will be created. This can be a page (page_id), a database page (database_id), or a data source/collection under a database (data_source_id). If omitted, the new pages will be created as private pages at the workspace level. Use data_source_id when you have a collection:// URL from the fetch tool.
notion-update-page## Overview Update a Notion page's properties or content. ## Properties Notion page properties are a JSON map of property names to SQLite values. For pages in a database: - ALWAYS use the "fetch" tool first to get the data source schema and the exact property names. - Provide...11 params

## Overview Update a Notion page's properties or content. ## Properties Notion page properties are a JSON map of property names to SQLite values. For pages in a database: - ALWAYS use the "fetch" tool first to get the data source schema and the exact property names. - Provide...

Parameters* required
iconstring
An emoji character (e.g. "🚀"), a custom emoji by name (e.g. ":rocket_ship:"), or an external image URL. Use "none" to remove the icon. Omit to leave unchanged. Can be set alongside any command.
coverstring
An external image URL for the page cover. Use "none" to remove the cover. Omit to leave unchanged. Can be set alongside any command.
commandstring
one of update_properties · update_content · replace_content · apply_template · update_verification
new_strstring
Required for "replace_content" command. The new content string to replace the entire page content with.
page_idstring
The ID of the page to update, with or without dashes.
propertiesobject
Required for "update_properties" command. A JSON object that updates the page's properties. For pages in a database, use the SQLite schema definition shown in <database>. For pages outside of a database, the only allowed property is "title", which is the title of the page in inline markdown format. Use null to remove a property's value.
template_idstring
Required for "apply_template" command. The ID of a template to apply to this page. Template content is appended to any existing page content.
content_updatesarray
Required for "update_content" command. An array of search-and-replace operations, each with old_str (content to find) and new_str (replacement content).
verification_statusstring
one of verified · unverified
allow_deleting_contentboolean
verification_expiry_daysinteger
Optional for "update_verification" command when verification_status is "verified". Number of days until verification expires (e.g. 7, 30, 90). Omit for indefinite verification.
notion-move-pagesMove one or more Notion pages or databases to a new parent.2 params

Move one or more Notion pages or databases to a new parent.

Parameters* required
new_parentvalue
The new parent under which the pages will be moved. This can be a page, the workspace, a database, or a specific data source under a database when there are multiple. Moving pages to the workspace level adds them as private pages and should rarely be used.
page_or_database_idsarray
An array of up to 100 page or database IDs to move. IDs are v4 UUIDs and can be supplied with or without dashes (e.g. extracted from a <page> or <database> URL given by the "search" or "fetch" tool). Data Sources under Databases can't be moved individually.
notion-duplicate-pageDuplicate a Notion page. The page must be within the current workspace, and you must have permission to access it. The duplication completes asynchronously, so do not rely on the new page identified by the returned ID or URL to be populated immediately. Let the user know that...1 params

Duplicate a Notion page. The page must be within the current workspace, and you must have permission to access it. The duplication completes asynchronously, so do not rely on the new page identified by the returned ID or URL to be populated immediately. Let the user know that...

Parameters* required
page_idstring
The ID of the page to duplicate. This is a v4 UUID, with or without dashes, and can be parsed from a Notion page URL.
notion-create-databaseCreates a new Notion database using SQL DDL syntax. If no title property provided, "Name" is auto-added. Returns Markdown with schema, SQLite definition, and data source ID in <data-source> tag for use with update_data_source and query_data_sources tools. The schema param acce...4 params

Creates a new Notion database using SQL DDL syntax. If no title property provided, "Name" is auto-added. Returns Markdown with schema, SQLite definition, and data source ID in <data-source> tag for use with update_data_source and query_data_sources tools. The schema param acce...

Parameters* required
titlestring
The title of the new database.
parentobject
The parent under which to create the new database. If omitted, the database will be created as a private page at the workspace level.
schemastring
SQL DDL CREATE TABLE statement defining the database schema. Column names must be double-quoted, type options use single quotes.
descriptionstring
The description of the new database.
notion-update-data-sourceUpdate a Notion data source's schema, title, or attributes using SQL DDL statements. Returns Markdown showing updated structure and schema. Accepts a data source ID (collection ID from fetch response's <data-source> tag) or a single-source database ID. Multi-source databases r...6 params

Update a Notion data source's schema, title, or attributes using SQL DDL statements. Returns Markdown showing updated structure and schema. Accepts a data source ID (collection ID from fetch response's <data-source> tag) or a single-source database ID. Multi-source databases r...

Parameters* required
titlestring
The new title of the data source.
in_trashboolean
is_inlineboolean
statementsstring
Semicolon-separated SQL DDL statements to update the schema. Supports ADD COLUMN, DROP COLUMN, RENAME COLUMN, ALTER COLUMN SET.
descriptionstring
The new description of the data source.
data_source_idstring
The data source to update. Accepts a collection:// URI from <data-source> tags, a bare UUID, or a database ID (only if the database has a single data source).
notion-create-commentAdd a comment to a page or specific content. Creates a new comment. Provide `page_id` to identify the page, then choose ONE targeting mode: - `page_id` alone: Page-level comment on the entire page - `page_id` + `selection_with_ellipsis`: Comment on specific block content - `di...4 params

Add a comment to a page or specific content. Creates a new comment. Provide `page_id` to identify the page, then choose ONE targeting mode: - `page_id` alone: Page-level comment on the entire page - `page_id` + `selection_with_ellipsis`: Comment on specific block content - `di...

Parameters* required
page_idstring
The ID of the page to comment on (with or without dashes).
rich_textarray
An array of rich text objects that represent the content of the comment.
discussion_idstring
The ID or URL of an existing discussion to reply to (e.g., discussion://pageId/blockId/discussionId).
selection_with_ellipsisstring
Unique start and end snippet of the content to comment on. DO NOT provide the entire string. Instead, provide up to the first ~10 characters, an ellipsis, and then up to the last ~10 characters. Make sure you provide enough of the start and end snippet to uniquely identify the content. For example: "# Section heading...last paragraph."
notion-get-commentsGet comments and discussions from a Notion page. Returns discussions with full comment content in XML format. By default, returns page-level discussions only. Tip: Use the `fetch` tool with `include_discussions: true` first to see where discussions are anchored in the page con...4 params

Get comments and discussions from a Notion page. Returns discussions with full comment content in XML format. By default, returns page-level discussions only. Tip: Use the `fetch` tool with `include_discussions: true` first to see where discussions are anchored in the page con...

Parameters* required
page_idstring
Identifier for a Notion page.
discussion_idstring
Fetch a specific discussion by ID or discussion URL (e.g., discussion://pageId/blockId/discussionId).
include_resolvedboolean
include_all_blocksboolean
notion-get-teamsRetrieves a list of teams (teamspaces) in the current workspace. Shows which teams exist, user membership status, IDs, names, and roles. Teams are returned split by membership status and limited to a maximum of 10 results. <examples> 1. List all teams (up to the limit of each...1 params

Retrieves a list of teams (teamspaces) in the current workspace. Shows which teams exist, user membership status, IDs, names, and roles. Teams are returned split by membership status and limited to a maximum of 10 results. <examples> 1. List all teams (up to the limit of each...

Parameters* required
querystring
Optional search query to filter teams by name (case-insensitive).
notion-get-usersRetrieves a list of users in the current workspace. Shows workspace members and guests with their IDs, names, emails (if available), and types (person or bot). Supports cursor-based pagination to iterate through all users in the workspace. <examples> 1. List all users (first p...4 params

Retrieves a list of users in the current workspace. Shows workspace members and guests with their IDs, names, emails (if available), and types (person or bot). Supports cursor-based pagination to iterate through all users in the workspace. <examples> 1. List all users (first p...

Parameters* required
querystring
Optional search query to filter users by name or email (case-insensitive).
user_idstring
Return only the user matching this ID. Pass "self" to fetch the current user.
page_sizeinteger
Number of users to return per page (default: 100, max: 100).
start_cursorstring
Cursor for pagination. Use the next_cursor value from the previous response to get the next page.
notion-create-viewCreate a new view on a Notion database. Exactly one of "database_id" or "parent_page_id" must be provided: - "database_id": add a new view tab to an existing database. - "parent_page_id": create an inline linked database view on a page that references the existing "data_source...6 params

Create a new view on a Notion database. Exactly one of "database_id" or "parent_page_id" must be provided: - "database_id": add a new view tab to an existing database. - "parent_page_id": create an inline linked database view on a page that references the existing "data_source...

Parameters* required
namestring
The name of the view.
typestring
one of table · board · list · calendar · timeline · gallery
configurestring
View configuration DSL string. Supports FILTER, SORT BY, GROUP BY, CALENDAR BY, TIMELINE BY, MAP BY, CHART, FORM, SHOW, HIDE, COVER, WRAP CELLS, and FREEZE COLUMNS directives. See notion://docs/view-dsl-spec.
database_idstring
The database to add a view tab to. Accepts a Notion URL or a bare UUID. Mutually exclusive with `parent_page_id`; exactly one must be provided.
data_source_idstring
The data source (collection) ID. Accepts a collection:// URI from <data-source> tags or a bare UUID.
parent_page_idstring
A page to create an inline linked database view on. Accepts a Notion URL or a bare UUID. The new linked view block is appended at the end of the page and references `data_source_id`. Mutually exclusive with `database_id`; exactly one must be provided.
notion-update-viewUpdate a view's name, filters, sorts, or display configuration. Use "fetch" to get view IDs from database responses. Only include fields you want to change. The "configure" param uses the same DSL as create_view. Use CLEAR to remove settings: - CLEAR FILTER — remove all filter...3 params

Update a view's name, filters, sorts, or display configuration. Use "fetch" to get view IDs from database responses. Only include fields you want to change. The "configure" param uses the same DSL as create_view. Use CLEAR to remove settings: - CLEAR FILTER — remove all filter...

Parameters* required
namestring
New name for the view.
view_idstring
The view to update. Accepts a view:// URI, a Notion URL with ?v= parameter, or a bare UUID.
configurestring
View configuration DSL string. Supports FILTER, SORT BY, GROUP BY, CALENDAR BY, TIMELINE BY, MAP BY, CHART, FORM, SHOW, HIDE, COVER, WRAP CELLS, FREEZE COLUMNS, and CLEAR directives.

MCP Badge

@shck-dev/notion-mcp

Notion MCP Server — search, export, and import pages as markdown

npm version npm downloads license

No workspace admin. No OAuth. No page sharing.
Just paste 3 values from your browser and go.

Blog Post | GitHub | npm


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_setup prompt and a notion://guide resource 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

ToolDescription
notion_searchFull-text search across all pages in your workspace
notion_export_pageExport any Notion page as markdown; image links resolve to viewable CDN URLs (pass image_dir to download images locally instead)
notion_import_pageWrite markdown to a Notion page — replaces all existing content
notion_import_page_from_fileWrite a local .md file to a page — replaces all content
notion_append_to_pageAppend markdown to the end of a page (non-destructive)
notion_append_to_page_from_fileAppend a local .md file to the end of a page (non-destructive)
notion_create_pageCreate a new sub-page, optionally prefilled with markdown
notion_create_page_from_fileCreate a new sub-page from a local .md file
notion_add_imageAppend an image to the end of a page — local file is uploaded to Notion, http(s) URL is referenced as-is
notion_list_commentsList open discussion threads on a page
notion_add_commentStart a new discussion — inline (anchored to text) or block-level
notion_reply_commentReply to an existing discussion thread
notion_initPaste a browser "Copy as cURL" to extract & save credentials

Why not the official Notion API?

This MCP serverOfficial Notion API
SetupPaste 3 values from DevToolsCreate integration, get admin approval, share pages
Page accessEverything you can seeOnly explicitly shared pages
MarkdownBidirectional (export + import)Read-only blocks API
AuthCookie (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

  1. Open notion.so in Chrome
  2. Press F12 → Application → Cookies → www.notion.so
  3. Copy the token_v2 cookie value → NOTION_TOKEN
  4. Press F12 → Network tab, do any action in Notion
  5. Find a POST request to api/v3/*, click it
  6. From Request Headers: copy x-notion-active-user-header → NOTION_USER_ID
  7. 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_v2 expires 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

Featured
CodeRabbit
CodeRabbit
AI writes the code. CodeRabbit catches the slop.
Try For Free →
Keep your Mac awake
Keep your Mac awake
Keep your Mac awake while Claude Code and 40+ AI agents run. Sleeps when they're idle.
One time payment $9 →
Context.devContext.dev
Context.dev
Integrate web data into your AI product. One API to scrape website & brand data.
Get API Key Now →
Make your agent a DeFi expert
Make your agent a DeFi expert
Agent, run crypto. Access onchain data & trade routes via 1inch.
Install now →
Make money from your Skills
Make money from your Skills
On Capafy, your Skill runs online 24/7 as an agent product, and you get paid every time someone uses it.
Start earning →
AppSignal
AppSignal
Monitor with ease. Code with confidence.
Start Free Trial →

Configuration

NOTION_TOKEN*secret

Notion token_v2 cookie value from browser DevTools

NOTION_USER_ID*

Notion user ID from x-notion-active-user-header

NOTION_SPACE_ID*

Notion workspace ID from API request body

Categories
Documents & KnowledgeSearch & Web Crawling
Registryactive
Package@shck-dev/notion-mcp
TransportSTDIO
AuthRequired
UpdatedMay 31, 2026
View on GitHub

Related Documents & Knowledge MCP Servers

View all →
Pdf Document Mcp

csoai-org/pdf-document-mcp

pdf-document-mcp MCP server by MEOK AI Labs
Mcp Document Converter

xt765/mcp-document-converter

Convert PDF, DOCX, HTML, Markdown, and Text for AI assistant context injection.
10
Markdown Formatter

io.github.xjtlumedia/markdown-formatter

AI Answer Copier — Convert Markdown to PDF, DOCX, HTML, LaTeX, CSV, JSON, XML, XLSX, RTF, PNG
3
Better Notion

io.github.ai-aviate/better-notion

Operate Notion with a single Markdown document — read, create, and update pages in one call.
2
Notion

suekou/mcp-notion-server

Notion MCP Server enables LLMs to access Notion workspaces with optional Markdown conversion to save tokens.
892
Docx

meterlong/mcp-doc

A powerful Word document processing service based on FastMCP, enabling AI assistants to create, edit, and manage docx files with full formatting support. Preserves original styles when editing content. 基于FastMCP的强大Word文档处理服务,使AI助手能够创建、编辑和管理docx文件,支持完整的格式设置功能。在编辑内容时能够保留原始样式和格式,实现精确的文档操作。
185