Notion importer
One command to set up a complete AI-powered development workflow with Claude Code. Persistent memory, session management, 35+ CLI tools.
npx -y skills add Enakoneschniy/claude-dev-stack --skill notion-importerAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing 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.
What its author says it does
Copied from the file, not written here
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.
SKILL.md
3.4 KB, 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
- Read config: Load
.claude/notion_pages.jsonto get the list of pages.
cat .claude/notion_pages.json
- Fetch each page: For each page in
config.pages, call thenotion-fetchMCP tool with thepage_idto 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.
-
Determine vault path: Use the
vault_pathfield from the page config (default:docs/notion). Resolve against the vault project directory:vault/projects/{project-slug}/docs/notion/ -
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>
-
3-way hash check (overwrite protection, per D-06):
- If file does not exist → create it with stamp (status: created)
- If
notion_content_hashin 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.mdsibling and warn (status: conflict)
-
Filename convention: Use the page title for the filename, cleaned with the same rules as
cleanNotionFilename()inlib/docs.mjs— strip Notion UUID suffixes, lowercase, replace spaces with hyphens. Example:My Page abc123...→my-page.md -
Report results: Print a summary of created/updated/unchanged/conflict counts.
Important Notes
- Use MCP tools directly — call
notion-fetchornotion-searchfrom the Claude session. Do NOT spawnnode,claude mcp call, or any subprocess. - The
notion_pages.jsonconfig is per-project (.claude/notion_pages.json). - After import, existing
notebooklm syncpicks 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