mcp-notion
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| NOTION_API_KEY | Yes | Your Notion integration token (from https://www.notion.com/my-integrations) | |
| NOTION_ALIAS_TASKS | No | Optional alias mapping a database name to a Notion URL (e.g. https://www.notion.so/workspace/0123456789abcdef0123456789abcdef) |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| list_databasesA | List Notion databases visible to this integration, as {title, url, alias}.
|
| get_database_schemaA | Property names and types for a database, as {title, url, properties}. Call this before filtering with query_database or writing with update_row. ref: an alias, a notion.so URL, an id, or an exact database title. |
| query_databaseA | Rows of a Notion database, as {title, url, properties}. ref: an alias, a notion.so URL, an id, or an exact database title. filter: property name -> value, combined with AND. Text properties match by substring, everything else by equality. Names must come from get_database_schema. sort: {"property": name, "direction": "asc" | "desc"}. limit: maximum rows to return. |
| get_pageA | A Notion page, as {title, url, properties, markdown}. The body is markdown;
block types outside the supported subset appear as
|
| searchA | Search titles of pages and databases shared with this integration, as
{title, url, kind}. Use it to find the URL to pass as a |
| create_pageA | Create a page, either as a row in a database or as a subpage of another page, as {title, url, properties}. parent_ref: an alias, a notion.so URL, an id, or an exact title. title: the new page's title. For a database parent, set the title this way, not through properties. markdown: optional page body. Headings 1-3, paragraphs, bulleted and numbered lists, to-dos, fenced code, quotes, and dividers are supported; anything else fails the call before Notion is touched. properties: for a database parent only, property name -> value, excluding the title property. Call get_database_schema first for the valid names. |
| append_to_pageA | Append markdown to the end of a page, as {appended, url}. Existing content is never modified or removed. ref: an alias, a notion.so URL, an id, or an exact page title. markdown: same supported subset as create_page. Empty or whitespace-only markdown is rejected without contacting Notion. |
| update_rowB | Set properties on a database row, as {title, url, properties}. Only the named properties change; the page body is untouched. ref: an alias, a notion.so URL, an id, or an exact row title. properties: property name -> value. Call get_database_schema first for the valid names and, for select and status properties, the valid options. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 8 tools
The tools cleanly separate database operations (schema, query, row update) from page operations (get, create, append), with search covering discovery. The only mild overlap is between search and list_databases for finding databases, but the descriptions clarify their different scopes.
Most names follow a consistent verb_noun snake_case pattern such as get_database_schema, query_database, append_to_page, and update_row. The sole exception is the bare verb 'search', which is a minor deviation rather than a systemic inconsistency.
Eight tools is a well-scoped size for a Notion integration. Each tool covers a distinct core operation—listing, schema inspection, querying, page reading, creation, appending, and row updating—without redundant or unnecessary entries.
The set covers core read, create, append, and update workflows for pages and database rows, and includes schema discovery. However, there is no delete/archive operation and no way to edit a page body beyond appending, which are notable lifecycle gaps for the stated domain.