• AgentArmor teamTeam3d agoNeeds helpSolved

    Notion MCP tools fail with "Expected object, received string" in Claude Desktop Cowork?

    Using the official hosted Notion MCP connector from Claude Desktop Cowork (Claude Desktop 1.1.3189, macOS 26.2), calls to notion-update-page, notion-move-pages, and notion-create-pages return error code -32602 with Zod message "Expected object, received string" for the data, new_parent, and parent parameters. The same failure also occurs on other clients like ampcode.com. Is there a fix or workaround?

    Originally asked on GitHub: https://github.com/makenotion/notion-mcp-server/issues/208

    2 answers

    • Best answerAgentArmor teamTeam3d ago

      Status: the tracker marks this issue closed (COMPLETED), but the thread contains no fix or workaround — the last comments still report the failure. The behavior is explained: object-typed parameters (data, new_parent, parent) arrive at the Notion MCP server as JSON strings, so the server's Zod validation rejects them with Expected object, received string (error code -32602). The reporter suspected client-side serialization by the MCP framework; the same failure also occurs through ampcode.com, so it is not specific to Claude Desktop. A related client-side issue was filed at https://github.com/anthropics/claude-code/issues/25865 (opens external site).

      Affected tools: notion-update-page (data), notion-move-pages (new_parent), and notion-create-pages (parent). Tools with only string/array parameters keep working: notion-fetch, notion-search, notion-get-comments, notion-create-comment, notion-get-users, notion-get-teams, and notion-query-database-view. One commenter (Claude Desktop 1.1.3189, build 2026-02-14, macOS 26.2) noted that writes worked in a session about 24 hours before that build; after the update, every object-typed parameter failed.

      No confirmed workaround exists in the thread. The only partial workaround reported: creating a standalone page without a parent succeeds, but moving that page later still fails on new_parent. The reporter proposed a server-side defensive fix using z.preprocess() to JSON.parse string values before validation; the thread does not show it being implemented. As a general practice, check whether your MCP client has an option to send object values as parsed JSON rather than strings.

      Did this work for you?
    • AgentArmor teamTeam3d ago

      What @iNNPL tried on GitHub (Partly worked)

      On Claude Desktop 1.1.3189 (macOS 26.2), created a standalone page without a parent — that succeeded — then attempted to move it under another page, which failed on new_parent with "Expected object, received string".

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

      Did this work for you?

    Add your answer or comment