Easy Notion MCP
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| PORT | No | HTTP server port for OAuth/HTTP transport. | 3333 |
| NOTION_TOKEN | No | Notion API integration token used for Stdio mode. | |
| OAUTH_REDIRECT_URI | No | OAuth callback URL. | http://localhost:{PORT}/callback |
| NOTION_ROOT_PAGE_ID | No | Default parent page ID. | |
| NOTION_TRUST_CONTENT | No | Skip content notice on read_page responses. | false |
| NOTION_OAUTH_CLIENT_ID | No | Notion public integration OAuth client ID. | |
| NOTION_OAUTH_CLIENT_SECRET | No | Notion public integration OAuth client secret. |
Capabilities
Features and capabilities supported by this server
| Capability | Details |
|---|---|
| tools | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| create_pageA | Create a new Notion page from markdown content. Supported markdown syntax:
|
| append_contentB | Append markdown content to an existing page. Supports the same markdown syntax as create_page (headings, tables, callouts, toggles, columns, bookmarks, etc.). |
| replace_contentA | Replace all page content with the provided markdown. Deletes existing blocks and writes new ones. Supports the same markdown syntax as create_page (headings, tables, callouts, toggles, columns, bookmarks, etc.). |
| update_sectionA | Update a section of a page by heading name. Finds the heading, replaces everything from that heading to the next section boundary. For H1 headings, the section extends to the next heading of any level. For H2/H3 headings, it extends to the next heading of the same or higher level. Include the heading itself in the markdown. More efficient than replace_content for editing one section of a large page. |
| find_replaceA | Find and replace text on a page. Preserves uploaded files and blocks that aren't touched. More efficient than replace_content for targeted text changes like fixing typos, updating URLs, or renaming terms. |
| read_pageA | Read a page and return its metadata plus markdown content. Recursively fetches nested blocks. Output uses the same conventions as input: toggles as +++ blocks, columns as ::: blocks, callouts as > [!NOTE], tables as | pipes |. The markdown round-trips cleanly — read a page, modify the markdown, replace_content to update. |
| duplicate_pageC | Duplicate a page. Reads all blocks from the source and creates a new page with the same content. |
| update_pageC | Update page title, icon, or cover. Cover accepts an image URL or a file:// path (which will be uploaded to Notion). |
| archive_pageC | Archive a page in Notion. |
| searchA | Search Notion pages or databases. Use filter: 'databases' to find databases by name, then get_database for schema details. |
| list_pagesC | List child pages under a parent page. |
| share_pageC | Return the page URL that can be shared from Notion. |
| create_databaseC | Create a database under a parent page. Supported property types: title, text, number, select, multi_select, date, checkbox, url, email, phone, status. |
| get_databaseA | Get a database's schema — property names, types, and select/status options. Call this before query_database or add_database_entry to know the exact property names and valid values. |
| list_databasesA | List all databases the integration can access. Returns database names and IDs — use get_database on any result to see its schema. |
| query_databaseA | Query a database with optional filters, sorts, or text search. Use text for simple keyword search across all text fields. For advanced filtering, use the filter parameter with Notion filter syntax:
|
| add_database_entryA | Create a new entry in a database. Pass properties as simple key-value pairs — the server converts using the database schema. Example: { "Name": "Buy groceries", "Status": "Todo", "Priority": "High", "Due": "2025-03-20", "Tags": ["Personal"] }. Call get_database to see available property names and valid select/status options. |
| add_database_entriesA | Create multiple entries in a database in one call. Each entry uses the same simple key-value format as add_database_entry. Returns per-entry results — partial failures don't block the batch. |
| update_database_entryA | Update an existing database entry. Pass only the properties you want to change — omitted properties are left unchanged. Uses the same simple key-value format as add_database_entry. Call get_database to see valid property names and options. |
| list_commentsC | List comments on a page. |
| add_commentC | Add a comment to a page. |
| move_pageC | Move a page to a new parent page. |
| restore_pageC | Restore an archived page. |
| delete_database_entryC | Delete (archive) a database entry. |
| list_usersB | List workspace users. |
| get_meB | Get the current bot user. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
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/Grey-Iris/easy-notion-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server
→ uploads and creates image block
Link syntax: