mcp-notion
MCP server for common Notion page workflows: search pages, inspect content, create structured pages, append rich blocks, and start documents from reusable templates.
README
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
Install
From npm after publishing:
npm install -g @mcp/notion
From source:
git clone https://github.com/ftaricano/mcp-notion.git
cd mcp-notion
npm install
npm run build
Configure Notion Auth
Create a local environment file:
cp .env.example .env
Set NOTION_TOKEN in .env or in your MCP client environment. Do not commit .env.
Internal Integration Token
- Open https://www.notion.so/my-integrations.
- 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 status
Test the token against Notion:
notion --env-file .env --timeout 10s auth test
List available MCP tools:
notion list
Search pages:
notion --env-file .env search_pages --query "Release notes" --page_size=5
Create 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.js
For 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-run
npm 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
Recommended Servers
playwright-mcp
A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.
Magic Component Platform (MCP)
An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.
Audiense Insights MCP Server
Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.
VeyraX MCP
Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.
graphlit-mcp-server
The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.
Kagi MCP Server
An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.
E2B
Using MCP to run code via e2b.
Neon Database
MCP server for interacting with Neon Management API and databases
Exa Search
A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.
Qdrant Server
This repository is an example of how to create a MCP server for Qdrant, a vector search engine.