Skip to main content
Glama
notion-mcp-server

notion-mcp-server

by atikk-co-jp

notion-mcp-server

English | 日本語

MCP (Model Context Protocol) server for Notion API. Enables AI assistants to interact with Notion pages, databases, and blocks.

API Version: 2025-09-03 (latest)

Why this repository?

Why I Built This

I wanted to use AI agents to process tasks from my Notion database with specific conditions:

"Get tasks where Status = 'Not Started' AND Assignee = 'Alice', sorted by Priority"

Here's what I found with existing options:

MCP Option

Property Filtering

Token Efficiency

Plan Required

Official Notion MCP

Metadata only (created_at, created_by) / Full (Enterprise+AI)

Good

Notion AI

@notionhq/notion-mcp-server

✅ Full support

Large responses

None

This repository

✅ Full support

Optimized

None

The gap I wanted to fill:

  • Full database property filtering (AND/OR, select, checkbox, date, etc.)

  • Optimized response sizes for LLM token efficiency

  • No plan restrictions

This repository provides property filtering with fields parameter for 90% token reduction.

Related MCP server: @node2flow/notion-mcp

Quick Start

1. Get a Notion Token

  1. Go to Notion Integrations

  2. Click "New integration"

  3. Give it a name and select the workspace

  4. Copy the "Internal Integration Token" (starts with ntn_)

  5. Share the pages/databases you want to access with your integration

2. Configure Your AI Client

Claude Desktop

Add to your configuration (~/.config/claude/claude_desktop_config.json on macOS):

{
  "mcpServers": {
    "notion": {
      "command": "npx",
      "args": ["-y", "@atikk-co-jp/notion-mcp-server"],
      "env": {
        "NOTION_TOKEN": "ntn_xxxxxxxxxxxx"
      }
    }
  }
}

Claude Code

Add to your .mcp.json:

{
  "mcpServers": {
    "notion": {
      "command": "npx",
      "args": ["-y", "@atikk-co-jp/notion-mcp-server"],
      "env": {
        "NOTION_TOKEN": "ntn_xxxxxxxxxxxx"
      }
    }
  }
}

That's it! Restart your AI client and start using Notion.

Features

  • Page Operations: Create, retrieve, update, and move Notion pages

  • Database Operations: Create, retrieve, update, and query databases with filters and sorts

  • Block Operations: Retrieve, update, delete, and append blocks

  • Search: Search across pages and databases

  • Comments: Create and list comments

  • Users: List users and retrieve user info

  • Token-Efficient Output: Markdown/simple format reduces token usage by ~96%

  • Markdown Input: Create and append content using Markdown (80% fewer input tokens)

API Coverage

⭐ = Markdown input supported (reduces input tokens by ~80%)

📤 = Minimal response (id/url only) - reduces output tokens by ~90%

Category

Notion API

MCP Tool

Input

Output (default)

Pages

Create page

create-page 📤

JSON

{id, url}

create-page-simple ⭐📤

Markdown

{id, url}

Retrieve page

retrieve-page

JSON

simple/json

Update page

update-page 📤

JSON

{id, url}

Retrieve page property

retrieve-page-property

JSON

json

Move page

move-page 📤

JSON

{id, url}

Archive page

archive-page 📤

JSON

{id}

Databases

Create database

create-database 📤

JSON

{id, url}

Retrieve database

retrieve-database

JSON

simple/json

Update database

update-database 📤

JSON

{id, url}

Archive database

archive-database 📤

JSON

{id}

Data Sources

Retrieve data source

retrieve-data-source

JSON

simple/json

Query data source

query-data-source

JSON

simple/json

Update data source

update-data-source 📤

JSON

{id}

Blocks

Retrieve block

retrieve-block

JSON

markdown/json

Update block

update-block 📤

JSON

{id}

update-block-simple ⭐📤

Markdown

{id}

Delete block

delete-block 📤

JSON

{id}

delete-blocks-batch 📤

JSON

{deleted_count, failed_count}

clear-page-content 📤

JSON

{deleted_count, failed_count}

Retrieve block children

get-block-children

JSON

markdown/simple/json

Append block children

append-block-children 📤

JSON

{block_ids}

append-blocks-simple ⭐📤

Markdown

{block_ids}

replace-page-content ⭐📤

Markdown

{deleted_count, created_count}

find-and-replace-in-page ⭐📤

Markdown

{updated_count, updated_block_ids}

Comments

Create comment

create-comment 📤

JSON

{id}

