MCP server for interacting with Notion API, providing tools to retrieve and manipulate pages, blocks, and search functionality
Server has 5 tools with complete input schemas and descriptions, but quality is uneven. Tool naming lacks action verbs (e.g., 'notion-retrieve-block' appears twice with different purposes, creating ambiguity). Descriptions are present but generic, most lack context on WHEN to use the tool or what it returns. Parameter descriptions are adequate but lack format constraints (e.g., blockId format stated in description but not as regex/pattern). No output schemas documented. Error handling absent, no guidance on retryability or recovery. Security: credentials injected server-side (good), but no audit logging visible. Composition: tools are single-purpose but lack chaining hints (e.g., search returns results but doesn't indicate if IDs are compatible with retrieve calls).
Append new children blocks to a specified parent block in Notion. Requires insert content capabilities. You can optionally specify the 'after' parameter to append after a certain block.
Retrieve the children of a block from Notion
Retrieve a block from Notion
Retrieve a page from Notion
Search pages or databases by title in Notion
Duplicate tool name 'notion-retrieve-block' for two different operations (retrieve single block vs retrieve block children). LLMs cannot disambiguate; will select wrong tool.
Tool names lack action verbs. 'notion-retrieve-block' is passive; should be 'get-block' or 'fetch-block'. Naming convention should be verb_noun (get_block, list_blocks, create_block).
No output schemas documented. Tools return JSON.stringify(response) but LLMs cannot plan downstream calls without knowing field names, types, and structure. E.g., does search return 'results' or 'items'? Does it include pagination cursors?
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 41 | 2026-07-28+ | v2 |
No error handling or recovery guidance. If a blockId is invalid or a page is not found, the tool returns raw API errors. LLMs receive no actionable guidance on retry, alternatives, or next steps.
Parameter descriptions state format (e.g., '32-character string formatted as 8-4-4-4-12 with hyphens') but do not enforce via regex or pattern constraint. LLMs may pass invalid IDs; validation happens at API call time, wasting a round-trip.