HTTP Content Negotiation
MDAN uses HTTP content negotiation so the same app can serve both humans and agents from the same page and action definitions.
The core rule is simple:
Accept: text/markdown
returns Markdown.
Accept: text/html
returns HTML.
Why This Exists
Agents need Markdown.
Browsers need HTML.
MDAN does not want two separate application surfaces for that, so it returns the same underlying result in the form each caller needs.
Typical Requests
When an agent reads a page or invokes an action, it usually sends:
Accept: text/markdown
When a browser visits a page or submits an interaction, it usually sends:
Accept: text/html
For writes, the body still uses Markdown:
Content-Type: text/markdown
The important point is simple:
- the same app can return Markdown to agents
- the same app can return HTML to browsers
What changes is the returned form, not the application itself.
That is why an agent can talk directly to the same web app with native HTTP tools like curl, without needing a headless browser.
Why This Matters
The biggest value here is that you do not have to split one app into two systems.
- you do not need one interface for agents and a different one for browsers
- you do not need to keep content, interaction, and server behavior in sync across duplicated definitions
- agents and browsers see different forms, but they are still using the same app
That keeps the app simpler and less likely to drift over time.