create-comment-simple ⭐📤

Markdown

{id}

List comments

list-comments

JSON

json

Users

List users

list-users

JSON

json

Retrieve user

retrieve-user

JSON

json

Retrieve bot user

retrieve-bot-user

JSON

json

Search

Search

search

JSON

simple/json

Available Tools

retrieve-page

Retrieve a Notion page by its ID.

Parameters:

  • page_id (required): The ID of the page to retrieve

  • format (optional): Output format - "simple" (default) or "json"

    • simple: Returns simplified property values with reduced token usage

    • json: Returns raw Notion API response

  • include_content (optional): Include page content as markdown (default: true)

{
  "page_id": "page-uuid-here",
  "format": "simple",
  "include_content": true
}

create-page

Create a new page. Supports two parent types:

  • Child page: Use parent.page_id to create a page under an existing page

  • Database entry: Use parent.data_source_id to create a page in a database

Create a child page:

{
  "parent": { "page_id": "parent-page-uuid-here" },
  "properties": {
    "title": {
      "title": [{ "text": { "content": "Child Page Title" } }]
    }
  }
}

Create a database entry:

{
  "parent": { "data_source_id": "data-source-uuid-here" },
  "properties": {
    "Name": {
      "title": [{ "text": { "content": "New Page Title" } }]
    },
    "Status": {
      "status": { "name": "In Progress" }
    }
  }
}

create-page-simple ⭐

Create a new page using Markdown. ~80% fewer input tokens compared to create-page.

Supports two parent types:

  • Child page: Use parent.page_id to create a page under an existing page

  • Database entry: Use parent.data_source_id to create a page in a database

Parameters:

  • parent (required): Either { page_id } or { data_source_id }

  • title (required): Page title as a simple string

  • content (optional): Page content in Markdown

  • properties (optional): Additional Notion properties

  • icon (optional): Emoji icon (e.g., "🐛")

