shck-dev avatar

Notion Mcp

shck-dev/notion-mcp

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.

GitHub stars
2
tools
14
auth
Secret needed
transport
STDIO
env vars
3
last updated
Jun 23, 2026

Tools

14 tools

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

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
content_search_modestring
one of workspace_search · ai_search
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 pa...
filtersobject
Optionally provide filters to apply to the search results. Only valid when query_type is 'internal'.
max_highlight_lengthinteger
Maximum character length for result highlights (default 200). Set to 0 to omit highlights entirely.
page_sizeinteger
Maximum number of results to return (default 10). Lower values reduce response size.
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://...
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...
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 witho...
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_discussionsboolean
include_transcriptboolean
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...
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
allow_deleting_contentboolean
commandstring
one of update_properties · update_content · replace_content · apply_template · update_verification
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).
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.
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.
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 dat...
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.
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.
verification_statusstring
one of verified · unverified
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...
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...
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
descriptionstring
The description 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.
titlestring
The title 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
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).
descriptionstring
The new description 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.
titlestring
The new title of the 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
discussion_idstring
The ID or URL of an existing discussion to reply to (e.g., discussion://pageId/blockId/discussionId).
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.
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. Ma...
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
discussion_idstring
Fetch a specific discussion by ID or discussion URL (e.g., discussion://pageId/blockId/discussionId).
include_all_blocksboolean
include_resolvedboolean
page_idstring
Identifier for a Notion page.
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
page_sizeinteger
Number of users to return per page (default: 100, max: 100).
querystring
Optional search query to filter users by name or email (case-insensitive).
start_cursorstring
Cursor for pagination. Use the next_cursor value from the previous response to get the next page.
user_idstring
Return only the user matching this ID. Pass "self" to fetch the current user.
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
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/vie...
data_source_idstring
The data source (collection) ID. Accepts a collection:// URI from <data-source> tags or a bare UUID.
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.
namestring
The name of the view.
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 exclu...
typestring
one of table · board · list · calendar · timeline · gallery
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
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.
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.

Sponsors

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

Readme

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


View the full README on GitHub

Details

Repository
github.com/shck-dev/notion-mcp
Categories
Documents & Knowledge, Search & Web Crawling
Package
@shck-dev/notion-mcp
Transport
STDIO
Auth
Required
Registry
MCP registry, active

Related Documents & Knowledge MCP servers

View all
1slipstack avatarSlipstack PDFdev.slipstack/pdfGenerate invoice and receipt PDFs from JSON. Agent-callable document API with a free demo quota.0stars
2br0ski777 avatarPDF Generator APIbr0ski777/pdf-generator-x402Generate PDF from HTML or Markdown with custom pages, margins, layout. x402.0stars
3cyanheads avatarObsidian Mcp Servercyanheads/obsidian-mcp-serverRead, write, search, and surgically edit Obsidian notes, tags, and frontmatter via MCP.705stars
4diaaaj avatarA Mem Mcpdiaaaj/a-mem-mcpSelf-evolving memory system for AI agents34stars
5es617 avatarObsidian Sync Mcpes617/obsidian-sync-mcpGive AI agents access to your Obsidian vault via local files or Self-hosted LiveSync.21stars
6jubakitiashvili avatarContext Memjubakitiashvili/context-memPersistent memory for AI agents — 98%+ retrieval recall, 99% token savings, 44 tools13stars