Minimal MCP server for the Notion private (internal) API
Server has 11 well-named tools with consistent verb_noun patterns (get_, create_, append_, delete_, etc.). All tools have descriptions (avg 150 chars, within 10-1024 baseline). Input schemas are present and use Zod validation with type declarations. However, output schemas are NOT documented, responses are returned as JSON text without formal schema definitions. Parameter descriptions are present but minimal (avg 40 chars vs 72 baseline). Error handling returns toolError() with messages but lacks recovery guidance or error classification. No tool annotations (readOnlyHint/destructiveHint) despite clear risk levels. Missing pagination support on list-like tools. Composition is sound, tools chain well (e.g., get_page → append_blocks). Security: NOTION_TOKEN_V2 is injected server-side (correct), but no audit logging or permission gates visible.
Append simplified blocks or Markdown to a page. Inserts at the end by default; pass after_block_id to insert immediately after a specific direct child block.
Create a child page under another page from blocks or Markdown.
Remove direct child blocks from a page and archive those blocks.
Read a single Notion block through the private API.
Read direct child blocks for a page or block through the private API.
Read a Notion page through the Notion private API.
Output schemas not documented. Tools return JSON text via textResult() but no formal schema definition exists for response structure. LLMs cannot plan downstream calls or extract fields reliably.
Tool annotations missing. Tools marked WRITE, DESTRUCTIVE, READ_ONLY in metadata but no readOnlyHint/destructiveHint/idempotentHint in schema. Agents cannot infer safety/retry semantics.
Error handling lacks recovery guidance. toolError() returns raw error messages without actionable next steps or error classification (retryable vs user-fixable vs fatal).
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 60 | 2025-06-18+ | v2 |
Return the catalog of supported block types, inline annotations (bold/italic/code/link/color/mention), Markdown-to-Notion mapping and block format hints used by this MCP server. Call this before composing complex pages to know what styles you can produce.
Convert Markdown into the simplified block JSON format.
Replace direct child blocks of a page with blocks or Markdown.
Create a new page or replace an existing page from a local Markdown file.
Replace the plain text content of a block (e.g. code block). Inline markdown is NOT parsed — text is stored verbatim.
No pagination support. get_block_children and get_style_documentation could return large result sets but lack limit/offset/cursor parameters and total count in response.
Parameter descriptions are minimal (avg 40 chars vs 72 baseline). E.g., 'Block id or block URL' lacks format hints, constraints, or examples of valid input.