# Mmk Notion Page

> Manage Notion pages — invite, revoke, publish, unpublish, config, publish-settings, duplicate, list-published, markdown (get/create/append/replace/update), transcript, get, update. Triggers on "invite to page", "revoke access", "publish page", "unpublish", "page config", "full width", "publish settings", "duplicate page", "list published", "page markdown", "create page from markdown", "append markdown", "replace markdown", "update markdown", "page transcript", "meeting transcript", "get page", "page by id", "update page", "archive page", "lock page", "erase page".

- Skill: `magic-meal-kits/mmk-notion-page` (Agent Skill)
- Install (CLI): `npx skillmds@latest add magic-meal-kits/mmk-notion-page`
- Raw SKILL.md: https://api.skillmd.com/api/skills/magic-meal-kits/mmk-notion-page/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Docs & Writing
- Author: magic-meal-kits (https://skillmd.com/u/magic-meal-kits)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/magic-meal-kits/mmk-notion-page

---


# MMK Notion — Page Commands

> **Prerequisite:** Read [`../mmk-shared/SKILL.md`](../mmk-shared/SKILL.md) for auth, global flags, and error handling.
> Parent: [`mmk-notion`](../mmk-notion/SKILL.md)

Always use `-o json` when parsing results or composing with other commands.

---

## invite — Invite a user to a page

```bash
mmk notion page invite --email <email> --role <role> --block-id <page-id-or-url> -o json
```

**Required:** `--email`, `--role`, `--block-id`

**Available roles:**

| Role | Access Level | Works With |
|------|-------------|------------|
| `editor` | Full access — edit structure, content, manage permissions | Pages & Databases |
| `read_and_write` | Can edit — modify content | Pages & Databases |
| `content_only_editor` | Can edit content — edit rows but not DB structure | Databases only |
| `comment_only` | Can comment — view and add comments only | Pages & Databases |
| `reader` | Can view — read-only | Pages & Databases |

---

## revoke — Revoke a user's access to a page

```bash
mmk notion page revoke --email <email> --block-id <page-id-or-url> -o json
```

**Required:** `--email`, `--block-id`

---

## publish — Publish a page to the web

```bash
mmk notion page publish --block-id <page-id-or-url> -o json
```

**Required:** `--block-id`

Returns public URL on success. Returns 409 if already published (not an error — returns existing public URL).

---

## unpublish — Unpublish a page from the web

```bash
mmk notion page unpublish --block-id <page-id-or-url> -o json
```

**Required:** `--block-id`

Returns 409 if already private (not an error).

---

## config — Configure page display settings

```bash
mmk notion page config --block-id <page-id> --full-width -o json
mmk notion page config --block-id id1 --block-id id2 --small-text=false -o json
```

**Required:** `--block-id` (string slice — supports multiple pages)
**At least one of:** `--full-width` (bool), `--small-text` (bool)

---

## publish-settings — Update publish settings for a published page

```bash
mmk notion page publish-settings --block-id <id> --allow-duplicate=false -o json
mmk notion page publish-settings --block-id <id> --seo-title "Title" --slug "my-page" -o json
```

**Required:** `--block-id`
**At least one of:** `--allow-duplicate` (bool), `--search-engine-index` (bool), `--seo-title`, `--seo-description`, `--social-image`, `--slug`

---

## duplicate — Duplicate a page into a parent page

```bash
mmk notion page duplicate --source-id <page-id> --parent-id <parent-id> -o json
```

**Required:** `--source-id`, `--parent-id`

---

## list-published — List all published pages in the workspace

```bash
mmk notion page list-published -o json
mmk notion page list-published --type forms -o json
```

**Optional:** `--type` — `sites` (default), `forms`, or `links`

---

## markdown — Verb-based sub-commands (get, create, append, replace, update)

`markdown` is a sub-command group. All verbs accept `--markdown` (inline string), `--file` (read from file), or stdin.

## markdown get — Retrieve a Notion page as markdown

```bash
mmk notion page markdown get <page_id> -o json
mmk notion page markdown get <page_id> --include-transcript -o json
```

**Required:** `<page_id>` (positional)
**Optional:** `--include-transcript` — include meeting note transcripts

---

## markdown create — Create a new Notion page from markdown

```bash
mmk notion page markdown create --parent <page_id> --title "Sprint planning" --file ./plan.md -o json
mmk notion page markdown create --parent <db_id> --title "Task X" --markdown "..." --set Status=InProgress --set Priority=High -o json
cat notes.md | mmk notion page markdown create --parent <page_id> --title "Notes" -o json
```

**Required:** `--parent` (page id, database id, or Notion URL)

**Optional:**

| Flag | Description |
|------|-------------|
| `--title` | Page title (page parent: optional, derived from first H1; database parent: required) |
| `--markdown` | Inline markdown body |
| `--file` | Read markdown from a file |
| `--set` | Extra database properties: `Key=Value` (repeatable; database parent only) |
| `--icon-emoji` | Page icon (emoji) |
| `--cover-url` | Page cover image (https URL) |

For a database parent, `--title` becomes the title-property value and `--set Key=Value` populates additional schema properties.

---

## markdown append — Append markdown to an existing Notion page

```bash
mmk notion page markdown append <page_id> --markdown "## Notes" -o json
echo "## Notes" | mmk notion page markdown append <page_id> -o json
mmk notion page markdown append <page_id> --file ./notes.md --after "start text...end text" -o json
```

**Required:** `<page_id>` (positional), one of `--markdown`, `--file`, or piped stdin

**Optional:**

| Flag | Description |
|------|-------------|
| `--after` | Ellipsis selector `'start text...end text'` — insert after this location (omit to append at end) |
| `--file` | Read markdown from a file |

---

## markdown replace — Overwrite an existing Notion page with new markdown

```bash
mmk notion page markdown replace <page_id> --markdown "# Fresh start" -o json
mmk notion page markdown replace <page_id> --file ./new.md --yes -o json
```

**Required:** `<page_id>` (positional), one of `--markdown`, `--file`, or piped stdin

**Optional:**

| Flag | Description |
|------|-------------|
| `--file` | Read markdown from a file |
| `--allow-deleting-content` | Permit removal of child pages/databases |
| `-y, --yes` | Skip the destructive-overwrite confirmation prompt |

**DESTRUCTIVE** — replaces entire page content. Prompts for confirmation when running interactively (pass `--yes` or pipe stdin to skip).

---

## markdown update — Edit a Notion page via search-and-replace

```bash
mmk notion page markdown update <page_id> --from "Draft" --to "Final" -o json
mmk notion page markdown update <page_id> --from "TODO" --to "DONE" --from "Draft" --to "Final" -o json
mmk notion page markdown update <page_id> --data '[{"old_str":"x","new_str":"y","replace_all_matches":true}]' -o json
```

**Required:** `<page_id>` (positional), one of `--from`/`--to` pairs or `--data`

**Optional:**

| Flag | Description |
|------|-------------|
| `--from` | Old text to find (paired with `--to`; repeatable) |
| `--to` | New text to substitute (paired with `--from`; repeatable) |
| `--all` | Set `replace_all_matches=true` on every operation |
| `--allow-deleting-content` | Permit removal of child pages/databases |
| `--data` | Raw JSON array of `{old_str, new_str, replace_all_matches}` for power users |

Matching is case-sensitive and whitespace-sensitive. Each `old_str` must match exactly one location unless `--all` is set.

**Optional:**

| Flag | Description |
|------|-------------|
| `--markdown` | Inline markdown to append |
| `--file` | Read markdown from a file |
| `--after` | Ellipsis selector `'start text...end text'` — insert after this anchor (omit to append at end) |

---

### markdown replace — Overwrite an existing Notion page with new markdown

```bash
mmk notion page markdown replace <page_id> --markdown "# Fresh start" -o json
mmk notion page markdown replace <page_id> --file ./new.md --yes -o json
```

**Required:** `<page_id>` (positional)

**Optional:**

| Flag | Description |
|------|-------------|
| `--markdown` | Inline markdown body |
| `--file` | Read markdown from a file |
| `-y, --yes` | Skip the destructive-overwrite confirmation prompt |
| `--allow-deleting-content` | Permit removal of child pages/databases |

DESTRUCTIVE — replaces all page content. Prompts for confirmation when run interactively (use `--yes` or pipe stdin to suppress).

---

### markdown update — Edit a page in place via search-and-replace

```bash
mmk notion page markdown update <page_id> --from "Draft" --to "Final" -o json
mmk notion page markdown update <page_id> --from "TODO" --to "DONE" --from "Draft" --to "Final" -o json
mmk notion page markdown update <page_id> --data '[{"old_str":"x","new_str":"y","replace_all_matches":true}]' -o json
```

**Required:** `<page_id>` (positional), `--from` + `--to` (paired), or `--data`

**Optional:**

| Flag | Description |
|------|-------------|
| `--from` | Old text to find (repeatable, paired with `--to`) |
| `--to` | New text to substitute (repeatable, paired with `--from`) |
| `--all` | Set `replace_all_matches=true` on every operation |
| `--data` | Raw JSON array of `{old_str, new_str, replace_all_matches}` |
| `--allow-deleting-content` | Permit removal of child pages/databases |

Matching is case-sensitive and whitespace-sensitive.

---

## get — Get a page by ID

```bash
mmk notion page get <page_id> -o json
```

**Required:** `<page_id>` (positional — accepts UUID or full Notion URL)

---

## transcript — Get meeting note transcript, summary, and notes from a page

```bash
mmk notion page transcript <page_id> -o json
mmk notion page transcript <page_id> --include summary,notes -o json
```

**Required:** `<page_id>` (positional)
**Optional:** `--include` — sections to include: `summary`, `notes`, `transcript` (comma-separated, default: all)

---

## update — Update a Notion page (archive, trash, lock, erase content)

```bash
mmk notion page update <page_id> --archive -o json
mmk notion page update <page_id> --lock -o json
mmk notion page update <page_id> --erase-content --yes -o json
mmk notion page update <page_id> --data '{"properties": {...}}' -o json
```

**Required:** `<page_id>` (positional)

**Optional flags:**

| Flag | Description |
|------|-------------|
| `--archive` | Archive the page |
| `--unarchive` | Unarchive the page |
| `--trash` | Move page to trash |
| `--restore` | Restore page from trash |
| `--lock` | Lock page editing |
| `--unlock` | Unlock page editing |
| `--erase-content` | Erase all page content (DESTRUCTIVE, cannot be undone) |
| `--data` | Raw JSON request body (Notion API format) |
| `-y, --yes` | Skip confirmation for destructive operations |

**WARNING:** `--erase-content` permanently deletes all page content and cannot be undone via API.

---

## update-markdown — [DEPRECATED] Update a page's content using markdown

> **Deprecated:** Use the verb-based `markdown` sub-commands instead:
> - `--markdown` / `--replace` → `mmk notion page markdown replace <page_id>`
> - `--append` → `mmk notion page markdown append <page_id>`

```bash
mmk notion page update-markdown <page_id> --markdown "# New Content" -o json
mmk notion page update-markdown <page_id> --append "## Appended Section" -o json
mmk notion page update-markdown <page_id> --replace "# Replaced Content" --timezone "Asia/Seoul" -o json
```

**Required:** `<page_id>` (positional), one of `--markdown`, `--append`, or `--replace`

**Optional flags:**

| Flag | Description |
|------|-------------|
| `--markdown` | Full markdown content (replaces all existing content) |
| `--append` | Markdown to append to existing content |
| `--replace` | Markdown to replace all content (uses replace_content operation) |
| `--timezone` | Timezone for date-related content (e.g. `Asia/Seoul`) |

---

## Tips

1. `--block-id` accepts both raw UUIDs and full Notion URLs — the CLI extracts the ID automatically
2. For bulk operations, run commands sequentially and check each result
3. Page invite errors for non-Notion users indicate the email is not associated with a Notion account — consider using the [`mmk-notion-onboard`](../mmk-notion-onboard/SKILL.md) skill for automatic email fallback

---

## See Also

- [mmk-shared](../mmk-shared/SKILL.md) — Auth, global flags, error handling
- [mmk-notion](../mmk-notion/SKILL.md) — All Notion commands overview
- [mmk-notion-workspace](../mmk-notion-workspace/SKILL.md) — Workspace invite and remove
- [mmk-notion-people](../mmk-notion-people/SKILL.md) — List members, guest page access

