Notion MCP connector
OAuth 2.1/DCRProductivityCollaborationProject ManagementConnect to Notion MCP. Create and update pages, databases, comments, and views from your AI workflows.
Notion MCP connector
-
Install the SDK
Section titled “Install the SDK”Terminal window npm install @scalekit-sdk/nodeTerminal window pip install scalekit -
Set your credentials
Section titled “Set your credentials”Add your Scalekit credentials to your
.envfile. Find values in app.scalekit.com > Developers > API Credentials..env SCALEKIT_ENVIRONMENT_URL=<your-environment-url>SCALEKIT_CLIENT_ID=<your-client-id>SCALEKIT_CLIENT_SECRET=<your-client-secret> -
Authorize and make your first call
Section titled “Authorize and make your first call”quickstart.ts import { ScalekitClient } from '@scalekit-sdk/node'import 'dotenv/config'const scalekit = new ScalekitClient(process.env.SCALEKIT_ENV_URL,process.env.SCALEKIT_CLIENT_ID,process.env.SCALEKIT_CLIENT_SECRET,)const actions = scalekit.actionsconst connector = 'notionmcp'const identifier = 'user_123'// Generate an authorization link for the userconst { link } = await actions.getAuthorizationLink({ connectionName: connector, identifier })console.log('Authorize Notion MCP:', link)process.stdout.write('Press Enter after authorizing...')await new Promise(r => process.stdin.once('data', r))// Make your first callconst result = await actions.executeTool({connector,identifier,toolName: 'notionmcp_notion-get-teams',toolInput: {},})console.log(result)quickstart.py import osfrom scalekit.client import ScalekitClientfrom dotenv import load_dotenvload_dotenv()scalekit_client = ScalekitClient(env_url=os.getenv("SCALEKIT_ENV_URL"),client_id=os.getenv("SCALEKIT_CLIENT_ID"),client_secret=os.getenv("SCALEKIT_CLIENT_SECRET"),)actions = scalekit_client.actionsconnection_name = "notionmcp"identifier = "user_123"# Generate an authorization link for the userlink_response = actions.get_authorization_link(connection_name=connection_name,identifier=identifier,)print("Authorize Notion MCP:", link_response.link)input("Press Enter after authorizing...")# Make your first callresult = actions.execute_tool(tool_input={},tool_name="notionmcp_notion-get-teams",connection_name=connection_name,identifier=identifier,)print(result)
What you can do
Section titled “What you can do”Connect this agent connector to let your agent:
- Notion-update-view records — Update a Notion database view’s name, filters, sorts, or display configuration
- Notion-update-page records — Update a Notion page’s properties, content, icon, cover, or verification status
- Notion-update-data-source records — Update a Notion data source’s schema, title, or attributes using SQL DDL statements
- Notion-search records — Search pages, databases, and connected sources in the Notion workspace
- Notion-query-meeting-notes records — Query the current user’s Notion meeting notes data source with optional filters
- Notion-query-database-view records — Query paginated results from a Notion database view by its URL
Tool list
Section titled “Tool list”Use the exact tool names from the Tool list below when you call execute_tool. If you’re not sure which name to use, list the tools available for the current user first.
notionmcp_notion-create-comment#Add a comment to a Notion page or inline discussion thread.5 params
Add a comment to a Notion page or inline discussion thread.
page_idstringrequiredThe ID of the page to comment on (with or without dashes).discussion_idstringoptionalThe ID or URL of an existing discussion to reply to (e.g., discussion://pageId/blockId/discussionId).markdownstringoptionalThe content of the comment as a Markdown string. Provide exactly one of markdown or rich_text. For exact syntax, read the MCP resource notion://docs/enhanced-markdown-spec through your MCP client's resource-reading interface. Do not pass this URI to the Notion fetch tool or any URL-fetching tool, and use only the Rich text types and Mentions syntax that comments support. Comments support inline formatting (bold, italic, strikethrough, underline, code, links), inline math using $`Equation`$, and user/page/database/date mention tags such as <mention-date start="YYYY-MM-DD"/>. Do not use UI shortcuts like @today, @name, [[page]], or autocomplete-style emoji syntax; those are editor affordances, not markdown syntax. Mention tags must include a real url where required by the spec. Block-level Markdown such as fenced code blocks, headings, lists, tables, and blockquotes is stored as plain comment text rather than rendered as blocks.rich_textarrayoptionalAn array of rich text objects that represent the content of the comment. Provide exactly one of rich_text or markdown.selection_with_ellipsisstringoptionalUnique 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."notionmcp_notion-create-database#Create a new Notion database using a SQL DDL schema definition.4 params
Create a new Notion database using a SQL DDL schema definition.
schemastringrequiredSQL DDL CREATE TABLE statement defining the database schema. Column names must be double-quoted, type options use single quotes.descriptionstringoptionalThe description of the new database.parentobjectoptionalThe parent under which to create the new database. If omitted, the database will be created as a private page at the workspace level.titlestringoptionalThe title of the new database.notionmcp_notion-create-pages#Create one or more Notion pages with properties and Markdown content.2 params
Create one or more Notion pages with properties and Markdown content.
pagesarrayrequiredThe pages to create.parentstringoptionalThe 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.notionmcp_notion-create-view#Create a new view on a Notion database with optional filters and sorts.6 params
Create a new view on a Notion database with optional filters and sorts.
data_source_idstringrequiredThe data source (collection) ID. Accepts a collection:// URI from <data-source> tags or a bare UUID.namestringrequiredThe name of the view.typestringrequiredThe view type. Accepted values: table, board, calendar, gallery, list, timeline.configurestringoptionalView 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_idstringoptionalThe 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.parent_page_idstringoptionalA 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.notionmcp_notion-duplicate-page#Duplicate an existing Notion page within the current workspace.1 param
Duplicate an existing Notion page within the current workspace.
page_idstringrequiredThe ID of the page to duplicate. This is a v4 UUID, with or without dashes, and can be parsed from a Notion page URL.notionmcp_notion-fetch#Retrieve details about a Notion page, database, or data source by URL or ID.3 params
Retrieve details about a Notion page, database, or data source by URL or ID.
idstringrequiredThe 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_discussionsbooleanoptionalSet to true to include discussion threads in the response.include_transcriptbooleanoptionalSet to true to include a meeting transcript in the response.notionmcp_notion-get-comments#Retrieve comments and discussion threads from a Notion page.4 params
Retrieve comments and discussion threads from a Notion page.
page_idstringrequiredIdentifier for a Notion page.discussion_idstringoptionalFetch a specific discussion by ID or discussion URL (e.g., discussion://pageId/blockId/discussionId).include_all_blocksbooleanoptionalSet to true to return all comment blocks, not just the first.include_resolvedbooleanoptionalSet to true to include resolved discussions in the response.notionmcp_notion-get-teams#Retrieve a list of teams (teamspaces) in the current workspace.1 param
Retrieve a list of teams (teamspaces) in the current workspace.
querystringoptionalOptional search query to filter teams by name (case-insensitive).notionmcp_notion-get-users#Retrieve a list of users in the current Notion workspace.4 params
Retrieve a list of users in the current Notion workspace.
page_sizeintegeroptionalNumber of users to return per page (default: 100, max: 100).querystringoptionalOptional search query to filter users by name or email (case-insensitive).start_cursorstringoptionalCursor for pagination. Use the next_cursor value from the previous response to get the next page.user_idstringoptionalReturn only the user matching this ID. Pass "self" to fetch the current user.notionmcp_notion-move-pages#Move 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.
new_parentstringrequiredThe 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_idsarrayrequiredAn 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.notionmcp_notion-query-data-sources#Query Notion databases using SQL or by specifying a view.1 param
Query Notion databases using SQL or by specifying a view.
datastringrequiredThe data required for querying data sourcesnotionmcp_notion-query-database-view#Query paginated results from a Notion database view by its URL.3 params
Query paginated results from a Notion database view by its URL.
view_urlstringrequiredURL of a specific database view to query. Example: https://www.notion.so/workspace/db-id?v=view-idpage_sizeintegeroptionalNumber of rows to return per page (default: 100, max: 100).start_cursorstringoptionalCursor for pagination. Use the next_cursor value from the previous response to get the next page.notionmcp_notion-query-meeting-notes#Query the current user's Notion meeting notes data source with optional filters.1 param
Query the current user's Notion meeting notes data source with optional filters.
filterobjectoptionalAcceptable filter for querying current user's meeting notes data source.notionmcp_notion-search#Search pages, databases, and connected sources in the Notion workspace.9 params
Search pages, databases, and connected sources in the Notion workspace.
querystringrequiredSemantic 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"content_search_modestringoptionalHow to search within page content. Accepted values: keyword, semantic.data_source_urlstringoptionalOptionally, 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.filtersobjectoptionalOptionally provide filters to apply to the search results. Only valid when query_type is 'internal'.max_highlight_lengthintegeroptionalMaximum character length for result highlights (default 200). Set to 0 to omit highlights entirely.page_sizeintegeroptionalMaximum number of results to return (default 10). Lower values reduce response size.page_urlstringoptionalOptionally, 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.query_typestringoptionalThe search mode. Accepted values: semantic, keyword.teamspace_idstringoptionalOptionally, 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.notionmcp_notion-update-data-source#Update a Notion data source's schema, title, or attributes using SQL DDL statements.6 params
Update a Notion data source's schema, title, or attributes using SQL DDL statements.
data_source_idstringrequiredThe 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).descriptionstringoptionalThe new description of the data source.in_trashbooleanoptionalSet to true to move the data source to the trash.is_inlinebooleanoptionalSet to true to make the database display inline within a page.statementsstringoptionalSemicolon-separated SQL DDL statements to update the schema. Supports ADD COLUMN, DROP COLUMN, RENAME COLUMN, ALTER COLUMN SET.titlestringoptionalThe new title of the data source.notionmcp_notion-update-page#Update a Notion page's properties, content, icon, cover, or verification status.13 params
Update a Notion page's properties, content, icon, cover, or verification status.
commandstringrequiredThe update operation to perform. Accepted values: update_properties, update_content, replace_content, insert_content, apply_template, update_verification.page_idstringrequiredThe ID of the page to update, with or without dashes.allow_deleting_contentbooleanoptionalSet to true to confirm deletion of child pages or databases when replacing content.contentstringoptionalRequired for "insert_content" command. The markdown content to insert into the page.content_updatesarrayoptionalRequired for "update_content" command. An array of search-and-replace operations, each with old_str (content to find) and new_str (replacement content).coverstringoptionalAn external image URL for the page cover. Use "none" to remove the cover. Omit to leave unchanged. Can be set alongside any command.iconstringoptionalAn 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_strstringoptionalRequired for "replace_content" command. The new content string to replace the entire page content with.positionstringoptionalOptional for "insert_content" command. Use {"type":"start"} to prepend content or {"type":"end"} to append content. Omit to append.propertiesobjectoptionalRequired 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_idstringoptionalRequired 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_daysintegeroptionalOptional 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_statusstringoptionalThe verification state to set. Accepted values: verified, unverified.notionmcp_notion-update-view#Update a Notion database view's name, filters, sorts, or display configuration.3 params
Update a Notion database view's name, filters, sorts, or display configuration.
view_idstringrequiredThe view to update. Accepts a view:// URI, a Notion URL with ?v= parameter, or a bare UUID.configurestringoptionalView 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.namestringoptionalNew name for the view.