QVeris
MCP & TOOL CALLING

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.

Published: April 5, 2026 · By the QVeris Team
Document, chat and cloud-file icons linked to an assistant, access controls and document outputs.
Documents, chat and cloud files feed a central assistant in this illustration; lock, eye and approval icons mark access and review points.

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.

Use the hosted server

Notion's maintained remote endpoint gives Claude Code tools to search, read, create, and update workspace content without running a local MCP process.

OAuth defines the boundary

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.

Separate reads from writes

First identify the page or data source and inspect its current state. Only then prepare a narrow mutation for human review.

Verify every mutation

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.

1. Choose the configuration scope

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.

2. Register the official endpoint

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.

3. Complete OAuth in the intended workspace

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.

4. Inspect tools and context cost

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.

5. Run a read-only smoke test

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.

ScopeWhere it appliesUse it whenReview point
localYou, in the current projectTesting or private workspace accessBest default; not shared
projectTeam via .mcp.jsonThe project needs one reviewed server definitionCommit config only; each user authenticates
userYour Claude Code projectsThe same workspace is intentionally reusableLarger 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.

StageClaude Code actionEvidence to checkStop condition
LocateSearch by exact title, known ID, or parent.Object ID, type, parent, and URLMore than one plausible target
ReadFetch only the fields and blocks needed.Current values and last relevant contentSchema or content differs from assumptions
DraftPrepare a diff or proposed payload without writing.Source, formatting, fields, and idempotency markerUnsupported claim or unrequested field
ApproveShow the exact target and smallest mutation.Human confirms scope and final wordingNo explicit approval for destructive or bulk work
WriteApply only the approved mutation once.Returned object ID and changed fieldsTimeout or uncertain completion state
Read backFetch the same target again and compare.Expected text, properties, parent, and no duplicateResult does not match the approved draft
Use IDs when names can collide

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.

Dry-run batches before execution

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.

Keep system ownership clear

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

Treat workspace content as untrusted input

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.

Apply least privilege at the account level

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.

Know the hosted service boundaries

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.

Make retries idempotent

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.

SymptomLikely layerSafe next check
Notion tools are absentConfiguration or scopeRun /mcp, confirm scope, then reload Claude Code.
Authentication is required againExpired or wrong OAuth sessionDisconnect, reconnect, and verify the browser account and workspace.
Search returns nothingAccess, workspace, or broad queryCheck workspace access, exact title, known parent, or object ID.
The wrong page is selectedDuplicate or ambiguous titlesStop; compare object IDs, parents, URLs, and types.
Write is rejectedUser lacks permission or field is invalidInspect access and schema; do not broaden permissions automatically.
Context becomes crowdedToo many servers or broad retrievalUse /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

Does Claude Code include Notion MCP?

Claude Code supports MCP, but the Notion connection must be registered. For most users, the official hosted endpoint is the recommended server.

Which MCP scope should I choose?

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.

Can Claude Code update pages and data sources?

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.

Can hosted Notion MCP run headlessly?

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.

Can it upload files to Notion?

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.

Why can it not find a page?

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