Post
mdorigin:面向 Agent 的内容发布工具
我想要的不是又一个博客系统,而是一个面向 Agent 的内容发布工具。对人类浏览器默认返回 HTML,对工具和 Agent 直接返回 Markdown。

前一段时间,我一直在找一个工具,给项目搭 docs 或者搭个人博客,但我真正想要的并不是又一个博客系统,而是一个面向 Agent 的内容发布工具。
对我来说,关键不是页面怎么渲染,而是内容能不能被 Agent 直接访问、直接消费。为了做到这一点,Markdown 就不能只是写作时的源文件,而是可以直接对外输出。
我看了不少现有系统,它们大多还是默认把 Markdown 当成源文件,真正稳定对外暴露的只有 HTML。
这个模式对浏览器阅读当然没问题,但一旦内容还要被 Agent 消费,问题就出来了:
- Agent 想读原文,往往只能去啃 HTML
- HTML 里混着导航、侧边栏、脚本和样板结构,信噪比很差
- 同一份内容的目录结构、发布路由和原始文件路径经常脱节
- 博客、文档、Skill 仓库和知识库之间也缺少统一模型
最后只好自己做了一个:mdorigin。
mdorigin 想解决什么
mdorigin 想解决的不是“怎么把 Markdown 编译成一个网站”,而是更前面的问题:
一棵 Markdown 内容树,能不能直接成为网站本身,同时又保持对工具友好。
它的工作方式很简单。给它一个 Markdown 目录,它就通过 HTTP 服务把这棵目录直接暴露出去,再根据请求方式自动选择返回什么视图:
- 对人类浏览器,默认返回 HTML
- 对工具和 Agent,直接返回 Markdown 文本
换句话说,mdorigin 的核心不是“编译”,而是“稳定暴露”。
同一棵内容树,可以同时有两种视图:
- 给人看的 HTML
- 给工具和 Agent 看的 Markdown
一个最直接的例子
比如访问同一个地址:
curl https://mdorigin.jolestar.workers.dev/
默认会返回 HTML。
如果显式声明想拿 Markdown:
curl -H "Accept: text/markdown" https://mdorigin.jolestar.workers.dev/
它会直接返回这棵目录下的首页,也就是 index.md 或 README.md。
而这棵内容树本身,在 GitHub 上也可以直接浏览:
所以这个模型里,仓库里的 Markdown 目录、站点发布出去的内容、Agent 实际消费的原文,三者是对齐的,不需要再额外做一层“导出给工具”的转换。
然后再把代码和 Markdown 文件一起发布到 Cloudflare Workers 上,就可以得到一个既能给人访问,也能给 Agent 直接读原文的站点。
只是浏览还不够,还需要检索
当然,只把内容暴露出来还不够。只要文档规模一上来,检索就会成为基础能力。
很多文档网站的检索都是直接做在前端 JavaScript 里,这对传统站点没问题。但如果我们希望同一套内容还能被 Agent 和工具直接消费,就更自然的做法是:索引也应该跟着内容一起构建和发布。
于是我又补了一个更底层的检索工具:indexbind。
我对它的要求也比较明确:
- 可以基于 Markdown 构建索引
- 索引能和代码、内容一起发布
- 能跑在 Workers 这类环境里,而不是强依赖一整套独立服务
基于 mdorigin 部署的网站,现在可以直接提供一个搜索接口:
curl "https://mdorigin.jolestar.workers.dev/api/search?q=how%20to%20deploy%20to%20cloudflare"
{
"query": "how to deploy to cloudflare",
"topK": 10,
"count": 10,
"hits": [
{
"docId": "/guides/cloudflare",
"relativePath": "guides/cloudflare.md",
"canonicalUrl": "https://mdorigin.jolestar.workers.dev/guides/cloudflare",
"title": "Cloudflare Deployment",
"summary": "Build a user-project Worker bundle and initialize Wrangler config.",
"metadata": {},
"score": 0.03201844170689583,
"bestMatch": {
"chunkId": 5415122407870905000,
"excerpt": "That lets agents fetch markdown directly from the site domain without adding `.md` to the URL.",
"headingPath": [
"Cloudflare Deployment",
"Initialize Wrangler config"
],
"charStart": 1157,
"charEnd": 1251,
"score": 0.7150935530662537
}
}
]
}
这样同一棵内容树就不只是能被人浏览、被 Agent 读原文,也能被程序直接检索。
mdorigin 刻意没有提供太多模板和样式,因为这件事太容易变成无底洞,我以前也在博客样式上花过很多时间。
这次我刻意提醒自己:如果未来网站越来越多地被 Agent 访问,那么 Markdown 视图比主题皮肤更重要。
对我来说,内容系统首先要解决的,不是页面怎么渲染,而是内容能不能被直接访问和直接消费。
项目地址
- GitHub: https://github.com/jolestar/mdorigin
- 文档站: https://mdorigin.jolestar.workers.dev
- npm: https://www.npmjs.com/package/mdorigin
有需要的朋友自行取用,或者 fork 自定义。