mcp-notion
Provides tools for searching, creating, and updating Notion pages, including rich content blocks and templates.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@mcp-notionsearch pages for 'Q4 roadmap'"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
MCP Notion Server
Status: beta
MCP server + human CLI for common Notion page workflows: search pages, inspect content, create structured pages, append rich blocks, and start documents from reusable templates.
Requirements
Node.js 18+
A Notion token with access to the target pages
A Notion page shared with the integration when you want to create or update content
Related MCP server: Notion MCP Server
Install
From npm after publishing:
npm install -g @mcp/notionFrom source:
git clone https://github.com/ftaricano/mcp-notion.git
cd mcp-notion
npm install
npm run buildConfigure Notion Auth
Create a local environment file:
cp .env.example .envSet NOTION_TOKEN in .env or in your MCP client environment. Do not commit .env.
Internal Integration Token
Create an internal integration.
Copy the integration secret into
NOTION_TOKEN.Share the target Notion pages with that integration.
OAuth Token
Notion OAuth apps can also provide an access token. This package does not run the OAuth browser authorization flow; pass the OAuth access token as NOTION_TOKEN after your OAuth app obtains it.
Use the smallest workspace/page access needed. If a token leaks, revoke or rotate it in Notion and remove it from local env files, shell profiles, CI secrets, and MCP client configs.
Quickstart
Check local config without calling Notion:
notion --env-file .env auth statusTest the token against Notion:
notion --env-file .env --timeout 10s auth testList available MCP tools:
notion listSearch pages:
notion --env-file .env search_pages --query "Release notes" --page_size=5Create a page under a parent page:
notion --env-file .env create_page \
--parent_page_id=11111111-1111-1111-1111-111111111111 \
--title="Weekly Notes" \
--content="Draft agenda"Create a formatted page from JSON:
notion --env-file .env create_rich_page --json '{
"parent_page_id": "11111111-1111-1111-1111-111111111111",
"title": "Project Overview",
"blocks": [
{ "type": "heading_1", "content": "Overview" },
{ "type": "paragraph", "content": "Current scope and next steps." },
{ "type": "to_do", "content": "Confirm milestones", "checked": false }
]
}'MCP Client Setup
Use the built server entrypoint with any stdio MCP client:
{
"mcpServers": {
"notion": {
"command": "node",
"args": ["/absolute/path/to/mcp-notion/dist/index.js"],
"env": {
"NOTION_TOKEN": "your-token-from-a-secret-store",
"VALIDATE_TOKEN": "true",
"MAX_REQUESTS_PER_MINUTE": "60"
}
}
}
}For local source checkouts, build before connecting:
npm run build
node dist/index.jsFor installed npm packages, point your client at the mcp-notion binary when your runtime can resolve global npm bins.
CLI Reference
notion list
notion schema <tool>
notion auth status
notion auth test
notion <tool> --key=value [--other=value]
notion <tool> --json '{"key":"value"}'Global options:
--env-file <path>loads environment variables before running.--timeout <value>accepts values such as5000or10s.--compactprints JSON output on one line where supported.
Available MCP Tools
Core page operations:
search_pagesget_pageget_page_contentcreate_pageupdate_page
Rich content and templates:
create_rich_pagecreate_page_from_templateadd_content_blocks(appendonly)list_templatescreate_root_page
create_root_page requires NOTION_ROOT_PARENT_PAGE_ID or MCP_NOTION_ROOT_PARENT_PAGE_ID.
Runtime Guardrails
Environment variables:
NOTION_TOKEN- required for live Notion calls.VALIDATE_TOKEN=false- skips startup token validation for offline/local smoke tests.MAX_REQUESTS_PER_MINUTE=60- controls in-process request throttling.ENABLE_AUDIT_LOG=false- disables local operation audit logging.ALLOWED_PAGE_IDS=id1,id2- restricts operations to an allowlist.BLOCKED_PAGE_IDS=id3,id4- denies specific pages.NOTION_ROOT_PARENT_PAGE_ID=<page-id>- enablescreate_root_page.MCP_NOTION_ROOT_PARENT_PAGE_ID=<page-id>- compatibility alias for the same root parent.
Notion page IDs may use UUIDs with or without hyphens.
Templates
meeting_notesproject_plandocumentationarticleweekly_reportbug_report
Development
npm install
npm run build
npm run lint
npm run type-check
npm test
npm run pack:dry-runnpm run test:unit runs fast unit coverage. npm run test:integration verifies package metadata, security docs, and the npm pack file list.
Security
See SECURITY.md. The short version:
keep real tokens out of git,
use Notion workspace/page permissions to limit access,
use
ALLOWED_PAGE_IDSandBLOCKED_PAGE_IDSfor runtime blast-radius control,report vulnerabilities through GitHub Security Advisories.
MCP Hub Usage
If you use this server behind MCP Hub, see CLAUDE.md for hub-specific calling patterns and Portuguese examples.
License
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/ftaricano/mcp-notion'
If you have feedback or need assistance with the MCP directory API, please join our Discord server