MCP博客助手
MCP服务器,将在节点上整理的文章进行第一次整理(AI/规则)后,应用特定类型的模板自动发布到\*\*Github Pages(github.io)\*\*。
后类型
- 玩具项目 (玩具)
- 算法 (什么)
- CS学习 (cs)
- 日常 (每日)
节点数据库的 Type 在Select属性中 toy, algo, cs, daily 如果指定其中一个,则应用该模板。
YAML/设置环境变量
application.yaml在中定义了以下项目:敏感值为 环境变量建议将其放入。
概念
| 键 | 环境变量 | 说明 |
|---|---|---|
notion.secret | NOTION_SECRET | 节点联动保密(必需) |
notion.database-id.blog | NOTION_DATABASE_ID_BLOG | 博客的节点DB ID(可选) |
节点关联令牌: 概念开发者在中创建Integration后复制秘密。必须将该集成连接到页面/DB。
GitHub页面(GitHub.io)
| 键 | 环境变量 | 说明 |
|---|---|---|
github-pages.repo | GITHUB_PAGES_REPO | 存储库 owner/repo (例如: myname/myname.github.io) |
github-pages.branch | GITHUB_PAGES_BRANCH | 要推送的分支(默认 main) |
github-pages.token | GITHUB_PAGES_TOKEN GitHub Personal Access Token(repo权限) | |
github-pages.posts-path | GITHUB_PAGES_POSTS_PATH | Jekyll文章路径(默认) _posts) |
存储库 杰基尔 标准。标记将提交到各类型的子文件夹: _posts/Daily/, _posts/CS/, _posts/Algorithm/, _posts/Project/ (各 YYYY-MM-DD-슬러그.md).GitHub存储库必须具有相应的文件夹结构。
Blog通用
| 键 | 环境变量 | 说明 |
|---|---|---|
blog.dry-run | BLOG_DRY_RUN | true面不实际发布,只生成内容 |
在本地打开服务器并进行测试
1.需要的东西
- 注意:Integration秘密+博客的一个页面(需要页面ID)
- 只看Preview的时候:只需要上面(不发布)
- 实际GitHub发布:
GITHUB_PAGES_REPO,GITHUB_PAGES_TOKEN添加
2.设置
application.yaml如果已经有Enocean的秘密,可以保留。要用环境变量覆盖:
export NOTION_SECRET=ntn_xxxx # 노션 Integration 시크릿
# GitHub 실제 발행할 때만
export GITHUB_PAGES_REPO=your-username/your-username.github.io
export GITHUB_PAGES_TOKEN=ghp_xxxx3.运行服务器
./gradlew bootRun默认端口 8080。控制台中 Started McpBlogAssistantApplication 出来的话就准备好了
4.方便使用的方法
- Web表单:服务器启动后,在浏览器中 http://localhost:8080/publish.html 连接。输入页面ID后,只需单击“预览”/“发布GitHub”按钮即可。(无需单独前台开发即可使用)
- 在节点中:复制要发布的页面URL,只复制地址窗口中的页面ID部分并粘贴到上面的表单中。节点本身没有“通过按钮调用API”功能,因此可以通过链接
http://localhost:8080/publish.html?pageId=복사한ID像这样挂着,点击打开使用,使用起来很方便。 - 在Cursor中:如果在服务器漂浮的情况下通过聊天说:“请用页面ID 30a5977fe8e480259b8bc9475aceccca发布GitHub。”
curl可以通过调用publish API。
5.用作Cursor MCP(连接到工具)
只要在聊天中说“请发布xxx页面ID”,AI就会 MCP工具要通过调用发布,请使用此存储库中包含的 MCP适配器注册到Cursor即可。
条件
- Spring Boot API服务器首先运行必须为(
./gradlew bootRun).MCP适配器只通过HTTP调用该API,而不代表服务器。
设置过程
- 构建MCP适配器(第一次):
cd mcp-server && npm install && npm run build && cd ..- 在项目中
.cursor/mcp.json已存在。在使用此项目打开Cursor的情况下 Cursor设置>Features>MCP在blog-assistant验证服务器是否已打开。(如果使用项目MCP设置,则可能会自动加载。) - 更改API base URL的步骤
.cursor/mcp.json的env.BLOG_API_URL修改。默认值为http://localhost:8080是。
使用示例
- “请预览诺森页面ID 30a5977fe8e480259b8bc9475aceccca”→AI
notion_blog_preview调用工具。 - “请用页面ID 30a5977fe8e480259b8bc9475aceccca发行GitHub”→AI
notion_blog_publish调用工具。
MCP适配器 mcp-server/ 目录中的Node.js项目,仅在Cursor启动到stdio后调用工具时 http://localhost:8080/mcp/notion-to-blog/... 调用。
6.使用API进行测试(curl)
节点页面ID从节点URL复制:
- 示例:
https://www.notion.so/My-Page-abc123def456...→abc123def456...(有连字符或无连字符都可以)
Preview(无需发布,只查看结果)
curl -s -X POST http://localhost:8080/mcp/notion-to-blog/preview \
-H "Content-Type: application/json" \
-d '{"pageId": "여기에_노션_페이지_ID"}' | jq .title, content(HTML), postType 出来就正常。
Publish-dry run(无实际推送,仅查看内容)
curl -s -X POST http://localhost:8080/mcp/notion-to-blog/publish \
-H "Content-Type: application/json" \
-d '{"pageId": "여기에_노션_페이지_ID", "dryRun": true, "publishTarget": "github"}' | jq .Publish-发布真正的GitHub Pages
GITHUB_PAGES_REPO, GITHUB_PAGES_TOKEN 设置后:
curl -s -X POST http://localhost:8080/mcp/notion-to-blog/publish \
-H "Content-Type: application/json" \
-d '{"pageId": "여기에_노션_페이지_ID", "dryRun": false, "publishTarget": "github"}' | jq .响应 url(例如: https://username.github.io/repo/2025-02-18-slug/)出版后发行的。
jq没有| jq .可以减去执行。在Windows上,可以通过PowerShell或Postman调用相同的URL和body。
提交消息
推送到GitHub时,提交消息 Post: {글 제목} 以格式输入。在NoteDB中,即使标题属性名称不是“Title”,类型为 title找到in属性并添加标题。
MCP REST API摘要
- 预览 (不发布,仅生成HTML)
POST /mcp/notion-to-blog/preview
Content-Type: application/json
{ "pageId": "노션_페이지_ID" }- 发布 (整理后发布GitHub Pages或Tistory,
dryRun: true跳过小平面卷期)
POST /mcp/notion-to-blog/publish
Content-Type: application/json
{ "pageId": "노션_페이지_ID", "dryRun": false, "publishTarget": "github" }- publishTarget: "github" (仅当前支持)
节点页面ID是URL的一部分(无论是否删除连字符)。
测试
./gradlew test假设节点DB模式
- 标题 (title类型):文章标题
- 类型 (选择):
toy|algo|cs|daily
正文获取该页面的块并将其转换为Markdown格式。
