Skip to content
Agentmart
Submit a tool

Easy Notion

Markdown-first Notion MCP server.

Connector by misterwigglesworth · GitHub account verified by the MCP Registry

IndexedMITLocal (stdio)★ 55
Write a review

Chalk Labs

Need help deploying Easy Notion?

Chalk Labs sets up agents like this inside real teams: connected to your tools, tested on your data, with a human in the loop where it matters.

Book a call

Install

Works with Claude Code, Codex, VS Code, Cursor, Windsurf, Claude Desktop. Read the repository before you give any tool access to your data.

npx agentmarket install connector/misterwigglesworth-easy-notion

Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.

Get the weekly diff

The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.

We use your email only for this newsletter. Privacy

About

Markdown-first Notion MCP server. ~6-7x fewer response tokens vs official Notion MCP. 43 tools.

No reviews yet. Installed it? Reviews come from verified installers only. How reviews work

Permissions

What this server can do and what it asks for, from its tool list and install config. Checked Oct 25, 2026.

Tools
18 read · 21 write · 3 delete · 1 not yet classified
Secrets
1 (API keys, tokens or passwords)
Install scripts
Not scanned yet
Runs as
Node.js package

Tools by what they do 43

Read from the source code; the running server may list different tools.

Read 18 · Look things up without changing anything.

  • find_replace
  • get_config
  • get_database
  • get_me
  • get_view
  • list_comments
  • list_databases
  • list_pages
  • list_users
  • list_views
  • query_database
  • query_view
Show 6 more tools
  • read_block
  • read_page
  • read_section
  • read_toggle
  • search
  • search_in_page

Write 21 · Create, change, send or run things.

  • add_comment
  • add_database_entries
  • add_database_entry
  • append_content
  • archive_page
  • archive_toggle
  • create_database
  • create_page
  • create_page_from_file
  • create_view
  • move_page
  • replace_content
Show 9 more tools
  • restore_page
  • restore_toggle
  • share_page
  • update_block
  • update_data_source
  • update_database_entry
  • update_page
  • update_section
  • update_view

Delete 3 · Delete, drop, revoke or wipe things.

  • delete_database_entry
  • delete_view
  • update_toggle

Not yet classified 1 · We could not tell from the name and description.

  • duplicate_page

Secrets and settings it asks for

Secrets: values you paste in that let it act as you.

  • NOTION_TOKEN

Other settings (environment variables or headers).

  • NOTION_ROOT_PAGE_ID

Tools (43)

