agentsclimarketplace

Notion importer

Skill Enakoneschniy/claude-dev-stack/skills/notion-importer

Import Notion pages into project vault via MCP. Trigger when user wants to import or sync Notion content into the vault: "import notion", "notion docs", "sync notion", "импортируй notion", "обнови notion", "sync notion pages", "обнови notion docs". Uses the claude.ai Notion MCP server (notion-fetch tool) directly from a live Claude session. Does NOT spawn subprocesses.From its SKILL.md

Install
npx -y skills add Enakoneschniy/claude-dev-stack --skill notion-importer

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

2 things to look at

  • 5 stars5 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
  • runs commandsInstructs the agent to run 4 commands, including `claude-dev-stack notion add <url>` and 3 more.

SKILL.md

3.4 KB, 786 tokens by cl100k_base, as published. Nobody here has run it

Notion Importer Skill

Import Notion pages into the project vault using the claude.ai Notion MCP server. This skill calls MCP tools directly from a live Claude session — no subprocess needed.

Trigger Phrases

English: "import notion", "notion docs", "sync notion", "sync notion pages", "import notion pages" Russian: "импортируй notion", "обнови notion", "обнови notion docs", "синхронизируй notion"

Required Setup

The project must have .claude/notion_pages.json configured. Run claude-dev-stack notion add <url> to add pages.

Import Steps

  1. Read config: Load .claude/notion_pages.json to get the list of pages.
cat .claude/notion_pages.json
  1. Fetch each page: For each page in config.pages, call the notion-fetch MCP tool with the page_id to retrieve markdown content. Use the MCP tool directly:
notion-fetch(page_id: "<page_id>")

Or use notion-search MCP tool if you need to locate pages by title.

  1. Determine vault path: Use the vault_path field from the page config (default: docs/notion). Resolve against the vault project directory: vault/projects/{project-slug}/docs/notion/

  2. Write with provenance: Each imported file gets a frontmatter stamp:

---
notion_page_id: <page_id>
notion_last_synced: <ISO timestamp>
notion_content_hash: <SHA-256 of content below frontmatter>
---

<page content>
  1. 3-way hash check (overwrite protection, per D-06):

    • If file does not exist → create it with stamp (status: created)
    • If notion_content_hash in frontmatter matches hash of new content → skip (status: unchanged)
    • If local body hash matches stored notion_content_hash (no local edits) → overwrite in place (status: updated)
    • If local body hash differs from stored notion_content_hash (local edits detected) → write {filename}.notion-update.md sibling and warn (status: conflict)
  2. Filename convention: Use the page title for the filename, cleaned with the same rules as cleanNotionFilename() in lib/docs.mjs — strip Notion UUID suffixes, lowercase, replace spaces with hyphens. Example: My Page abc123...my-page.md

  3. Report results: Print a summary of created/updated/unchanged/conflict counts.

Important Notes

  • Use MCP tools directly — call notion-fetch or notion-search from the Claude session. Do NOT spawn node, claude mcp call, or any subprocess.
  • The notion_pages.json config is per-project (.claude/notion_pages.json).
  • After import, existing notebooklm sync picks up the new files automatically.
  • If the Notion MCP server is not configured, run: claude mcp add notion
  • Check MCP status: claude mcp list

Example Session

User: импортируй notion
Claude: [reads .claude/notion_pages.json]
        [calls notion-fetch(page_id: "abc123...") via MCP]
        [writes vault/projects/myproject/docs/notion/my-page.md with frontmatter]
        Summary: 1 created, 0 updated, 0 unchanged, 0 conflicts

What ships with it

Read from the repository

Just SKILL.md. No reference files, no scripts.

Keep looking

Skills are one crate of 325,949. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.