notion_append_ block_ childrenAppend (or insert) new child blocks under a block or page.
Query databases with filters, create and update pages with real property values, append or edit block content, and leave comments — in the workspace areas you've shared with the integration.
PopMCPNotion
Every page, database, block, comment, user and file-upload operation the server exposes, plus the workspace changes it can watch for.
notion_append_ block_ childrenAppend (or insert) new child blocks under a block or page.
notion_delete_ blockMove a block to the trash (soft delete).
notion_query_ data_ sourceQuery the rows (pages) of a specific data source, with optional filter + sorts + pagination.
notion_retrieve_ blockRetrieve a single block by id.
notion_retrieve_ block_ childrenList the FIRST-LEVEL child blocks of a block or page.
notion_retrieve_ data_ sourceRetrieve a data source's full column schema under `properties` (under 2025-09-03 the schema lives on the data source, not the database).
notion_retrieve_ database_ data_ sourcesRetrieve a database under the 2025-09-03 API so the response carries its `data_sources` array.
notion_update_ blockUpdate a block's text/content or toggle archived.
notion_create_ commentAdd a comment.
notion_create_ databaseCreate a database under a parent page.
notion_create_ pageCreate a page.
notion_list_ commentsList OPEN (unresolved) comments on a page or block.
notion_query_ databaseQuery the rows (pages) of a database in ONE step, with optional filter + sorts + pagination.
notion_retrieve_ databaseRetrieve a database's definition, including its full column schema under `properties`.
notion_retrieve_ pageRetrieve a page's PROPERTIES.
notion_retrieve_ page_ propertyRetrieve a single page property value in full.
notion_update_ databaseUpdate a database's title, description, icon/cover, is_inline, archived state, or column schema (`properties`).
notion_update_ pageUpdate a page's property values, icon, or cover — or trash/restore it with `archived`.
notion_list_ usersList all users (members and bots) in the workspace.
notion_retrieve_ bot_ userRetrieve the bot user for THIS token ('who am I').
notion_retrieve_ userRetrieve a single user by id.
notion_searchSearch by TITLE across every page and database shared with this integration.
notion_create_ data_ sourceCreate a new data source under an EXISTING database container.
notion_update_ data_ sourceUpdate a data source's title, column schema (`properties`), or trash state.
notion_complete_ file_ uploadFinalize a multi_part file upload after all parts have been sent.
notion_create_ file_ uploadStart a file upload and get a file_upload id to attach later.
notion_list_ file_ uploadsList file uploads created by this integration, optionally filtered by status.
notion_retrieve_ commentRetrieve a single comment by its id.
notion_retrieve_ file_ uploadRetrieve a file upload's status.
notion_update_ commentEdit the text of an existing comment.
Credentials off one Notion screen, then an endpoint your client signs into. Nothing to deploy, and nothing to install.
At notion.so/my-integrations, create an integration for your workspace and paste its Internal Integration Secret — the only field. The connection covers that one workspace, and nothing in it until you share pages.
••••••••••••3f7aSet the connection to read-only for research work, or full access with approval required on writes so trashing a page, deleting blocks or rewriting a database schema waits for a human. The full catalog is a toggle.
Drop the PopMCP URL into Claude, ChatGPT, Codex or any other supported client. It signs in through PopMCP with OAuth, so your Notion credential never leaves the server.
app.popmcp.com/mcp/…Ask for something harmless before you turn writes on. Once it comes back clean, widen the tool set or switch the connection to full access.
Give me every row in the Roadmap database still marked Blocked
notion_searchok
Then just ask for the work
“Give me every row in the Roadmap database still marked Blocked”
“Move every Q2 row in the Content Calendar from Draft to In Review”
“Create a meeting notes page under Engineering with today's agenda as bullets”
“Who left the open comments on the launch brief and what did they ask”
One hosted endpoint, registered once per client. The same tools and the same permissions, whichever window the request comes from.
Add the PopMCP URL under Settings → Connectors and the tools appear in every chat.
The same endpoint, registered in the browser. Nothing to install on the machine you are working from.
Register PopMCP as a custom connector, then let ChatGPT read and update the account.
Wire the endpoint into Codex or the Codex CLI when a task needs live business context, not a fixture.
Register the remote MCP server in OpenCode's config for terminal-first and scripted agent runs.
Add PopMCP as an MCP server in Z.ai's desktop app and work the account from the same window.
FAQ
What teams ask before putting Notion behind an AI client.
A Notion integration starts with access to nothing at all. Open each top-level page or database you want it to use, click the ••• menu at the top right, choose Connections, and add the integration — access then cascades to every child page underneath. Until you do that, search and query_database come back empty even though the credential is perfectly valid.
In Notion, go to Settings → Connections → Develop or manage integrations, or open notion.so/my-integrations directly. Create a new integration, pick the workspace it belongs to, and copy the Internal Integration Secret. That one value is all the connect form asks for — there is no OAuth popup to click through and no token to refresh later.
The secret is issued against a single workspace, and inside it the agent sees only the pages and databases you added the integration to, plus everything nested below them. Search matches on title across that shared set rather than the body text of a page, so the reliable pattern is to find a page by name and then read its blocks. Workspace members and bots come from their own user tools, which is how the agent resolves the person behind a comment or an owner property.
Under Notion's 2025-09-03 API a database is a container holding one or more data sources, and the column schema lives on the data source rather than the database. retrieve_database_data_sources returns the database with its data_sources array, and retrieve_data_source gives you the full properties schema for one of them. If you would rather not walk both levels, query_database still runs a filtered, sorted row query in a single step; query_data_source targets one specific source.
No — the destructive operations here are trash operations. delete_block moves a block to the trash as a soft delete, update_page trashes or restores a page through its archived flag, and update_data_source can set a trash state, so items go to the trash rather than disappearing. The edits worth holding for write approval are schema changes through update_database and update_data_source, because changing a column definition affects every row at once.
Change detection covers pages created, updated, trashed or archived, and page content changing when blocks are added, edited or removed. On the database side it watches databases being created, rows added or updated, a row's status or select property moving to a different value, and rows added to a data source inside a database. It also fires on new comments and on a new person appearing in the workspace. Page created only fires where the integration has access, so the sharing step decides your trigger coverage as well.
No. PopMCP hosts it and gives you a Streamable HTTP MCP URL. There is nothing to deploy, no callback URL to register, and no infrastructure to keep running or patch.
Any client that supports a remote Streamable HTTP MCP server — Claude Desktop, Claude Web, ChatGPT custom connectors, Codex and the Codex CLI, OpenCode and Z.ai's ZCode, as well as editors such as Cursor, Windsurf and Zed. Your client signs in to PopMCP with OAuth; the provider credential never leaves the server.
Loading 30 tool definitions into every conversation burns context before the work starts. PopMCP loads a curated 22-tool set covering the everyday workflows and keeps the rest searchable, so your AI pulls a specialist tool only when a task needs it. You can switch a connection to the full catalog at any time.
A tool is something your AI calls — there are 30 here. A trigger is something PopMCP watches for you: 11 Notion events that can start work on the PopMCP side. Triggers never enter your AI client's context, and none of them ask you to paste a callback URL into Notion.
Launch a hosted MCP endpoint for Notion, keep tool access under control, and start testing real workflow prompts right away.