Notion MCP Server

Notion MCP servers enable AI models to interact with Notion workspaces, providing capabilities for database operations, page management, content creation, and collaborative workspace automation.

GitHub starsnpm versionnpm downloads

Overview

The MCP Notion Server enables AI models to interact with Notion workspaces, providing seamless integration with one of the most popular knowledge management and collaboration platforms. Notion is widely used for documentation, project management, wikis, and team collaboration.

Official Server:

Developed and maintained by Anthropic

Key Features

📄

Page Management

Create, read, update, and search Notion pages across workspaces

🗄️

Database Operations

Query, filter, and manipulate Notion databases with rich properties

🔍

Content Search

Search across all workspace content with powerful filtering

🤝

Collaborative Workflows

Automate documentation, task management, and team collaboration

Available Tools

Quick Reference

ToolPurposeCategory
notion_searchSearch workspace contentSearch
notion_create_pageCreate new pagesWrite
notion_get_pageRetrieve page contentRead
notion_update_pageUpdate existing pagesWrite
notion_query_databaseQuery database entriesRead
notion_create_database_entryAdd database recordsWrite

Detailed Usage

notion_search

Search across all pages and databases in your Notion workspace.

use_mcp_tool({
  server_name: "notion",
  tool_name: "notion_search",
  arguments: {
    query: "project documentation",
    filter: {
      property: "object",
      value: "page"
    }
  }
});

Returns matching pages with metadata and content preview.

notion_create_page

Create a new page in Notion with rich content blocks.

use_mcp_tool({
  server_name: "notion",
  tool_name: "notion_create_page",
  arguments: {
    parent: {
      page_id: "parent-page-id"
    },
    properties: {
      title: {
        title: [
          {
            text: { content: "New Documentation Page" }
          }
        ]
      }
    },
    children: [
      {
        object: "block",
        type: "paragraph",
        paragraph: {
          rich_text: [
            {
              text: { content: "This is the page content." }
            }
          ]
        }
      }
    ]
  }
});

Creates a new page with structured content blocks.

notion_get_page

Retrieve the content and properties of a specific page.

use_mcp_tool({
  server_name: "notion",
  tool_name: "notion_get_page",
  arguments: {
    page_id: "abc123-def456-ghi789"
  }
});

Returns full page content including all blocks and properties.

notion_update_page

Update properties or content of an existing page.

use_mcp_tool({
  server_name: "notion",
  tool_name: "notion_update_page",
  arguments: {
    page_id: "abc123-def456-ghi789",
    properties: {
      Status: {
        status: { name: "In Progress" }
      }
    }
  }
});

Updates page properties while preserving existing content.

notion_query_database

Query a Notion database with filters and sorting options.

// Query with filter
use_mcp_tool({
  server_name: "notion",
  tool_name: "notion_query_database",
  arguments: {
    database_id: "database-id-123",
    filter: {
      property: "Status",
      status: { equals: "Active" }
    },
    sorts: [
      {
        property: "Created",
        direction: "descending"
      }
    ]
  }
});

Returns filtered and sorted database entries.

notion_create_database_entry

Create a new entry in a Notion database.

use_mcp_tool({
  server_name: "notion",
  tool_name: "notion_create_database_entry",
  arguments: {
    database_id: "database-id-123",
    properties: {
      Name: {
        title: [
          { text: { content: "New Task" } }
        ]
      },
      Status: {
        status: { name: "To Do" }
      },
      Priority: {
        select: { name: "High" }
      }
    }
  }
});

Adds a new record to the specified database.

Installation

{
  "mcpServers": {
    "notion": {
      "command": "npx",
      "args": [
        "-y",
        "@modelcontextprotocol/server-notion"
      ],
      "env": {
        "NOTION_API_KEY": "your-notion-integration-token"
      }
    }
  }
}

API Key Required:

You need to create a Notion integration and obtain an API key from the Notion Integrations page.

Setup Guide

