Notion MCP server has fundamental definition quality issues. While 13 tools are registered with proper naming (verb_noun convention) and basic parameter types, most lack adequate descriptions. Parameter descriptions are minimal (averaging 20-30 chars), which violates the 72-char baseline for production tools. Input schemas exist but are sparse, only IDs and file paths, with no constraints, enums, or validation guidance. Output schemas are completely undocumented. Error handling is generic (catch-all error messages). The server processes file paths as JSON data containers, which is a significant usability anti-pattern that complicates agent invocation. No indication of pagination, result limits, or structured output formatting. Overall, definitions would not pass code review by a principal tool engineer due to insufficient parameter guidance and missing output contracts.
Append block children
Delete a block
Retrieve a block
Retrieve block children
Update a block
All parameter descriptions are trivially short (8-30 characters). Production baseline is 72 characters. Descriptions like 'The ID of the page to retrieve' lack actionable guidance on format, constraints, or valid input ranges.
File path-based data input (create_page, update_page, create_database, update_database, append_block_children, update_block all require file_path parameter) is a usability anti-pattern. Agents must serialize data to files before calling the tool. This contradicts the 'chat-data-model' pattern which requires natural parameter passing. No description explains the JSON format expected in those files.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 13 | <=2025-11-25 | v2 |
| 2026-03-09 | F | 38 | - | v1 |
No output schemas documented anywhere. Callers cannot know what fields are returned, whether pagination is supported, or how to chain tool outputs. Violates 'response-shaper' and 'tool-chain' patterns.
No parameter constraints (enums, min/max, regex patterns) defined. E.g., 'query_database' accepts a database_id with no hints on format, length, or how to obtain valid IDs. 'search' accepts a query string with no length limits or special syntax guidance.
Tool descriptions are trivial (1-5 words). E.g., 'Retrieve a page', 'Query a database'. Production baseline is 194 characters. Descriptions lack context on when to use the tool, what it modifies, and what prerequisites are needed.
Generic error handling in server.ts (catch-all 'Error: {error.message}') provides no recovery guidance. Per 'recovery-guide' pattern, errors should specify whether the failure is retryable, user-fixable, or fatal. No actionable error messages.
Destructive tools (delete_block) lack confirmation or dry-run support. No 'confirmation-request' pattern implementation visible.
No pagination support visible. Tools like 'query_database' and 'search' have no limit, offset, or cursor parameters documented. Large result sets will blow context windows.
No tool annotations (readOnlyHint, destructiveHint) present in tool definitions. While risk classification is provided in the spec, tools are not marked with MCP annotations.