Supported Markdown:

  • Headings: # ## ### (#### and beyond → heading_3)

  • Lists: - or * (bulleted), 1. (numbered)

  • Checkboxes: - [ ] / - [x]

  • Code blocks: ``` with language

  • Quotes: >

  • Dividers: ---

  • Images: ![alt](url)

  • Tables: | col1 | col2 | with header separator |---|---|

  • Inline: **bold**, *italic*, ~~strike~~, `code`, [link](url)

Extended Markdown (bidirectional):

  • Toggle: <details><summary>title</summary>content</details>

  • Callout: > [!NOTE], > [!WARNING], > [!TIP], > [!IMPORTANT], > [!CAUTION]

  • Equation: $$E = mc^2$$ (inline/block)

  • Underline: <u>text</u> or ++text++

  • Color: {color:red}text{/color}, {bg:yellow}text{/bg}

  • Bookmark: [bookmark](url) or [bookmark:caption](url)

  • Columns: :::columns / :::column / :::

  • Media: @[embed](url), @[video](url), @[audio](url), @[file](url), @[pdf](url)

  • Table of contents: [TOC]

Create a child page:

{
  "parent": { "page_id": "parent-page-uuid-here" },
  "title": "Meeting Notes",
  "content": "## Agenda\n\n1. Review progress\n2. Next steps"
}

Create a database entry:

{
  "parent": { "data_source_id": "data-source-uuid-here" },
  "title": "Bug Report",
  "content": "## Steps to Reproduce\n\n1. Login\n2. Open settings\n\n## Expected Behavior\n\nShould display correctly",
  "properties": {
    "Status": { "status": { "name": "Open" } }
  },
  "icon": "🐛"
}

Token Comparison:

Method

Tokens

Reduction

create-page (blocks)

~152

-

create-page-simple (markdown)

~26

83%

update-page

Update a page's properties, icon, cover, archive status, or lock status.

Parameters:

  • page_id (required): The ID of the page to update

  • properties (optional): Properties to update

  • icon (optional): Icon (set to null to remove)

  • cover (optional): Cover image (set to null to remove)

  • archived (optional): Set to true to archive

  • is_locked (optional): Lock the page to prevent edits in the UI

{
  "page_id": "page-uuid-here",
  "properties": {
    "Status": {
      "status": { "name": "Done" }
    }
  },
  "is_locked": true
}

query-data-source

Query a data source with optional filters and sorts.

Parameters:

  • data_source_id (required): The ID of the data source to query

  • filter (optional): Filter conditions as a JSON object

  • sorts (optional): Sort conditions as an array

  • start_cursor (optional): Cursor for pagination

  • page_size (optional): Number of results to return (1-100)

  • format (optional): Output format - "simple" (default) or "json"

    • simple: Returns simplified property values with reduced token usage

    • json: Returns raw Notion API response

{
  "data_source_id": "data-source-uuid-here",
  "filter": {
    "property": "Status",
    "status": { "equals": "In Progress" }
  },
  "sorts": [
    { "property": "Created", "direction": "descending" }
  ],
  "format": "simple"
}

create-database

Create a new database as a subpage of an existing page.

Parameters:

  • parent_page_id (required): The ID of the parent page

  • properties (required): Database schema with at least one title property

  • title (optional): Database title as rich text array

  • icon (optional): Icon for the database

  • cover (optional): Cover image for the database

  • is_inline (optional): If true, creates an inline database

{
  "parent_page_id": "parent-page-uuid",
  "properties": {
    "Name": { "title": {} },
    "Status": { "select": { "options": [{ "name": "Todo" }, { "name": "Done" }] } },
    "Priority": { "number": {} }
  },
  "title": [{ "type": "text", "text": { "content": "Task Database" } }]
}

update-database

Update an existing database container (title, description, icon, cover).

Note: For schema (properties/columns) updates, use update-data-source instead.

Parameters:

  • database_id (required): The ID of the database to update

  • title (optional): New title as rich text array

  • description (optional): New description as rich text array

  • icon (optional): Icon (set to null to remove)

  • cover (optional): Cover image (set to null to remove)

  • is_inline (optional): If true, creates an inline database

  • archived (optional): Set to true to archive

  • is_locked (optional): Lock the database to prevent edits in the UI

{
  "database_id": "database-uuid-here",
  "title": [{ "type": "text", "text": { "content": "New Title" } }],
  "is_locked": true
}

retrieve-data-source

Retrieve a data source schema by its ID.

Parameters:

  • data_source_id (required): The ID of the data source

  • format (optional): Output format - "simple" (default) or "json"

{
  "data_source_id": "data-source-uuid-here",
  "format": "simple"
}

update-data-source

Update a data source schema (properties/columns).

Parameters:

  • data_source_id (required): The ID of the data source to update

  • properties (optional): Properties to add, update, or delete (set to null)

{
  "data_source_id": "data-source-uuid-here",
  "properties": {
    "NewColumn": { "rich_text": {} },
    "OldColumn": null
  }
}

Search across all pages and data sources.

{
  "query": "search term",
  "filter": { "value": "page", "property": "object" }
}

Filter values: "page" or "data_source"

get-block-children

Get the child blocks of a page or block.

Parameters:

  • block_id (required): The ID of the block or page to get children from

  • start_cursor (optional): Cursor for pagination

  • page_size (optional): Number of results to return (1-100)

  • format (optional): Output format - "markdown" (default), "simple", or "json"

    • markdown: Returns human-readable markdown with significantly reduced token usage (~96% reduction)

    • simple: Returns ID + type + markdown content (lightweight, for deletion target selection)

    • json: Returns raw Notion API response

  • fetch_nested (optional): When format="markdown", fetch nested children blocks recursively (default: false)

{
  "block_id": "page-or-block-uuid-here",
  "format": "markdown",
  "fetch_nested": true
}

Get block IDs for deletion:

{
  "block_id": "page-or-block-uuid-here",
  "format": "simple"
}

Returns:

{
  "blocks": [
    { "id": "abc123", "type": "heading_1", "content": "# Title" },
    { "id": "def456", "type": "paragraph", "content": "Some text" }
  ],
  "has_more": false
}

append-block-children

Append new blocks to a page or block.

{
  "block_id": "page-or-block-uuid-here",
  "children": [
    {
      "type": "paragraph",
      "paragraph": {
        "rich_text": [{ "text": { "content": "New paragraph" } }]
      }
    }
  ]
}

append-blocks-simple ⭐

Append blocks using Markdown. ~80% fewer output tokens compared to append-block-children.

Parameters:

  • block_id (required): The page or block ID to append to

  • content (required): Content in Markdown

  • after (optional): Insert after this block ID

Same Markdown support as create-page-simple.

{
  "block_id": "page-or-block-uuid-here",
  "content": "# New Section\n\nThis is **important** content with a [link](https://example.com).\n\n- Item 1\n- Item 2\n\n```javascript\nconst x = 1;\n```"
}

Token Comparison:

Method

Tokens

Reduction

append-block-children (blocks)

~201

-

append-blocks-simple (markdown)

~42

79%

replace-page-content ⭐

Replace all content of a page with new Markdown content. Automatically preserves child_database and child_page blocks.

Parameters:

  • page_id (required): The page ID to update

  • content (required): New content in Markdown

  • dry_run (optional): Preview which blocks will be deleted without making changes (default: false)

⚠️ Warning: Blocks not representable in Extended Markdown (table_of_contents, synced_block, etc.) will be DELETED. Use dry_run: true to preview before executing.

Use when: You want to completely rewrite page content without finding individual block IDs.

Same Markdown support as create-page-simple.

{
  "page_id": "page-uuid-here",
  "content": "# New Page Title\n\nThis is the new content.\n\n## Section 1\n\n- Item 1\n- Item 2"
}

Preview deletions (dry run):

{
  "page_id": "page-uuid-here",
  "content": "# New content",
  "dry_run": true
}

find-and-replace-in-page ⭐

Find text in a page and replace it with new content. Supports regex patterns for advanced matching.

Parameters:

  • page_id (required): The page ID to search in

  • find (required): Text to find (string or regex pattern)

  • replace (required): Replacement text (supports Markdown: **bold**, *italic*, etc.)

  • use_regex (optional): If true, treat find as a regex pattern (default: false)

Use when: You want to update specific text without rewriting the entire page.

{
  "page_id": "page-uuid-here",
  "find": "old text",
  "replace": "**new text**"
}

With regex:

{
  "page_id": "page-uuid-here",
  "find": "item\\d+",
  "replace": "updated item",
  "use_regex": true
}

delete-blocks-batch

Delete multiple blocks by their IDs. Blocks are deleted sequentially to respect API rate limits (3 req/s).

Parameters:

  • block_ids (required): Array of block IDs to delete (max 100)

Use when: You want to delete specific blocks. Use get-block-children with format="simple" to get block IDs first.

{
  "block_ids": ["block-uuid-1", "block-uuid-2", "block-uuid-3"]
}

Returns:

{
  "deleted_count": 3,
  "failed_count": 0,
  "deleted": ["block-uuid-1", "block-uuid-2", "block-uuid-3"]
}

clear-page-content

Delete all content from a page. By default, preserves child_database and child_page blocks.

Parameters:

  • page_id (required): The page ID to clear

  • preserve_types (optional): Block types to preserve (default: ["child_database", "child_page"]). Set to [] to delete all.

Use when: You want to delete all content from a page without selecting individual blocks.

{
  "page_id": "page-uuid-here"
}

Delete everything (including child databases/pages):

{
  "page_id": "page-uuid-here",
  "preserve_types": []
}

Returns:

{
  "deleted_count": 15,
  "failed_count": 0
}

create-comment

Add a comment to a page.

{
  "page_id": "page-uuid-here",
  "rich_text": [{ "type": "text", "text": { "content": "This is a comment" } }]
}

create-comment-simple ⭐

Add a comment using Markdown. Simpler than create-comment.

Parameters:

  • page_id (required): The ID of the page

  • content (required): Comment in Markdown

  • discussion_id (optional): Reply to existing thread

{
  "page_id": "page-uuid-here",
  "content": "This is **important** with a [link](https://example.com)"
}

Development

# Install dependencies
pnpm install

# Run in development mode
pnpm dev

# Build for production
pnpm build

# Type check
pnpm typecheck

# Lint
pnpm lint

# Format code
pnpm format

# Run tests
pnpm test

# Run tests in watch mode
pnpm test:watch

License

MIT

Available Tools

32 tools
append-block-childrenA

Append new blocks as children to a block or page. Supports all block types: paragraph, headings, lists, code, images, etc. Returns the created block IDs. Use the "after" parameter to insert blocks at a specific position.

Inputs: block_id (required), children (required), after.

append-blocks-simpleA

Append blocks to a page using Markdown. Simpler than append-block-children: just provide markdown text. Markdown: # headings, - lists, - [ ] checkboxes, ``` code, > quotes, | tables |, images, bold, italic, strike, code, links. Extended: toggle, > [!NOTE/WARNING/TIP/IMPORTANT/CAUTION] callout, $$ equation, /++ underline, {color:x}{/color}, {bg:x}{/bg}, bookmark, :::columns, @embed/video/audio/file/pdf, [TOC] table of contents. Returns created block IDs.

