Zero-Friction Publishing:Human-in-the-Loop Agentic CMS,基于 Notion MCP
Source: Dev.to
这是一篇提交作品,参加 Notion MCP Challenge
我构建的内容
我: 我打算参加 Notion MCP 挑战。下面的工作流算是一个好的应用吗?
Claude: 这是一个很有竞争力的提交概念!让我来分解它如何符合评审标准……
我: 你能使用下面的模板起草我的提交,并将其保存到 Notion 数据库,文件名为 notion-mcp-challenge.md 吗?
Claude: 首先,让我在你的 Notion 工作区中搜索发布数据库,以便存放这个文件……
(Claude 使用 Notion MCP 连接到数据库)
完成!初稿已经直接保存到你的 Notion CMS。
这段真实的对话就是整个项目——以及你正在阅读的这篇文章——的起点。
虽然 AI 能瞬间生成内容,但要保持高质量、个人声音以及严格的格式,需要 “Human‑in‑the‑loop” 的方式。我构建了一个 Zero‑Friction Agentic Publishing Pipeline,将 Notion 变成创作者与 AI 编排者之间的协作无头 CMS。
不必在多个标签页之间切换、手动转换格式或处理 Git 命令,这个工作流让我可以全身心专注于指挥和编辑。我只需与我的 AI 代理(Claude)对话,它就会负责数据库管理、文件转换以及通过 Notion MCP 的版本控制等繁重工作。
架构
流程
| 阶段 | 描述 |
|---|---|
| 导演阶段 (1) | 我通过自然语言启动想法。 |
| 草稿阶段 (2) | AI 编排者生成初稿并直接保存到结构化的 Notion 数据库(映射 title、filename 和元数据等属性),使用 Notion MCP。 |
| 精炼阶段 (3) | 我进入 Notion——最适合写作的 UI——对草稿进行细化,加入个人风格。 |
| 发布流水线 (4‑6) | 我让 AI 完成最终定稿。它通过 MCP 从 Notion 获取更新后的内容,转换为带有 YAML front‑matter 的 Markdown,并在 GitHub 上创建 Pull Request。 |
| 审批阶段 (7‑9) | 我审阅 PR 差异并点击 Merge,触发 GitHub Actions 将文章部署到 dev.to。 |
Video Demo
这段简短的演示(由 NotebookLM 基于我的初稿生成)解释了此设置背后的理念。正如视频中所强调的,这是 对话驱动的开发。您将看到我如何在不编写任何传统代码的情况下,完全依赖工作流概览和自然语言提示,编排一个复杂的 Notion‑to‑GitHub 流水线。
Source: …
展示代码
这个 Agentic 工作流的绝妙之处在于它 不需要任何传统的中间件代码。通过利用标准的 MCP 服务器,“代码”从编写脆弱的 API 包装器转变为定义 CI/CD 流水线和数据库模式。
1. 仓库 & CI/CD 流水线
GitHub 仓库是 AI 与我协作的中心枢纽。
- AI 开 PR: Claude 通过 GitHub MCP 服务器动态打开 Pull Request,并根据 Notion 草稿推送更新。
- 人工批准: 我在 PR diff 中审阅 Markdown 和 YAML front‑matter。这是关键的 “Human‑in‑the‑loop” 检查点。
- 自动部署: 当我点击 Merge 后,GitHub Action 会自动触发并将文章发布到 dev.to。
探索驱动此工作流的实际仓库:
👉 (原文中省略链接)
2. Notion 模式(Front‑Matter 的 “数据模型”)
当 Claude 打开 Pull Request 时,它会从 Notion 中提取草稿并将其转换为标准的 Markdown 文件。在此过程中,它会使用 Notion 数据库中存储的精确属性生成 YAML front‑matter。这一严格的模式是让 AI 能够可预测运行的秘密调味料。
| 属性 | 描述 |
|---|---|
title | 文章的主标题。 |
published | 用于控制可见性的布尔值。 |
description | 用于 SEO 和 dev.to 的摘要。 |
tags | 自动化分类。 |
organization_username | 以特定 dev.to 组织的身份发布(由 Publish to Dev.to Organization Action 使用)。 |
canonical_url | 为跨平台发布的内容保持 SEO 完整性。 |
cover_image | 文章头图的 URL。 |
filename | GitHub 仓库中 .md 文件的精确 ID。 |
github_branch | AI 应该针对的 PR 分支。 |
Content | 页面正文——AI 生成和人工编辑共享的画布。 |
3. 克服 “字符串化地狱” (强制自我验证)
在测试过程中,我遇到了当前 LLM 的物理极限:“字符串化地狱”。 当 Claude 试图将最终的、包含 YAML、Mermaid 图表和换行符的复杂 Markdown 传递给 GitHub MCP 时,它难以完美转义庞大的 JSON 负载。为避免语法错误,我强制模型执行以下步骤:
- 将 Markdown 导出到临时 Notion 页面——让模型把它当作纯文本处理。
- 通过 MCP 读取该页面——确保得到正确的 JSON 编码。
- 将读取到的内容提交到 GitHub——此时已安全转义。
这一次额外的往返增加了极小的延迟,却消除了 PR 内容格式错误,证明一个小的 “自我验证” 步骤可以显著提升可靠性。
TL;DR
- 零代码 Agentic 发布流水线——对话驱动,人工在环。
- Notion MCP 存储草稿、元数据和版本历史。
- GitHub MCP + Actions 将 Notion 页面转为 Markdown + YAML,打开 PR 并发布到 dev.to。
- 基于模式的 front‑matter 确保 AI 行为确定性。
- 自我验证(读取回写)解决了 “字符串化地狱” 问题。
我希望此提交展示了一种新颖、可复现的工作流,能够推动 Notion MCP 与现代 LLM 编排的边界。祝所有参赛者好运!
Source: …
我是如何使用 Notion MCP 的
Notion MCP 是此代理工作流的绝对核心。它充当关键桥梁,将 Notion 从被动的知识库转变为 AI 与人类共同协作的活跃工作空间。
MCP Write: 我利用 MCP 让大型语言模型(LLM)能够动态地在我的 “Publishing CMS” 数据库中创建页面。它能够将生成的想法完美映射到 title、filename 以及所有生产所需的元数据属性。
MCP Read: 在人工干预(我的编辑)之后,LLM 使用 MCP 读取准确的 Notion 页面,确保最终输出在转换为严格的 Markdown/YAML 供开发者使用之前,完美保留人类的细微差别。
它解锁的功能:
此集成彻底消除了 上下文切换 和 认知负荷。通过利用 Notion MCP,我无需在聊天窗口、文本编辑器和终端之间复制‑粘贴。AI 负责处理繁琐的系统操作(格式化、API 调用、Git 命令),而我则在 Notion 那美观的编辑环境中保持 100 % 的创意控制。这是任何现代创作者或开发者的终极 人‑在‑回路 扩展系统!

