Summary
The hosted MCP server at https://mcp.notion.com/mcp cannot create a <synced_block_reference> block via markdown. The parser auto-converts any Notion URL it encounters in the input — including URLs inside url="..." attributes — to <mention-page> tags. For synced_block_reference, this mid-attribute rewrite breaks the surrounding tag structure.
This worked correctly as recently as ~24 hours ago. Likely server-side regression tied to the Notion Agents feature rollout (one variant returned an "Invalid agent URL" error, suggesting the parser's URL-recognition was broadened to include agent URLs but over-fires on ALL Notion URLs in attribute positions).
Reproduction
- Create a source page with a synced block via
create-pages:
<synced_block>
hello from source
</synced_block>
-
Fetch the page; capture the synced_block URL (e.g., https://www.notion.so/<PAGE_UUID>#<BLOCK_UUID>).
-
On a different page, try to write a synced_block_reference pointing at that URL via update_content:
<synced_block_reference url="https://www.notion.so/<PAGE_UUID>#<BLOCK_UUID>">
\thello from source
</synced_block_reference>
Expected behavior
A synced_block_reference block is created on the target page that mirrors the source synced_block's content, with two-way sync (per enhanced-markdown-spec).
Actual behavior
One of two failure modes, depending on whether the tag has children:
With children → API returns 400 Failed to create block. Block not created.
Empty (self-close or open-close with no body) → API succeeds, but the block is stored as escaped plain text. Fetching the target page returns:
\<synced_block_reference url="<mention-page url=\"https://www.notion.so/<PAGE_UUID>\"/>
</synced_block_reference>
The #<BLOCK_UUID> fragment is stripped (mention-page URLs don't preserve fragments). The original url="..." attribute's closing " is orphaned. The > of the injected <mention-page> tag prematurely closes the outer tag. Structure is malformed.
Variants tested (all fail the same way)
| Variant |
Result |
URL with #<block-uuid> fragment |
Fails |
| URL without fragment |
Fails |
| Dashed page/block UUIDs |
Fails |
| Dashless UUIDs |
Fails |
Inside <callout> |
Fails |
| At root level |
Fails |
| With children content |
Failed to create block |
| Self-closing / empty |
Accepted but mangled to plain text |
With notice="" attribute |
Fails |
| Workspace-prefixed URL with title slug |
Fails |
Via update_content |
Fails |
Via create-pages (inline in initial content) |
Fails |
Suspected cause
The markdown parser performs URL → <mention-page> auto-conversion globally on the input text, without checking whether the URL is in a content position vs. inside a tag's attribute string. The conversion correctly fires for content-positioned URLs (e.g., "type a URL, get a mention") but should be suppressed inside tag attributes.
One test variant returned Invalid agent URL: Failed to parse as URL: <BLOCK_UUID_HEX>. Expected a Notion page or block URL. — the "agent URL" terminology suggests the affected code path is shared with the new <mention-agent> tag handling.
Suggested fix
Skip URL auto-conversion when the parser is inside a tag's attribute string. The XML/markdown parser should distinguish attribute-position URLs (preserve literally) from content-position URLs (convert to mention).
Evidence / test artifacts
Reproduced today (2026-05-13). Test pages with the broken render captured for inspection:
- Empty synced_block_reference via update_content, mangled-text render captured.
- Empty synced_block_reference via create-pages, mangled-text render captured.
Pre-regression reference: pages where the synced_block_reference was written successfully ~24 hours earlier render correctly and continue to work for cross-page sync — the bug is only in the block CREATION parsing path, not in storage or rendering of already-created blocks.
Impact
Any markdown automation that creates synced_block_references via this MCP server (e.g., customer-support reply workflows where a draft is mirrored from a Reply card to a Support Case body) is broken. Workarounds require manual UI conversion or removing the cross-page synced reference architecture entirely.
Summary
The hosted MCP server at
https://mcp.notion.com/mcpcannot create a<synced_block_reference>block via markdown. The parser auto-converts any Notion URL it encounters in the input — including URLs insideurl="..."attributes — to<mention-page>tags. Forsynced_block_reference, this mid-attribute rewrite breaks the surrounding tag structure.This worked correctly as recently as ~24 hours ago. Likely server-side regression tied to the Notion Agents feature rollout (one variant returned an "Invalid agent URL" error, suggesting the parser's URL-recognition was broadened to include agent URLs but over-fires on ALL Notion URLs in attribute positions).
Reproduction
create-pages:Fetch the page; capture the synced_block URL (e.g.,
https://www.notion.so/<PAGE_UUID>#<BLOCK_UUID>).On a different page, try to write a synced_block_reference pointing at that URL via
update_content:Expected behavior
A
synced_block_referenceblock is created on the target page that mirrors the source synced_block's content, with two-way sync (per enhanced-markdown-spec).Actual behavior
One of two failure modes, depending on whether the tag has children:
With children → API returns
400 Failed to create block. Block not created.Empty (self-close or open-close with no body) → API succeeds, but the block is stored as escaped plain text. Fetching the target page returns:
The
#<BLOCK_UUID>fragment is stripped (mention-page URLs don't preserve fragments). The originalurl="..."attribute's closing"is orphaned. The>of the injected<mention-page>tag prematurely closes the outer tag. Structure is malformed.Variants tested (all fail the same way)
#<block-uuid>fragment<callout>Failed to create blocknotice=""attributeupdate_contentcreate-pages(inline in initial content)Suspected cause
The markdown parser performs URL →
<mention-page>auto-conversion globally on the input text, without checking whether the URL is in a content position vs. inside a tag's attribute string. The conversion correctly fires for content-positioned URLs (e.g., "type a URL, get a mention") but should be suppressed inside tag attributes.One test variant returned
Invalid agent URL: Failed to parse as URL: <BLOCK_UUID_HEX>. Expected a Notion page or block URL.— the "agent URL" terminology suggests the affected code path is shared with the new<mention-agent>tag handling.Suggested fix
Skip URL auto-conversion when the parser is inside a tag's attribute string. The XML/markdown parser should distinguish attribute-position URLs (preserve literally) from content-position URLs (convert to mention).
Evidence / test artifacts
Reproduced today (2026-05-13). Test pages with the broken render captured for inspection:
Pre-regression reference: pages where the synced_block_reference was written successfully ~24 hours earlier render correctly and continue to work for cross-page sync — the bug is only in the block CREATION parsing path, not in storage or rendering of already-created blocks.
Impact
Any markdown automation that creates synced_block_references via this MCP server (e.g., customer-support reply workflows where a draft is mirrored from a Reply card to a Support Case body) is broken. Workarounds require manual UI conversion or removing the cross-page synced reference architecture entirely.