[BUG] Notion MCP connector serializes JSON object parameters as strings, breaking update/move/create operations
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
- Open Claude Desktop → Cowork mode
- Connect the official Notion MCP connector
- Have at least two Notion pages shared with the integration (a parent page and a child page)
- Ask Claude: "Move page [child-page-url] under [parent-page-url]"
- Claude will call
notion-move-pageswith:
``json``
{
"page_or_database_ids": ["<child-page-id>"],
"new_parent": {"type": "page_id", "page_id": "<parent-page-id>"}
}
- Observe
Expected object, received stringerror onnew_parent - Repeat with "Update the content of [page-url]" → same error on
dataparam ofnotion-update-page - Repeat with "Create a new page under [parent-page-url]" → same error on
parentparam ofnotion-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.
This issue has 13 comments on GitHub. Read the full discussion on GitHub ↗