Inputs: block_id (required), content (required), after.

archive-databaseA

Move a database to trash. Recoverable for 30 days via Notion UI. Returns database ID.

Inputs: database_id (required).

archive-pageA

Move a page to trash. Recoverable for 30 days via Notion UI. Returns page ID.

Inputs: page_id (required).

clear-page-contentA

Delete all content from a page. By default, preserves child_database and child_page blocks. Use preserve_types=[] to delete everything. For deleting specific blocks, use delete-blocks-batch instead. Blocks are deleted sequentially to respect API rate limits (3 req/s). Returns count of deleted blocks.

Inputs: page_id (required), preserve_types.

create-commentA

Add a comment to a Notion page. Creates a new discussion or adds to an existing one. Comments support rich text formatting (bold, italic, links, etc.). Use discussion_id to reply to an existing comment thread. Returns the created comment ID.

Inputs: rich_text (required), page_id, block_id, discussion_id.

create-comment-simpleA

Add a comment using Markdown. Simpler than create-comment. Returns comment ID.

Inputs: content (required), page_id, block_id, discussion_id.

create-databaseA

Create a new database as a subpage of an existing Notion page. Requires a parent_page_id and properties object defining the database schema. Each database must have exactly one title property. Returns database ID and URL. (API version 2025-09-03)

