← notion-mcp-server

notion-mcp-server 3.0.0

npm · notion-mcp-server · current release

3
Tools
1
Resources
2
Templates
4
Prompts

Observation

Observed 2026-09-02T12:48:09.242Z using mcpSecurity-inventory. Status: succeeded. Negotiated protocol: 2025-06-18.

Server capabilities
{
  "tools": {
    "listChanged": true
  },
  "prompts": {
    "listChanged": true
  },
  "resources": {
    "listChanged": true
  },
  "logging": {}
}

Tools 3

ToolCategoryAnnotationsRisk
notion_describeReturn the JSON Schema and a working example for one operation, plus which tool runs it (notion_read or notion_write). Use this BEFORE calling the operation when the payload shape is non-trivial (query filters, structured block trees, database property definitions). For simple ops, just call it — errors carry the schema.
Input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "properties": {
    "operation": {
      "type": "string",
      "description": "Operation name to describe, as listed by notion_read / notion_write."
    }
  },
  "required": [
    "operation"
  ]
}
Annotations
{
  "title": "Notion Describe",
  "readOnlyHint": true,
  "destructiveHint": false,
  "openWorldHint": false
}
Read only · Non-destructive
notion_readRun one Notion read operation by name. Nothing is modified. Call: { operation, payload } — payload carries that operation's fields. Common: search_pages { query }, get_page { page_id }, get_page_markdown { page_id }, query_database { database_id, where? }, get_block_children { block_id }. Responses are slimmed; pass verbose:true in payload for the raw Notion object. Every id field (page_id, block_id, database_id, view_id, …) also accepts a Notion URL, as copied from Share → Copy link. A block link's #fragment is used for block_id fields and a database link's ?v= for view_id fields. If the payload is malformed, the error response includes the schema + a working example so you can correct and retry in one round-trip. Call notion_describe(operation) ahead of time only for complex shapes (query_database filters).
Input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "properties": {
    "operation": {
      "type": "string",
      "enum": [
        "query_database",
        "list_data_sources",
        "get_data_source",
        "list_data_source_templates",
        "get_view",
        "list_views",
        "query_view",
        "list_comments",
        "get_comment",
        "list_users",
        "get_user",
        "get_bot_user",
        "get_self",
        "list_file_uploads",
        "get_file_upload",
        "get_file_url",
        "get_image",
        "search_pages",
        "get_page",
        "get_page_markdown",
        "get_block",
        "get_block_children"
      ],
      "description": "The read operation to run. This list is the complete menu of read operations enabled on this server; notion_describe(operation) returns any operation's full schema."
    },
    "payload": {
      "type": "object",
      "propertyNames": {
        "type": "string"
      },
      "additionalProperties": {},
      "description": "Operation parameters. Pass either single-op fields directly, or { items: [...], atomic?, idempotency_key?, concurrency? } for batch."
    }
  },
  "required": [
    "operation",
    "payload"
  ]
}
Annotations
{
  "title": "Notion Read",
  "readOnlyHint": true,
  "destructiveHint": false,
  "idempotentHint": true,
  "openWorldHint": true
}
Read only · Non-destructive
notion_writeRun one Notion write operation by name. Archive, trash and delete operations remove content — confirm with the user before running them. Two ways to call: • Single: { operation: "set_page_title", payload: { page_id, title } } • Batch: { operation: "set_page_title", payload: { items: [{page_id, title}, ...], atomic?: false, idempotency_key?: "...", concurrency?: 3 } } create_page, append_blocks, update_block and update_page_markdown also take a markdown string. Responses are slimmed; pass verbose:true inside payload (single) or per item (batch) for the raw Notion object. Every id field (page_id, block_id, database_id, view_id, …) also accepts a Notion URL, as copied from Share → Copy link. If the payload is malformed, the error response includes the schema + a working example so you can correct and retry in one round-trip. Call notion_describe(operation) ahead of time only for complex shapes (block trees, database property definitions, batch_mixed_blocks).
Input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "properties": {
    "operation": {
      "type": "string",
      "enum": [
        "create_database",
        "update_database",
        "delete_database",
        "update_data_source",
        "delete_data_source",
        "create_view",
        "update_view",
        "delete_view",
        "add_page_comment",
        "add_discussion_comment",
        "update_comment",
        "delete_comment",
        "upload_file",
        "create_page",
        "set_page_title",
        "set_page_property",
        "set_page_properties",
        "archive_page",
        "trash_page",
        "restore_page",
        "move_page",
        "update_page_markdown",
        "append_blocks",
        "update_block",
        "delete_block",
        "batch_mixed_blocks"
      ],
      "description": "The write operation to run. This list is the complete menu of write operations enabled on this server; notion_describe(operation) returns any operation's full schema."
    },
    "payload": {
      "type": "object",
      "propertyNames": {
        "type": "string"
      },
      "additionalProperties": {},
      "description": "Operation parameters. Pass either single-op fields directly, or { items: [...], atomic?, idempotency_key?, concurrency? } for batch."
    }
  },
  "required": [
    "operation",
    "payload"
  ]
}
Annotations
{
  "title": "Notion Write",
  "readOnlyHint": false,
  "destructiveHint": true,
  "openWorldHint": true
}
Writes · Destructive

Resources 1

Resource templates 2

Prompts 4

Let’s talk about MCP security.

Share your details and our security team will contact you.