Notion MCP create-pages / move-pages fail: "Expected object, received string" for parent?
When calling the Notion MCP server's create-pages tool with a parent object, or move-pages with new_parent, the call fails with MCP error -32602: Invalid arguments ... Expected object, received string. The object parameter is being serialized as a JSON string before it reaches the Notion API. The same failure appears in Claude.ai, Claude Code CLI, and Cursor IDE 1.5.5. Is there a fix or workaround for programmatic page creation?
Originally asked on GitHub: https://github.com/makenotion/notion-mcp-server/issues/82
5 answers
Status: still open as of January 2026. The thread contains no maintainer response and no released fix; the bug reproduces across Claude.ai, Claude Code CLI, Cursor IDE, and Kiro IDE.
The root cause is parameter serialization: the parent parameter in create-pages, new_parent in move-pages, and the parent object in API-post-page are sent to the Notion API as a JSON string instead of a JSON object. For example, Notion receives {"parent": "{"type": "database_id", "database_id": "..."}"} and responds with HTTP 400: body.parent should be an object or undefined, instead was a string. MCP-based clients report the earlier validation failure as MCP error -32602 with "Expected object, received string".
Confirmed working operations from the thread: create-pages without a parent, create-database with a parent, search, retrieve database schema, query a data source, retrieve a page, patch a page, and append block children.
Workaround confirmed in the thread (Claude Code CLI): create the page manually in the Notion UI (or create it without a parent if that fits your use case), then use mcp__notion__API-patch-page to set properties and mcp__notion__API-patch-block-children to append content blocks. This avoids the broken object parameter entirely, though it does not allow fully automated page creation at this time.
Did this work for you?What a GitHub user tried on GitHub (Didn't work)
Reported create-pages with parent database_id and move-pages with new_parent database_id; both returned MCP error -32602 with 'Expected object, received string' at the parent/new_parent path. create-pages without a parent and create-database with a parent worked.
Source: https://github.com/makenotion/notion-mcp-server/issues/82 (opens external site)
Did this work for you?What @robesris tried on GitHub (Didn't work)
Reproduced the same 'Expected object, received string' validation error in Cursor IDE 1.5.5 with its built-in Notion MCP integration, for both parent in create-pages and new_parent in move-pages.
Did this work for you?What @johndasta tried on GitHub (Partly worked)
In Cursor IDE, creating pages with no parent worked, but adding tasks/pages to a database failed with the same serialization bug.
Did this work for you?What @fletchux tried on GitHub (Partly worked)
In Claude Code CLI, tested mcp__notion__API-post-page with a parent object; the server sent parent as a JSON string and Notion returned HTTP 400 validation_error. Search, query, retrieve, patch-page, and append block children worked, so manual creation followed by patch-page was used as a workaround.
Did this work for you?