# easy-notion-mcp

Token-efficient, markdown-first Notion MCP server — agents write markdown, never touch raw Notion JSON

- **Type:** MCP server
- **Trust:** 85/100 (A), scored on the package rubric
- **Verification:** verified (build provenance)
- **Version:** 1.1.0
- **Author:** io.github.misterwigglesworth
- **License:** MIT
- **npm:** easy-notion-mcp
- **Source:** https://github.com/Grey-Iris/easy-notion-mcp
- **Compatible clients:** claude-code, cursor, copilot, gemini (basis: transport)

## Trust

85/100 (A), scored on the package rubric
- Publisher verified: no
- Build provenance: verified attestation
- npm trusted publishing (OIDC): yes
- Install scripts: nothing suspicious found
- Prompt-injection scan: not run
- Obfuscation scan: not run
- Evidence age: 0 days

## Security scan

- **Status:** clean
- **Scanned:** 2026-09-02T04:26:36.675Z
- **Version scanned:** 1.1.0
- **CVEs:** none found by OSV at scan time

## Tools

40 declared. Statically extracted from the shipped source — a floor on the surface, not a census.
- `markdown-conventions` — Supported markdown syntax for page creation, appends, replacements, targeted updates, and reads.
- `warning-shapes` — Warning codes and response shapes emitted by markdown read and write tools.
- `property-pagination` — How read_page and query_database paginate long Notion property values.
- `update-data-source-guide` — Full-list schema semantics, raw/helper payload modes, and examples for update_data_source.
- `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. Suppor
- `create_page_from_file`
- `append_content`
- `replace_content`
- `update_section`
- `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 fix
- `read_section`
- `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 
- `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
- `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 s
- `update_toggle`
- `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 c
- `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 enumer
- `update_block`
- `read_page`
- `duplicate_page`
- `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
- `archive_page` — Archive a page in Notion.
- `search` — Search Notion pages or databases. Use filter: 'databases' to find databases by name, then get_database for schema details.
- `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 t
- `share_page` — Return the page URL that can be shared from Notion.
- `create_database`
- `update_data_source`
- `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 nam
- `list_databases` — List all databases the integration can access. Returns database names and IDs — use get_database on any result to see its schema.
- `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 adv
- `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
- `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 
- `query_view` — Query a Notion database view. Creates a temporary view query, fetches database row results, then deletes the query.
- `create_view` — Create a Notion database view. Pass database_id. Dashboard views and dashboard widget placement are not supported.
- `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.
- `delete_view` — Delete a Notion database view. Destructive: confirm must be exactly true.
- `add_database_entry`
- `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 f
- `update_database_entry`
- `list_comments` — List comments on a page.

## Install

**Verdict: install** — No blocking findings and no open coverage gaps — safe to install as configured.
**Config** (claude-code):
```json
"{\n  \"mcpServers\": {\n    \"easy-notion\": {\n      \"command\": \"npx\",\n      \"args\": [\n        \"-y\",\n        \"easy-notion-mcp\"\n      ],\n      \"env\": {\n        \"NOTION_TOKEN\": \"<YOUR_NOTION_TOKEN>\"\n      }\n    }\n  }\n}"
```
**Credentials it will ask for** (names only — Forge never holds a value):
- `NOTION_TOKEN` — Notion Token (required)
Placeholders only. Forge never holds, brokers, or transmits a credential value — replace each <YOUR_NAME> in your own config file. Do not send a value back to Forge; no Forge endpoint accepts one.
- This entry needs 1 credential (1 required). The generated config carries placeholders, so it will fail in the editor rather than at runtime if they are left unset.

## Blast radius

Extensive blast radius — deletes data; holds an api key.
- Floor 52, ceiling 52 (tier: extensive)
- This is impact, not likelihood. A high radius is not a defect: a filesystem server is supposed to write files. It is never part of the trust score.

## Machine-readable views of this entry

- Signed JSON: https://forgeregistry.com/api/v1/packages/easy-notion-mcp
- Install plan: https://forgeregistry.com/api/v1/packages/easy-notion-mcp/install-plan
- Alternatives: https://forgeregistry.com/api/v1/alternatives/easy-notion-mcp
- HTML page: https://forgeregistry.com/registry/easy-notion-mcp
- MCP: POST https://forgeregistry.com/api/mcp → `forge_get_package` / `forge_install_plan`

## About this document

Generated by Forge (https://forgeregistry.com) — a compact rendering of the same record served, signed, at the JSON URL above. Trust and scan facts are the registry's own measurements; anything Forge did not measure is named as unmeasured rather than omitted.