Inputs: parent_page_id (required), properties (required), title, icon, +2 more.

create-pageA

Create a new page in Notion. Specify parent as either page_id (to create a child page) or data_source_id (to create a database entry). Optionally include initial content blocks, icon, and cover image. Returns the created page ID and URL. (API version 2025-09-03)

Inputs: parent (required), properties (required), children, icon, +1 more.

create-page-simpleB

Create a page with Markdown. Specify parent as either page_id (child page) or data_source_id (database entry). Title is auto-mapped to the title property. # headings, - lists, - [ ] checkboxes, ``` code, > quotes, | tables |, bold, italic, links, toggle, > [!NOTE] callout, $$ equation, [TOC] table of contents.

Inputs: parent (required), title (required), content, properties, +1 more.

delete-blockA

Delete a block by its ID. The block will be archived (moved to trash). Returns deleted block ID.

Inputs: block_id (required).

delete-blocks-batchA

Delete multiple blocks by their IDs. Use this when you want to delete specific blocks. For deleting all content from a page, use clear-page-content instead. Blocks are deleted sequentially to respect API rate limits (3 req/s). Returns summary of deleted and failed blocks.

Inputs: block_ids (required).

find-and-replace-in-pageA

Find text in a page and replace it with new content. Supports regex patterns (use_regex: true) for advanced matching (e.g., "item\d+" matches item1, item2). All matching blocks will be updated. Replacement text supports Markdown formatting: bold, italic, strikethrough, code, links. Only works with text-based blocks: paragraph, headings, lists, to_do, quote, callout, toggle. Use this for partial updates. For full page rewrite, use replace-page-content instead.

Inputs: page_id (required), find (required), replace (required), use_regex.

get-block-childrenA

Retrieve the children blocks of a block or page. Returns paginated results. Use format='markdown' (default) for human-readable output with significantly reduced token usage.

Inputs: block_id (required), start_cursor, page_size, format, +1 more.

list-commentsA

List comments on a page or block. Either block_id or page_id must be provided. Returns a paginated list of comments with their content and metadata.

Inputs: block_id, page_id, start_cursor, page_size.

list-usersA

List all users in the workspace. Returns paginated list of users with their IDs, names, and types (person or bot).

Inputs: start_cursor, page_size.

move-pageA

Move a page to a new parent (page or data source). Provide either page_id or data_source_id as the new parent. Returns page ID and URL. (API version 2025-09-03)

Inputs: page_id (required), parent (required).

query-data-sourceA

Query a Notion data source with optional filters and sorts. Returns paginated results. Use format='simple' (default) for human-readable output with reduced token usage. Use fields parameter to limit which properties are returned (simple format only). (API version 2025-09-03)

Inputs: data_source_id (required), filter, sorts, start_cursor, +3 more.

replace-page-contentA

Replace all page content with Markdown. Preserves child_database/child_page only. WARNING: Non-Markdown blocks (bookmark, callout, equation, etc.) will be DELETED. Use dry_run: true to preview deletions. For partial updates, use find-and-replace-in-page.

Inputs: page_id (required), content (required), dry_run.

retrieve-blockA

Retrieve a single block by its ID. Returns block content and metadata. Use format='markdown' (default) for human-readable output, 'json' for full Notion API response.

Inputs: block_id (required), format.

retrieve-bot-userA

