Skip to main content
Glama
makenotion
by makenotion

Notion MCP Server

NOTE

We’ve introduced Notion MCP, a remote MCP server with the following improvements:

  • Easy installation via standard OAuth. No need to fiddle with JSON or API tokens anymore.

  • Powerful tools tailored to AI agents, including editing pages in Markdown. These tools are designed with optimized token consumption in mind.

Learn more and get started at Notion MCP documentation.

We are prioritizing, and only providing active support for, Notion MCP (remote). As a result:

  • We may sunset this local MCP server repository in the future.

  • Issues and pull requests here are not actively monitored.

  • Please do not file issues relating to the remote MCP here; instead, contact Notion support.

notion-mcp-sm

This project implements an MCP server for the Notion API.

mcp-demo


⚠️ Version 2.0.0 breaking changes

Version 2.0.0 migrates to the Notion API 2025-09-03 which introduces data sources as the primary abstraction for databases.

What changed

Removed tools (3):

  • post-database-query - replaced by query-data-source

  • update-a-database - replaced by update-a-data-source

  • create-a-database - replaced by create-a-data-source

New tools (7):

  • query-data-source - Query a data source (database) with filters and sorts

  • retrieve-a-data-source - Get metadata and schema for a data source

  • update-a-data-source - Update data source properties

  • create-a-data-source - Create a new data source

  • list-data-source-templates - List available templates in a data source

  • move-page - Move a page to a different parent location

  • retrieve-a-database - Get database metadata including its data source IDs

Parameter changes:

  • All database operations now use data_source_id instead of database_id

  • Search filter values changed from ["page", "database"] to ["page", "data_source"]

  • Page creation now supports both page_id and database_id parents (for data sources)

Do I need to migrate?

No code changes required. MCP tools are discovered automatically when the server starts. When you upgrade to v2.0.0, AI clients will automatically see the new tool names and parameters. The old database tools are no longer available.

If you have hardcoded tool names or prompts that reference the old database tools, update them to use the new data source tools:

Old Tool (v1.x)

New Tool (v2.0)

Parameter Change

post-database-query

query-data-source

database_iddata_source_id

update-a-database

update-a-data-source

database_iddata_source_id

create-a-database

create-a-data-source

No change (uses parent.page_id)

Note: retrieve-a-database is still available and returns database metadata including the list of data source IDs. Use retrieve-a-data-source to get the schema and properties of a specific data source.

Total tools now: 22 (was 19 in v1.x)


Related MCP server: Notion MCP Server

Page content as Markdown

The server exposes two tools for working with page content as enhanced Markdown instead of block JSON, which is significantly more token-efficient for AI agents:

  • retrieve-page-markdown — Read a page's full content as Markdown (GET /v1/pages/{page_id}/markdown). Pass include_transcript: true to inline meeting-note transcripts.

  • update-page-markdown — Edit a page's content with Markdown (PATCH /v1/pages/{page_id}/markdown). Prefer replace_content to overwrite the whole page, or update_content for targeted find-and-replace edits.

These endpoints require Notion API version 2026-03-11. The server now sources the Notion-Version header per operation from the OpenAPI spec, so these tools use 2026-03-11 while the rest of the API continues to use 2025-09-03 — no configuration needed. If you set Notion-Version yourself via OPENAPI_MCP_HEADERS, your value takes precedence for every tool.


Installation

1. Setting up integration in Notion

Go to https://www.notion.so/profile/integrations and create a new internal integration or select an existing one.

Creating a Notion Integration token

While we limit the scope of Notion API's exposed (for example, you will not be able to delete databases via MCP), there is a non-zero risk to workspace data by exposing it to LLMs. Security-conscious users may want to further configure the Integration's Capabilities.

For example, you can create a read-only integration token by giving only "Read content" access from the "Configuration" tab:

Notion Integration Token Capabilities showing Read content checked

2. Connecting content to integration

Ensure relevant pages and databases are connected to your integration.

To do this, visit the Access tab in your internal integration settings. Edit access and select the pages you'd like to use.

Integration Access tab

Edit integration access

Alternatively, you can grant page access individually. You'll need to visit the target page, and click on the 3 dots, and select "Connect to integration".

Adding Integration Token to Notion Connections

3. Adding MCP config to your client

Using npm
Cursor & Claude

Add the following to your .cursor/mcp.json or claude_desktop_config.json (MacOS: ~/Library/Application\ Support/Claude/claude_desktop_config.json)

{
  "mcpServers": {
    "notionApi": {
      "command": "npx",
      "args": ["-y", "@notionhq/notion-mcp-server"],
      "env": {
        "NOTION_TOKEN": "ntn_****"
      }
    }
  }
}
Option 2: Using OPENAPI_MCP_HEADERS (for advanced use cases)
{
  "mcpServers": {
    "notionApi": {
      "command": "npx",
      "args": ["-y", "@notionhq/notion-mcp-server"],
      "env": {
        "OPENAPI_MCP_HEADERS": "{\"Authorization\": \"Bearer ntn_****\", \"Notion-Version\": \"2025-09-03\" }"
      }
    }
  }
}
Zed

Add the following to your settings.json

{
  "context_servers": {
    "some-context-server": {
      "command": {
        "path": "npx",
        "args": ["-y", "@notionhq/notion-mcp-server"],
        "env": {
          "OPENAPI_MCP_HEADERS": "{\"Authorization\": \"Bearer ntn_****\", \"Notion-Version\": \"2025-09-03\" }"
        }
      },
      "settings": {}
    }
  }
}
GitHub Copilot CLI

Use the Copilot CLI to interactively add the MCP server:

/mcp add

Alternatively, create or edit the configuration file ~/.copilot/mcp-config.json and add:

{
  "mcpServers": {
    "notionApi": {
      "command": "npx",
      "args": ["-y", "@notionhq/notion-mcp-server"],
      "env": {
        "NOTION_TOKEN": "ntn_****"
      }
    }
  }
}

For more information, see the Copilot CLI documentation.

Using Docker

There are two options for running the MCP server with Docker:

Option 1: Using the official Docker Hub image

