Skip to main content The #1 agentic semantic tool search: 91.6% first-try accuracy on S1 Search Bench Explore Tool Discovery
Live 35 Actions

Notion MCP Server
for AI Agents

Connect your AI agent to StackOne's Notion MCP server and give it 35 MCP tools out of the box. Auth, tool execution, and security all managed.

Notion logo
Notion MCP Server
Built by StackOne StackOne
DrataGPLocalyzeFlipMindtoolsScreenloop

Coverage

35 Agent Actions

Create, read, update, and delete across Notion — and extend your agent's capabilities with custom actions.

Authentication

Agent Tool Authentication

Per-user OAuth in one call. Your Notion MCP server gets session-scoped tokens with zero credentials stored on your infra.

Agent Auth →

Security

Agent Protection

Every Notion tool response scanned for prompt injection in milliseconds — 88.7% accuracy, all running on CPU.

Prompt Injection Defense →

Performance

Max Agent Context. Min Cost.

Free up to 96% of your agent's context window to enhance reasoning and reduce cost, on every Notion call.

Tools Discovery →

What is the Notion MCP Server?

A Notion MCP server lets AI agents read and write Notion data through the Model Context Protocol — Anthropic's open standard for connecting LLMs to external tools. StackOne's Notion MCP server ships with 35 pre-built actions, fully extensible via the Connector Builder — plus managed authentication, prompt injection defense, observability, and agent execution runtime. Connect it from MCP clients like Claude Desktop, Claude Code, Cursor, Goose, and VS Code, or from agent frameworks like OpenAI Agents SDK, LangChain, and Vercel AI SDK.

How Your AI Agent Uses the Notion MCP Server

Interactive demo available on desktop.

All Notion MCP Tools

Every action from Notion's API, ready for your agent. Create, read, update, and delete — scoped to exactly what you need.

Block Children

  • Append Block Children

    Add content blocks (text, headings, lists, images, etc.) to an existing page or block. Use this after create_page to add more content, or to append to any existing page. The block_id parameter accepts a page_id directly.

  • Get Block Children

    Retrieve the content blocks inside a page or parent block. This is how you read a page's actual content (text, headings, lists, etc.) — get_page only returns properties/metadata, not content.

Blocks

  • Get Block

    Retrieve a single block's type, content, and metadata by its block_id (does NOT return children — use get_block_children for nested content).

  • Update Block

    Modify an existing block's content (text, headings, to-dos, etc.) by block_id. ALWAYS call this after reading blocks when the user asks to change or update existing content. First use get_block_children to find the block_id and type, then call this action with the new content.

  • Delete Block

    Archive (soft-delete) a block by its block_id. The block is moved to trash, not permanently deleted — it can be restored by setting in_trash to false via update_block.

Comments

  • Create Comment

    Create a comment on a page or block, or reply to an existing discussion thread. Use the page_id directly from create_page or search results — no need to re-search after creation.

  • List Comments

    List all unresolved comments on a page or block, with pagination. Resolved comments are excluded from results.

  • Retrieve Comment

    Retrieve a single comment's full details (content, author, timestamps, parent) by its comment_id.

Databases

  • Create Database

    Create a new Notion database under a parent page, with an optional initial schema (columns/properties) defined via initial_data_source. Returns the database object including its data_sources list.

  • Get Database

    Retrieve a database's metadata and its list of data sources (with IDs) by database_id. Does NOT return rows — use query_data_source for that. Use retrieve_data_source to get a data source's schema.

  • Update Database

    Update database-level attributes (title, icon, cover, parent, archive status). To update columns/schema, use update_data_source instead.

Data Sources

  • Create Data Source

    Add a new data source (with its own schema/columns) to an existing database. Use this when a database needs multiple data sources with different property schemas.

  • Retrieve Data Source

    Retrieve a data source's schema (columns/properties) by its data_source_id. To get rows, use query_data_source instead. Get the data_source_id from get_database.

  • Query Data Source

    Query a database's data source to retrieve rows (pages) with optional filtering and sorting. This is how you list or search for rows in a Notion database.

  • Update Data Source

    Update a data source's schema (add, rename, or remove columns), title, icon, or trash status. To update row values, use update_page instead.

File Uploads

  • Create File Upload

    Step 1 of file upload — create a file upload session to get an upload URL. Then call send_file_upload (step 2), and complete_file_upload (step 3, multi_part only).

  • Send File Upload

    Step 2 of file upload — send the actual file data for a file upload session created by create_file_upload. For multi_part, call complete_file_upload after all parts are sent.

  • List File Uploads

    List all file uploads created by this bot integration, sorted most recent first. Filter by status (pending, uploaded, expired, failed) to find specific uploads.

  • Retrieve File Upload

    Retrieve a single file upload's metadata and status (pending, uploaded, expired, failed) by its file_upload_id. Use after send_file_upload to verify upload completion.

Unified Organizations

  • List Unified Organizations

    List unified organizations in Notion.

  • Get Unified Organization

    Get a unified Notion organization by ID.

Unified Users

  • List Unified Users

    List unified users in Notion.

  • Get Unified User

    Get a unified Notion user by ID.

Pages

  • Create Page

    Create a new page in a Notion workspace. After creation, the returned page object contains the new page_id — use it directly for follow-up actions (append_block_children, create_comment, move_page) without re-searching.

  • Get Page

    Retrieve a Notion page's properties and metadata by its page_id (does NOT return page content — use get_block_children for that).

  • Update Page

    Update page properties, icon, cover, or trash status by page ID. IMPORTANT — You must already have the page_id; if you only have a page name or title, you MUST call search first to find the page_id before calling this action. This action CANNOT look up pages by name. To change a page's parent location, use move_page instead.

  • Move Page

    Move a page to a different parent page or database. THIS IS THE ONLY ACTION that can change a page's parent location — update_page CANNOT do this. Use move_page whenever the user asks to "move", "relocate", "reparent", or "transfer" a page to a new location.

