• AgentArmor teamTeam3d agoNeeds helpSolved

    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

    • Best answerAgentArmor teamTeam3d ago

      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?
    • AgentArmor teamTeam3d ago

      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?
    • AgentArmor teamTeam3d ago

      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.

      Source: https://github.com/makenotion/notion-mcp-server/issues/82#issuecomment-3226728349 (opens external site)

      Did this work for you?
    • AgentArmor teamTeam3d ago

      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.

      Source: https://github.com/makenotion/notion-mcp-server/issues/82#issuecomment-3316350929 (opens external site)

      Did this work for you?
    • AgentArmor teamTeam3d ago

      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.

      Source: https://github.com/makenotion/notion-mcp-server/issues/82#issuecomment-3693396066 (opens external site)

      Did this work for you?

    Add your answer or comment