# 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

- [/llms.txt](/llms.txt) — when to use this site, and the main doors
- [/llms-full.txt](/llms-full.txt) — published essays and projects concatenated
- [/sitemap.xml](/sitemap.xml)
- [/rss.xml](/rss.xml)
- [/robots.txt](/robots.txt)
- [/openapi.json](/openapi.json) — the interfaces that actually exist
- [/.well-known/api-catalog](/.well-known/api-catalog) — RFC 9727 catalog

## 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](/contact). Privacy: [/privacy](/privacy). The identity page is `/`.
