Description
Issue #3023 (closed July 2025, fixed in v1.0.53) addressed double-stringification of parent object parameters in Notion-MCP tool calls. However, the same serialization bug persists for array parameters, specifically the children parameter in API-patch-block-children.
Steps to Reproduce
- Configure
@notionhq/notion-mcp-server v2.1.0 in Claude Code (local stdio)
- Create a Notion page (via curl or any method)
- Use Claude Code to call
mcp__notion__API-patch-block-children with:
{
"block_id": "<page_id>",
"children": [
{"type": "paragraph", "paragraph": {"rich_text": [{"type": "text", "text": {"content": "Hello"}}]}}
]
}
Expected Behavior
Notion API receives children as a JSON array and creates the blocks.
Actual Behavior
Notion API receives children as a string (JSON-stringified array):
body.children should be an array, instead was "[{\"type\":\"paragraph\",...".
Environment
- Claude Code: v2.1.34
- OS: Windows 11 Pro (10.0.26200)
- @notionhq/notion-mcp-server: v2.1.0
- Notion API version: 2025-09-03
- Transport: stdio (local, not remote/web connector)
Analysis
The fix from #3023 appears to have addressed object-type parameters (like parent) but not array-type parameters (like children). The MCP transport layer still stringifies arrays before passing them to the server.
Pattern observed:
- Simple objects (
filter: {property: "object", value: "data_source"}) → WORKS
- Flat nested objects (
properties: {Status: {status: {name: "Done"}}}) → WORKS
- Deep nested objects (
parent: {database_id: "..."}) → Previously BROKEN, supposedly fixed
- Arrays of objects (
children: [{type: "paragraph", ...}]) → STILL BROKEN
Workaround
Bypass MCP and call the Notion API directly via HTTP (Python urllib.request, curl, etc.).
Related Issues
Description
Issue #3023 (closed July 2025, fixed in v1.0.53) addressed double-stringification of
parentobject parameters in Notion-MCP tool calls. However, the same serialization bug persists for array parameters, specifically thechildrenparameter inAPI-patch-block-children.Steps to Reproduce
@notionhq/notion-mcp-serverv2.1.0 in Claude Code (local stdio)mcp__notion__API-patch-block-childrenwith:{ "block_id": "<page_id>", "children": [ {"type": "paragraph", "paragraph": {"rich_text": [{"type": "text", "text": {"content": "Hello"}}]}} ] }Expected Behavior
Notion API receives
childrenas a JSON array and creates the blocks.Actual Behavior
Notion API receives
childrenas a string (JSON-stringified array):Environment
Analysis
The fix from #3023 appears to have addressed object-type parameters (like
parent) but not array-type parameters (likechildren). The MCP transport layer still stringifies arrays before passing them to the server.Pattern observed:
filter: {property: "object", value: "data_source"}) → WORKSproperties: {Status: {status: {name: "Done"}}}) → WORKSparent: {database_id: "..."}) → Previously BROKEN, supposedly fixedchildren: [{type: "paragraph", ...}]) → STILL BROKENWorkaround
Bypass MCP and call the Notion API directly via HTTP (Python
urllib.request,curl, etc.).Related Issues