# Notion MCP connector

Notion brings 95 AI tools to Elaichi, covering pages, databases, comments and users. Connect the workspace once, then Claude, ChatGPT, Cursor or any MCP client reaches only the pages each person is already allowed to open.

Source: https://elaichi.ai/connectors/notion/

## Facts

| | |
| --- | --- |
| Application | Notion |
| Category | Knowledge Management |
| AI tools | 95 |
| Authentication | OAuth or API key |
| Needs your own OAuth app | No |
| MCP endpoint | https://api.elaichi.ai/mcp |
| Works with | Claude, ChatGPT, Cursor, any MCP client, and the Elaichi Agent |
| Tools advertised by name | No. 95 tools is past the 30-tool threshold, so clients use `search_tools` and `execute_tool` |

## What you can ask once Notion is connected

- Summarize comments added to the product spec page this week.
- List Notion pages in the roadmap database missing an owner.
- Create a meeting notes page in the team database.

## Connect Notion in Elaichi

This happens once for the organization, before any client is involved.

1. Open Connections, choose Add connection, and pick Notion.
2. Optionally set Share with, then press Connect.
3. Approve it in Notion. Notion's own window opens. Whoever approves it decides what this connection can reach.

Credentials are vaulted and nobody, including the AI, reads them back. The connection becomes a toolbox immediately, so you can curate which Notion tools are exposed, rename them, or freeze arguments before anyone points a client at it.

## Connect Notion to Claude

Endpoint: https://api.elaichi.ai/mcp

1. Open Customize, then Connectors.
2. Press Add.
3. Name it, paste the MCP server URL, then Continue.
4. Sign in and approve.

On Team and Enterprise, an Owner adds it once. Everyone else turns it on for themselves.

## Connect Notion to ChatGPT

Endpoint: https://api.elaichi.ai/mcp

1. Open Plugins, then press the + button.
2. Name it and paste the endpoint into Server URL.
3. Leave Authentication on OAuth, then tick the risk acknowledgement.
4. Press Create, then sign in and approve.

Works on the web today. The plugin directory lives at chatgpt.com/plugins.

## Connect Notion to Cursor

Endpoint: https://api.elaichi.ai/mcp

1. Open `~/.cursor/mcp.json`.
2. Add the endpoint under `mcpServers`.
3. Reload Cursor, then sign in and approve.

Set up per machine, so repeat it on each computer you work from.

## Connect Notion to any MCP client

Endpoint: https://api.elaichi.ai/mcp

1. Add the endpoint as a remote MCP server.
2. Sign in and approve.

The Elaichi Agent already has these tools, with nothing to set up.

## What the consent screen decides

Only Read is granted by default, which is not enough to call a Notion tool. Over MCP there is no trusted place to confirm a write in the moment, so the consent screen is the standing approval rather than a formality. Grant Read and Run tools. Think hard before granting Delete, which reaches into connected apps and cannot be undone.

## What teams do with Notion through Elaichi

### Answer wiki questions without opening Notion

Engineering. Ask which specs changed this week, or what a design doc concluded, and the answer comes back with the page it came from. Reading is all this needs, so the agent doing it cannot change a thing.

### Find the gaps in a roadmap

Product. Ask which roadmap entries have no owner, or which shipped last month with nothing written up. The Monday morning scan somebody used to do by hand, answered in a sentence.

### Draft into the right place, every time

Marketing. Ask for a meeting note or a campaign brief and it lands in the team's own database. You can fix the destination in advance, so nothing arrives in the wrong corner of the workspace.

### Catch up on a thread before a review

Support. Comments are where decisions actually get made and where nobody reads back. Ask for the argument so far in a paragraph, without granting anything that can write.

### Give each team its own corner

People Ops. One Notion connection, a different set of tools per team. Engineering reaches the engineering wiki, People Ops the handbook, and nobody browses into a corner that was never theirs.

### Keep legal holds in Legal's hands

Legal. Notion's legal hold controls sit in the same list as the content calendar and look like ordinary admin. Keep them available to Legal and unavailable to everybody else.

## Frequently asked questions

### How do I connect Notion to Claude?

Two steps. In Elaichi, add Notion and sign in to your Notion workspace, choosing which pages and databases to share on Notion's own consent screen. Then in Claude open Customize, then Connectors, press Add, and paste https://api.elaichi.ai/mcp as the MCP server URL. There is no client ID or secret to generate, and you only do the Claude half once, however many apps you add later.

