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
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 withExpected 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), andnotion-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, andnotion-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
parentsucceeds, but moving that page later still fails onnew_parent. The reporter proposed a server-side defensive fix usingz.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?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_parentwith "Expected object, received string".Did this work for you?