Add the following to your .cursor/mcp.json or claude_desktop_config.json

Using NOTION_TOKEN (recommended):

{
  "mcpServers": {
    "notionApi": {
      "command": "docker",
      "args": [
        "run",
        "--rm",
        "-i",
        "-e", "NOTION_TOKEN",
        "mcp/notion"
      ],
      "env": {
        "NOTION_TOKEN": "ntn_****"
      }
    }
  }
}

Using OPENAPI_MCP_HEADERS (for advanced use cases):

{
  "mcpServers": {
    "notionApi": {
      "command": "docker",
      "args": [
        "run",
        "--rm",
        "-i",
        "-e", "OPENAPI_MCP_HEADERS",
        "mcp/notion"
      ],
      "env": {
        "OPENAPI_MCP_HEADERS": "{\"Authorization\":\"Bearer ntn_****\",\"Notion-Version\":\"2025-09-03\"}"
      }
    }
  }
}

This approach:

  • Uses the official Docker Hub image

  • Properly handles JSON escaping via environment variables

  • Provides a more reliable configuration method

Option 2: Building the Docker image locally

You can also build and run the Docker image locally. First, build the Docker image:

docker compose build

Then, add the following to your .cursor/mcp.json or claude_desktop_config.json

Using NOTION_TOKEN (recommended):

{
  "mcpServers": {
    "notionApi": {
      "command": "docker",
      "args": [
        "run",
        "--rm",
        "-i",
        "-e",
        "NOTION_TOKEN=ntn_****",
        "notion-mcp-server"
      ]
    }
  }
}

Using OPENAPI_MCP_HEADERS (for advanced use cases):

{
  "mcpServers": {
    "notionApi": {
      "command": "docker",
      "args": [
        "run",
        "--rm",
        "-i",
        "-e",
        "OPENAPI_MCP_HEADERS={\"Authorization\": \"Bearer ntn_****\", \"Notion-Version\": \"2025-09-03\"}",
        "notion-mcp-server"
      ]
    }
  }
}

Don't forget to replace ntn_**** with your integration secret. Find it from your integration configuration tab:

Copying your Integration token from the Configuration tab in the developer portal

Transport options

The Notion MCP Server supports two transport modes:

STDIO transport (default)

The default transport mode uses standard input/output for communication. This is the standard MCP transport used by most clients like Claude Desktop.

# Run with default stdio transport
npx @notionhq/notion-mcp-server

# Or explicitly specify stdio
npx @notionhq/notion-mcp-server --transport stdio

Streamable HTTP transport

For web-based applications or clients that prefer HTTP communication, you can use the Streamable HTTP transport:

# Run with Streamable HTTP transport on port 3000 (default)
npx @notionhq/notion-mcp-server --transport http

# Run on a custom port
npx @notionhq/notion-mcp-server --transport http --port 8080

# Bind to a different host. The default is 127.0.0.1.
npx @notionhq/notion-mcp-server --transport http --host 0.0.0.0

# Run with a custom authentication token
npx @notionhq/notion-mcp-server --transport http --auth-token "your-secret-token"

When using Streamable HTTP transport, the server will be available at http://127.0.0.1:<port>/mcp by default.

Authentication

The Streamable HTTP transport requires bearer token authentication for security. You have three options:

Option 1: Auto-generated token (only for development)
npx @notionhq/notion-mcp-server --transport http

The server will generate a secure random token and write it to a file with restricted permissions:

Generated auth token written to: /tmp/.notion-mcp-auth-token-12345
npx @notionhq/notion-mcp-server --transport http --auth-token "your-secret-token"
AUTH_TOKEN="your-secret-token" npx @notionhq/notion-mcp-server --transport http

The command line argument --auth-token takes precedence over the AUTH_TOKEN environment variable if both are provided.

Unsafe option: disable HTTP authentication

You can disable bearer token authentication only with the explicit unsafe flag:

npx @notionhq/notion-mcp-server --transport http --unsafe-disable-auth

WARNING: --unsafe-disable-auth is unsafe. The server may be reachable to pages you visit via DNS rebinding. Only use it on an isolated network.

When authentication is disabled, the server enables DNS rebinding protection by checking the Host and Origin headers against the configured local host and loopback hosts. The previous --disable-auth flag is still accepted as a deprecated alias, but it will print a warning.

Making HTTP requests

All requests to the Streamable HTTP transport must include the bearer token in the Authorization header:

# Example request
curl -H "Authorization: Bearer your-token-here" \
     -H "Content-Type: application/json" \
     -H "mcp-session-id: your-session-id" \
     -d '{"jsonrpc": "2.0", "method": "initialize", "params": {}, "id": 1}' \
     http://localhost:3000/mcp

Note: Make sure to set either the NOTION_TOKEN environment variable (recommended) or the OPENAPI_MCP_HEADERS environment variable with your Notion integration token when using either transport mode.

Serving multiple integrations (per-request token passthrough)

By default the server authenticates to Notion with a single token baked in at startup, which locks one deployment to one Notion integration. To let a single deployment serve multiple integrations, enable token passthrough so each client supplies its own Notion integration token per connection:

# Enable per-request Notion tokens (flag or ENABLE_TOKEN_PASSTHROUGH=true)
npx @notionhq/notion-mcp-server --transport http --enable-token-passthrough

Clients then send their Notion token on the initialize request using the dedicated Notion-Token header:

curl -H "Authorization: Bearer <server-auth-token>" \
     -H "Notion-Token: ntn_****" \
     -H "Content-Type: application/json" \
     -d '{"jsonrpc": "2.0", "method": "initialize", "params": {}, "id": 1}' \
     http://localhost:3000/mcp

