Notion MCP object parameters still serialized as strings in Cowork (regression of #3023)

Resolved 💬 3 comments Opened Feb 16, 2026 by tjscudder Closed Feb 19, 2026

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

  1. Open Claude Cowork with the Notion MCP connector enabled
  2. Ask Claude to update a property on a Notion database page
  3. Claude calls notion-update-page with the following payload where data is a JSON object containing page_id, command, and properties
  4. 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-page schema validation failure
  • makenotion/notion-mcp-server#164 — additionalProperties: false in 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_

View original on GitHub ↗

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