Publish Markdown and mkdocs.yml-based documentation into Notion.
Project description
mkdocs2notion
A command-line tool that converts a directory of Markdown documents—optionally structured with mkdocs.yml—into a fully-organized Notion workspace.
This utility mirrors the publishing behavior of MkDocs, but targets Notion pages instead of a static site.
All parsing and conversion logic is implemented natively in this repository, with an adapter layer that can use Ultimate Notion (if installed) or a future Notion SDK integration.
Features
- 🗂 Publish entire Markdown folders to Notion
- 📄 Accurate Markdown → Notion block conversion
- 📚 Optional mkdocs.yml navigation support
- 🔗 Maintains hierarchical structure and ordering
- 🆔 Local file-path ↔ page-ID mapping for updates
- 🛠 Dry-run mode for testing without touching Notion
- ⚙️ Adapter layer to support different Notion clients
- ☑️ Markdown task lists render as Notion to-dos
Why This Exists
Markdown is easy to write. Notion is easy to share/control.
But getting a structured Markdown knowledge base into Notion—and keeping it updated—is hard.
mkdocs2notion solves that by:
- replicating MkDocs’ handling of directories, files, and nav trees,
- converting Markdown into rich Notion blocks,
- creating/updating pages while maintaining structure,
- allowing teams to turn entire docs folders into Notion workspaces.
Installation
mkdocs2notion is not yet on PyPI (until the core APIs stabilize),
but you can install it locally:
pip install -e .
Or install from GitHub:
pip install git+https://github.com/mahbam42/mkdocs2notion
Basic Usage
Push a directory to Notion
mkdocs2notion push docs/
With mkdocs.yml navigation
mkdocs2notion push docs/ --mkdocs mkdocs.yml
Dry run (see what would happen)
mkdocs2notion dry-run docs/
Validate docs without publishing
mkdocs2notion validate docs/ --mkdocs mkdocs.yml
CLI options
--mkdocs <path>: Use mkdocs.yml navigation ordering without requiring MkDocs to be installed.--parent <page_id>: OverrideNOTION_PARENT_PAGE_IDfor where new pages should live.--fresh: Ignore the cached page-ID map and rebuild it before pushing.--strict: Treat warnings as errors (push/dry-run/validate exit with status 1 when warnings are present).
Configuration
Environment variables
You will need a Notion API token:
NOTION_TOKEN=your-secret-token
Optional:
NOTION_PARENT_PAGE_ID=... # where new pages should be created
How It Works
mkdocs2notion processes content in stages:
1. Directory Loader
- Walks the directory
- Reads Markdown files
- Extracts titles (frontmatter or H1)
- Generates metadata for each page
2. mkdocs.yml Navigation Loader (optional)
- Reads
mkdocs.yml - Builds an ordered tree of sections/pages
3. Markdown Parser
- Converts Markdown into internal block structures
- Converts those blocks into Notion-ready representations
4. Notion Adapter
A thin abstraction around Notion operations (via Ultimate Notion or another SDK):
- create/update pages
- send block updates
- maintain parent-child relationships
You can swap the adapter without touching the logic.
Project Structure
mkdocs2notion/
│
├── mkdocs2notion/
│ ├── markdown/
│ ├── loaders/
│ ├── notion/
│ ├── cli.py
│ └── runner.py
│
├── tests/
├── pyproject.toml
└── README.md
Roadmap
- Core Markdown → Notion block converter
- Directory import with ID mapping
- mkdocs.yml → hierarchy builder
- Initial CLI (Typer-based)
- Add docs for block coverage
- Publish PyPI v0.2.0
Contributing
See agents.md for strict guidelines on:
- development workflow
- linting + typing
- testing
- commit rules
- agent behavior
Contributions are welcome—but must follow these standards to maintain reliability.
License
MIT License.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file mkdocs2notion-0.2.0.tar.gz.
File metadata
- Download URL: mkdocs2notion-0.2.0.tar.gz
- Upload date:
- Size: 608.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: python-httpx/0.28.1
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
df5f35c2b28b411f4cc465d5f1119912a1717f404a4d490247d8a02e2cd70ed9
|
|
| MD5 |
d928de452beb52fa4cb3fedfbea43230
|
|
| BLAKE2b-256 |
f9eecd7fa25c29fd0c44f77449181c9824b719cb0194a831232f7589fac77455
|
File details
Details for the file mkdocs2notion-0.2.0-py3-none-any.whl.
File metadata
- Download URL: mkdocs2notion-0.2.0-py3-none-any.whl
- Upload date:
- Size: 36.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: python-httpx/0.28.1
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
19781fa0c17a8fef6b00f8d1f9f405abc361d2b242e671e474fe3a4cd35c069e
|
|
| MD5 |
73db010e928a5cdcf6c07aee475a305d
|
|
| BLAKE2b-256 |
34499d55b4fd076bc921abad9effce393e4cfcb244a64070698997abf8513083
|