Retrieve information about the current bot user (the integration). Returns the bot ID, name, avatar, and owner information.

Inputs: no named parameters.

retrieve-databaseA

Retrieve a database container by its ID. Returns database metadata and associated data sources. Note: In API 2025-09-03, database properties/schema are retrieved via retrieve-data-source using data_source_id. Use format='simple' (default) for reduced token usage, 'json' for full Notion API response.

Inputs: database_id (required), format.

retrieve-data-sourceA

Retrieve a data source schema by its ID. Returns data source properties (columns) and their types. Use format='simple' (default) for reduced token usage, 'json' for full Notion API response. (API version 2025-09-03)

Inputs: data_source_id (required), format.

retrieve-pageA

Retrieve a Notion page by its ID. Returns the page properties, metadata, and optionally content (blocks as markdown). Use format='simple' (default) for human-readable output with reduced token usage.

Inputs: page_id (required), format, include_content.

retrieve-page-propertyA

Get a property with pagination (for relation/rollup with many items). For simple properties, use retrieve-page instead.

Inputs: page_id (required), property_id (required), start_cursor, page_size.

retrieve-userA

Retrieve a user by their ID. Returns user information including name, avatar, and type (person or bot).

Inputs: user_id (required).

update-blockA

Update a block by its ID. Provide the block type and its properties. Example: { "paragraph": { "rich_text": [{ "text": { "content": "Updated text" } }] } }. Set archived to true to move the block to trash. Returns updated block ID.

Inputs: block_id (required), block (required), archived.

update-block-simpleA

Update a text block using Markdown. Simpler than update-block: just provide markdown text. Supports inline formatting: bold, italic, strikethrough, code, links. Only works with text-based blocks: paragraph, headings, lists, to_do, quote, callout, toggle. Requires block_id. If you want to update by text search, use find-and-replace-in-page. For full page rewrite, use replace-page-content.

Inputs: block_id (required), content (required).

update-databaseA

Update a Notion database container. Can modify title, description, icon, cover, inline status, archive status, and lock status. For schema (properties/columns) updates, use update-data-source instead. Returns database ID and URL. (API version 2025-09-03)

Inputs: database_id (required), title, description, icon, +4 more.

update-data-sourceA

Update a data source schema (properties/columns). Use this to add, update, or delete properties. Set a property to null to delete it. Returns data source ID. (API version 2025-09-03)

Inputs: data_source_id (required), properties.

update-pageA

Update a Notion page's properties, icon, cover, archive status, or lock status. Partial updates are supported - only provide the fields you want to change. Set icon or cover to null to remove them. Set archived to true to move the page to trash. Set is_locked to true to lock the page in the UI. Returns updated page ID and URL.

Inputs: page_id (required), properties, archived, icon, +2 more.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    A3.6/5.0

    Scored across 32 tools

    Disambiguation2/5

    Many tools have overlapping purposes, especially with 'simple' variants (e.g., append-block-children vs append-blocks-simple, create-comment vs create-comment-simple) and multiple deletion methods (delete-block, archive-page, clear-page-content). This makes it difficult for an agent to choose the correct tool.

    Naming Consistency4/5

    All tool names use snake_case and generally follow a verb-noun pattern (e.g., archive-database, retrieve-page). Some names are longer or less conventional (find-and-replace-in-page), but overall the pattern is consistent.

    Tool Count3/5

    32 tools is on the high side for a single server, but Notion is a complex platform with many operations. The count is borderline; some tools could be merged (e.g., 'simple' variants) to reduce clutter.

    Completeness4/5

    The tool set covers CRUD for pages, databases, blocks, comments, users, and search, as well as data source operations. Minor gaps exist (e.g., no batch update for properties), but overall the surface is comprehensive for common Notion tasks.

    Maintenance

    ActivityInactive
    ResponsivenessOutdated data

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      Not graded
      quality
      D
      maintenance
      MCP server for the Notion API, enabling management of pages, blocks, databases, data sources, comments, and users through natural language.
      11 npm
      3
      MIT
    • A
      license
      Not graded
      quality
      D
      maintenance
      A token-optimized MCP server for Notion that reduces context window usage by 73% while preserving full functionality, enabling AI assistants to interact with Notion efficiently.
      19 npm
      2
      MIT
    • A
      license
      A
      quality
      D
      maintenance
      An MCP server that provides AI assistants with full access to Notion workspaces, enabling search, read, create, and update pages, databases, and blocks.
      13
      10 npm
      MIT