Model Context Protocol server for Notion integration - read and write pages, databases, and more
Notion MCP server has 14 tools with complete input schemas and basic descriptions. Naming follows verb_noun convention (notion_page_get, notion_database_query, etc.). However, descriptions are generic and lack LLM-optimized guidance on WHEN to use each tool vs. alternatives. Parameter descriptions exist but are minimal (avg ~40 chars vs. baseline 72). No output schemas documented. Error handling is absent, tools return raw API responses without recovery guidance. Missing tool annotations (readOnlyHint, destructiveHint) despite clear risk classifications. No pagination guidance in list-returning tools.
Append blocks to a page or another block
Delete a block
Get all child blocks of a page or block
Update an existing block
Create a new page in a Notion database
Get the schema (properties) of a Notion database
Query a Notion database with filters and sorting
No output schemas documented. LLMs cannot predict response structure, forcing them to guess at field names for downstream tool chaining. E.g., notion_page_get returns page content but structure is undocumented.
Descriptions lack LLM-optimized guidance. Generic descriptions like 'Query a Notion database with filters and sorting' do not explain WHEN to use this vs. notion_search, or what filter format is expected. Baseline is 194 chars; these average ~60 chars.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint) despite clear risk classifications. notion_page_delete and notion_block_delete are marked DESTRUCTIVE but lack annotations to guide agent caution.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 62 | 2026-07-28+ | v2 |
Update a page in a Notion database
Create a new Notion page
Delete (archive) a Notion page
Get a Notion page by ID
Update a Notion page
Search for pages and databases in Notion
Search for pages by exact or partial title match
notion_database_query accepts 'filter' as free-form object with no schema or format guidance. LLMs will hallucinate invalid Notion API filter syntax. Should document expected structure or provide enum-based filter builder.
No error handling or recovery guidance. Tools return raw API errors without actionable next steps. E.g., 'Invalid filter' tells LLM nothing; should be 'Invalid filter format. Expected: {property: string, condition: string, value: any}. Try notion_database_get_schema first.'