Each public surface gets its own host, and the server has no hostname of its own.
So there is an API host and an MCP host, and no third "main" host that a caller points at before choosing a path underneath. A surface is not a route on a shared host; it IS a host.
What that buys, concretely:
- A surface's path carries only a version, or nothing at all — never a prefix repeating what the subdomain already said. No
api.example.com/api/v1. - Cross-surface paths become hard 404s rather than ambiguous ones. The MCP path on the API host does not exist, and vice versa.
- The MCP endpoint is the bare host root, which matters more than it sounds — see
the-endpoint-is-also-an-identifier.
Rejected: one server hostname with /api and /mcp beneath it. It reads as tidier and it is how most people start. The problem is that it makes "the server URL" a thing that exists, and every consumer then has to know both the host and which path to append — a second fact to get wrong, forever, in other people's config files.