Grouping operations under an action parameter means the tool list stays short while the coverage stays wide, and the help tool hands back the full documentation for the one tool being used instead of loading all of it every turn. The Markdown conversion is the other practical piece: models write Markdown, Notion stores blocks, and this translates in both directions rather than making you build block JSON by hand.
A Notion server built around composite tools: each one takes an action parameter covering a family of operations, so a page create-with-content is a single call rather than a chain.
- Pages created, read, updated and archived, covering both standalone pages and database rows, with title, content and properties set in the same call
- Databases handled end to end: schema creation, querying, and bulk row operations
- Block-level editing inside a page — read a block, walk its children, and modify content in place
- Markdown in both directions, converting Markdown to Notion blocks and Notion blocks back to Markdown
- Workspace search with the workspace's own name, plan and bot user, and user lookup across the workspace
- Comments on a page listed, read and created
- File uploads, including multi-part for larger files
- Compressed tool descriptions with a help tool that returns the full documentation on demand, which keeps the always-loaded definitions small
- Two transports: local stdio with an integration token, or a remote HTTP deployment gated by OAuth 2.1 where users never paste a token
A Notion integration token from notion.so/my-integrations, set as NOTION_TOKEN, and the pages or databases shared with that integration. Published on npm as @n24q02m/better-notion-mcp and run with npx on Node.js 24 or newer, with a Docker image as an alternative. Deployed in HTTP mode instead, it is a remote endpoint using OAuth 2.1 and per-user access tokens, with a Cloudflare deployment path documented.
One command plus a key — npx --yes @n24q02m/better-notion-mcp@latest, then supply credentials