How the token is resolved for each connection, in order:

  1. The Notion-Token header (preferred — unambiguous, and works alongside the server's own Authorization gateway auth). If present it must be a valid Notion token, otherwise the request is rejected with 401.

  2. Authorization: Bearer ntn_**** — only when the server's own bearer auth is turned off (--unsafe-disable-auth), so the header is free to carry the Notion token directly.

  3. Otherwise the startup env token (NOTION_TOKEN / OPENAPI_MCP_HEADERS), if set, so passthrough and a default integration can coexist on one deployment.

Notes:

  • Only values with a Notion token prefix (ntn_, legacy secret_) are treated as Notion tokens, so the server's gateway secret and a tenant's Notion token never collide.

  • Each token is bound to its MCP session; tokens are never logged (only a redacted prefix is emitted).

  • This is a deliberate token-passthrough setup. Always deploy it over TLS, and prefer keeping the server's own bearer auth (--auth-token) enabled as a gateway in front of multi-tenant traffic.

Examples

  1. Using the following instruction

Comment "Hello MCP" on page "Getting started"

AI will correctly plan two API calls, v1/search and v1/comments, to achieve the task

  1. Similarly, the following instruction will result in a new page named "Notion MCP" added to parent page "Development"

Add a page titled "Notion MCP" to page "Development"
  1. You may also reference content ID directly

Get the content of page 1a6b35e6e67f802fa7e1d27686f017f2

Development

Build & test

npm run build
npm test

Execute

npx -y --prefix /path/to/local/notion-mcp-server @notionhq/notion-mcp-server

Testing changes locally in Cursor:

  1. Run npm link command from repository root to create a machine-global symlink to the notion-mcp-server package.

  2. Merge the configuration snippet below into Cursor's mcp.json (or other MCP client you want to test with).

  3. (Cleanup) run npm unlink from repository root.

{
  "mcpServers": {
    "notion-local-package": {
      "command": "notion-mcp-server",
      "env": {
        "NOTION_TOKEN": "ntn_..."
      }
    }
  }
}

Publish

npm login
npm publish --access public

Available Tools

19 tools
API-create-a-commentC

Notion | Create comment

ParametersJSON Schema
NameRequiredDescriptionDefault
parentYesThe page that contains the comment
rich_textYes

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries full burden for behavioral disclosure. 'Create comment' implies a write operation, but the description doesn't address permissions needed, whether the operation is idempotent, rate limits, error conditions, or what happens if the parent page doesn't exist. This leaves significant behavioral gaps for a mutation tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise at just three words ('Notion | Create comment'), front-loading the essential information with zero wasted words. Every element earns its place by specifying the platform and core action.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with no annotations, no output schema, and incomplete parameter documentation, this description is inadequate. It doesn't address what the tool returns, error conditions, or behavioral expectations beyond the basic action, leaving the agent with insufficient context for reliable invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 50% (one of two parameters has a description). The description adds no parameter information beyond what's in the schema. The schema provides some context for 'parent' and 'rich_text', but with incomplete coverage, the description doesn't compensate by explaining parameter relationships or usage patterns.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Create comment') and the resource ('Notion'), providing a specific verb+resource combination. However, it doesn't differentiate from sibling tools like 'API-retrieve-a-comment' or explain what makes this tool distinct beyond the basic action.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives like 'API-retrieve-a-comment' or 'API-update-a-block'. The description offers no context about prerequisites, appropriate scenarios, or exclusions for this comment creation operation.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

API-create-a-databaseC

Notion | Create a database

