Notion
Search, read and write Notion pages (bodies as markdown), query and manage databases and data sources, and comment. Connects with OAuth.
- rest
https://api.superagnt.com/v1/connections/notionplus the vendor's own path, with your superagnt_ API key asAuthorization: Bearer.- mcp
- Tools named
connection_notion_*onhttps://mcp.superagnt.com/mcp, served once the account is connected. - billing
- Notion bills your own account. Calls cost no superagnt_ data credits.
- rate limit
- 3 requests a second, 180 a minute: the vendor's ceiling as the registry records it, for sizing bursts. Your plan's own limit is on Connections.
The Notion connection lets an agent work the pages and databases you share with it in your Notion workspace. It searches by title, reads and edits page bodies as markdown, creates and updates pages and database rows, appends blocks, queries and manages databases and their data sources, comments, and looks up users.
databases hold data sources
In Notion's current model a database is a container, and its columns and rows live in one or more data sources. Get the database to find its data_sources, read a data source for its column schema, then query its rows with POST /v1/connections/notion/v1/data_sources/{data_source_id}/query. To add a row, create a page whose parent is { "data_source_id": "..." }.
01
Setup
- Start the install. In the superagnt app open Integrations, pick Notion and click Connect with Notion.
- Share your pages. In the window Notion opens, choose the pages and databases to share with the connection and allow access.
- Call Notion. Notion moves to Enabled: its REST route answers and its tools appear on your MCP server.
There are no scopes to pick: the connection sees exactly what you share with it. To share more later, click Reconnect on the Notion connection page in the superagnt app and pick the pages.
02
Things to know
- Access is share-scoped: a search or query that returns nothing usually means the content is not shared with the connection yet.
- superagnt_ sends
Notion-Version: 2026-03-11on every call, so requests and responses follow that version of Notion's API. - Search's
filtervalue ispageordata_source; a database shows up through its data source. Search and data source queries page withpage_size(up to 100) andstart_cursor. connection_notion_pages_writeactionupdate_markdownedits a page body bytype:insert_contentappends to the end,update_contentreplaces matching text, andreplace_contentoverwrites the whole body.- To delete a page, set
in_trash: truewithconnection_notion_pages_writeactionupdate. That moves it to Notion's trash, where it can be recovered for a while, but treat it as a delete.archived: truearchives the page in place instead. - When Notion rate-limits the connection, calls come back as
RATE_LIMITED(HTTP 429): back off and retry. - By default every Notion call runs without asking, writes included: creating and updating pages and databases, editing page bodies, appending blocks, commenting and moving a page to the trash. To have a person approve some of them, set those tools to ask (Permissions).
03
Examples
Search for a page
curl -X POST "https://api.superagnt.com/v1/connections/notion/v1/search" \
-H "Authorization: Bearer $AGNTDATA_API_KEY" \
-H "Content-Type: application/json" \
-d '{"query":"Roadmap","filter":{"value":"page","property":"object"}}'Read a page as markdown
curl "https://api.superagnt.com/v1/connections/notion/v1/pages/$PAGE_ID/markdown" \
-H "Authorization: Bearer $AGNTDATA_API_KEY"Create a page and write its body
# 1. create the page under a parent page
curl -X POST "https://api.superagnt.com/v1/connections/notion/v1/pages" \
-H "Authorization: Bearer $AGNTDATA_API_KEY" \
-H "Content-Type: application/json" \
-d '{"parent":{"page_id":"'"$PARENT_PAGE_ID"'"},"properties":{"title":[{"text":{"content":"Weekly update"}}]}}'
# 2. append its body as markdown, with the page id the first call returned
curl -X PATCH "https://api.superagnt.com/v1/connections/notion/v1/pages/$PAGE_ID/markdown" \
-H "Authorization: Bearer $AGNTDATA_API_KEY" \
-H "Content-Type: application/json" \
-d '{"type":"insert_content","insert_content":{"content":"## This week\n\n- Shipped the Notion connection\n- Next: calendar"}}'Query rows in a database
# 1. get the database to find its data source ids
curl "https://api.superagnt.com/v1/connections/notion/v1/databases/$DATABASE_ID" \
-H "Authorization: Bearer $AGNTDATA_API_KEY"
# 2. query the rows of one data source
curl -X POST "https://api.superagnt.com/v1/connections/notion/v1/data_sources/$DATA_SOURCE_ID/query" \
-H "Authorization: Bearer $AGNTDATA_API_KEY" \
-H "Content-Type: application/json" \
-d '{"filter":{"property":"Status","select":{"equals":"Done"}},"page_size":25}'12 tools, one per resource and risk
MCP servers and agents on the grouped surface list Notion as these tools. Each takes an action, and the ones that work across record types an object. Every operation also keeps its own per-operation name, in the next table, which works on every server. How grouping works: Grouped tools.
| Tool | Risk | Actions |
|---|---|---|
connection_notion_search_readSearch Notion Find the pages and data sources shared with the integration by title; omit query to list everything shared. | read | search |
connection_notion_users_readRead Notion users List the workspace users, get one, or get the bot user the connection runs as. | read | listgetme |
connection_notion_pages_readRead Notion pages Read a page's properties, or its body as markdown (usually the easiest way to read a page). | read | getget_markdown |
connection_notion_pages_writeWrite Notion pages Create a page (under a data source parent, this adds a database row), update its properties or move it to the trash, or edit its body with markdown. | write | createupdateupdate_markdown |
connection_notion_blocks_readRead Notion blocks List the child blocks of a page or block. | read | list_children |
connection_notion_blocks_writeAppend Notion blocks Append blocks to a page or block. | write | append |
connection_notion_comments_readRead Notion comments List the open comments on a page or block. | read | list |
connection_notion_comments_writeComment in Notion Comment on a page or in a discussion. | write | create |
connection_notion_databases_readRead Notion databases Get a database to find its data sources. | read | get |
connection_notion_databases_writeWrite Notion databases Create a database under a page, or update a database's title, icon or trash state. | write | createupdate |
connection_notion_data_sources_readRead and query Notion data sources Read a data source's column schema, query its rows with filters and sorts, or list its page templates. Rows are pages: read and edit one with the pages tools. | read | getquerylist_templates |
connection_notion_data_sources_writeWrite Notion data sources Add a data source (a new table) to a database, or change a data source's title and column schema. To add a row, create a page. | write | createupdate |
All 21 operations
Each operation is a REST path under https://api.superagnt.com/v1/connections/notion and an MCP tool. The per-operation tool name is the one permissions, approvals and usage records use.
| Operation | MCP tool |
|---|---|
POST /v1/searchSearch by title | connection_notion_searchgrouped: connection_notion_search_read, action search |
GET /v1/usersList all users | connection_notion_list_usersgrouped: connection_notion_users_read, action list |
GET /v1/users/{user_id}Retrieve a user | connection_notion_get_usergrouped: connection_notion_users_read, action get |
GET /v1/users/meRetrieve the bot user | connection_notion_get_bot_usergrouped: connection_notion_users_read, action me |
POST /v1/pagesCreate a page | connection_notion_create_pagegrouped: connection_notion_pages_write, action create |
GET /v1/pages/{page_id}Retrieve a page | connection_notion_get_pagegrouped: connection_notion_pages_read, action get |
PATCH /v1/pages/{page_id}Update page properties | connection_notion_update_pagegrouped: connection_notion_pages_write, action update |
GET /v1/pages/{page_id}/markdownRetrieve page content as markdown | connection_notion_get_page_markdowngrouped: connection_notion_pages_read, action get_markdown |
PATCH /v1/pages/{page_id}/markdownUpdate page content as markdown | connection_notion_update_page_markdowngrouped: connection_notion_pages_write, action update_markdown |
GET /v1/blocks/{block_id}/childrenRetrieve block children | connection_notion_get_block_childrengrouped: connection_notion_blocks_read, action list_children |
PATCH /v1/blocks/{block_id}/childrenAppend block children | connection_notion_append_block_childrengrouped: connection_notion_blocks_write, action append |
POST /v1/databasesCreate a database | connection_notion_create_databasegrouped: connection_notion_databases_write, action create |
GET /v1/databases/{database_id}Retrieve a database | connection_notion_get_databasegrouped: connection_notion_databases_read, action get |
PATCH /v1/databases/{database_id}Update a database | connection_notion_update_databasegrouped: connection_notion_databases_write, action update |
POST /v1/data_sourcesCreate a data source | connection_notion_create_data_sourcegrouped: connection_notion_data_sources_write, action create |
GET /v1/data_sources/{data_source_id}Retrieve a data source | connection_notion_get_data_sourcegrouped: connection_notion_data_sources_read, action get |
PATCH /v1/data_sources/{data_source_id}Update a data source | connection_notion_update_data_sourcegrouped: connection_notion_data_sources_write, action update |
POST /v1/data_sources/{data_source_id}/queryQuery a data source | connection_notion_query_data_sourcegrouped: connection_notion_data_sources_read, action query |
GET /v1/data_sources/{data_source_id}/templatesList data source templates | connection_notion_list_data_source_templatesgrouped: connection_notion_data_sources_read, action list_templates |
GET /v1/commentsList comments | connection_notion_list_commentsgrouped: connection_notion_comments_read, action list |
POST /v1/commentsCreate a comment | connection_notion_create_commentgrouped: connection_notion_comments_write, action create |