
Append child blocks to a page or block. position accepts only type afterblock, start or end. Use search or getblock_children to find a valid parent block or page ID. Text is capped at 2000 UTF-16 units per rich text object (emoji count as 2).
Retrieve a block by ID
Retrieve children of a block with pagination
Update a block's content or archive status. Set only the field matching the block's own type, e.g. paragraph {"richtext": [...]}; use getblock to confirm the type.
Delete a block
Create a comment on a page or block, or reply to an existing thread by passing discussionid from listcomments. Provide exactly one of parent or discussionid. Each richtext item looks like {"type": "text", "text": {"content": "Nice work"}}.
List comments for a block or get ALL comments from an entire page
Create a database under a page. properties defines the initial data source schema; title and description are rich text arrays. Use search for a parent page ID. Returns the database ID and its datasources; pass a data source ID to querydatabase or getdatasource.
Query the pages in a database or data source, with filtering, sorting and pagination. Pass databaseid (resolved automatically) or datasourceid from getdatabase. filter takes one condition, e.g. {"property": "Status", "select": {"equals": "Active"}}; sorts is an array of objects. Call getdatasource first for the property names and types the filter references.
Retrieve a database container by ID: title, parent, and the datasources it holds. The property schema is NOT here; pass a data source ID from the returned datasources array to getdatasource to read it. Use search to find database IDs.
Retrieve a data source and its property schema. This is where a database's properties live from API version 2025-09-03. Accepts a datasourceid (from getdatabase's datasources array) or a databaseid, which is resolved for you when the database holds exactly one data source. Call this before building a querydatabase filter or a create_page properties payload.
Update a database's title, description, icon, cover, or property schema. title and description are rich text arrays. Schema edits route to the data source automatically; read the current schema with getdatasource first. Notion ignores property removal via null, so verify against the returned schema.
Create a page under an existing page or database; workspace-level pages are not supported. Send properties and children as objects (a valid JSON string is also accepted; malformed JSON is rejected). Use search for a parent ID and getdatasource (not get_database) for the property schema.
Retrieve a page by ID
Retrieve a specific page property. Paginated types (title, richtext, relation, people) return a list: use pagesize (1-100) and pass the returned nextcursor back as startcursor for the next page. Use get_page to find property IDs.
Update a page's properties, icon, cover, or archive status, e.g. properties {"Status": {"select": {"name": "Done"}}}. Use getpage for the current values and getdata_source for the property schema.
Archive a page (move to trash)
Search pages and data sources by title or body content. Returns only objects shared with this integration. Use filter, e.g. {"property": "object", "value": "page"}, to restrict to pages or data sources, and sort to order by lasteditedtime. Data source results carry no url.
List all users in the workspace
Retrieve a user by ID
Retrieve the current integration's bot user
Validate Notion credentials by fetching the bot user. Returns {success, message}.

In an mcp.json file, add the configuration below, and restart Cursor.
Learn more in the official documentation ↗
1{
2 "mcpServers": {
3 "agent-handler": {
4 "url": "https://ah-api-develop.merge.dev/api/v1/tool-packs/{TOOL_PACK_ID}/registered-users/{REGISTERED_USER_ID}/mcp",
5 "headers": {
6 "Authorization": "Bearer yMt*****"
7 }
8 }
9 }
10}
11Open your Claude Desktop configuration file and add the server configuration below. You'll also need to restart the application for the changes to take effect.
Make sure Claude is using the Node v20+.
Learn more in the official documentation ↗
1{
2 "mcpServers": {
3 "agent-handler": {
4 "command": "npx",
5 "args": [
6 "-y",
7 "mcp-remote@latest",
8 "https://ah-api-develop.merge.dev/api/v1/tool-packs/{TOOL_PACK_ID}/registered-users/{REGISTERED_USER_ID}/mcp",
9 "--header",
10 "Authorization: Bearer ${AUTH_TOKEN}"
11 ],
12 "env": {
13 "AUTH_TOKEN": "yMt*****"
14 }
15 }
16 }
17}Open your Windsurf MCP configuration file and add the server configuration below.
Click on the refresh button in the top right of the Manage MCP server page or in the top right of the chat box in the box icon.
Learn more in the official documentation ↗
1{
2 "mcpServers": {
3 "agent-handler": {
4 "command": "npx",
5 "args": [
6 "-y",
7 "mcp-remote@latest",
8 "https://ah-api.merge.dev/api/v1/tool-packs/<tool-pack-id>/registered-users/<registered-user-id>/mcp",
9 "--header",
10 "Authorization: Bearer ${AUTH_TOKEN}"
11 ],
12 "env": {
13 "AUTH_TOKEN": "<ah-production-access-key>"
14 }
15 }
16 }
17 }In Command Palette (Cmd+Shift+P on macOS, Ctrl+Shift+P on Windows), run "MCP: Open User Configuration".
You can then add the configuration below and press "start" right under servers. Enter the auth token when prompted.
Learn more in the official documentation ↗
1{
2 "inputs": [
3 {
4 "type": "promptString",
5 "id": "agent-handler-auth",
6 "description": "Agent Handler AUTH_TOKEN", // "yMt*****" when prompt
7 "password": true
8 }
9 ],
10 "servers": {
11 "agent-handler": {
12 "type": "stdio",
13 "command": "npx",
14 "args": [
15 "-y",
16 "mcp-remote@latest",
17 "https://ah-api-develop.merge.dev/api/v1/tool-packs/{TOOL_PACK_ID}/registered-users/{REGISTERED_USER_ID}/mcp",
18 "--header",
19 "Authorization: Bearer ${input:agent-handler-auth}"
20 ]
21 }
22 }
23}Here are just a few popular use cases:
Here are some popular tools broken down by data types.
Pages:
Databases:
Users:
Here are just a few reasons:
Yes, you can set a wide range of custom security rules for Notion tool calls in Merge Agent Handler.
For example, you can:
Here are the steps to get started with Merge Agent Handler's Notion MCP server:
1. Sign up for Agent Handler. Visit Merge Agent Handler's sign up page to create your free account and gain access to the dashboard.
2. Build a Tool Pack. Tool Packs control what connectors and tools are available to your agent. Navigate to the Tool Packs section, select Create Tool Pack, add Notion as a connector, and select either Individual or Shared authentication based on your use case.
3. Add a Registered User. Head to the Registered Users section; this represents an identity (human or system) that executes actions on behalf of your agent. When authentication with Notion is needed, Agent Handler automatically presents a guided flow—eliminating the need for custom OAuth implementation.
4. Validate with the Playground. Test your configuration before deploying to production. Open your Tool Pack's Sandbox environment and try out Notion tool calls such as retrieving pages, adding database records, or modifying workspace content.
5. Connect to your application. Link your agent to Agent Handler using one of two methods:
Whether you're an engineer experimenting with agents or a product manager looking to add tools, you can get started for free now