notion-mcp-server
Notion MCP サーバー
Notion MCP Serverは、 AIアシスタントがNotionのAPIと連携できるようにするModel Context Protocol(MCP)サーバー実装です。本番環境で利用可能なこのサーバーは、自然言語によるインタラクションを通じてNotionコンテンツを読み取り、作成、変更するためのツールとエンドポイントを完備しています。
🚧活発な開発:データベースサポートが利用可能になりました!コメントとユーザー管理ツールが追加されました。このプロジェクトが役に立ったと感じたら、ぜひスターを付けてください。この作業がコミュニティにとって価値のあるものであると認識し、さらなる開発のモチベーションを高めるのに役立ちます。
📑 目次
Related MCP server: Notion MCP Server
🚀 はじめにと統合
セットアッププロセス
Notion APIキーを取得する
Notion Developersで統合を作成する
APIキーをコピーする
ページの統合を有効にする
Notionで既存のページを選択するか、新しいページを作成します
右上隅の「…」メニューをクリックします
「接続」へ移動
リストから統合を見つけて有効にします

統合方法を選択する
ご希望のMCPクライアントに応じて、以下の統合オプションのいずれかを選択してください。
AIアシスタントにNotionと対話してもらう
「今日のタスクを記載した新しいページを作成する」
「Notionで会議メモを更新する」
「会議メモページに箇条書きを追加する」
「プロジェクトを追跡するための新しいデータベースを作成する」
「タスクデータベースに新しいエントリを追加する」
「プロジェクトページにコメントを追加する」
「このドキュメントのすべてのコメントを表示」
「ワークスペース内のすべてのユーザーを一覧表示する」
「特定のユーザーに関する情報を取得する」
カーソル統合
方法1: mcp.jsonを使用する
プロジェクト ディレクトリに
.cursor/mcp.jsonファイルを作成または編集します。
{
"mcpServers": {
"notion-mcp-server": {
"command": "env NOTION_TOKEN=YOUR_KEY NOTION_PAGE_ID=YOUR_PAGE_ID npx",
"args": ["-y", "notion-mcp-server"]
}
}
}YOUR_KEYとYOUR_PAGE_IDを実際の Notion API キーとページ ID に置き換えます。変更を適用するにはカーソルを再起動してください
方法2: 手動モード
カーソルを開いて設定へ移動します
「MCP」または「モデルコンテキストプロトコル」セクションに移動します
「サーバーを追加」または同等のボタンをクリック
適切なフィールドに次のコマンドを入力します。
env NOTION_TOKEN=YOUR_KEY NOTION_PAGE_ID=YOUR_PAGE_ID npx -y notion-mcp-serverYOUR_KEYとYOUR_PAGE_IDを実際の Notion API キーとページ ID に置き換えます。設定を保存し、必要に応じてカーソルを再起動します。
クロードデスクトップ統合
構成ディレクトリに
mcp.jsonファイルを作成または編集します。
{
"mcpServers": {
"notion-mcp-server": {
"command": "npx",
"args": ["-y", "notion-mcp-server"],
"env": {
"NOTION_TOKEN": "YOUR_KEY",
"NOTION_PAGE_ID": "YOUR_PAGE_ID"
}
}
}
}YOUR_KEYとYOUR_PAGE_IDを実際の Notion API キーとページ ID に置き換えます。変更を適用するには、Claude Desktopを再起動してください。
🌟 特徴
📝 Notion との統合- Notion のデータベース、ページ、ブロックと連携
🔌 ユニバーサル MCP 互換性- Cursor、Claude Desktop、Cline、Zed を含むすべての MCP クライアントで動作します
🔍 データ取得- Notionのページ、ブロック、データベースから情報を取得します
✏️ コンテンツ作成- Notionのページとブロックを作成および更新します
📊 ブロック管理- Notionページ内でブロックを追加、更新、削除します
💾 データベース操作- データベースの作成、クエリ、更新
🔄 バッチ操作- 1回のリクエストで複数の操作を実行する
🗑️ アーカイブと復元- Notion ページをアーカイブおよび復元します
🔎 検索機能- Notionのページやデータベースをタイトルで検索
💬 コメント管理- ページやディスカッションへのコメントを取得、作成、返信する
👥 ユーザー管理- ワークスペースのユーザーとユーザー情報を取得する
📚 ドキュメント
利用可能なツール
サーバーは、Notion と対話するための次の統合ツールを提供します。
notion_pages
以下の内容を含むページ操作のための包括的なツール:
指定されたコンテンツで新しいページを作成する
ページのプロパティを更新しています
ページをアーカイブする(ゴミ箱に移動)
以前アーカイブしたページの復元
タイトルでページを検索する
操作例:
{
"payload": {
"action": "create_page", // One of: "create_page", "archive_page", "restore_page", "search_pages", "update_page_properties"
"params": {
// Parameters specific to the chosen action
}
}
}notion_blocks
以下を含むブロック操作用の完全なツールキット:
ブロックコンテンツの取得
子ブロックの取得
親に新しいブロックを追加する
既存のブロックの更新
ブロックの削除
バッチ操作(追加、更新、削除、混合)の実行
操作例:
{
"payload": {
"action": "append_block_children", // One of: "append_block_children", "retrieve_block", "retrieve_block_children", "update_block", "delete_block", "batch_append_block_children", "batch_update_blocks", "batch_delete_blocks", "batch_mixed_operations"
"params": {
// Parameters specific to the chosen action
}
}
}notion_database
以下の内容を含むデータベースインタラクションのための強力なツール:
カスタムプロパティを使用して新しいデータベースを作成する
フィルターと並べ替えを使用してデータベースをクエリする
データベース構造とプロパティの更新
操作例:
{
"payload": {
"action": "create_database", // One of: "create_database", "query_database", "update_database"
"params": {
// Parameters specific to the chosen action
}
}
}notion_comments
Notion コンテンツへのコメントを管理するためのツール:
ページとブロックからコメントを取得する
ページに新しいコメントを追加する
既存のディスカッションに返信する
操作例:
{
"payload": {
"action": "get_comments", // One of: "get_comments", "add_page_comment", "add_discussion_comment"
"params": {
// Parameters specific to the chosen action
}
}
}notion_users
ユーザー情報にアクセスするためのツール:
すべてのワークスペースユーザーを一覧表示する
特定のユーザーの詳細を取得する
現在のボットユーザーに関する情報を取得しています
操作例:
{
"payload": {
"action": "list_users", // One of: "list_users", "get_user", "get_bot_user"
"params": {
// Parameters specific to the chosen action
}
}
}利用可能なリソース
サーバーは現在、リソースを公開しておらず、ツールベースの操作に重点を置いています。
🛠 開発
リポジトリのクローンを作成する
git clone https://github.com/awkoy/notion-mcp-server.git cd notion-mcp-server依存関係をインストールする
npm install環境変数を設定する
次の内容で
.envファイルを作成します。NOTION_TOKEN=your_notion_api_key NOTION_PAGE_ID=your_notion_page_id
プロジェクトを構築する
npm run buildインスペクターを実行する
npm run inspector
🔧 技術的な詳細
TypeScript と MCP SDK (バージョン 1.7.0+) を使用して構築
公式のNotion APIクライアント(@notionhq/client v2.3.0+)を使用します
モデルコンテキストプロトコル仕様に準拠
Notionページ、ブロック、データベースのCRUD操作用のツールを実装します
パフォーマンスの最適化のための効率的なバッチ操作をサポート
Zodスキーマで入力/出力を検証します
❓ トラブルシューティング
よくある問題
認証エラー: Notionトークンに適切な権限があり、ページ/データベースの統合が有効になっていることを確認してください。
ページアクセスの問題: アクセスしようとしているページに統合が追加されていることを確認してください
レート制限: Notion API にはレート制限があります。バッチ操作を使用してリクエストを最適化してください。
ヘルプの取得
GitHubリポジトリに問題を作成する
Notion APIドキュメントを確認する
サポートについては、MCP コミュニティ チャネルをご覧ください。
🤝 貢献する
貢献を歓迎します!お気軽にプルリクエストを送信してください。
リポジトリをフォークする
機能ブランチを作成します(
git checkout -b feature/amazing-feature)変更をコミットします (
git commit -m 'Add some amazing feature')ブランチにプッシュする (
git push origin feature/amazing-feature)プルリクエストを開く
📄 ライセンス
このプロジェクトは MIT ライセンスに基づいてライセンスされています - 詳細については LICENSE ファイルを参照してください。
Available Tools
3 toolsnotion_describeNotion DescribeARead-only
Return the JSON Schema and a working example for one operation, plus which tool runs it (notion_read or notion_write). Use this BEFORE calling the operation when the payload shape is non-trivial (query filters, structured block trees, database property definitions). For simple ops, just call it — errors carry the schema.
| Name | Required | Description | Default |
|---|---|---|---|
| operation | Yes | Operation name to describe, as listed by notion_read / notion_write. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false. The description adds meaningful behavioral context: the tool returns both a schema and a working example, determines which sibling tool executes the operation, and that errors carry the schema, making the describe call skippable for simple operations. This goes beyond the structured annotations without contradicting them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no filler. The primary return value is stated first, followed by precise usage conditions and an explicit exclusion case. Every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a lightweight describe tool with one parameter, clear annotations, and no output schema, the description fully covers what the agent needs: what it returns, when to call it, and when to skip it. The mention of notion_read/notion_write links it to its siblings adequately.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the single parameter 'operation' is well-documented in the schema. The description adds only marginal semantic value by clarifying that the operation name is 'as listed by notion_read / notion_write', which is useful but largely redundant with the schema description. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb ('Return') and resource ('JSON Schema and a working example for one operation, plus which tool runs it'). It clearly distinguishes this meta-tool from the sibling tools notion_read and notion_write by stating it describes operations rather than performing them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use it ('BEFORE calling the operation when the payload shape is non-trivial'), gives concrete examples of such cases, and explains when it is unnecessary ('For simple ops, just call it'). This is decisive routing guidance with no ambiguity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
notion_readNotion ReadARead-onlyIdempotent
Run one Notion read operation by name. Nothing is modified.
Call: { operation, payload } — payload carries that operation's fields. Common: search_pages { query }, get_page { page_id }, get_page_markdown { page_id }, query_database { database_id, where? }, get_block_children { block_id }.
Responses are slimmed; pass verbose:true in payload for the raw Notion object. Every id field (page_id, block_id, database_id, view_id, …) also accepts a Notion URL, as copied from Share → Copy link. A block link's #fragment is used for block_id fields and a database link's ?v= for view_id fields.
If the payload is malformed, the error response includes the schema + a working example so you can correct and retry in one round-trip. Call notion_describe(operation) ahead of time only for complex shapes (query_database filters).
| Name | Required | Description | Default |
|---|---|---|---|
| payload | Yes | Operation parameters. Pass either single-op fields directly, or { items: [...], atomic?, idempotency_key?, concurrency? } for batch. | |
| operation | Yes | The read operation to run. This list is the complete menu of read operations enabled on this server; notion_describe(operation) returns any operation's full schema. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only, idempotent, and non-destructive behavior; the description adds valuable behavioral details: responses are slimmed, verbose:true returns raw Notion objects, id fields accept Notion URLs with fragment/v parameters, and malformed payloads return a schema plus working example for one-round-trip retry.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core purpose, then the call shape, common operations, and edge-case behavior. Every sentence contributes actionable detail; no fluff or repetition of schema contents.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a multi-operation read dispatcher with many enum values and no output schema, the description covers operation selection, payload examples, response verbosity, URL input flexibility, error recovery, and when to consult notion_describe. An agent has everything needed to call and recover from errors.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Although schema coverage is 100%, the description enriches parameter meaning substantially: it shows the { operation, payload } dispatch shape, gives per-operation example payloads, explains the verbose flag, and clarifies URL flexibility for every id field. This goes well beyond enum/property names in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific action and scope: 'Run one Notion read operation by name.' Immediately clarifies that 'Nothing is modified,' and lists common operations, making it distinguishable from notion_describe (which only returns schemas) and notion_write (which modifies).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit routing guidance: 'Call notion_describe(operation) ahead of time only for complex shapes (query_database filters).' It also explains the call shape and provides concrete examples for common operations, so the agent knows how to select and invoke this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
notion_writeNotion WriteADestructive
Run one Notion write operation by name. Archive, trash and delete operations remove content — confirm with the user before running them.
Two ways to call: • Single: { operation: "set_page_title", payload: { page_id, title } } • Batch: { operation: "set_page_title", payload: { items: [{page_id, title}, ...], atomic?: false, idempotency_key?: "...", concurrency?: 3 } } create_page, append_blocks, update_block and update_page_markdown also take a markdown string.
Responses are slimmed; pass verbose:true inside payload (single) or per item (batch) for the raw Notion object. Every id field (page_id, block_id, database_id, view_id, …) also accepts a Notion URL, as copied from Share → Copy link.
If the payload is malformed, the error response includes the schema + a working example so you can correct and retry in one round-trip. Call notion_describe(operation) ahead of time only for complex shapes (block trees, database property definitions, batch_mixed_blocks).
| Name | Required | Description | Default |
|---|---|---|---|
| payload | Yes | Operation parameters. Pass either single-op fields directly, or { items: [...], atomic?, idempotency_key?, concurrency? } for batch. | |
| operation | Yes | The write operation to run. This list is the complete menu of write operations enabled on this server; notion_describe(operation) returns any operation's full schema. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Despite annotations already flagging destructive behavior, the description goes further by naming exactly which operations (archive, trash, delete) remove content and instructing the agent to confirm with the user. It also discloses response slimming, the verbose:true escape hatch, URL acceptance for IDs, and the error-recovery behavior. This adds significant value beyond the annotations and never contradicts them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact for the complexity it covers, front-loading the core purpose and destructive warning. It uses bullet-like formatting for the call modes and keeps each sentence informative. It is a bit dense—three paragraphs of dense detail—but there is no filler or repetition; it earns its length.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 26 operations, batch support, and no output schema, the description covers every critical aspect an agent needs: the destructive actions, call syntax, response slimming, URL handling, error feedback, and when to consult notion_describe. Nothing essential is missing; it even handles the malformed-payload case to keep the agent on track.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema is minimal—payload is just an object with propertyNames and additionalProperties, so it conveys almost nothing about the actual shape. The description fills that void by explaining the single vs. batch call modes, the batch-specific fields (items, atomic, idempotency_key, concurrency), and the per-operation markdown strings. It also documents the verbose:true parameter and URL flexibility, all of which the schema omits.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a precise verb and resource: 'Run one Notion write operation by name.' It immediately distinguishes itself from the sibling tools (notion_read, notion_describe) by framing itself as the write dispatcher, and the long operation enum makes the scope unmistakable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit guidance on when to call notion_describe for complex shapes and warns which operations are destructive, requiring user confirmation. However, it never explicitly contrasts with notion_read for reads, so the when-not-to-use instruction is only implied by the tool name rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
4 tool updates
v3.0.1- Changed
notion_describe2 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Input schema / properties / operation / descriptionPrevious value: -"Operation name to describe."New value: +"Operation name to describe, as listed by notion_read / notion_write."
- Removed
notion_execute - Added
notion_read - Added
notion_write
15 tool updates
v1.0.1- Removed
append_block_children - Removed
archive_page - Removed
batch_append_block_children - Removed
batch_delete_blocks - Removed
batch_mixed_operations - Removed
batch_update_blocks - Removed
create_page - Removed
delete_block - Added
notion_describe - Added
notion_execute - Removed
restore_page - Removed
retrieve_block - Removed
retrieve_block_children - Removed
search_pages - Removed
update_block
13 tool updates
v1.0.0- First observed
append_block_children - First observed
archive_page - First observed
batch_append_block_children - First observed
batch_delete_blocks - First observed
batch_mixed_operations - First observed
batch_update_blocks - First observed
create_page - First observed
delete_block - First observed
restore_page - First observed
retrieve_block - First observed
retrieve_block_children - First observed
search_pages - First observed
update_block
TDQS
Scored across 3 tools
notion_read, notion_describe, and notion_write have clearly separated intents: execute a read, fetch schema guidance, or execute a write. There is no overlap between tool purposes, and the payload-level operations are cleanly scoped by tool.
All tool names follow the same notion_ prefix with a single lowercase verb: read, describe, and write. The naming pattern is uniform, predictable, and easy for an agent to reason about.
Three tools is well-scoped for a dispatcher-style server because each tool covers a broad category of Notion operations. The count is not too thin, and each tool earns its place in the set.
The read/write tools cover core Notion workflows including search, page retrieval, database queries, block children, page creation, block appending, updates, and delete/archive operations. The main gap is that the full set of supported operation names is not explicitly enumerated, relying on describe/errors for discovery.
Maintenance
Related MCP Connectors
An MCP server that integrates with Discord to provide AI-powered features.
- ZapierOAuthcom.zapier
Hosted MCP server connecting AI assistants to 9,000+ apps and 40,000+ actions via Zapier.
MCP server connecting AI agents to 100+ apps (Gmail, Slack, Notion, GitHub) via one-click OAuth.
MCP server for AI dialogue using various LLM models via AceDataCloud
Related MCP Servers
- AlicenseAqualityDmaintenanceA high-performance MCP server that integrates Notion into AI workflows, enabling interaction with Notion pages, databases, and comments through a standardized protocol.875 npm27Apache 2.0

Notion MCP Serverofficial
AlicenseBqualityCmaintenanceAn MCP server that enables AI assistants to interact with the Notion API, allowing them to search, read, comment on, and create content in Notion workspaces through natural language commands.19193,560 npm4,649MIT- -licenseNot gradedqualityNot gradedmaintenanceAn MCP server that enables natural language interaction with the Notion API, allowing users to search, comment, create pages, and access content within their Notion workspace.193,560 npm-
- AlicenseAqualityCmaintenanceAn MCP server for Notion API with optimized token efficiency and full database property filtering, enabling AI assistants to manage pages, databases, and blocks.3221 npm1MIT