Read from the source code; the running server may differ. Descriptions are the server’s own words; hidden characters are shown as [U+…].

  • add_comment

    Add a comment to a page. Supports inline markdown and page mentions with @[Title](notion-url). Unlike append_content, a mention the integration cannot resolve is not downgraded to a plain link and returns no warning, so the call can fail. Returns { id, content }.

  • add_database_entries

    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.

  • add_database_entry

    Create one database entry using simple key-value property inputs. Call get_database first to see available property names and valid select/status options. Writable property values use simple inputs: - title, rich_text: string - number: number - select, status: option name string - multi_select: array of option name strings - date: ISO date string (start only) - checkbox: boolean - url, email, phone: string - relation: string or array of page IDs - people: string or array of user IDs Not writable from this tool: - formula, rollup, unique_id, created_time, last_edited_time, created_by, last_ed…

  • append_content

    Append markdown content to an existing page. The server converts markdown into native Notion blocks, not flat/plain text. The server automatically handles Notion API limits: batches more than 100 child blocks, splits rich text over 2000 characters, and writes deeply nested blocks in additional passes, so callers can append large documents in one call with no need to pre-chunk or pre-split. Supports the same syntax as create_page; read resource easy-notion://docs/markdown for the full syntax guide. Page mentions: @[Title](notion-url); a mention the integration cannot resolve is downgraded to a …

  • archive_page

    Archive a page in Notion.

  • archive_toggle

    Archive one toggle by title from a page. Searches recursively and matches plain toggle blocks plus toggleable heading_1, heading_2, and heading_3 blocks using case-insensitive trimmed text. Archives the matched container block; children are not deleted individually. Missing titles return the available toggle titles.

  • create_database

    Create a database under a parent page. Supported property types and extras: - title - rich_text (alias: text) - number (optional: format, for example "dollar", "percent", "number_with_commas") - select, multi_select, status (optional: options array of strings or {name, color, description}) - date, checkbox, url, email, phone - formula (required: expression, for example "prop(\"Count\") * 2") - rollup (required: function, relation_property, rollup_property) - relation (required: data_source_id; optional: relation_type "single_property" or "dual_property", synced_property_name) - unique_id (opt…

  • create_page

    Create a Notion page from markdown as native Notion blocks. Server handles 100-block batching, 2000-char splitting, and deep nesting, so no pre-chunking. Supports stdio-only file:// uploads. Syntax: easy-notion://docs/markdown. Mentions: @[Title](notion-url). Returns { id, title, url, success: true }, note for workspace-parent pages, plus block_map for top-level created blocks when present.

  • create_page_from_file

    Create a Notion page from a local markdown file. The server reads and validates the file, then creates the same result as create_page without sending file contents through the agent context. The server converts the markdown to native Notion blocks (not flat text) and automatically handles Notion's limits (100-block batching, 2000-char splitting, deep nesting), so large files need no pre-chunking. STDIO MODE ONLY. This tool is not available when the server runs over HTTP, because in HTTP mode the server's filesystem belongs to the server host, not the caller. Restrictions: - file_path must be…

  • create_view

    Create a Notion database view. Pass database_id. Dashboard views and dashboard widget placement are not supported.

  • delete_database_entry

    Delete (archive) a database entry.

  • delete_view

    Delete a Notion database view. Destructive: confirm must be exactly true.

  • duplicate_page

    Duplicate a page. Reads all blocks from the source and creates a new page with the same content that this server can represent. If the source contains block types this server does not yet support (e.g. child_page subpages, synced_block, child_database, link_to_page), those are omitted from the duplicate AND listed in a `warnings` field with code `omitted_block_types`. Notion AI meeting notes are duplicated as ordinary toggle/heading/paragraph blocks (summary and notes only — transcripts are not duplicated); a `read_only_block_rendered` warning is emitted to identify meeting-notes blocks whose …

  • find_replace

    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.

  • get_config

    Report this server's own settings: version, transport, the workspace root that bounds create_page_from_file file paths, and how many tools are visible. Call this when a file-path or configuration error occurs and you need the server's actual settings rather than a guess. Read-only, makes no Notion API call, and never returns credentials. Returns { version, transport, workspace_root_configured, workspace_root_resolved, workspace_root_status, workspace_root_source, markdown_docs, visible_tools_count }.

Show 28 more tools
  • get_database

    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.

  • get_me

    Get the current bot user.

  • get_view

    Retrieve one Notion database view by ID. Returns a curated summary (id, name, type, url, data_source_id); set include_config: true for the full raw Notion view object.

  • list_comments

    List comments on a page.

  • list_databases

    List all databases the integration can access. Returns database names and IDs — use get_database on any result to see its schema.

  • list_pages

    List child pages under a parent page. Each row returns id, title, created_time, and last_edited_time. Timestamps are full ISO-8601 values from Notion, rounded to the minute, and last_edited_time advances on page content and property edits.

  • list_users

    List workspace users.

  • list_views

    List Notion database views. Pass exactly one of database_id or data_source_id. Returns a curated summary of each view (id, name, type, url, data_source_id) plus pagination cursors; set include_config: true for the full raw Notion view objects.

  • move_page

    Move a page to a new parent page.

  • query_database

    Query a database with optional filters, sorts, or text search. Use text for simple keyword search across title, rich_text, url, email, and phone fields. For advanced filters, pass Notion filter syntax and call get_database first to see property names and valid options. Response shape: { results: Array<entry>, warnings?: Array<warning> }. Multi-value properties are capped by max_property_items and can emit truncated_properties; read resources easy-notion://docs/property-pagination and easy-notion://docs/warnings for details.

  • query_view

    Query a Notion database view. Creates a temporary view query, fetches database row results, then deletes the query.

  • read_block

    Read one block by ID as markdown. Container blocks are fetched recursively with children. Unsupported root block types return a clear error; unsupported nested blocks are omitted and listed in warnings. Notion AI meeting-notes blocks encountered in the result are rendered as a synthetic toggle and produce a `read_only_block_rendered` warning. Transcripts are not included from these tools.

  • read_page

    Read a page and return metadata plus markdown. Recursively fetches nested blocks and uses the same markdown conventions accepted by create_page. If unsupported block types are omitted from the markdown, they are listed in warnings. Do NOT round-trip markdown through replace_content when omitted_block_types warnings are present; omitted blocks would be deleted. Notion AI meeting notes are rendered as a synthetic toggle containing the title, an optional recording timestamp callout, and `## Summary` / `## Notes` heading sections. Transcript sections are included only with `include_transcript: tr…

  • read_section

    Read a single page section by heading name. Uses the same heading matching and boundary rules as update_section: headings are matched case-insensitively, H1 sections end at the next heading of any level, and H2/H3 sections end at the next heading of the same or higher level. Includes the heading block itself and recursively renders nested children only for blocks inside the selected section. If unsupported nested block types are omitted, the response includes warnings. Notion AI meeting-notes blocks encountered in the result are rendered as a synthetic toggle and produce a `read_only_block_ren…

  • read_toggle

    Read one toggle by title from a page. Searches recursively and matches plain toggle blocks plus toggleable heading_1, heading_2, and heading_3 blocks using case-insensitive trimmed text. Missing titles return the available toggle titles. Notion AI meeting-notes blocks encountered in the result are rendered as a synthetic toggle and produce a `read_only_block_rendered` warning. Transcripts are not included from these tools.

  • replace_content

    Replaces all page content with the provided markdown atomically (one Notion API call). Notion's atomic markdown endpoint converts the markdown to native Notion blocks in that one API call. On matched blocks Notion preserves the original block IDs, so deep-link anchors (`#block-id`) and inline-comment threads attached to those blocks survive the edit. Unmatched blocks (returned in `warnings` with code `unmatched_blocks`) are replaced with new IDs. NOT preserved across replace_content: `child_page` subpages, `synced_block` instances, `child_database` views, and `link_to_page` references on the …

  • restore_page

    Restore an archived page.

  • restore_toggle

    Restore an archived toggle or toggleable heading by archived block ID. Use the block ID returned by archive_toggle; Notion does not expose archived child enumeration for title search or read_page include_archived.

  • search

    Search Notion pages or databases. Use filter: 'databases' to find databases by name, then get_database for schema details.

  • search_in_page

    Search raw Notion block plain text inside a page, optionally scoped to one toggle or toggleable heading by title. Matching is case-insensitive plain substring search.

  • share_page

    Return the page URL that can be shared from Notion.

  • update_block

    Update a single block in place by ID. Preserves the block's identity (deep-link anchors and inline-comment threads attached to the block survive the edit). Use this for surgical edits: fixing a heading, toggling a checkbox, rewriting one paragraph. For multi-block edits, use append_content, replace_content, or update_section. Type lock-in: the markdown must parse to the same block type as the existing block. update_block cannot change a block's type, because Notion's API forbids it. To change a block's type, use replace_content or delete + append. Updatable types: paragraph, heading_1, headi…

  • update_data_source

    CRITICAL: full-list semantics. When you update a select or status property's `options` array, you MUST send the full desired list. Any existing option you omit will be permanently removed from the database, along with any relationship to rows currently using it. Rows that currently reference a removed option are silently reassigned to the default group's first option (for example "Not started" for status properties). No signal is raised. If you want to preserve the meaning of existing rows when removing an option, reclassify those rows to another explicit option before removing the option from…

  • update_database_entry

    Update an existing database entry using simple key-value property inputs. Pass only properties to change; omitted properties are left unchanged. Call get_database first to see available property names and valid select/status options. Writable property values use the same simple inputs as add_database_entry: - title, rich_text: string - number: number - select, status: option name string - multi_select: array of option name strings - date: ISO date string (start only) - checkbox: boolean - url, email, phone: string - relation: string or array of page IDs - people: string or array of user IDs …

  • update_page

    Update page title, icon, or cover. Cover accepts an image URL, or a file:// path (stdio transport only) which will be uploaded to Notion. In HTTP transport, the file:// form is rejected — use an HTTPS URL instead.

  • update_section

    DESTRUCTIVE, no rollback: this tool deletes blocks in the section, then writes new blocks. If the write fails mid-call, the section is left partially or fully emptied; for most sections the heading anchor is deleted, so a retry can fail with "heading not found." For irreplaceable sections, duplicate_page the target first so you have a restore point. 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 he…

  • update_toggle

    DESTRUCTIVE, no rollback: this tool preserves the matched toggle container block ID, then deletes its body children and appends replacement body blocks. Child block IDs inside the body change, and if the write fails mid-call the toggle can be left partially or fully emptied. For irreplaceable content, duplicate_page the target first so you have a restore point. Update the body of one toggle by title from a page. Searches recursively and matches plain toggle blocks plus toggleable heading_1, heading_2, and heading_3 blocks using case-insensitive trimmed text. The markdown is replacement body c…

  • update_view

    Update a Notion database view. Pass at least one update field. Null filter, sorts, or quick_filters values are forwarded to clear those fields.

Signals

Stars
55
Forks
12
Open issues
2
Contributors
6
Last commit
Aug 28, 2026 (2 months ago)
Last release
Aug 28, 2026 (2 months ago)

From GitHub (fetched Oct 24, 2026).

Details

Registry name
io.github.misterwigglesworth/easy-notion
Version
1.1.0
Auth
API key
Packages
npm easy-notion-mcp
License
MIT
First seen
Oct 24, 2026
Last checked
Oct 24, 2026

Done for you

Rather not set it up yourself?

Chalk Labs scopes, builds and runs agents for your team: the task audit, the eval harness, the integrations and the weekly ops report. Fixed scope, priced before we start.

See how we build AI agents →Read the case studies

Chalk Labs is a two-founder AI and growth studio. We build AI agents, CRMs and MVPs for Web3 and AI companies, and have shipped 50+ product and token launches.

launches shipped
50+
launches shipped
media placements
500+
media placements
founders on every account
2
founders on every account

Press we've placed: Forbes · CoinDesk · Decrypt · Cointelegraph · The Block

Rahil Jain, Co-founder, Chalk Labs. Ex-Goldman Sachs engineer. You talk to the person who builds it.

Get Easy Notion running in your business

Tell us what you want to automate. A founder replies within one working day with a plan, not a pitch deck.

Goes to the Chalk Labs founders, not the newsletter. Privacy

Need help deploying Easy Notion?

CallGet help
Cite this page

Easy Notion MCP server. Agent Mart. https://agentmart.dev/connectors/misterwigglesworth-easy-notion (last updated 2026-10-24)