ParametersJSON Schema
NameRequiredDescriptionDefault
parentYes
propertiesYesProperty schema of database. The keys are the names of properties as they appear in Notion and the values are [property schema objects](https://developers.notion.com/reference/property-schema-object).
titleNo

TDQS

C2.6/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries full burden but only states the action without behavioral details. It doesn't disclose that this is a write operation requiring permissions, potential rate limits, or what happens on success/failure. The description adds minimal context beyond the basic action, leaving key behavioral traits unspecified.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise with just three words, front-loaded with the platform and action. There's zero wasted text, and it efficiently communicates the core purpose without unnecessary elaboration, making it easy to scan.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with 3 parameters, low schema coverage (33%), no annotations, and no output schema, the description is incomplete. It doesn't address parameter meanings, behavioral aspects like permissions or effects, or what the tool returns. Given the complexity and lack of structured data, the description should provide more context to be useful.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is low at 33%, and the description provides no parameter information. It doesn't explain the meaning of 'parent', 'properties', or 'title' parameters, nor their relationships. The description fails to compensate for the schema's lack of coverage, leaving most parameters semantically unclear.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description 'Notion | Create a database' states the action (create) and resource (database) with platform context (Notion), but it's vague about what exactly is created and doesn't distinguish from siblings like API-post-database-query or API-retrieve-a-database. It lacks specificity about the database creation scope or purpose.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool versus alternatives is provided. The description doesn't mention prerequisites, such as needing a parent page, or when to choose this over other database-related tools like API-retrieve-a-database or API-update-a-database. Usage context is implied but not explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

API-delete-a-blockC

Notion | Delete a block

ParametersJSON Schema
NameRequiredDescriptionDefault
block_idYesIdentifier for a Notion block

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries full burden for behavioral disclosure. It states 'Delete a block' but does not clarify if this is permanent, reversible, requires specific permissions, or has side effects (e.g., affecting child blocks). For a destructive operation, this lack of detail is a significant gap, though it at least correctly indicates a mutation action.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise with just three words, front-loading the key information ('Delete a block') without any wasted text. It efficiently communicates the core purpose, though this brevity contributes to gaps in other dimensions.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's destructive nature, lack of annotations, and no output schema, the description is incomplete. It fails to address critical aspects like return values, error conditions, or behavioral nuances (e.g., deletion scope). For a mutation tool with high stakes, more context is needed to ensure safe and correct usage.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description adds no parameter semantics beyond the input schema, which has 100% coverage and fully documents the 'block_id' parameter. This meets the baseline of 3, as the schema adequately describes the parameter, but the description does not enhance understanding (e.g., by explaining block_id format or sourcing).

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description 'Notion | Delete a block' clearly states the action (delete) and resource (a Notion block), making the purpose immediately understandable. It distinguishes from siblings like 'API-retrieve-a-block' or 'API-update-a-block' by specifying deletion. However, it lacks specificity about what 'delete' entails (e.g., permanent removal vs. archiving), preventing a perfect score.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. It does not mention prerequisites (e.g., needing a valid block_id), exclusions (e.g., not for pages or databases), or comparisons to siblings like 'API-update-a-block' for modifications. This leaves the agent without context for tool selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

API-get-block-childrenC

Notion | Retrieve block children

ParametersJSON Schema
NameRequiredDescriptionDefault
block_idYesIdentifier for a [block](ref:block)
page_sizeNoThe number of items from the full list desired in the response. Maximum: 100
start_cursorNoIf supplied, this endpoint will return a page of results starting after the cursor provided. If not supplied, this endpoint will return the first page of results.

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It states 'Retrieve' implying a read-only operation, but lacks details on permissions, rate limits, error handling, or what 'block children' entails (e.g., nested content). The description is minimal and doesn't disclose behavioral traits beyond the basic action.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise ('Notion | Retrieve block children') with no wasted words. It front-loads the key information (context and action) efficiently, though it may be overly brief for a tool with three parameters and no annotations.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has 3 parameters, no annotations, and no output schema, the description is incomplete. It doesn't explain the return values (e.g., list of child blocks), pagination behavior, or error cases. For a retrieval tool with moderate complexity, more context is needed to guide effective use.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with clear documentation for block_id, page_size, and start_cursor. The description adds no additional parameter semantics beyond what the schema provides, such as examples or context for 'block children'. This meets the baseline for high schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Retrieve') and resource ('block children') with the Notion context. It distinguishes this as a read operation (vs. create/update/delete siblings like API-create-a-database or API-delete-a-block), though it doesn't explicitly differentiate from similar retrieval tools like API-retrieve-a-block or API-retrieve-a-page.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives. It doesn't mention when to retrieve block children versus retrieving a block directly (API-retrieve-a-block) or searching (API-post-search), nor does it specify prerequisites like needing a valid block_id or handling pagination.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

API-get-selfB

Notion | Retrieve your token's bot user

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries full burden. It implies a read operation ('retrieve') but doesn't disclose behavioral traits such as authentication requirements, rate limits, error conditions, or response format. For a tool with zero annotation coverage, this minimal description fails to provide necessary operational context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence that front-loads key information: platform (Notion), action (retrieve), and resource (bot user). There is no wasted verbiage, and every word earns its place by specifying the tool's unique scope.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no annotations, no output schema, and a simple zero-parameter design, the description is incomplete. It lacks details on what the bot user data includes, how it's returned, or any side effects. For a tool that likely returns user identity information, more context on the response structure or use cases would be helpful.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has 0 parameters with 100% schema description coverage, so the schema fully documents the lack of inputs. The description adds no parameter information, which is appropriate here. Baseline is 4 for zero parameters, as no compensation is needed.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description 'Notion | Retrieve your token's bot user' clearly states the action (retrieve) and resource (bot user) with platform context (Notion). It distinguishes from siblings like API-get-user or API-get-users by specifying 'bot user' rather than general users. However, it doesn't explicitly contrast with all sibling tools, keeping it from a perfect 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites (e.g., token authentication), use cases (e.g., verifying bot identity), or exclusions (e.g., not for retrieving human users). With siblings like API-get-user available, this lack of context leaves the agent guessing about appropriate usage scenarios.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

API-get-userC

Notion | Retrieve a user

ParametersJSON Schema
NameRequiredDescriptionDefault
user_idYes

TDQS

C2.8/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries full burden. It states 'Retrieve' implying a read operation, but doesn't disclose behavioral traits such as authentication needs, rate limits, error handling, or what data is returned. For a tool with zero annotation coverage, this is a significant gap in transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise with just three words, front-loaded with the key action and resource. There is zero waste, making it efficient for quick understanding.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no annotations, 0% schema coverage, and no output schema, the description is incomplete. It lacks details on parameters, return values, error cases, and usage context, making it inadequate for a tool with one required parameter and behavioral uncertainties.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It mentions 'a user' but doesn't explain the 'user_id' parameter's meaning, format (UUID), or how to obtain it. The description adds minimal value beyond the schema, failing to address the coverage gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Retrieve') and resource ('a user'), making the purpose understandable. It distinguishes from siblings like 'API-get-users' (plural) by specifying retrieval of a single user. However, it doesn't specify the source ('Notion') adds context but isn't essential to the verb+resource clarity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives like 'API-get-users' or 'API-get-self'. It lacks explicit when/when-not instructions or prerequisites, leaving usage context implied at best.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

API-get-usersC

Notion | List all users

ParametersJSON Schema
NameRequiredDescriptionDefault
page_sizeNoThe number of items from the full list desired in the response. Maximum: 100
start_cursorNoIf supplied, this endpoint will return a page of results starting after the cursor provided. If not supplied, this endpoint will return the first page of results.

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure but provides minimal information. It doesn't mention that this is a paginated API (implied by the parameters but not stated), what authentication is required, rate limits, whether it returns all users or only certain types, or what the response format looks like. The description only states what the tool does at the most basic level without behavioral context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise at just three words ('Notion | List all users'). It's front-loaded with the essential information and contains zero wasted words. While it could benefit from additional context, what's present is efficiently structured.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given that there's no output schema and no annotations, the description is incomplete for a tool with pagination parameters. It doesn't explain what the tool returns, how pagination works, or any behavioral characteristics. For a list operation with pagination controls, users need to understand the response format and pagination behavior, which is completely missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 100% description coverage, with both parameters ('page_size' and 'start_cursor') well-documented in the schema itself. The description adds no parameter information beyond what's already in the schema. According to the scoring rules, when schema_description_coverage is high (>80%), the baseline is 3 even with no param info in the description.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('List all users') and identifies the resource ('users'), making the purpose immediately understandable. However, it doesn't differentiate this tool from its sibling 'API-get-user' (singular), which appears to retrieve a specific user rather than list all users. The description is specific but lacks sibling differentiation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. It doesn't mention the sibling 'API-get-user' for retrieving individual users, 'API-get-self' for getting the current user, or 'API-post-search' which might also find users. There's no context about prerequisites, limitations, or typical use cases for listing all users versus other approaches.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

API-patch-block-childrenC

