- Summary
When a Notion API call against a single resource (i.e. notion_get_page) endpoint fails (404/401/403), the structured error envelope produced by tools/base.py::handle_notion_error is silently stripped during the per-tool normalize_* pass in mcp_servers/notion/server.py.
The MCP client receives {} instead of the error envelope, which is ambiguous downstream.
- Reprocue
Notion's API itself returns a clean structured 404:
$ curl -s -H "Authorization: Bearer $TOKEN" -H "Notion-Version: 2022-06-28" https://api.notion.com/v1/pages/00000000-0000-0000-0000-000000000000
{"object":"error","status":404,"code":"object_not_found",
"message":"Could not find page with ID: 00000000-0000-0000-0000-000000000000...",
"request_id":"030c87fe-6e55-4d74-81e7-1a64ecd1f5b5"}
Through Klavis's ghcr.io/klavis-ai/notion-mcp-server:latest via StreamableHTTP / x-auth-data header auth:
notion_get_page(page_id="00000000-0000-0000-0000-000000000000")
returns {}
Tested 2026-05-30 against mcp==1.27.0, the current :latest image, Notion API version 2022-06-28
- Note on other providers
We only verified this empirically against Notion, but it's highly likely that the issue will reproduce with additional providers since a code read shows that additional providers have normalize_* layers (google_calendar, google_docs, linear, mem0, notion, onedrive, outlook,).
When a Notion API call against a single resource (i.e. notion_get_page) endpoint fails (404/401/403), the structured error envelope produced by tools/base.py::handle_notion_error is silently stripped during the per-tool normalize_* pass in mcp_servers/notion/server.py.
The MCP client receives {} instead of the error envelope, which is ambiguous downstream.
Notion's API itself returns a clean structured 404:
$ curl -s -H "Authorization: Bearer $TOKEN" -H "Notion-Version: 2022-06-28" https://api.notion.com/v1/pages/00000000-0000-0000-0000-000000000000
{"object":"error","status":404,"code":"object_not_found",
"message":"Could not find page with ID: 00000000-0000-0000-0000-000000000000...",
"request_id":"030c87fe-6e55-4d74-81e7-1a64ecd1f5b5"}
Through Klavis's ghcr.io/klavis-ai/notion-mcp-server:latest via StreamableHTTP / x-auth-data header auth:
notion_get_page(page_id="00000000-0000-0000-0000-000000000000")
returns {}
Tested 2026-05-30 against mcp==1.27.0, the current :latest image, Notion API version 2022-06-28
We only verified this empirically against Notion, but it's highly likely that the issue will reproduce with additional providers since a code read shows that additional providers have normalize_* layers (google_calendar, google_docs, linear, mem0, notion, onedrive, outlook,).