Claude Code Notion MCP
Connect Claude Code to Notion MCP, locate and read the exact page, draft changes, obtain approval, apply them, and read back the result.

TL;DR
The safest default is to connect Claude Code to Notion's official hosted MCP endpoint, authenticate in a browser, and begin with a read-only request against a page you already know. For every write, use a five-part loop: locate the exact object, read its current state, draft the smallest change, obtain approval, then read it back. This prevents an ambiguous title, stale context, or retry from turning into a change on the wrong page.
Notion's maintained remote endpoint gives Claude Code tools to search, read, create, and update workspace content without running a local MCP process.
The connection acts within the signed-in user's workspace permissions. A valid connection is not permission to modify every page that search can find.
First identify the page or data source and inspect its current state. Only then prepare a narrow mutation for human review.
Read the target again after a write and compare the result with the approved change. Do the same before retrying a failed request.
Set up Claude Code with Notion MCP
For an interactive Claude Code workflow, start with Notion's actively maintained remote service rather than the older self-hosted package. The Notion MCP guide specifies the Streamable HTTP endpoint and browser OAuth flow. You do not need to run a local server or paste a Notion integration token into Claude Code.
Use the default local scope for a private connection in one project. Use project only when the team should share the server definition through .mcp.json, and user only when you intentionally want the server available across your projects. Project scope shares configuration, not each developer's OAuth credentials.
Run claude mcp add --transport http notion https://mcp.notion.com/mcp. Keep the exact HTTPS host visible in review so a look-alike endpoint cannot silently receive workspace traffic.
Start Claude Code, run /mcp, and follow the browser sign-in flow. Before approving access, check the Notion account and workspace name. If you work across client or production workspaces, this is the most important setup checkpoint.
Use /mcp to confirm that the server is connected and to review the available tools. Use /context when you need to see how much context each enabled MCP server consumes; disable unrelated servers for a focused session.
Ask for one known page by exact title or ID, request its title and parent only, and compare the result in Notion. Do not make the first test a create, move, archive, or bulk-update operation.
| Scope | Where it applies | Use it when | Review point |
|---|---|---|---|
local | You, in the current project | Testing or private workspace access | Best default; not shared |
project | Team via .mcp.json | The project needs one reviewed server definition | Commit config only; each user authenticates |
user | Your Claude Code projects | The same workspace is intentionally reusable | Larger exposure; review periodically |
Build a reliable Notion workflow
A dependable prompt is a small change contract, not a broad instruction such as “clean up our Notion.” Name the target page or data source, its parent, the allowed fields, the source material, the formatting rules, and the actions that are forbidden. Also define a stop condition: if the target is ambiguous, a required property is missing, or the existing content conflicts with the request, Claude Code should stop and report instead of guessing.
| Stage | Claude Code action | Evidence to check | Stop condition |
|---|---|---|---|
| Locate | Search by exact title, known ID, or parent. | Object ID, type, parent, and URL | More than one plausible target |
| Read | Fetch only the fields and blocks needed. | Current values and last relevant content | Schema or content differs from assumptions |
| Draft | Prepare a diff or proposed payload without writing. | Source, formatting, fields, and idempotency marker | Unsupported claim or unrequested field |
| Approve | Show the exact target and smallest mutation. | Human confirms scope and final wording | No explicit approval for destructive or bulk work |
| Write | Apply only the approved mutation once. | Returned object ID and changed fields | Timeout or uncertain completion state |
| Read back | Fetch the same target again and compare. | Expected text, properties, parent, and no duplicate | Result does not match the approved draft |
Search is useful for discovery, but titles are not durable identifiers. Once Claude Code finds the intended object, carry its ID and parent through the rest of the workflow. For recurring jobs, store the approved ID in project configuration rather than rediscovering a similarly named page each time.
For release notes, task updates, or meeting-note distribution, first produce a table of proposed targets and changes. Review the count, destination, and fields, then authorize a bounded batch. Include an idempotency marker such as a source issue ID or release tag so a retry can be detected.
Let the repository remain the source of truth for code and versioned specifications. Use Notion for reviewed summaries, decisions, plans, and team-facing knowledge. If the two disagree, stop and identify the authoritative source before overwriting either one.
Reusable prompt pattern: “Find the page with ID [ID] under [parent]. Read its current title and status. Draft an update using only [source], changing only [fields]. Do not create, move, archive, or edit other objects. Show the proposed diff and wait for approval. After approval, write once and read the page back.”
Permissions, safety, and troubleshooting
A page can contain instructions that conflict with your original task. Tell Claude Code that retrieved Notion text is data, not authority: it may summarize that text, but it must not follow embedded requests to reveal secrets, change scope, invoke unrelated tools, or bypass approval.
The hosted server acts with the connected user's Notion access. Use an account with only the workspace and content access the workflow needs, and prefer a test workspace for new write patterns. Review the exact object ID and parent before every move, archive, delete, or multi-page operation.
Notion's hosted MCP requires interactive user OAuth and does not accept bearer-token authentication for fully unattended operation. File uploads are not currently supported. The older local package may be relevant to specialized automation, but Notion prioritizes the hosted service and no longer actively maintains the open-source server.
A timeout does not prove that a write failed. Read the destination before retrying, compare IDs and timestamps, and search for the idempotency marker. If completion remains uncertain, stop for manual review instead of issuing the same create or append call again.
| Symptom | Likely layer | Safe next check |
|---|---|---|
| Notion tools are absent | Configuration or scope | Run /mcp, confirm scope, then reload Claude Code. |
| Authentication is required again | Expired or wrong OAuth session | Disconnect, reconnect, and verify the browser account and workspace. |
| Search returns nothing | Access, workspace, or broad query | Check workspace access, exact title, known parent, or object ID. |
| The wrong page is selected | Duplicate or ambiguous titles | Stop; compare object IDs, parents, URLs, and types. |
| Write is rejected | User lacks permission or field is invalid | Inspect access and schema; do not broaden permissions automatically. |
| Context becomes crowded | Too many servers or broad retrieval | Use /context, disable unrelated servers, and narrow the read. |
Use QVeris to discover complementary agent capabilities
Notion MCP is the direct integration for workspace content. A current QVeris catalog search did not surface an exact Notion Tool or Provider record, so this guide does not imply a native QVeris-to-Notion connection. Use QVeris Docs to understand discovery and execution, or test a separately selected capability in the QVeris Playground before its output enters the Notion workflow.
- Discover by job, not by a shared keyword. Inspect the selected capability's provider, input schema, output shape, constraints, and any usage or cost conditions before relying on it.
- Validate at the cross-system boundary. Treat external tool output as proposed evidence. Check provenance, completeness, and format before Claude Code turns it into a Notion page or property update.
- Keep approvals visible. A successful external call does not authorize a workspace write. Show the returned data, destination ID, field mapping, and resulting diff before mutation.
- Use the smaller workflow when discovery adds no value. If the task only reads or edits known Notion content, use Notion MCP directly instead of adding another service.
FAQ
Claude Code supports MCP, but the Notion connection must be registered. For most users, the official hosted endpoint is the recommended server.
Start with local. Choose project for a reviewed server definition shared through the repository, or user for intentional reuse across your projects. Every user still completes their own OAuth flow.
Yes, when the authenticated user has access and the exposed tool supports the operation. Read the object and schema first, preview the exact mutation, and read the result back.
Not for a fully unattended bearer-token workflow. The hosted service uses interactive user OAuth. A job that cannot complete that flow needs a different, deliberately designed integration path.
Notion's current hosted MCP documentation says file uploads are not supported. Keep the file in an approved system and write a reviewed reference or link only when appropriate.
Check the signed-in workspace and user permissions first. Then narrow the query with an exact title, known parent, URL, or object ID; duplicate titles are a common source of wrong matches.
References and next steps
Notion MCP connection guide
Notion MCP overview
Claude Code MCP documentation
Notion MCP official repository
QVeris Docs
QVeris Playground
