Skip to content

Commit 54d1aa7

Browse files
Merge pull request #30 from insightbuilder/notion-mcp-bd
got the md to notion page working correctly, for almost all MD text type
2 parents 7c33d56 + 8f8db99 commit 54d1aa7

3 files changed

Lines changed: 278 additions & 156 deletions

File tree

Lines changed: 107 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,107 @@
1+
from md2notionpage.core import parse_md
2+
import os
3+
from notion_client import Client
4+
5+
# load_dotenv()
6+
os.environ["NOTION_SECRET"] = "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"
7+
notion = Client(auth=os.environ["NOTION_SECRET"])
8+
9+
markdown_text = """
10+
Sure! Here's the entire explanation formatted properly in Markdown:
11+
12+
---
13+
14+
# 🧠 Using Notional to Convert Markdown or HTML to Notion Pages
15+
16+
**Notional** is a powerful and Pythonic SDK for the Notion API. While it doesn't natively convert Markdown or HTML, it integrates well with other tools that handle this parsing for you.
17+
18+
---
19+
20+
## 🧰 Recommended Tools for Markdown/HTML to Notion Conversion
21+
22+
| Package | Description | Notes |
23+
| ---------------------------------------------------------- | ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------- |
24+
| [`md2notionpage`](https://pypi.org/project/md2notionpage/) | Converts Markdown text into Notion pages, handling inline formatting and block structures. | Simplifies the process of creating Notion pages from Markdown. |
25+
| [`html2notion`](https://github.com/selfboot/html2notion) | Transforms HTML content into Notion blocks, supporting various HTML tags. | Useful for importing HTML documents into Notion. |
26+
| [`md2notion`](https://pypi.org/project/md2notion/) | Imports Markdown files into Notion, preserving formatting and structure. | Requires `notion-py`, which may have compatibility issues with the latest Notion API. |
27+
28+
---
29+
30+
## 🧑‍💻 Example: Using `md2notionpage` with Notional
31+
32+
### 1. Install Required Packages
33+
34+
```bash
35+
pip install notional md2notionpage
36+
```
37+
38+
### 2. Python Script
39+
40+
```python
41+
import os
42+
from notional import Notion
43+
from md2notionpage import md2notionpage
44+
45+
# Initialize Notion client with your integration token
46+
notion = Notion(auth=os.environ["NOTION_TOKEN"])
47+
48+
# Read Markdown content from a file
49+
with open("example.md", "r", encoding="utf-8") as md_file:
50+
markdown_content = md_file.read()
51+
52+
# Convert Markdown to Notion blocks
53+
notion_blocks = md2notionpage(markdown_content)
54+
55+
# Create a new page in your workspace
56+
new_page = notion.pages.create(
57+
parent={"type": "page_id", "page_id": os.environ["NOTION_PARENT_PAGE_ID"]},
58+
properties={
59+
"title": [
60+
{
61+
"type": "text",
62+
"text": {"content": "Imported Markdown Page"}
63+
}
64+
]
65+
},
66+
children=notion_blocks
67+
)
68+
69+
print(f"Page created: {new_page['url']}")
70+
```
71+
72+
> **Note:** Ensure that you set the following environment variables:
73+
>
74+
> * `NOTION_TOKEN`: your Notion integration token
75+
> * `NOTION_PARENT_PAGE_ID`: the ID of the parent page or database
76+
77+
---
78+
79+
## 🔍 Summary
80+
81+
While **Notional** is excellent for interacting with the Notion API, combining it with tools like `md2notionpage` or `html2notion` enables seamless conversion of Markdown or HTML content into Notion pages.
82+
83+
These tools handle the parsing and block formatting for you, letting you focus on the actual content creation.
84+
85+
---
86+
87+
Would you like me to provide a full working GitHub Gist or a CLI tool based on this?
88+
89+
"""
90+
91+
title = "Markdown to Notion Page"
92+
93+
parent_page_id = "1ec84ade96ac803bbe86e258a017466b"
94+
95+
created_page = notion.pages.create(
96+
parent={"type": "page_id", "page_id": parent_page_id}, properties={}, children=[]
97+
)
98+
99+
# notion_page_url = md2notionpage(markdown_text, title, parent_page_id)
100+
notion.pages.update(
101+
created_page["id"],
102+
properties={"title": {"title": [{"type": "text", "text": {"content": title}}]}},
103+
)
104+
105+
# Iterate through the parsed Markdown blocks and append them to the created page
106+
for block in parse_md(markdown_text):
107+
notion.blocks.children.append(created_page["id"], children=[block])

notion_brain_dump/pyproject.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ requires-python = ">=3.11"
77
dependencies = [
88
"anthropic>=0.49.0",
99
"mcp[cli]>=1.6.0",
10+
"md2notionpage>=0.1.5",
1011
"notion-client>=2.3.0",
1112
"python-dotenv>=1.1.0",
1213
]

0 commit comments

Comments
 (0)