Users

  • List Users

    List ALL users (people and bots) in the Notion workspace. Returns the complete set of workspace members across all pages — always iterate through ALL results and report the full count. Guests are excluded by Notion.

  • Get User

    Retrieve a single Notion user's profile (name, email, avatar, type) by their user_id. Get user IDs from list_users results.

Other (6)

  • List Data Source Templates

    List all page templates available for a data source, including each template's ID, name, and default status. Useful before create_page with template parameter.

  • Get Unified Credentials

    Get the current Notion connection's unified credentials and identity.

  • Get Page Property

    Retrieve a single page property value by page_id and property_id, with pagination support for large properties (title, rich_text, relation, people) that exceed the 25-reference limit returned by get_page.

  • Search

    Search for pages and data sources by title text. Use this to find a page_id when you only have a page name — required before calling update_page, move_page, or any action that needs a page_id you do not already have. Once you have the ID from search results, proceed directly to the next action without searching again.

  • Get Bot User

    Retrieve the bot user (integration identity) associated with the current API token, including the workspace_id and the person who authorized the integration.

  • Complete File Upload

    Step 3 of multi_part file upload only — finalize after all parts are sent via send_file_upload. Not needed for single_part or external_url modes.

Set Up Your Notion MCP Server in Minutes

One endpoint. Any framework. Your agent is talking to Notion in under 10 lines of code.

Agent Frameworks

Claude Desktop
{
  "mcpServers": {
    "stackone": {
      "command": "npx",
      "args": [
        "-y",
        "mcp-remote@latest",
        "https://api.stackone.com/mcp?x-account-id=<account_id>",
        "--header",
        "Authorization: Basic <YOUR_BASE64_TOKEN>"
      ]
    }
  }
}

Check More Documents & Knowledge MCP Servers

Notion MCP Server FAQ

Does StackOne have a Notion MCP server?
Yes. StackOne offers a hosted Notion MCP server with 35 pre-built actions, and every action is tested and QA'd by StackOne. Connect it to Claude, Cursor, and any other MCP client, or to any agent framework through the AI Action SDK. It ships with managed agent authentication, prompt injection defense, and tool discovery with server-side execution that preserve your agent's context window and keep reasoning performance.
Notion MCP server vs direct API integration — what's the difference?
A Notion MCP server and direct API integration serve different use cases. Direct API integration is for software-to-software — backend code calling Notion. A Notion MCP server is for AI agents — MCP clients like Claude and Cursor, plus framework agents built with OpenAI, LangChain, or Vercel AI — discovering and calling Notion at runtime. StackOne provides both.
How does Notion authentication work for AI agents?
Notion authentication for AI agents works through a StackOne Connect Session. Create one via the dashboard or the SDK — you get an auth link and ready-to-paste config for Claude Desktop, Cursor, and other MCP clients. Your user authenticates their own Notion account; StackOne handles token exchange, storage, and refresh. Credentials never reach the LLM, and each user is isolated via origin_owner_id.
Are Notion MCP tools vulnerable to prompt injection?
Yes — Notion MCP tools can be vulnerable to indirect prompt injection. Any tool that reads user-written content — documents, messages, tickets, records, or free-text fields — is a potential vector. StackOne Defender scans every tool response before it enters the agent's context — regex patterns in ~1ms, then a MiniLM classifier in ~4ms. 88.7% accuracy, CPU-only.
What is the context bloat of a Notion agent and how do I avoid it?
Context bloat happens when Notion tool schemas and API responses eat your Notion agent's memory, preventing it from reasoning effectively. A single Notion query can return a massive JSON response, and connecting multiple tools compounds the problem. Tools Discovery and Code Mode reduce context bloat — loading only relevant tools per query and keeping raw responses out of the agent's context.
Can I limit which actions my Notion agent can access?
Yes — you can limit which actions your Notion agent can access directly from the StackOne dashboard. Toggle actions on or off, or restrict them to specific accounts, with no code changes to your agent. Session tokens can be scoped to exact actions so if one leaks, exposure stays contained.
Can I create custom agent actions for my Notion MCP server?
Yes — you can create custom agent actions for your Notion MCP server using Connector Builder. It's an integration agent your coding assistant (Claude Code, Cursor, or Copilot) can invoke to research Notion's API, generate production-ready connector YAML, test against the live API, and validate before you ship.
When should I NOT use a Notion MCP server?
Skip a Notion MCP server if your integration is purely software-to-software — direct Notion API integration is simpler when no AI agent is involved. For deterministic, compliance-critical operations (financial transactions, regulatory reporting), direct API gives you predictable behavior without agent-driven decision-making. MCP shines when AI agents need to dynamically discover and call Notion actions at runtime.
What AI frameworks and AI clients does the StackOne Notion MCP server support?
The StackOne Notion MCP server supports both. MCP clients (paste-and-go apps): Claude Desktop, Claude Code, Cursor, VS Code, Goose. Agent frameworks (code SDKs you build with): OpenAI Agents SDK, Anthropic, Vercel AI, Google ADK, CrewAI, Pydantic AI, LangChain, LangGraph, Azure AI Foundry.

Put your AI agents to work

All the tools you need to build and scale AI agent integrations, with best-in-class connectivity, execution, and security.