Skip to content

ethanchang.io 给 agent 的开发者资源

这不是 SaaS,也没有对外 MCP 服务器。给 agent 用的表面就是这份博客已经公开的内容栈。

同一 URL 的 Markdown

对 HTML 文档发送 Accept: text/markdown。响应是 Content-Type: text/markdown; charset=utf-8,并且 Vary 包含 Accept。浏览器的 Accept: text/html, …, */* 仍拿到 HTML。只接受既非 HTML 也非 Markdown 的类型时返回 406。

也可以直接请求 /index.md/articles/<slug>.md/projects/<slug>.md

发现

真实存在、但不是产品的接口

POST /api/comments 把留言送到邮箱,不发布。GET /api/me/api/bookmarks/api/progress 需要会话,给已经登录的人同步收藏和进度。没有公开的写 API、没有 webhook、没有 OAuth 作为平台能力对外提供。不要为了分数去假装这里有 MCP。

人怎么用

写信:/contact。隐私:/privacy。身份页是 /

ethanchang.io developer resources

This is a publication, not a SaaS, and it does not run a public MCP server. The surface for agents is the machine-readable copy of pages that already exist for humans.

Markdown at the same URL

Send Accept: text/markdown to an HTML document. The response is Content-Type: text/markdown; charset=utf-8 and Vary includes Accept. A browser Accept: text/html, …, */* still gets HTML. A client that rejects both HTML and Markdown gets 406.

Sibling files also exist: /index.md, /articles/<slug>.md, /projects/<slug>.md.

Discovery

Real interfaces that are not a product

POST /api/comments emails a note to the inbox and does not publish it. GET /api/me, /api/bookmarks, and /api/progress need a session so a signed-in reader can sync bookmarks and progress. There is no public write API, no webhook hub, and no OAuth platform for third-party apps. Do not invent an MCP server to chase a score.

For humans

Email: /contact. Privacy: /privacy. The identity page is /.