Install notion-mcp-server from npm
Install exact version 3.0.0. No verified executable entrypoint is available, so use the package documentation to launch it.
npm install --save-exact notion-mcp-server@3.0.0Notion MCP Server is a MCP server implementation that enables AI assistants to interact with Notion's API
Detailed security scan evidence is not public for this MCP yet. Public identity, registry metadata, and independently observed protocol inventory remain available.
Installation and connection instructions are shown only when supported by retained package, repository, or endpoint evidence.
Install exact version 3.0.0. No verified executable entrypoint is available, so use the package documentation to launch it.
npm install --save-exact notion-mcp-server@3.0.0| Canonical slug | notion-mcp-server-6039341c | Deployment | Hybrid |
|---|---|---|---|
| Canonical package | npm:notion-mcp-server | Repository | awkoy/notion-mcp-server |
| First published | — | Latest release | — |
| Last security verification | — | Classification confidence | 82% |
| Publication | Draft | Official distribution | Not verified |
| Channel | Identifier | Current version | Versions | Source |
|---|---|---|---|---|
| npm | notion-mcp-server | 3.0.0 | 21 | Repository |
| Package | Version | Published / observed | Inventory | Security scan |
|---|---|---|---|---|
| npmnotion-mcp-server | 3.0.0Current | Sep 5, 2026 | 3 toolsSucceeded · 1 resources · 4 prompts | Evidence restricted |
Independently scan the exact version your agents use, receive alerts when its risk changes, and investigate every finding with retained version evidence.
No public current-version evidence is available yet.
| Tool | Category | Annotations | Risk |
|---|---|---|---|
notion_describeReturn 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.Input schema{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"operation": {
"type": "string",
"description": "Operation name to describe, as listed by notion_read / notion_write."
}
},
"required": [
"operation"
]
}Annotations{
"title": "Notion Describe",
"readOnlyHint": true,
"destructiveHint": false,
"openWorldHint": false
} | — | Read onlyNon-destructiveClosed world | — |
notion_readRun 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).Input schema{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"operation": {
"type": "string",
"enum": [
"query_database",
"list_data_sources",
"get_data_source",
"list_data_source_templates",
"get_view",
"list_views",
"query_view",
"list_comments",
"get_comment",
"list_users",
"get_user",
"get_bot_user",
"get_self",
"list_file_uploads",
"get_file_upload",
"get_file_url",
"get_image",
"search_pages",
"get_page",
"get_page_markdown",
"get_block",
"get_block_children"
],
"description": "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."
},
"payload": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {},
"description": "Operation parameters. Pass either single-op fields directly, or { items: [...], atomic?, idempotency_key?, concurrency? } for batch."
}
},
"required": [
"operation",
"payload"
]
}Annotations{
"title": "Notion Read",
"readOnlyHint": true,
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": true
} | — | Read onlyNon-destructiveIdempotentOpen world | — |
notion_writeRun 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).Input schema{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"operation": {
"type": "string",
"enum": [
"create_database",
"update_database",
"delete_database",
"update_data_source",
"delete_data_source",
"create_view",
"update_view",
"delete_view",
"add_page_comment",
"add_discussion_comment",
"update_comment",
"delete_comment",
"upload_file",
"create_page",
"set_page_title",
"set_page_property",
"set_page_properties",
"archive_page",
"trash_page",
"restore_page",
"move_page",
"update_page_markdown",
"append_blocks",
"update_block",
"delete_block",
"batch_mixed_blocks"
],
"description": "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."
},
"payload": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {},
"description": "Operation parameters. Pass either single-op fields directly, or { items: [...], atomic?, idempotency_key?, concurrency? } for batch."
}
},
"required": [
"operation",
"payload"
]
}Annotations{
"title": "Notion Write",
"readOnlyHint": false,
"destructiveHint": true,
"openWorldHint": true
} | — | WritesDestructiveOpen world | — |
notion://operationsMarkdown table of every supported operation, batchability, and one-line description.
notion://database/{dataSourceId}Read a Notion data source's schema by id — notion://database/<data_source_id>.
notion://page/{pageId}Read any Notion page as markdown by id — notion://page/<page_id>.
create_taskCreate a new task page in Notion with optional status and due date.
daily_logAppend a timestamped paragraph to a daily-log page in Notion.
find_pagesSearch Notion and show the top 5 matching pages.
weekly_reviewSummarize tasks marked Done in the last 7 days from a Notion database.
| Endpoint | Transport | Authentication | Health | Observed |
|---|---|---|---|---|
| No verified remote endpoint is linked. | ||||
Install the selected package version with: npm install --save-exact notion-mcp-server@3.0.0
notion-mcp-server MCP Server exposed 3 tools during independent protocol observation, including notion_describe, notion_read, notion_write.
The selected current version does not yet have completed public verification. Unknown does not mean clean or vulnerable.
Curated product and capability guides containing this catalog record.