better-notion-mcp

Markdown-first Notion MCP server with 9 composite tools, 39 actions, and ~77% token reduction via tiered docs.

Better Notion MCP

mcp-name: io.github.n24q02m/better-notion-mcp

Markdown-first Notion API server for AI agents -- 10 composite tools replacing 28+ endpoint calls

CI codecov npm Docker License: MIT

TypeScript Node.js Notion semantic-release Renovate

Better Notion MCP server

Features

  • Markdown in, Markdown out -- human-readable content instead of raw JSON blocks
  • 10 composite tools with 44 actions -- one call instead of chaining 2+ atomic endpoints
  • Auto-pagination and bulk operations -- no manual cursor handling or looping
  • Tiered token optimization -- ~77% reduction via compressed descriptions + on-demand help tool
  • Dual transport -- local stdio (token) or remote HTTP (OAuth 2.1, no token needed)

Status

2026-05-02 -- Architecture stabilization update

Past months saw significant churn around credential handling and the daemon-bridge auto-spawn pattern. This caused multi-process races, browser tab spam, and inconsistent setup UX across plugins. As of v, the architecture is stable: 2 clean modes (stdio + HTTP), no daemon-bridge layer, no auto-spawn from stdio.

Apologies for the instability period. If you encountered issues with prior versions, please update to v+ and follow the current docs/setup-manual.md -- most prior workarounds are no longer needed.

Related plugins from the same author:

All plugins share the same architecture -- install once, learn pattern transfers.

Setup

  • Stdio mode (default) -- env var creds (NOTION_TOKEN), single-user local. See setup-manual.md.
  • HTTP mode (optional, encouraged) -- multi-user, OAuth 2.1, browser-based setup. See setup-manual.md "Method 5: Self-Hosting HTTP Mode".

With AI Agent -- copy and send this to your AI agent:

Please set up @n24q02m/better-notion-mcp for me. Follow this guide: https://raw.githubusercontent.com/n24q02m/better-notion-mcp/main/docs/setup-with-agent.md

Manual Setup -- follow docs/setup-manual.md

Tools

ToolActionsDescription
pagescreate, get, get_property, update, move, archive, restore, duplicateCreate, read, update, and organize pages
databasescreate, get, query, create_page, update_page, delete_page, create_data_source, update_data_source, update_database, list_templatesDatabase CRUD and page management within databases
blocksget, children, append, update, deleteRead and manipulate block content
userslist, get, me, from_workspaceList and retrieve user information
workspaceinfo, searchWorkspace metadata and cross-workspace search
commentslist, get, createPage and block comments
content_convertmarkdown-to-blocks, blocks-to-markdownConvert between Markdown and Notion blocks
file_uploadscreate, send, complete, retrieve, listUpload files to Notion
setupstatus, start, reset, completeCredential setup via browser relay, status check, reset, re-resolve
help-Get full documentation for any tool

MCP Resources

URIDescription
notion://docs/pagesPage operations reference
notion://docs/databasesDatabase operations reference
notion://docs/blocksBlock operations reference
notion://docs/usersUser operations reference
notion://docs/workspaceWorkspace operations reference
notion://docs/commentsComment operations reference
notion://docs/content_convertContent conversion reference
notion://docs/file_uploadsFile upload reference

Configuration

VariableRequiredDefaultDescription
NOTION_TOKENYes (stdio)-Notion integration token
TRANSPORT_MODENostdioSet to http for remote mode
PUBLIC_URLYes (http)-Server's public URL for OAuth redirects
NOTION_OAUTH_CLIENT_IDYes (http)-Notion Public Integration client ID
NOTION_OAUTH_CLIENT_SECRETYes (http)-Notion Public Integration client secret
DCR_SERVER_SECRETYes (http)-HMAC secret for stateless client registration
PORTNo8080Server port

Self-Hosting (Remote Mode)

You can self-host the remote server with your own Notion OAuth app.

Prerequisites:

  1. Create a Public Integration at https://www.notion.so/my-integrations
  2. Set the redirect URI to https://your-domain.com/callback
  3. Note your client_id and client_secret
docker run -p 8080:8080 \
  -e TRANSPORT_MODE=http \
  -e PUBLIC_URL=https://your-domain.com \
  -e NOTION_OAUTH_CLIENT_ID=your-client-id \
  -e NOTION_OAUTH_CLIENT_SECRET=your-client-secret \
  -e DCR_SERVER_SECRET=$(openssl rand -hex 32) \
  n24q02m/better-notion-mcp:latest

Security

  • OAuth 2.1 + PKCE S256 -- Secure authorization with code challenge
  • Rate limiting -- 120 req/min/IP on HTTP transport
  • Session owner binding -- IP check + TTL for pending token binds
  • Null safety -- Handles Notion API quirks (comments.list 404, undefined rich_text)

Build from Source

git clone https://github.com/n24q02m/better-notion-mcp.git
cd better-notion-mcp
bun install
bun run dev

Trust Model

This plugin implements TC-NearZK (in-memory, ephemeral). See mcp-core/docs/TRUST-MODEL.md for full classification.

ModeStorageEncryptionWho can read your data?
HTTP n24q02m-hosted (default)In-memory Map<sub, OAuthToken>In-process onlyServer process (cleared on restart)
HTTP self-hostSame as hostedSameOnly you (admin = user)
stdio proxy~/.better-notion-mcp/config.jsonAES-GCM, machine-bound keyOnly your OS user (file perm 0600)

License

MIT -- See LICENSE.

Máy chủ liên quan

NotebookLM Web Importer

Nhập trang web và video YouTube vào NotebookLM chỉ với một cú nhấp. Được tin dùng bởi hơn 200.000 người dùng.

Cài đặt tiện ích Chrome