← MCP servers · makenotion

Notion

CAUTIONgrade B · trust 88/100

Official 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.![notion-mcp-sm](https://github.com/user-attachments/assets/6c07003c-8455-4636-b298-d60ffdf46cd8)This project implements an [MCP server](https://spec.modelcontextprotocol.io/) for the [Notion API](https://developers.notion.com/reference/intro).![mcp-demo](https://github.com/user-attachments/assets/e3ff90a7-7801-48a9-b807-f7dd47f0d3d6)---## ⚠️ 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-code
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]
claude-desktop
{
  "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

ToolRiskDescription
createABwriteCreate an A-B object
getABreadGet an A-B object
getComposedreadGet 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.

LayerWhat it checksResult
L0Provenance & inventoryPASS
L1Static analysis of the codeWARN
L2Instruction surface (what it tells the agent)PASS
L3Class-specific surfacePASS
L4Behavioural (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)

MEDIUMInformation disclosure · disclose.log_secret · CWE-209, CWE-532
scripts/start-server.ts:54
console.log(`Generated auth token written to: ${authTokenFilePath}`)
MEDIUMInformation disclosure · disclose.log_secret · CWE-209, CWE-532
scripts/start-server.ts:150
console.log(`Initializing session with per-request Notion token ${redactToken(resolution.token)}`)
MEDIUMInformation disclosure · disclose.log_secret · CWE-209, CWE-532
scripts/start-server.ts:249
console.log(`Authentication: Bearer token required`)
MEDIUMInformation disclosure · disclose.log_secret · CWE-209, CWE-532
scripts/start-server.ts:251
console.log(`Read your auth token from: ${authTokenFilePath}`)
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
src/openapi-mcp-server/mcp/__tests__/proxy.test.ts:3
import { HttpClient } from '../../client/http-client'
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
src/openapi-mcp-server/mcp/__tests__/proxy.test.ts:8
vi.mock('../../client/http-client')
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
README.md:344
When using Streamable HTTP transport, the server will be available at `http://127.0.0.1:<port>/mcp` by default.
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
scripts/server-options.test.ts:19
expect(getHttpServerDisplayUrl(options)).toBe('http://127.0.0.1:3000')
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
scripts/server-options.test.ts:35
expect(getHttpServerDisplayUrl(options)).toBe('http://127.0.0.1:8080')
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
scripts/server-options.test.ts:78
expect(dnsOptions.allowedOrigins).toContain('http://127.0.0.1:4321')
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
src/openapi-mcp-server/client/__tests__/test-server.ts:25
resolve({ server, baseUrl: `http://127.0.0.1:${port}` })
LOWSupply chain · supply.unpinned · CWE-829, CWE-1357
package.json
@modelcontextprotocol/sdk, axios, express, form-data, mustache, node-fetch, openapi-client-axios, openapi-schema-validator
Why it matters. 22 dependency range(s) float
Fix. pin exact versions or ship a lockfile

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

DateSourceVerdictGradeScoreChange
2026-09-14fda23548d239CAUTIONB88first 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