[BUG] Notion MCP notion-update-page fails in Claude Code: MCP -32602 / page_id undefined (schema / serialization mismatch)

Resolved 💬 3 comments Opened Feb 24, 2026 by macsoup-max Closed Feb 28, 2026

Preflight Checklist

  • [x] I have searched existing issues and this hasn't been reported yet
  • [x] This is a single bug report (please file separate reports for different bugs)
  • [x] I am using the latest version of Claude Code

What's Wrong?

The Notion MCP tool notion-update-page consistently fails in Claude Code with:

  • MCP error -32602
  • Zod validation errors like invalid_type, expected "string", received "undefined", path ["page_id"]

even when the page_id and property payloads are valid and work with the direct Notion REST API.

Claude Code serializes the tool call using a data wrapper (e.g., { "data": { "page_id": "...", "command": "update_properties", "properties": { ... } } }), but the Notion MCP server’s validation reports page_id as undefined. This suggests a mismatch between the tool schema Claude exposes and the parameter shape the Notion MCP server actually validates, not a pure server‑only or client‑only bug.

What Should Happen?

When I invoke notion-update-page with a valid page_id and properties payload, Claude Code should successfully update the Notion page’s properties and return a confirmation, analogous to a successful PATCH https://api.notion.com/v1/pages/{page_id} call via the Notion REST API.

Error Messages/Logs

Tool: notion-update-page

Representative tool args (as shown in Claude Code):

{
  "data": {
    "page_id": "YOUR_PAGE_ID_HERE",
    "command": "update_properties",
    "properties": {
      "Status": "Not Started",
      "Done": "__NO__"
    }
  }
}

MCP error:

MCP error -32602: MCP error -32602: Invalid arguments for tool notion-update-page:
[
  {
    "code": "invalid_type",
    "expected": "string",
    "received": "undefined",
    "path": ["page_id"],
    "message": "Required"
  }
  // similar entries may appear for other fields
]

Steps to Reproduce

  1. Enable the official Notion MCP integration in Claude Code and connect it to a Notion workspace.
  2. In a Claude Code project, ask Claude to update an existing Notion page’s properties, for example:
  • Change a Status property from "Not Started" to "Done", or
  • Update a date property on an existing page.
  1. Let Claude call the notion-update-page tool (do not bypass it).
  2. Observe that the call fails with MCP error -32602 and Zod errors where page_id is reported as undefined.
  3. Repeat with different pages and properties; the failure is consistent.

Claude Model

Sonnet (default)

Is this a regression?

Yes, this worked in a previous version

Last Working Version

_No response_

Claude Code Version

2.1.52

Platform

Anthropic API

Operating System

macOS

Terminal/Shell

Terminal.app (macOS)

Additional Information

Notion MCP server:

  • Package: @notionhq/notion-mcp-server
  • Version: 2.2.0 (latest at time of testing)

Other Notion MCP tools in the same environment:

  • Read-only tools:
  • notion-search ✅ Works
  • notion-fetch ✅ Works
  • notion-get-users ✅ Works
  • Write / management tools:
  • notion-create-pages ✅ Works
  • notion-move-pages ✅ Works
  • notion-update-data-source ✅ Works
  • notion-update-page ❌ Fails with -32602 every time

This pattern suggests the problem is specific to how arguments are serialized for tools with object-typed wrapper parameters (such as the data: { ... } shape) for notion-update-page, rather than a general Notion MCP connectivity issue.

As a workaround, I am using the Notion REST API directly with a Notion integration token, and the same page_id and property payloads succeed there:

curl -s -X PATCH "https://api.notion.com/v1/pages/{page_id}" \
  -H "Authorization: Bearer secret_..." \
  -H "Notion-Version: 2022-06-28" \
  -H "Content-Type: application/json" \
  -d '{
    "properties": {
      "Due Date": {
        "date": { "start": "2026-03-01" }
      }
    }
  }'

View original on GitHub ↗

This issue has 3 comments on GitHub. Read the full discussion on GitHub ↗