Skip to content
Scalekit Docs
Talk to an Engineer Dashboard

Connect AI agents to the Notion MCP server

Vendor MCP
Open markdown

The Notion MCP connector routes your AI agent's tool calls to Notion's own MCP server through Scalekit. Each user signs in to Notion once, and Scalekit stores and refreshes their tokens, so your agent never handles credentials. It comes with 28 tools.

Tools
28
What they doRead · write · destructive
14 · 12 · 214 read12 write2 destructive
Users sign in with
OAuth app
Scalekit's or your own

What you can do

  • Search and fetch content: search the workspace and connected sources, and retrieve pages, databases, and data sources
  • Create and edit pages: create pages with Markdown content, update properties and content, duplicate, and move pages
  • Query databases: query databases with SQL or saved views, including the user’s meeting notes
  • Manage databases and views: create databases, update their schema, and create or update filtered, sorted views
  • Comment on pages: add comments to pages and discussion threads, and read existing discussions
  • Browse the workspace: list recent, favorite, private, and shared pages, plus users and teamspaces

Setup

  1. Install the SDK

    Terminal window
    npm install @scalekit-sdk/node dotenv
  2. Set your credentials

    Add your Scalekit credentials to your .env file. 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>
  3. Create the Notion MCP connection

    In AgentKit > Connections, create a Notion MCP connection. The name you give it is the connection_name your code passes. See Configure connections.

    Scalekit credentials are available for Notion, so you don't need to register an OAuth app.

  4. Authorize a user and make your first call

    quickstart.mts
    import { ScalekitClient } from '@scalekit-sdk/node'
    import 'dotenv/config'
    import { createInterface } from 'node:readline/promises'
    const scalekit = new ScalekitClient(
    process.env.SCALEKIT_ENVIRONMENT_URL,
    process.env.SCALEKIT_CLIENT_ID,
    process.env.SCALEKIT_CLIENT_SECRET,
    )
    const actions = scalekit.actions
    const connector = 'notionmcp'
    const identifier = 'user_123'
    // Generate an authorization link for the user
    const { link } = await actions.getAuthorizationLink({ connectionName: connector, identifier })
    console.log('Authorize Notion MCP:', link)
    const rl = createInterface({ input: process.stdin, output: process.stdout })
    await rl.question('Press Enter after authorizing...')
    rl.close()
    // Make your first call
    const result = await actions.executeTool({
    connector,
    identifier,
    toolName: 'notionmcp_notion-get-teams',
    toolInput: {},
    })
    console.log(result)
    Terminal window
    npx tsx quickstart.mts

    Each user signs in once. See Authorize a user for the full flow and statuses.

Tools

Pass the exact name to execute_tool
Try in PlaygroundRequest a tool
  • notionmcp_notion-download-attachmentDownload the contents of a small UTF-8 text attachment created by the Notion create-attachment tool.Read-only

    Notion Download Attachment

    Download the contents of a small UTF-8 text attachment created by the Notion create-attachment tool. Limited to 200 KiB and text formats such as HTML, Markdown, plain text, CSV, JSON, XML, CSS, YAML, TSV, calendar, GPX, or SVG.

    Inputs

    file_upload_idstringrequired
    The FileUpload ID returned by the create-attachment tool. Example: "12345678-90ab-cdef-1234-567890abcdef".
  • notionmcp_notion-fetchRetrieve details about a Notion page, database, or data source by URL or ID.Read-only

    Notion Fetch

    Retrieve details about a Notion page, database, or data source by URL or ID.

    Inputs

    idstringrequired
    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
    Set to true to include discussion threads in the response.
    include_transcriptboolean
    Set to true to include a meeting transcript in the response.
  • notionmcp_notion-get-async-taskRetrieve the current status of an async task started by another tool (for example, create-pages or update-page called with allow_async: true).Read-only

    Notion Get Async Task

    Retrieve the current status of an async task started by another tool (for example, create-pages or update-page called with allow_async: true). Status is one of queued, running, retrying, succeeded, or failed.

    Inputs

    task_idstringrequired
    The ID of the async task to retrieve, as returned in the async_task response of the tool that started it. Example: "task_abc123".
  • notionmcp_notion-get-commentsRetrieve comments and discussion threads from a Notion page.Read-only

    Notion Get Comments

    Retrieve comments and discussion threads from a Notion page.

    Inputs

    page_idstringrequired
    Identifier for a Notion page.
    discussion_idstring
    Fetch a specific discussion by ID or discussion URL (e.g., discussion://pageId/blockId/discussionId).
    include_all_blocksboolean
    Set to true to return all comment blocks, not just the first.
    include_resolvedboolean
    Set to true to include resolved discussions in the response.
  • notionmcp_notion-get-teamsRetrieve a list of teams (teamspaces) in the current workspace.Read-only

    Notion Get Teams

    Retrieve a list of teams (teamspaces) in the current workspace.

    Inputs

    querystring
    Optional search query to filter teams by name (case-insensitive).
  • notionmcp_notion-get-usersRetrieve a list of users in the current Notion workspace.Read-only

    Notion Get Users

    Retrieve a list of users in the current Notion workspace.

    Inputs

    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.
  • notionmcp_notion-list-favorite-pagesList the current user's favorite pages and databases in sidebar order.Read-only

    Notion List Favorite Pages

    List the current user's favorite pages and databases in sidebar order. Use this when the user refers to a favorite or pinned workspace item.

    Inputs

    cursorstring
    Opaque pagination cursor from the previous response. Example: "eyJpZCI6IjEwMDI1In0=".
    limitnumber
    Maximum results to return (1-200). Example: 25.
  • notionmcp_notion-list-private-pagesList the current user's top-level pages and databases in their Private sidebar section.Read-only

    Notion List Private Pages

    List the current user's top-level pages and databases in their Private sidebar section. Use this to browse private workspace structure; use search when looking for content by meaning or keyword.

    Inputs

    cursorstring
    Opaque pagination cursor from the previous response. Example: "eyJpZCI6IjEwMDI1In0=".
    limitnumber
    Maximum results to return (1-200). Example: 25.