1. Create Notion Integration

  1. Go to Notion Integrations
  2. Click "+ New integration"
  3. Give your integration a name (e.g., "MCP Integration")
  4. Select the workspace you want to connect
  5. Configure capabilities:
    • ✅ Read content
    • ✅ Update content
    • ✅ Insert content
  6. Copy the Internal Integration Token

2. Share Pages with Integration

For the integration to access your pages:

  1. Open a Notion page you want to access
  2. Click "..." menu → "Connections""Connect to"
  3. Select your integration from the list
  4. Repeat for all pages/databases you want to access

Workspace Access:

You can share entire workspace sections by connecting the integration at the top-level page.

3. Configure MCP Server

Add the integration token to your MCP configuration as shown in the Installation section above.

Common Use Cases

1. Automated Documentation

Create and update documentation pages programmatically:

// Create technical documentation
use_mcp_tool({
  server_name: "notion",
  tool_name: "notion_create_page",
  arguments: {
    parent: { database_id: "docs-db-id" },
    properties: {
      title: {
        title: [{ text: { content: "API Reference - Users Endpoint" } }]
      },
      Category: {
        select: { name: "API Documentation" }
      }
    },
    children: [
      {
        object: "block",
        type: "heading_2",
        heading_2: {
          rich_text: [{ text: { content: "Endpoints" } }]
        }
      },
      {
        object: "block",
        type: "code",
        code: {
          language: "javascript",
          rich_text: [{ text: { content: "GET /api/users" } }]
        }
      }
    ]
  }
});

2. Task Management

Query and manage tasks in a project database:

// Get all high-priority tasks
use_mcp_tool({
  server_name: "notion",
  tool_name: "notion_query_database",
  arguments: {
    database_id: "tasks-db-id",
    filter: {
      and: [
        {
          property: "Priority",
          select: { equals: "High" }
        },
        {
          property: "Status",
          status: { does_not_equal: "Done" }
        }
      ]
    }
  }
});

Search across all documentation:

// Search for specific topics
use_mcp_tool({
  server_name: "notion",
  tool_name: "notion_search",
  arguments: {
    query: "authentication setup",
    filter: {
      property: "object",
      value: "page"
    }
  }
});

4. Meeting Notes Automation

Create structured meeting notes:

// Create meeting notes page
use_mcp_tool({
  server_name: "notion",
  tool_name: "notion_create_page",
  arguments: {
    parent: { database_id: "meetings-db-id" },
    properties: {
      title: {
        title: [{ text: { content: `Team Sync - ${new Date().toLocaleDateString()}` } }]
      },
      Date: {
        date: { start: new Date().toISOString() }
      },
      Attendees: {
        multi_select: [
          { name: "Alice" },
          { name: "Bob" }
        ]
      }
    },
    children: [
      {
        object: "block",
        type: "heading_3",
        heading_3: {
          rich_text: [{ text: { content: "Agenda" } }]
        }
      },
      {
        object: "block",
        type: "bulleted_list_item",
        bulleted_list_item: {
          rich_text: [{ text: { content: "Project updates" } }]
        }
      }
    ]
  }
});

Supported Block Types

The Notion MCP server supports rich content blocks including:

  • Text blocks: paragraph, heading_1, heading_2, heading_3
  • Lists: bulleted_list_item, numbered_list_item, to_do
  • Media: image, video, file, pdf, bookmark
  • Code: code (with syntax highlighting)
  • Advanced: table, column_list, toggle, quote, callout
  • Embeds: embed, link_preview

Property Types

Notion databases support various property types:

  • Text: title, rich_text
  • Numbers: number
  • Selections: select, multi_select, status
  • Dates: date
  • People: people
  • Files: files
  • Checkbox: checkbox
  • URL: url, email, phone_number
  • Relations: relation, rollup
  • Formula: formula
  • Created/Updated: created_time, created_by, last_edited_time, last_edited_by

Sources