[BUG] Notion MCP notion-update-page fails in Claude Code: MCP -32602 / page_id undefined (schema / serialization mismatch)
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
- Enable the official Notion MCP integration in Claude Code and connect it to a Notion workspace.
- 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.
- Let Claude call the
notion-update-pagetool (do not bypass it). - Observe that the call fails with
MCP error -32602and Zod errors wherepage_idis reported asundefined. - 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" }
}
}
}'This issue has 3 comments on GitHub. Read the full discussion on GitHub ↗