MCP server + human CLI for common Notion page workflows, including rich pages and reusable templates.
Server has 10 tools with complete input schemas and descriptions. Naming follows verb_noun convention (search_pages, get_page, create_page, etc.). Descriptions are present but brief (avg ~50 chars, below the 194-char baseline). Schemas are well-structured with proper types and enums for block types. However, output schemas are not documented, LLMs cannot predict response structure. Error handling exists but lacks recovery guidance. Security validation is implemented (notionIdSchema, safeTitleSchema) but not exposed in descriptions. No tool annotations (readOnlyHint/destructiveHint) despite clear read/write distinction.
Add formatted content blocks to an existing Notion page
Create a new Notion page (basic - use create_rich_page for better formatting)
Create a page using a built-in template
Create a formatted Notion page with rich content blocks
Create a page under a configured root parent
Get basic information about a Notion page
Output schemas not documented. LLMs cannot predict response structure for any tool, forcing them to guess what fields are returned and breaking downstream tool chaining.
Tool descriptions are too brief (avg ~50 chars vs 194-char baseline). Descriptions like 'Get basic information about a Notion page' lack context for when to use this tool vs get_page_content, and do not explain what 'basic information' includes.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint). Tools are marked READ_ONLY or WRITE in metadata but not in the tool definition itself, so LLMs cannot see which tools are safe to retry.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 60 | 2026-07-28+ | v2 |
Get the content/blocks of a Notion page
List all available page templates with descriptions
Search for Notion pages by title
Update a Notion page title
Error handling lacks recovery guidance. ErrorLogger and NotionMCPError exist but error responses do not tell LLMs what to do next (e.g., 'Try search_pages() first' or 'Retry with a different page_id').
Parameter descriptions lack format/constraint details. 'page_id' is described as 'Notion page ID' but does not specify format (UUID, alphanumeric, length). LLMs cannot validate input before calling.