Notion | Append block children

ParametersJSON Schema
NameRequiredDescriptionDefault
afterNoThe ID of the existing block that the new block should be appended after.
block_idYesIdentifier for a [block](ref:block). Also accepts a [page](ref:page) ID.
childrenYesChild content to append to a container block as an array of [block objects](ref:block)

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries full burden but only states the action without behavioral details. It doesn't disclose if this is a mutation (implied by 'Append'), permission requirements, rate limits, error conditions, or what happens on success/failure, which is inadequate for a tool that modifies data.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise with just three words, front-loading key information ('Notion | Append block children') without waste. Every word contributes to understanding the tool's domain and action efficiently.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (mutation with 3 parameters, no output schema, and no annotations), the description is incomplete. It lacks details on behavior, return values, error handling, and how it differs from siblings, making it insufficient for safe and effective use by an AI agent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so parameters are well-documented in the schema. The description adds no additional meaning beyond implying 'append' relates to 'block children', but doesn't explain parameter interactions or constraints, meeting the baseline for high schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Append') and resource ('block children') with platform context ('Notion'), making the purpose understandable. However, it doesn't distinguish this from sibling tools like 'API-update-a-block' or 'API-get-block-children' beyond the 'append' verb, missing explicit differentiation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives. The description lacks context about prerequisites (e.g., needing an existing block), exclusions, or comparisons to siblings like 'API-update-a-block' or 'API-get-block-children', leaving usage ambiguous.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

API-patch-pageC

Notion | Update page properties

