[BUG] Notion MCP connector serializes JSON object parameters as strings, breaking update/move/create operations

Open 💬 13 comments Opened Feb 15, 2026 by lubaibv

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?

When using the official Notion MCP connector in Cowork mode, all tool calls that require a JSON object parameter fail because the MCP framework serializes the object into a JSON string before passing it to the tool.

Three tools are affected:

| Tool | Broken Parameter | Expected Type |
|------|-----------------|---------------|
| notion-update-page | data | object |
| notion-move-pages | new_parent | object |
| notion-create-pages | parent | object |

The parameter value {"type": "page_id", "page_id": "abc123"} arrives at the Notion MCP server as the string "{\"type\": \"page_id\", \"page_id\": \"abc123\"}" — causing Zod validation to reject it.

This makes it impossible to update page content, move pages, or create pages under a parent. The only working write path is notion-create-pages without a parent parameter (which creates orphan pages at workspace root), requiring users to manually drag pages into position in Notion afterward.

Tools with string-typed parameters (notion-fetch, notion-search, notion-create-pages without parent) work fine — suggesting the framework JSON.stringify()'s all parameter values regardless of whether the tool schema expects a string or object.

What Should Happen?

Object parameters should be passed as actual JSON objects to the MCP tool, preserving their type. Tools like notion-move-pages, notion-update-page, and notion-create-pages (with parent) should work as documented.

Error Messages/Logs

**notion-move-pages:**

MCP error -32602: Invalid arguments for tool notion-move-pages: [
  {
    "code": "invalid_union",
    "unionErrors": [
      {
        "issues": [
          {
            "code": "invalid_type",
            "expected": "object",
            "received": "string",
            "path": ["new_parent"],
            "message": "Expected object, received string"
          }
        ],
        "name": "ZodError"
      }
    ],
    "path": ["new_parent"],
    "message": "Invalid input"
  }
]


**notion-update-page:**

MCP error -32602: Invalid arguments for tool notion-update-page: [
  {
    "code": "invalid_type",
    "expected": "object",
    "received": "string",
    "path": ["data"],
    "message": "Expected object, received string"
  }
]


**notion-create-pages (with parent):**

MCP error -32602: Invalid arguments for tool notion-create-pages: [
  {
    "code": "invalid_type",
    "expected": "object",
    "received": "string",
    "path": ["parent"],
    "message": "Expected object, received string"
  }
]

Steps to Reproduce

  1. Open Claude Desktop → Cowork mode
  2. Connect the official Notion MCP connector
  3. Have at least two Notion pages shared with the integration (a parent page and a child page)
  4. Ask Claude: "Move page [child-page-url] under [parent-page-url]"
  5. Claude will call notion-move-pages with:

``json
{
"page_or_database_ids": ["<child-page-id>"],
"new_parent": {"type": "page_id", "page_id": "<parent-page-id>"}
}
``

  1. Observe Expected object, received string error on new_parent
  2. Repeat with "Update the content of [page-url]" → same error on data param of notion-update-page
  3. Repeat with "Create a new page under [parent-page-url]" → same error on parent param of notion-create-pages

Environment:

  • Platform: Claude Desktop (Cowork mode)
  • OS: macOS
  • Notion MCP connector ID: mcp__2a4c8006-4047-4496-8cd4-0d762c457ab2
  • Date: February 15, 2026

Claude Model

Opus

Is this a regression?

Yes, this worked in a previous version

Last Working Version

Working as of February 13, 2026. Broke by February 15, 2026. Exact version unknown — Claude Desktop / Cowork mode auto-updates.

Claude Code Version

Claude Desktop (Cowork mode) — version unknown, auto-updated between Feb 13–15, 2026

Platform

Other

Operating System

macOS

Terminal/Shell

Terminal.app (macOS)

Additional Information

Bug occurs in Cowork mode (not Claude Code CLI). The Notion MCP connector is the official hosted connector (ID: mcp__2a4c8006-4047-4496-8cd4-0d762c457ab2), not a self-hosted notion-mcp-server. The Terminal/Shell field is not applicable — this is entirely within the Cowork UI, no terminal involved.

View original on GitHub ↗

This issue has 13 comments on GitHub. Read the full discussion on GitHub ↗