Powerful MCP server for Notion - read, create, search, and manage pages and databases through Claude
Server has 27 tools with consistent naming (verb_noun pattern) and descriptions present for all. However, parameter descriptions are minimal or missing for many tools. Input schemas are visible but lack detail: most parameters have type and description, but enums are absent where they should exist (e.g., filter_type, sort_order, privacy, status). Output schemas are not documented. Error handling is basic, no recovery guidance or actionable error messages visible in code. Tool composition is reasonable (single responsibility mostly observed), but some tools conflate concerns (e.g., daily_journal auto-detects journal page, quick_note requires env var). Descriptions average ~80 chars, below the 194-char baseline for A+ tools. No tool annotations (readOnlyHint, destructiveHint) despite clear risk levels assigned.
Add a comment to a Notion page.
Add a new row to a database.
Quick-add a task to your Tasks database (auto-detected). Date format: 'YYYY-MM-DD'
Append markdown content to an existing page.
Archive (soft-delete) a Notion page.
Add multiple rows to a database at once.
Verify Notion integration is working.
No output schemas documented. LLMs cannot predict response structure or plan downstream tool calls. Every tool lacks documented return types.
Enum constraints missing for constrained parameters. filter_type, sort_order, privacy, status, priority should declare allowed values as enums, not free-form strings. LLMs will hallucinate invalid values.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint). Risk levels are assigned (READ_ONLY, WRITE, DESTRUCTIVE) but not exposed in tool metadata. Clients cannot infer safety properties.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 56 | 2026-07-28+ | v2 |
Mark a task as complete by name or ID.
Create a new Notion page with markdown content.
Add a timestamped entry to today's journal. Auto-finds a page with 'journal' in the title.
Delete a single block from a page.
Duplicate a page (creates a copy with same content).
Get all children blocks of a block (page or container).
Get all comments on a page.
Get the schema (columns/properties) of a database. Use this BEFORE adding/updating rows to know property names and types.
Read a Notion page's full content as markdown.
Get recently edited pages.
Get all tasks due today or overdue.
Get a dashboard view of your AI/ML learning progress. Shows topics by status, category, priority, and average progress.
List all Notion databases accessible to the integration.
Query a database with filters and sorting. Filter examples: {"Status": "Learning"}, {"Priority": "🔥 Critical", "Category": "ML"}, {"Progress": {"greater_than": 50}}
Save a quick note to your default parent page. Requires DEFAULT_PARENT_PAGE_ID in .env.
Restore an archived page.
Search Notion for pages and databases by keyword.
Update a single block's text content (for edits).
Update properties of an existing database row.
Rename a Notion page.
Error handling lacks recovery guidance. No visible error messages that tell LLMs what to do next (retry, ask user, call alternative tool). Stack traces or bare error codes provide no actionable guidance.
Implicit dependencies on environment variables (DEFAULT_PARENT_PAGE_ID for quick_note, auto-detection of 'journal' page for daily_journal). These reduce composability and force LLMs to guess at preconditions.