Model Context Protocol (MCP) server for Notion
Server has 5 tools with complete Zod schemas and descriptions. Naming follows verb_noun convention (get_page, add_comment, create_page, append_to_page, replace_block). Descriptions are present (avg ~120 chars) but lack actionable detail on when to use each tool vs. alternatives, prerequisites, or error recovery. Parameter descriptions are minimal (e.g., 'The ID of the Notion page to retrieve' is generic). No output schema documentation visible. Error handling in handlers (appendToPage.ts) shows basic validation but no recovery guidance. No tool annotations (readOnlyHint, destructiveHint, idempotentHint) despite clear risk levels (READ_ONLY, WRITE, REVERSIBLE). Missing pagination, result limits, and chaining IDs in responses.
Add a comment to a specific block in a Notion page. The block_id can be obtained from get_page with with_block_ids=true.
Append markdown content to an existing Notion page
Create a new Notion page with supplied markdown content
Get a Notion page by ID, rendered as Markdown. Set with_block_ids to true if you want to add comments to / modify specific blocks later.
Replace a specific block with markdown content
No tool annotations despite explicit risk levels. Tools marked WRITE (add_comment, create_page, append_to_page) and REVERSIBLE (replace_block) lack destructiveHint/idempotentHint annotations. LLMs cannot distinguish safe from dangerous operations.
Descriptions lack actionable context. 'Add a comment to a specific block' does not explain when to use this vs. appending content, what happens on failure, or that block_id requires prior get_page call with with_block_ids=true. LLMs must infer dependencies.
No output schema documentation. Tool handlers return text responses (e.g., 'Content successfully appended to page {pageId}') but LLMs cannot see what fields to expect or how to chain results. No IDs returned for follow-up operations.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 56 | 2026-07-28+ | v2 |
Error handling returns generic messages without recovery guidance. appendToPage.ts throws 'Failed to append content: {error.message}' but does not tell LLM whether to retry, ask user, or try alternative tool.
Parameter descriptions are minimal and lack constraints. 'The ID of the Notion page to retrieve' does not specify format (UUID? slug?), length, or how to obtain it. LLMs cannot validate inputs before calling.