Markdown-first MCP server that connects AI agents to Notion.
Easy Notion MCP
Markdown-first MCP server that connects AI agents to Notion. Agents write markdown — easy-notion-mcp converts it to Notion's block API and back again.
26 tools · 25 block types · 92% fewer tokens vs official Notion MCP · Full round-trip fidelity
npx easy-notion-mcp
See it in action → Live Notion page created and managed entirely through easy-notion-mcp.

Contents: Comparison · Setup · Why markdown · How it works · Tools · Block types · Round-trip · Databases · Config · Security · FAQ
How does easy-notion-mcp compare to other Notion MCP servers?
| Feature | easy-notion-mcp | Official Notion MCP (npm) | better-notion-mcp |
|---|---|---|---|
| Content format | ✅ Standard GFM markdown | ❌ Raw Notion API JSON | ⚠️ Markdown (limited block types) |
| Block types | ✅ 25 (toggles, columns, callouts, equations, embeds, tables, file uploads, task lists) | ⚠️ All (as raw JSON) | ⚠️ ~7 (headings, paragraphs, lists, code, quotes, dividers) |
| Round-trip fidelity | ✅ Full — read markdown, modify, write back | ❌ Raw JSON requires block reconstruction | ⚠️ Unsupported blocks silently dropped |
| Tools | 26 individually-named tools | 18 auto-generated from OpenAPI | 9 composite tools (39 actions) |
| File uploads | ✅ file:///path in markdown |
❌ Open feature request | ✅ 5-step lifecycle |
| Prompt injection defense | ✅ Content notice prefix + URL sanitization | ❌ | ❌ |
| Database entry format | Simple {"Status": "Done"} key-value pairs |
Simplified key-value pairs | Simplified key-value pairs |
| Auth options | API token or OAuth | API token or OAuth | API token or OAuth |
How many tokens does easy-notion-mcp save?
| Operation | easy-notion-mcp | better-notion-mcp | Official Notion MCP | Savings vs Official |
|---|---|---|---|---|
| Page read | 291 tokens | ⚠️ 236 tokens | 6,536 tokens | 95.5% |
| DB query (5 rows) | 347 tokens | 704 tokens | 2,983 tokens | 88.4% |
| Search (3 results) | 298 tokens | 347 tokens | 1,824 tokens | 83.7% |
⚠️ better-notion-mcp page reads appear smaller because they silently drop 11 block types (callouts, toggles, tables, task lists, equations, bookmarks, embeds). On equal content coverage, easy-notion-mcp is more efficient.
Measured by running all three MCP servers against the same Notion content and counting tokens with tiktoken cl100k_base. Raw responses saved for verification.
How do I set up easy-notion-mcp?
With OAuth (recommended)
Run the HTTP server, then connect with any MCP client. OAuth handles authentication — no token to copy-paste.
Start the server:
npx easy-notion-mcp-http
Requires NOTION_OAUTH_CLIENT_ID and NOTION_OAUTH_CLIENT_SECRET env vars. See OAuth setup below.
Claude Code:
claude mcp add notion --transport http http://localhost:3333/mcp
OpenClaw:
openclaw config set mcpServers.notion.transport "http"
openclaw config set mcpServers.notion.url "http://localhost:3333/mcp"
Claude Desktop:
Go to Settings → Connectors → Add custom connector, enter http://localhost:3333/mcp.
Your browser will open to Notion's authorization page. Pick the pages to share, click Allow, done.
With API token
Create a Notion integration, copy the token, share your pages with it.
Claude Code:
claude mcp add notion -- npx -y easy-notion-mcp
Set the env var: export NOTION_TOKEN=ntn_your_integration_token
OpenClaw:
openclaw config set mcpServers.notion.command "npx"
openclaw config set mcpServers.notion.args '["easy-notion-mcp"]'
Set the env var: export NOTION_TOKEN=ntn_your_integration_token
Claude Desktop / Cursor / Windsurf — add to your MCP config file:
{
"mcpServers": {
"notion": {
"command": "npx",
"args": ["-y", "easy-notion-mcp"],
"env": {
"NOTION_TOKEN": "ntn_your_integration_token"
}
}
}
}
Config file locations: Cl
Tools (3)
read_pageReads a Notion page and returns its content as markdown.write_pageWrites markdown content to a Notion page.query_databaseQueries a Notion database and returns results.Environment Variables
NOTION_TOKENThe integration token for Notion API access.NOTION_OAUTH_CLIENT_IDClient ID for OAuth authentication.NOTION_OAUTH_CLIENT_SECRETClient secret for OAuth authentication.Configuration
{"mcpServers": {"notion": {"command": "npx", "args": ["-y", "easy-notion-mcp"], "env": {"NOTION_TOKEN": "ntn_your_integration_token"}}}}