Notion MCP object parameters still serialized as strings in Cowork (regression of #3023)
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?
Summary
Object-typed parameters in Notion MCP tools (data, parent, new_parent) are serialized as strings instead of native JSON objects when called from Claude Cowork. This causes ZodError validation failures on every write operation that requires these parameters. The same operations succeed in Claude Projects using the direct Notion integration.
This appears to be a regression or incomplete fix of #3023, and is related to #5504. The Notion MCP Server schema issues in makenotion/notion-mcp-server#153 and #164 may also be contributing factors.
Environment
- Product: Claude Cowork (desktop app Version 1.1.3189 (1b7b58))
- Date observed: 2026-02-15
- Model: claude-opus-4-6
- MCP connector: Notion (built-in Cowork connector)
Affected Tools
| Tool | Broken Parameter | Has "type" in schema? |
|---|---|---|
| notion-update-page | data | No |
| notion-create-pages | parent | No |
| notion-move-pages | new_parent | No |
Tools with explicitly typed parameters (e.g., pages with "type": "array", page_id with "type": "string") work correctly in the same session.
Reproduction Steps
- Open Claude Cowork with the Notion MCP connector enabled
- Ask Claude to update a property on a Notion database page
- Claude calls
notion-update-pagewith the following payload wheredatais a JSON object containingpage_id,command, andproperties - MCP returns validation error:
"code": "invalid_type", "expected": "object", "received": "string"
Example payload that fails:
{
"data": {
"page_id": "3053b355b61f81d3bc55ca17de4aee0a",
"command": "update_properties",
"properties": {
"Filesystem Path": "31-camino-french-way-2026"
}
}
}
Actual Result
MCP error -32602: Invalid arguments for tool notion-update-page: [
{
"code": "invalid_type",
"expected": "object",
"received": "string",
"path": ["data"],
"message": "Expected object, received string"
}
]
Expected Result
The data parameter should be deserialized as a JSON object and the update should succeed, as it does when the same operation is performed via Claude Projects' Notion integration.
Root Cause Analysis
The parameter schemas for data, parent, and new_parent in the Notion MCP tool definitions lack an explicit "type": "object" declaration. For example:
"properties": {
"data": {
"description": "The data required for updating a page"
}
}
Compare with parameters that work correctly:
"pages": {
"description": "The pages to create.",
"items": { "type": "object", ... },
"type": "array"
}
Without the type hint, the MCP transport layer treats the JSON as a raw string instead of parsing it into a native object. This is either a double-serialization issue on the Cowork/Claude Code side, or a missing type coercion step in the MCP bridge.
Workaround
Notion read operations (search, fetch, query, get-comments) work fine in Cowork. For write operations, we generated a prompt with all the update details and ran it in a Claude Project session with the Notion integration, where all 8 updates succeeded without error.
Related Issues
- #3023 — Original report, closed July 2025 as fixed in v1.0.53
- #5504 — Generic JSON object serialization as strings in MCP tool calls
- #10606 — Strict MCP schema validation breaking working servers
- makenotion/notion-mcp-server#153 —
notion-update-pageschema validation failure - makenotion/notion-mcp-server#164 —
additionalProperties: falsein anyOf branches
What Should Happen?
The data parameter should be deserialized as a JSON object and the update should succeed, as it does when the same operation is performed via Claude Projects' Notion integration.
Error Messages/Logs
MCP error -32602: Invalid arguments for tool notion-update-page: [
{
"code": "invalid_type",
"expected": "object",
"received": "string",
"path": ["data"],
"message": "Expected object, received string"
}
]
Steps to Reproduce
Open Claude Cowork with the Notion MCP connector enabled
Ask Claude to update a property on a Notion database page
Claude calls notion-update-page with the following payload where data is a JSON object containing page_id, command, and properties
MCP returns validation error: "code": "invalid_type", "expected": "object", "received": "string"
Example payload that fails:
{
"data": {
"page_id": "3053b355b61f81d3bc55ca17de4aee0a",
"command": "update_properties",
"properties": {
"Filesystem Path": "31-camino-french-way-2026"
}
}
}
Claude Model
Opus
Is this a regression?
I don't know
Last Working Version
I don't know
Claude Code Version
Version 1.1.3189 (1b7b58)
Platform
Anthropic API
Operating System
macOS
Terminal/Shell
Terminal.app (macOS)
Additional Information
_No response_
This issue has 3 comments on GitHub. Read the full discussion on GitHub ↗