ParametersJSON Schema
NameRequiredDescriptionDefault
archivedNo
coverNoA cover image for the page. Only [external file objects](https://developers.notion.com/reference/file-object) are supported.
iconNoA page icon for the page. Supported types are [external file object](https://developers.notion.com/reference/file-object) or [emoji object](https://developers.notion.com/reference/emoji-object).
in_trashNoSet to true to delete a block. Set to false to restore a block.
page_idYesThe identifier for the Notion page to be updated.
propertiesNoThe property values to update for the page. The keys are the names or IDs of the property and the values are property values. If a page property ID is not included, then it is not changed.

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries full burden but provides minimal behavioral information. It mentions 'Update' which implies mutation, but doesn't disclose permission requirements, whether changes are reversible, rate limits, or what happens when properties are omitted. The schema reveals additional behaviors like archiving and trash management that aren't mentioned.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise with just two words plus context. Every word earns its place - 'Notion' provides context, 'Update' specifies the action, and 'page properties' identifies the resource. No wasted words or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with 6 parameters, no annotations, and no output schema, this description is inadequate. It doesn't explain what successful updates return, error conditions, or the scope of changes possible. The schema reveals complex nested structures for properties, cover, and icon that aren't hinted at in the description.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 83% schema description coverage, the schema does most of the parameter documentation work. The description adds no specific parameter information beyond the generic 'page properties' mention. It doesn't explain what 'properties' means in the Notion context or clarify the relationship between different parameter groups.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Update') and resource ('page properties') with the Notion context. It distinguishes this as a modification tool rather than creation or retrieval, though it doesn't explicitly differentiate from similar update tools like 'API-update-a-block' or 'API-update-a-database'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives. The description doesn't mention prerequisites like needing a page ID, when to use this versus 'API-patch-block-children' for content updates, or what constitutes appropriate 'page properties' to modify.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

API-post-database-queryC

Notion | Query a database

ParametersJSON Schema
NameRequiredDescriptionDefault
archivedNo
database_idYesIdentifier for a Notion database.
filterNoWhen supplied, limits which pages are returned based on the [filter conditions](ref:post-database-query-filter).
filter_propertiesNoA list of page property value IDs associated with the database. Use this param to limit the response to a specific page property value or values for pages that meet the `filter` criteria.
in_trashNo
page_sizeNoThe number of items from the full list desired in the response. Maximum: 100
sortsNoWhen supplied, orders the results based on the provided [sort criteria](ref:post-database-query-sort).
start_cursorNoWhen supplied, returns a page of results starting after the cursor provided. If not supplied, this endpoint will return the first page of results.

TDQS

C2.6/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries full burden but only states the action without behavioral details. It doesn't disclose if this is a read-only operation, its effects (e.g., no mutations), authentication needs, rate limits, or response format, leaving critical behavioral traits unspecified.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise ('Notion | Query a database'), which is efficient and front-loaded. However, it may be overly brief, potentially under-specifying the tool's purpose, but it avoids waste and is structurally clear.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (8 parameters, nested objects) and lack of annotations and output schema, the description is incomplete. It doesn't address behavioral aspects, usage context, or return values, making it insufficient for an agent to fully understand the tool's operation and implications.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 75%, providing good documentation for most parameters. The description adds no parameter-specific semantics beyond the schema, such as explaining filter or sorts usage. With high schema coverage, the baseline of 3 is appropriate, as the description doesn't compensate but doesn't detract either.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description 'Notion | Query a database' states the action (query) and resource (database) but is vague about scope and functionality. It doesn't specify what kind of query (e.g., filtering, sorting, pagination) or how it differs from sibling tools like API-retrieve-a-database or API-post-search, leaving the purpose somewhat ambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit guidance on when to use this tool versus alternatives is provided. The description doesn't mention prerequisites, context, or comparisons to siblings like API-retrieve-a-database (for metadata) or API-post-search (for broader searches), offering no help in tool selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

API-post-pageC

Notion | Create a page

ParametersJSON Schema
NameRequiredDescriptionDefault
childrenNoThe content to be rendered on the new page, represented as an array of [block objects](https://developers.notion.com/reference/block).
coverNoThe cover image of the new page, represented as a [file object](https://developers.notion.com/reference/file-object).
iconNoThe icon of the new page. Either an [emoji object](https://developers.notion.com/reference/emoji-object) or an [external file object](https://developers.notion.com/reference/file-object)..
parentYes
propertiesYes

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries full burden for behavioral disclosure but only states the basic action. It doesn't mention authentication requirements, rate limits, error conditions, what happens on success (e.g., returns new page ID), or whether the operation is idempotent. For a creation tool with no annotation coverage, this is inadequate.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise at just three words, front-loading the essential information ('Notion | Create a page') with zero wasted words. Every element earns its place, making it highly efficient despite potential completeness issues.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a creation tool with 5 parameters (2 required), no annotations, no output schema, and complex nested objects, the description is severely incomplete. It doesn't address what the tool returns, error handling, authentication needs, or provide any context about the Notion API integration. The conciseness comes at the expense of necessary context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description adds no parameter information beyond what's in the schema (which has 60% coverage). It doesn't explain the purpose of 'parent' or 'properties' parameters, nor does it provide context about optional parameters like 'children', 'cover', and 'icon'. With moderate schema coverage, the baseline is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Create a page') and the resource ('Notion'), making the purpose immediately understandable. However, it doesn't differentiate this from sibling tools like 'API-create-a-database' or 'API-patch-page' beyond the basic resource type, which prevents a perfect score.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. With siblings like 'API-patch-page' (for updates) and 'API-create-a-database' (for creating databases), there's no indication of when this specific page creation tool is appropriate, leaving usage context unclear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

API-post-searchC

Notion | Search by title

ParametersJSON Schema
NameRequiredDescriptionDefault
filterNoA set of criteria, `value` and `property` keys, that limits the results to either only pages or only databases. Possible `value` values are `"page"` or `"database"`. The only supported `property` value is `"object"`.
page_sizeNoThe number of items from the full list to include in the response. Maximum: `100`.
queryNoThe text that the API compares page and database titles against.
sortNoA set of criteria, `direction` and `timestamp` keys, that orders the results. The **only** supported timestamp value is `"last_edited_time"`. Supported `direction` values are `"ascending"` and `"descending"`. If `sort` is not provided, then the most recently edited results are returned first.
start_cursorNoA `cursor` value returned in a previous response that If supplied, limits the response to results starting after the `cursor`. If not supplied, then the first page of results is returned. Refer to [pagination](https://developers.notion.com/reference/intro#pagination) for more details.

TDQS

C2.7/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries full burden for behavioral disclosure but offers minimal information. It doesn't describe whether this is a read-only operation (implied by 'search'), authentication requirements, rate limits, pagination behavior (though hinted in schema), or what happens on errors. The description adds little beyond the basic action, leaving significant behavioral gaps for an agent to infer.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise with just three words ('Notion | Search by title'), which is front-loaded and wastes no space. Every element (resource, action, scope hint) earns its place without redundancy. For a tool with rich schema documentation, this brevity is efficient and appropriate.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (5 parameters, nested objects, no output schema) and lack of annotations, the description is incomplete. It doesn't explain return values, error handling, or key behaviors like pagination (implied by 'start_cursor' in schema). For a search tool with multiple parameters and no output schema, more context is needed to help an agent use it effectively.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all 5 parameters thoroughly. The description adds minimal value beyond the schema—it implies the 'query' parameter searches titles, but this is already clear from the schema's description. No additional syntax, format details, or usage examples are provided. Baseline 3 is appropriate when schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description 'Notion | Search by title' states the resource (Notion) and action (search), but is vague about scope and specificity. It mentions 'by title' which adds some specificity, but doesn't clarify whether this searches only pages/databases or other objects, nor does it distinguish from sibling tools like 'API-post-database-query' which also involves searching. The description lacks a clear verb+resource+scope combination.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. It doesn't mention sibling tools like 'API-post-database-query' (for querying databases) or 'API-retrieve-a-page' (for direct retrieval), nor does it specify use cases like finding pages/databases by title versus other search methods. There's no explicit when/when-not context or prerequisites stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

API-retrieve-a-blockC

Notion | Retrieve a block

ParametersJSON Schema
NameRequiredDescriptionDefault
block_idYesIdentifier for a Notion block

TDQS

C2.6/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It only states the action ('Retrieve') without detailing traits like read-only nature, potential rate limits, authentication needs, or what the return includes (e.g., JSON structure, error handling). This is a significant gap for a tool with no annotation coverage.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is very concise ('Notion | Retrieve a block'), with no wasted words. It's front-loaded and efficient, though it could benefit from slightly more detail to improve clarity without losing brevity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (a retrieval operation with no output schema) and lack of annotations, the description is incomplete. It doesn't explain what is retrieved (e.g., block content, properties), potential side effects, or error cases. For a tool with no structured output information, more context is needed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 100% description coverage, with 'block_id' clearly documented as 'Identifier for a Notion block'. The description adds no additional meaning beyond this, such as format examples or constraints. Baseline 3 is appropriate since the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states the action ('Retrieve') and resource ('a block'), but it's vague about what retrieval entails—does it fetch metadata, content, or both? It distinguishes from siblings like 'API-delete-a-block' and 'API-update-a-block' by specifying retrieval, but lacks specificity compared to tools like 'API-retrieve-a-page' or 'API-retrieve-a-database'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives. For instance, it doesn't clarify if this should be used over 'API-retrieve-a-page' for block-level data or how it relates to 'API-get-block-children'. The description offers no context or exclusions, leaving usage unclear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

API-retrieve-a-commentC

Notion | Retrieve comments

ParametersJSON Schema
NameRequiredDescriptionDefault
block_idYesIdentifier for a Notion block or page
page_sizeNoThe number of items from the full list desired in the response. Maximum: 100
start_cursorNoIf supplied, this endpoint will return a page of results starting after the cursor provided. If not supplied, this endpoint will return the first page of results.

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries full burden. It mentions 'Retrieve' but doesn't disclose behavioral traits like pagination (implied by start_cursor/page_size in schema), rate limits, authentication needs, or response format. For a read operation with 3 parameters, this leaves significant gaps.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Extremely concise with 'Notion | Retrieve comments'—front-loaded, zero waste, and appropriately sized for a simple retrieval tool. Every word earns its place by specifying platform and action.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no annotations, no output schema, and 3 parameters (with 100% schema coverage), the description is incomplete. It lacks context on behavior (e.g., pagination, error handling), output format, or usage scenarios, making it inadequate for a tool with potential complexity like paginated comment retrieval.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema fully documents parameters (block_id, page_size, start_cursor). The description adds no additional meaning beyond what's in the schema, such as clarifying comment retrieval specifics. Baseline 3 is appropriate when schema does all the work.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Retrieve') and resource ('comments'), with 'Notion' providing context. It distinguishes from siblings like API-create-a-comment (create vs. retrieve) and API-retrieve-a-block (comments vs. blocks), but could be more specific about scope (e.g., 'retrieve comments on a block/page').

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit guidance on when to use this tool versus alternatives like API-retrieve-a-page-property or API-post-search for comments. The description implies it's for fetching comments, but lacks context on prerequisites, typical use cases, or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

API-retrieve-a-databaseC

Notion | Retrieve a database

ParametersJSON Schema
NameRequiredDescriptionDefault
database_idYesAn identifier for the Notion database.

TDQS

C2.6/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries full burden. It states 'Retrieve a database' but doesn't disclose behavioral traits such as whether this is a read-only operation, requires authentication, has rate limits, returns specific data formats, or handles errors. This leaves significant gaps in understanding how the tool behaves beyond its basic purpose.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description 'Notion | Retrieve a database' is very concise and front-loaded, with no wasted words. It efficiently conveys the tool's domain and action in a single phrase. However, it might be overly terse, potentially sacrificing clarity for brevity, but it earns its place by being direct.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has no annotations, no output schema, and a simple input schema, the description is incomplete. It doesn't explain what 'retrieve' returns (e.g., database properties, schema, or content), any prerequisites, or error handling. For a retrieval tool in a complex API like Notion, more context is needed to guide effective use.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 100% description coverage, with 'database_id' documented as 'An identifier for the Notion database.' The description adds no additional meaning beyond this, such as format examples or constraints. Since schema coverage is high, the baseline score of 3 is appropriate, as the description doesn't compensate but also doesn't detract.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description 'Notion | Retrieve a database' states the action ('Retrieve') and resource ('a database'), but it's vague about what 'retrieve' entails (e.g., fetching metadata, schema, or content). It distinguishes from siblings like 'API-create-a-database' and 'API-update-a-database' by specifying retrieval, but lacks specificity compared to tools like 'API-retrieve-a-page' or 'API-retrieve-a-block'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit guidance is provided on when to use this tool versus alternatives. For example, it doesn't clarify if this should be used for getting database structure versus querying data (which might be done with 'API-post-database-query'), or how it differs from retrieving pages or blocks. The description implies usage for retrieval but offers no context or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

API-retrieve-a-pageC

Notion | Retrieve a page

ParametersJSON Schema
NameRequiredDescriptionDefault
filter_propertiesNoA list of page property value IDs associated with the page. Use this param to limit the response to a specific page property value or values. To retrieve multiple properties, specify each page property ID. For example: `?filter_properties=iAk8&filter_properties=b7dh`.
page_idYesIdentifier for a Notion page

TDQS

C2.6/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It only states 'Retrieve a page', implying a read-only operation, but fails to detail aspects like authentication requirements, rate limits, error handling, or what the retrieval includes (e.g., full content vs. metadata). This leaves significant gaps for an agent to understand how to use it effectively.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is very concise with 'Notion | Retrieve a page', which is front-loaded and wastes no words. However, it is arguably too brief, bordering on under-specified, as it could benefit from a bit more detail without losing efficiency.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity of a retrieval tool with no annotations and no output schema, the description is incomplete. It does not explain what is returned (e.g., page structure, properties, or content), how to handle the 'filter_properties' parameter effectively, or any behavioral traits. This leaves the agent with insufficient context for reliable use.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the input schema fully documents both parameters ('page_id' and 'filter_properties'). The description adds no additional meaning beyond the schema, such as explaining parameter interactions or usage examples. Baseline is 3 since the schema handles the heavy lifting, but the description does not compensate or enhance understanding.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description 'Notion | Retrieve a page' states the action ('Retrieve') and resource ('a page'), which is clear but minimal. It lacks specificity about what 'retrieve' entails (e.g., fetching metadata, content, or properties) and does not distinguish it from sibling tools like 'API-retrieve-a-block' or 'API-retrieve-a-database', leaving ambiguity in scope.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives. For example, it does not clarify if this is for basic page info versus using 'API-retrieve-a-page-property' for specific properties or 'API-post-search' for broader queries, nor does it mention prerequisites like needing a valid page ID.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

API-retrieve-a-page-propertyC

Notion | Retrieve a page property item

ParametersJSON Schema
NameRequiredDescriptionDefault
page_idYesIdentifier for a Notion page
page_sizeNoFor paginated properties. The max number of property item objects on a page. The default size is 100
property_idYesIdentifier for a page [property](https://developers.notion.com/reference/page#all-property-values)
start_cursorNoFor paginated properties.

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden of behavioral disclosure. It only states the action ('Retrieve') without details on permissions, rate limits, error handling, or what the output looks like (e.g., property value format). This is inadequate for a tool with no annotation coverage.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise with a single phrase ('Notion | Retrieve a page property item'), front-loaded with the context and action. There is no wasted text, making it efficient and easy to parse.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity of retrieving a property item (involving pagination and Notion-specific identifiers), no annotations, and no output schema, the description is incomplete. It doesn't explain the return value, pagination behavior, or any prerequisites, leaving significant gaps for an AI agent to understand how to use this tool effectively.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema description coverage is 100%, so the schema already documents all parameters (page_id, page_size, property_id, start_cursor) with clear descriptions. The description adds no additional meaning beyond what the schema provides, such as examples or usage context, meeting the baseline for high schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Retrieve') and target ('a page property item') with the Notion context, making the purpose understandable. However, it doesn't distinguish this from sibling tools like 'API-retrieve-a-page' or 'API-retrieve-a-database', which also retrieve Notion resources, so it lacks explicit differentiation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. For example, it doesn't explain if this is for getting property values from a specific page, as opposed to querying a database or retrieving the page itself, which are covered by sibling tools like 'API-post-database-query' or 'API-retrieve-a-page'.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

API-update-a-blockC

Notion | Update a block

ParametersJSON Schema
NameRequiredDescriptionDefault
archivedNoSet to true to archive (delete) a block. Set to false to un-archive (restore) a block.
block_idYesIdentifier for a Notion block
typeNoThe [block object `type`](ref:block#block-object-keys) value with the properties to be updated. Currently only `text` (for supported block types) and `checked` (for `to_do` blocks) fields can be updated.

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries full burden for behavioral disclosure. While 'Update' implies mutation, it doesn't specify permissions required, rate limits, whether updates are reversible, or what happens when updating different block types. The description mentions 'Notion' which provides some context, but lacks crucial behavioral details for a mutation tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise at just three words, front-loading the essential information ('Notion | Update a block') with zero wasted words. Every element earns its place: platform context, action, and resource. This is a model of efficiency in tool naming/description alignment.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with no annotations and no output schema, the description is insufficiently complete. It doesn't explain what 'updating a block' entails operationally, what success/failure looks like, or how this differs from other update tools in the sibling set. The 100% schema coverage helps with parameters, but the overall context for using this tool remains unclear.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 100% schema description coverage, the schema already documents all three parameters thoroughly. The description adds no additional parameter information beyond what's in the schema. The baseline score of 3 reflects adequate parameter documentation through the schema alone, though the description doesn't enhance understanding of parameter usage or relationships.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Update') and resource ('a block') with the platform context ('Notion'), making the purpose immediately understandable. However, it doesn't differentiate this tool from sibling tools like 'API-patch-block-children' or 'API-patch-page' which might also update Notion content, leaving some ambiguity about when to use this specific update method.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. With sibling tools like 'API-patch-block-children' and 'API-patch-page' that might handle similar updates, there's no indication of what makes this tool distinct or when it should be preferred over other update mechanisms in the Notion API.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

API-update-a-databaseC

Notion | Update a database

ParametersJSON Schema
NameRequiredDescriptionDefault
database_idYesidentifier for a Notion database
descriptionNoAn array of [rich text objects](https://developers.notion.com/reference/rich-text) that represents the description of the database that is displayed in the Notion UI. If omitted, then the database description remains unchanged.
propertiesNoProperty schema of database. The keys are the names of properties as they appear in Notion and the values are [property schema objects](https://developers.notion.com/reference/property-schema-object).
titleNoAn array of [rich text objects](https://developers.notion.com/reference/rich-text) that represents the title of the database that is displayed in the Notion UI. If omitted, then the database title remains unchanged.

TDQS

C2.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries full burden for behavioral disclosure but offers minimal insight. It implies a mutation operation ('update'), but doesn't address critical aspects: permission requirements (e.g., edit access), side effects (e.g., changes propagate to dependent pages), idempotency, error conditions, or response format. The description fails to compensate for the lack of annotations, leaving the agent under-informed about the tool's behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise but under-specified—'Notion | Update a database' is a single phrase with no wasted words, yet it lacks necessary detail. While brevity is achieved, the structure doesn't front-load actionable information (e.g., purpose or key parameters). It's more sparse than efficiently informative, failing to leverage its brevity for clarity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (4 parameters with nested objects, mutation operation, no output schema, and no annotations), the description is incomplete. It doesn't address the mutation's impact, expected outputs, error handling, or integration with sibling tools. The high schema coverage helps with inputs, but without annotations or output schema, the description should provide more context about the update operation's behavior and results, which it fails to do.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with each parameter well-documented in the schema itself (e.g., database_id as identifier, title/description as rich text arrays, properties as schema objects). The description adds no parameter semantics beyond what the schema provides—it doesn't explain relationships between parameters or usage examples. However, the high schema coverage justifies the baseline score of 3, as the schema adequately describes inputs.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose2/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description 'Notion | Update a database' is essentially a tautology that restates the tool name 'API-update-a-database' with the addition of 'Notion'. It doesn't specify what 'update' means operationally (e.g., modifying title, description, properties) or distinguish it from similar tools like 'API-patch-block-children' or 'API-patch-page'. While it identifies the resource (Notion database), the verb 'update' remains vague without elaboration.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines1/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites (e.g., needing a database_id), contrast with sibling tools like 'API-retrieve-a-database' (for reading) or 'API-create-a-database' (for creation), or specify use cases (e.g., modifying schema vs. content). This leaves the agent with no contextual cues for tool selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

TDQS

B3.1/5.0
Disambiguation4/5

Most tools have distinct purposes targeting specific Notion resources and actions, with clear separation between operations like create, retrieve, update, and delete. However, some potential overlap exists between 'API-retrieve-a-block' and 'API-get-block-children', as both involve block retrieval but with different scopes, which could cause minor confusion.

Naming Consistency5/5

Tool names follow a highly consistent pattern throughout, using a structured 'API-verb-a-resource' format with hyphens separating components. All tools maintain this convention, making them predictable and easy to parse, with no deviations in style or structure.

Tool Count4/5

With 19 tools, the count is slightly high but reasonable for a comprehensive Notion API server, covering a wide range of operations. It might feel a bit heavy, but each tool appears to serve a specific function in the Notion domain, justifying its inclusion without being excessive.

Completeness5/5

The tool set provides excellent coverage of the Notion API domain, including full CRUD operations for key resources like pages, databases, blocks, and comments, along with search, query, and user management. No obvious gaps are present, enabling agents to handle complete workflows without dead ends.

Maintenance

ActivitySlowing
ResponsivenessSyncing

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • -
    license
    Not graded
    quality
    Not graded
    maintenance
    An MCP server that enables natural language interaction with the Notion API, allowing users to search, comment, create pages, and access content within their Notion workspace.
    172,212
  • A
    license
    A
    quality
    C
    maintenance
    An MCP server for Notion API with optimized token efficiency and full database property filtering, enabling AI assistants to manage pages, databases, and blocks.
    32
    38
    1
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    MCP server for the Notion API, enabling management of pages, blocks, databases, data sources, comments, and users through natural language.
    13
    2
    MIT

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/makenotion/notion-mcp-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server