### Does Notion work with ChatGPT and Cursor as well as Claude?

Yes. The same endpoint, https://api.elaichi.ai/mcp, works in Claude, ChatGPT, Cursor, any other MCP client, and the Elaichi Agent. You connect Notion once in Elaichi and it shows up in whichever client each person prefers, so nobody re-does the setup per tool.

### What can an AI agent actually do with my Notion?

Find and read pages, draft new ones, update page properties, work through database rows, and read or write comments. In practice people ask it to write up a meeting, keep a project database current, or pull together what a handful of scattered pages say. It works on the pages you share, using your own Notion access.

### Does connecting Notion give the AI my whole workspace?

No. Notion's own consent screen decides this: you pick the pages and databases the connection can see, and everything you do not pick stays invisible. Inside Elaichi you can narrow it further, down to specific people or specific actions, and anything you block is never offered to the AI in the first place.

### Can my team share one Notion connection?

Yes, and that is the usual setup. One person connects Notion and shares it with a team, so nobody else re-authorizes and nobody handles a Notion token. Each teammate still signs in to Elaichi as themselves, so who did what stays visible in the audit log.

### Can I let people read Notion without letting the AI change anything?

Yes. Restrictions work per action, so you can allow the Notion read tools and block create, update and delete for a person, a team or a role. A blocked tool is never advertised to Claude or ChatGPT, so no prompt can talk the model into using it.

### What happens to a Notion connection when someone leaves?

Offboard them in Elaichi and their access stops immediately, including anything they had connected through a client. A shared Notion connection keeps working for everyone else. To remove Notion entirely, disconnect it once in Elaichi; nobody has to go tidy their own Claude or ChatGPT settings.

## All 95 Notion tools

Every tool below is callable through https://api.elaichi.ai/mcp once Notion is connected, subject to the toolbox it is in and the restrictions on the caller.

