Skip to content

Single-resource Notion handlers swallow vendor error envelopes during normalization #1664

Description

@alex-kluren
  1. 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.

  1. 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

  1. 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,).

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions