Notion
CAUTIONgrade B · trust 88/100Official Notion MCP Server
Overview
From the repository's own README, as read at the audited commit.
# Notion MCP Server> [!NOTE]>> We’ve introduced **Notion MCP**, a remote MCP server with the following improvements:>> - Easy installation via standard OAuth. No need to fiddle with JSON or API tokens anymore.> - Powerful tools tailored to AI agents, including editing pages in Markdown. These tools are designed with optimized token consumption in mind.>> Learn more and get started at [Notion MCP documentation](https://developers.notion.com/docs/mcp).>> We are prioritizing, and only providing active support for, **Notion MCP** (remote). As a result:>> - We may sunset this local MCP server repository in the future.> - Issues and pull requests here are not actively monitored.> - Please do not file issues relating to the remote MCP here; instead, contact Notion support.This project implements an [MCP server](https://spec.modelcontextprotocol.io/) for the [Notion API](https://developers.notion.com/reference/intro).---## ⚠️ Version 2.0.0 breaking changes**Version 2.0.0 migrates to the Notion API 2025-09-03** which introduces data sources as the primary abstraction for databases.### What changed**Removed tools (3):**- `post-database-query` - replaced by `query-data-source`- `update-a-database` - replaced by `update-a-data-source`- `create-a-database` - replaced by `create-a-data-source`**New tools (7):**- `query-data-source` - Query a data source (database) with filters and sorts- `retrieve-a-data-source` - Get metadata and schema for a data source- `update-a-data-source` - Update data source properties- `create-a-data-source` - Create a new data source- `list-data-source-templates` - List available templates in a data source- `move-page` - Move a page to a different parent location- `retrieve-a-database` - Get database metadata including its data source IDs**Parameter changes:**- All da
Connect
Built from this server's own package name, version and transport as found in its source — not copied from anyone's documentation, so it cannot drift against a page we do not control. Replace the environment placeholders with a token scoped to the least it needs.
claude mcp add notion-mcp-server --env AUTH_TOKEN=${AUTH_TOKEN} --env ENABLE_TOKEN_PASSTHROUGH=${ENABLE_TOKEN_PASSTHROUGH} --env NOTION_TOKEN=${NOTION_TOKEN} -- npx -y @notionhq/[email protected]{
"mcpServers": {
"notion-mcp-server": {
"command": "npx",
"args": [
"-y",
"@notionhq/[email protected]"
],
"env": {
"AUTH_TOKEN": "${AUTH_TOKEN}",
"ENABLE_TOKEN_PASSTHROUGH": "${ENABLE_TOKEN_PASSTHROUGH}",
"NOTION_TOKEN": "${NOTION_TOKEN}"
}
}
}
}Exposed tools (3) 2 read · 1 write · 0 destructive
| Tool | Risk | Description |
|---|---|---|
createAB | write | Create an A-B object |
getAB | read | Get an A-B object |
getComposed | read | Get a composed resource |
Details
- Source
- makenotion/notion-mcp-server
- npm
@notionhq/notion-mcp-server@2.5.1- Transports
- stdio · streamable-http
- Credentials it reads
AUTH_TOKENENABLE_TOKEN_PASSTHROUGHNOTION_TOKEN- License
- MIT
- Stars
- 4,632 · pushed 1d ago
Trust audit
Install with care. The audit found things worth knowing before you trust its output.
| Layer | What it checks | Result |
|---|---|---|
| L0 | Provenance & inventory | PASS |
| L1 | Static analysis of the code | WARN |
| L2 | Instruction surface (what it tells the agent) | PASS |
| L3 | Class-specific surface | PASS |
| L4 | Behavioural (sandbox) | SKIPPED |
What the source does
- Filesystem
- none-observed
- Network
- declared (1 observation(s))
- Shell
- none-observed
- Dependencies
- not all pinned
- Secrets in source
- none-found
Findings (12)
console.log(`Generated auth token written to: ${authTokenFilePath}`)console.log(`Initializing session with per-request Notion token ${redactToken(resolution.token)}`)console.log(`Authentication: Bearer token required`)
console.log(`Read your auth token from: ${authTokenFilePath}`)import { HttpClient } from '../../client/http-client'vi.mock('../../client/http-client')When using Streamable HTTP transport, the server will be available at `http://127.0.0.1:<port>/mcp` by default.
expect(getHttpServerDisplayUrl(options)).toBe('http://127.0.0.1:3000')expect(getHttpServerDisplayUrl(options)).toBe('http://127.0.0.1:8080')expect(dnsOptions.allowedOrigins).toContain('http://127.0.0.1:4321')resolve({ server, baseUrl: `http://127.0.0.1:${port}` })@modelcontextprotocol/sdk, axios, express, form-data, mustache, node-fetch, openapi-client-axios, openapi-schema-validator
Gates applied: no_behavioural_pass.
Audited 2026-09-14 · audit v0.4.0 · source sha fda23548d239 · full audit: observations/trust-audit/mcp-server/makenotion__notion-12.json · Report an issue or request a re-scan
Audit history
| Date | Source | Verdict | Grade | Score | Change |
|---|---|---|---|---|---|
| 2026-09-14 | fda23548d239 | CAUTION | B | 88 | first audit |
Also audited
Servers with a similar trust profile.
Questions
What is the Notion MCP server?
Official Notion MCP Server
What tools does Notion expose?
3 in total: 2 read-only, 1 that write, and 0 that can delete or overwrite. Every one is listed on this page with its risk.
Is Notion safe to connect to an agent?
With care. The audit graded it B (88/100) and found 12 things worth knowing before you trust this server, listed below with the exact line each was found on.
What credentials does Notion need?
It reads AUTH_TOKEN, ENABLE_TOKEN_PASSTHROUGH and NOTION_TOKEN from the environment. Give it a token scoped to the least it needs — an agent that can be talked into calling a tool can be talked into calling it with your credentials.
How does Notion run?
It speaks stdio and streamable-http, so it runs as a local process your client starts. It is published on npm as @notionhq/notion-mcp-server at 2.5.1.
How current is this page?
The grade is for one exact copy of the source (fda23548d239), read on 2026-09-14. The repository is watched and re-audited when it changes.
Provenance: OBSERVED · read 2026-09-14 · job trust-audit-2026-09-14