- **List all Notion users** (List). List all users in Notion workspace. Returns user objects including id, type, name, email (for person type), and avatar_url. 
- **Get single Notion user by ID** (Get). Get information about a specific user in Notion by user_id. Returns user id, type, email, name, and avatar_url.
- **Create a Notion legal hold user** (Create). Add users to a Notion legal hold. Returns the updated legal hold object including id, status, and users (ids, total). Required: legal_hold_id, user_ids.
- **Delete a Notion legal hold user by ID** (Delete). Remove a user from a Notion legal hold. Returns the updated legal hold object including id, status, and remaining users. Required: legal_hold_id, id.
- **List all Notion databases** (List). List databases by title in Notion. Requires 'query' parameter to match database titles. Returns fields including id, created_time, last_edited_time, archived status, and properties for each database.
- **Get single Notion database by ID** (Get). Get information about a specific database in Notion by database id. Returns database object including id, created_time, last_edited_time, icon, cover, url, title, and description fields.
- **Update a Notion database by ID** (Update). Update a database in Notion. Requires id. Updates the title, description, or schema properties of a specific database. Returns fields such as id, title, description, parent, is_inline, created_time, last_edited_time, and url in the response.
- **Create a Notion database** (Create). Create a new database in Notion under a specified parent page or workspace. Returns the created database object including id, object, title, parent, url, created_time, last_edited_time, and properties. Required: parent. The title and description arrays accept up to 100 rich text items each; is_inline defaults to false.
- **List all Notion pages** (List). Returns a list of pages in Notion that match the query. Each result includes page-specific fields such as id, created_time, last_edited_time, created_by, last_edited_by, cover, icon, parent, archived, properties, and url
- **Get single Notion page by ID** (Get). Get information about a specific page in Notion using id. Returns page properties including created_time, last_edited_time, created_by, last_edited_by, cover, icon, parent, archived, and properties. Note: properties with more than 25 references may be incomplete.
- **Create a Notion page** (Create). Create a new page with properties and optional content as a child of an existing page or database in Notion. Returns the created page object including id, created_time, last_edited_time, cover, icon, parent, archived status, and properties.
- **Update a Notion page by ID** (Update). Update properties, icon, cover, or trash status of a page in Notion by page id. Returns updated page object including id, created_time, last_edited_time, cover, icon, parent, archived, and properties.
- **Delete a Notion page by ID** (Delete). Archives (soft deletes) a Notion page by setting the archived field to true. This does not permanently delete the page—it's moved to the trash. To restore, set archived to false via the Update Page endpoint. Use page_id to specify which page to archive.
- **List all Notion comments** (List). Get a list of un-resolved comments for a specific block or page in Notion. Requires block_id. Returns comment id, parent page_id, discussion_id, created_time, last_edited_time, created_by user id, and rich_text content.
- **Create a Notion comment** (Create). Create a comment in a Notion page or existing discussion thread. Returns: object, id, parent, discussion_id, created_time, last_edited_time, created_by, rich_text. Required: rich_text, plus either `parent` (to start a new page/block discussion) or `discussion_id` (to reply in an existing thread).
- **Delete a Notion comment by ID** (Delete). Delete a Notion comment by id. Returns the deleted comment object including its id, parent, created_time, last_edited_time, created_by, and rich_text. Required: id.
- **Get single Notion comment by ID** (Get). Retrieve a comment. Required: id.
- **Update a Notion comment by ID** (Update). Update the content of a Notion comment by id. The request body accepts either a rich_text array or a markdown string (mutually exclusive). Returns the updated comment object including object, id, parent, rich_text, created_time, and last_edited_time. Required: id, and either rich_text or markdown.
- **Get single Notion pages property by ID** (Get). Get a property item for a given page id and property_id in Notion. Returns property_item objects including type and value details. Use for properties with more than 25 references to get complete lists.
- **List all Notion block children** (List). Get child blocks of a block by id in Notion. Returns an array of block objects including id, parent, created_time, last_edited_time, created_by, last_edited_by, has_children, archived, type, and block content details.
- **Create a Notion block child** (Create). Append new children blocks to a parent block in Notion. Requires id. Returns results array with block objects including id, parent, created_time, last_edited_time, created_by, last_edited_by, has_children, archived, type, and content fields.
- **Update a Notion block child by ID** (Update). Update a block by id in Notion. Returns the updated block object including id, parent page_id, created_time, last_edited_time, created_by and last_edited_by user ids, has_children, archived status, type, and content fields.
- **Delete a Notion block child by ID** (Delete). Delete a block by setting its archived property to true in Notion. Requires id. Returns the block object with fields id, parent, created_time, last_edited_time, created_by, last_edited_by, has_children, archived, type, and paragraph.
- **List all Notion search** (List). Search pages or databases by query text in Notion. Returns id, created_time, last_edited_time, created_by, last_edited_by, cover, icon, parent, archived, properties, and url fields. Use filter to limit to page or database objects.
- **List all Notion query database** (List). Query pages and databases in Notion database with database_id. Returns filtered and sorted pages/databases. Response includes fields like id, created_time, last_edited_time, created_by, last_edited_by, cover, icon, and parent.
- **List all Notion me** (List). Get the bot user associated with the API token in Notion. Returns user id, name, avatar_url, type, and owner details including owner's id, name, and email.
- **Notion me self** (Action). Get the Notion bot user associated with the current token. Returns: object, id, name, avatar_url, type, bot.owner. No required parameters.
- **Notion files download** (Download). Use this endpoint to download files from a Notion page property (such as files or media)
- **Get single Notion block by ID** (Get). Retrieve a block in Notion using id. Returns object type, parent, created_time, last_edited_time, created_by, last_edited_by, has_children, archived, and content type details for the block.
- **Create a Notion export** (Create). Enqueue a Notion workspace export job (admin API, base URL https://api.notion.com/admin). Returns: export_job_id and status for tracking the export via async_tasks.get. Required: export_type, on_behalf_of_user_email, and space_id (space_id is sent as part of the URL path).
- **Create a Notion legal hold export** (Create). Export a Notion legal hold. Returns: legal_hold_export_id. Required: legal_hold_id and requesting_user_id, plus either legal_hold_export_id (to re-export an existing export) or space_id (to start a new export).
- **List all Notion legal holds** (List). List Notion legal holds. Returns an array of holds each including id, status, name, start_date, user_interaction_type, users, and workspaces. Optionally filter by user_id.
- **Get single Notion legal hold by ID** (Get). Get a single Notion legal hold by id. Returns the full hold object including id, status, name, start_date, user_interaction_type, users, workspaces, created_by, and created_time. Required: id.
- **Create a Notion legal hold** (Create). Create a Notion legal hold. Returns the created hold including id, status, created_by, start_date, users, and workspaces. Required: name, start_date, user_ids, user_interaction_type.
- **Update a Notion legal hold by ID** (Update). Update a Notion legal hold's name, description, or icon by id. Returns the updated hold object including id, status, name, start_date, users, and workspaces. Required: id.
- **List all Notion workspaces** (List). List workspaces on a Notion legal hold. Returns an array of workspace_ids associated with the specified legal hold. Required: legal_hold_id.
- **Create a Notion release** (Create). Release a Notion legal hold, transitioning its status to 'released'. Returns the updated legal hold object including id, status, user_interaction_type, users, and workspaces. Required: legal_hold_id.
- **Create a Notion managed users revoke session** (Create). Revoke all active sessions for a Notion managed user. Returns status: "revoked" on success. Required: user (identify by email using type "email", or by user id using type "id").
- **Create a Notion data source query** (Create). Query a Notion data source (database) using filters and sorts. Returns the matching database entries with content-type-specific fields. Required: data_source_id.
- **List all Notion data source templates** (List). List templates in a Notion data source. Returns each template's id, name, and is_default. Required: data_source_id.
- **Create a Notion data source** (Create). Create a new Notion data source (database). Returns the data source object including object, id, title, description, parent, database_parent, is_inline, in_trash, created_time, last_edited_time, created_by, last_edited_by, properties, icon, cover, url, and public_url. Required: parent, properties.
- **Get single Notion data source by ID** (Get). Get metadata and schema for a Notion data source by id. Returns the data source object including object, id, title, description, parent, database_parent, is_inline, in_trash, created_time, last_edited_time, created_by, last_edited_by, properties, icon, cover, url, and public_url. Required: id.
- **Update a Notion data source by ID** (Update). Update a Notion data source's properties. Returns the data source object including object, id, title, description, parent, database_parent, is_inline, in_trash, created_time, last_edited_time, created_by, last_edited_by, properties, icon, cover, url, and public_url. Required: id.
- **List all Notion page markdowns** (List). Get a Notion page rendered as enhanced Markdown. Returns: object, id, markdown, truncated, unknown_block_ids. Required: page_id.
- **Notion page markdowns bulk update** (Update). Update a Notion page's content using enhanced Markdown. Returns the updated page markdown object including id, markdown, truncated, and unknown_block_ids. Required: page_id, type. The matching operation object for the chosen type must also be supplied; insert_content and replace_content_range are deprecated.
- **Create a Notion page move** (Create). Move a Notion page to a different parent location. Returns an empty 200 response on success. Required: page_id, parent.
- **Notion admin agents bulk delete** (Delete). Delete a custom agent in a Notion space. The personal agent (Notion AI) is not supported. Returns an empty 204 response on success. Required: space_id, agent_id.
- **Notion admin agents get credit usage** (Get). Get premium AI credit usage for a single custom agent in a Notion space. Returns: id, status, type, code, message. Required: space_id, agent_id.
- **Notion admin agents get permissions** (Get). Get the sharing permissions for a custom agent in a Notion space. Returns: permissions, next_cursor, code, status, message. Required: space_id, agent_id.
- **List all Notion admin agents** (List). List custom and database (autofill) agents in a Notion space with optional filters. Returns: id, code, status, message. Required: space_id.
- **Notion admin agents list credit usage** (List). List premium AI credit usage for all agents in a Notion space. Returns: id, code, status, message. Required: space_id.
- **Notion admin agents update creation policy** (Update). Update who can create Notion agents in a space by setting the creation policy. Returns: agent_counts, current_policy, current_policy_description, space_id, space_name. Required: space_id, policy.
- **Notion admin agents update credit limit** (Update). Set the per-agent credit limit for a Notion custom agent in a space. Returns: credit_limit_by_workspace_admin, enforced_credit_limit, current_credit_usage, did_clear_paused_state, is_active. Required: space_id, agent_id, credit_limit. The personal agent (Notion AI) is not supported.
- **Notion admin agents update permissions** (Update). Update sharing permissions for a Notion custom agent by granting and revoking principal access. Returns: permissions, code, status, message. Required: space_id, agent_id.
- **Notion admin agents update status** (Update). Disable or re-enable a Notion custom agent in a space. Returns: admin_status, run_status, paused_reason. Required: space_id, agent_id, admin_status. Requests are rejected with validation_error when the agent is blocked by a credit or operational pause reason.
- **Notion admin legal holds add users** (Add). Add users to a legal hold in Notion. Returns the updated legal hold object including id, name, status, users, workspaces, created_by, created_time, and start_date. Required: legal_hold_id, user_ids.
- **Create a Notion admin legal hold** (Create). Create a legal hold in Notion. Returns the created legal hold object including id, name, status, users, workspaces, created_by, created_time, and start_date. Required: name, start_date, user_ids, user_interaction_type.
- **Notion admin legal holds export** (Export). Export a legal hold in Notion. Returns: legal_hold_export_id. Required: legal_hold_id, legal_hold_export_id, requesting_user_id.
- **Get single Notion admin legal hold by ID** (Get). Get a single Notion legal hold by id. Returns: id, status, code, message. Required: id.
- **List all Notion admin legal holds** (List). List all Notion legal holds for your organization, both active and released. Returns: id, status, code, message. The API does not guarantee a particular sort order for returned results.
- **Notion admin legal holds list pages** (List). List pages on a legal hold in Notion. Returns: page_ids, code, status, message. Required: legal_hold_id, space_id.
- **Notion admin legal holds list users** (List). List users on a legal hold in Notion. Returns: user_ids, code, status, message. Required: legal_hold_id.
- **Notion admin legal holds list workspaces** (List). List workspaces on a legal hold in Notion. Returns: workspace_ids, code, status, message. Required: legal_hold_id.
- **Notion admin legal holds release** (Action). Release a legal hold in Notion, setting its status to released. Returns the full legal hold object including id, name, status, created_by, created_time, users, and workspaces. Required: legal_hold_id.
- **Notion admin legal holds remove user** (Delete). Remove a user from a legal hold in Notion. Returns the full legal hold object including id, name, status, created_by, created_time, users, and workspaces. Required: legal_hold_id, user_id.
- **Update a Notion admin legal hold by ID** (Update). Update a legal hold in Notion by id. Returns: id, status, code, message. Required: id.
- **List all Notion admin mcp client connections** (List). List MCP client connections in a Notion organization. Each result groups a member, an MCP client, and the workspaces where they are connected. Returns: created_at, code, status, message. Optional filters by user_ids and workspace_ids. Max 100 results per page.
- **Notion admin mcp client connections revoke** (Revoke). Revoke active OAuth tokens for a member's MCP client connection in a Notion workspace. Returns: revoked_token_count. Required: client_key, user_id, workspace_id. Revoking disconnects the member but does not prevent reconnection if workspace policy allows it.
- **Admin mcp client connections update enterprise managed access** (Update). Deny or restore a member's enterprise-managed MCP client access in a Notion workspace. Returns: revoked_token_count. Required: access, user_id, workspace_id. Applies only to enterprise-managed connections; the same request can be repeated safely.
- **List all Notion admin personal access tokens** (List). List personal access tokens in a Notion workspace. Returns each token record with id, name, created_at, creator, expires_at, last_used_at, revoked_at, and revoked_by. Token values are never returned. Use the id from a result as bot_id when revoking. Required: space_id.
- **Notion admin personal access tokens revoke** (Revoke). Revoke a personal access token in a Notion workspace. Use the id from List personal access tokens as the bot_id. After revocation the token can no longer authenticate API requests or access Notion Workers. Returns an empty response on success. Required: space_id, bot_id.
- **Create a Notion admin space export** (Create). Enqueue a Notion workspace (space) export job. Returns: export_job_id, status. Required: space_id, export_type, on_behalf_of_user_email.
- **Get single Notion admin space export by ID** (Get). Get the status of a Notion workspace (space) export job by id. Returns: export_job_id, status, code, message. Required: space_id, id.
- **Notion admin workspace update credit limit** (Update). Update the default agent credit limit for a Notion workspace. The limit is a non-negative whole number of credits applied to agents going forward; pass null to remove the workspace-wide default cap. Returns: default_agent_credit_limit, space_id. Required: space_id, default_agent_credit_limit.
- **Get single Notion async task by ID** (Get). Get a Notion async task by id. Returns the task object including its object type, id, status, status_url, created_time, operation, and poll_after_seconds. Required: id.
- **Create a Notion blocks meeting note** (Create). Create a meeting note in Notion from a file upload or an existing audio/video block. Returns: object, id, type, message, code, status, additional_data. Required: source (with type and file_upload_id plus parent for file uploads, or block_id for block sources).
- **List all Notion custom emojis** (List). List custom emojis. Returns: id, name, url.
- **Notion file uploads complete** (Complete). Complete a multi-part file upload in Notion after all file parts have been sent. Returns: object, id, created_time, created_by, last_edited_time, in_trash, expiry_time, status, filename, content_type, content_length, upload_url, complete_url, file_import_result, number_of_parts. Required: file_upload_id.
- **Create a Notion file upload** (Create). Create a file upload in Notion to begin uploading a file via single-part, multi-part, or external URL mode. Returns: object, id, created_time, created_by, last_edited_time, in_trash, expiry_time, status, filename, content_type, content_length, upload_url, complete_url, file_import_result, number_of_parts. Mode defaults to single_part; use multi_part for files larger than 20MB.
- **Get single Notion file upload by ID** (Get). Retrieve a single Notion file upload by id. Returns: object, id, created_time, created_by, last_edited_time, in_trash, expiry_time, status, filename, content_type, content_length, upload_url, complete_url, file_import_result, number_of_parts. Required: id.
- **List all Notion file uploads** (List). List Notion file uploads, optionally filtered by status. Returns file upload records including id, object, created_time, filename, content_type, content_length, number_of_parts. Max 100 per page.
- **Notion file uploads send** (Send). Upload file contents to a Notion file upload object, sending either the complete file or a single part for multi-part uploads. Returns: object, id, created_time, created_by, last_edited_time, in_trash, expiry_time, status, filename, content_type, content_length, upload_url, complete_url, file_import_result, number_of_parts. Required: file_upload_id, file.
- **Create a Notion meeting notes query** (Create). Query meeting notes in Notion with optional combinator (and/or) and property-level filtering, plus multi-key sort. Returns meeting note blocks with id, type, meeting_notes (title, status, children, calendar_event, recording), created_time, last_edited_time, created_by, last_edited_by, has_children, and in_trash. Maximum 50 results per page.
- **Create a Notion oauth introspect** (Create). Introspect a Notion OAuth access token to check whether it is currently active. Returns: active, scope, iat, request_id. Required: token.
- **Create a Notion oauth revoke** (Create). Revoke a Notion OAuth token by providing the token string. Returns: request_id. Required: token.
- **Create a Notion oauth token** (Create). Exchange a Notion OAuth authorization code for access and refresh tokens, or refresh an existing token. Returns: access_token, token_type, refresh_token, bot_id, workspace_icon, workspace_name, workspace_id, owner, duplicated_template_id, request_id. Required: grant_type (use code for authorization_code grant, or refresh_token for refresh_token grant).
- **Notion view queries bulk delete** (Delete). Delete a view query in Notion by specifying the view and query identifiers. Returns: object, id, deleted. Required: view_id, query_id.
- **Create a Notion view query** (Create). Create a view query in Notion for a specific view. Returns: object, id, view_id, expires_at, total_count, results, next_cursor, has_more, request_status. Required: view_id.
- **List all Notion view queries** (List). Get view query results. Returns: object, id. Required: view_id, query_id.
- **Create a Notion view** (Create). Create a new view in Notion. Returns the view object including object, id, name, type, data_source_id, and database_id. Required: name, type. At least one of database_id or data_source_id must identify the parent.
- **Delete a Notion view by ID** (Delete). Delete a Notion view by id. Returns the deleted view object including object, id, name, type, data_source_id, and database_id. Required: id.
- **Get single Notion view by ID** (Get). Retrieve a view. Required: id.
- **List all Notion views** (List). List views. Returns: object, id.
- **Update a Notion view by ID** (Update). Update a Notion view by id. Returns the updated view object including its object type, id, and name. Required: id.
- **Notion admin managed users revoke session** (Revoke). Revoke a Notion managed user's sessions by identifying the user by email. Returns: status. Required: user (an object containing email and type, where type is "email").
