Operations are an AST
An Endpoint is the typed description of one operation.
Method, path, inputs, outputs, errors, security, summary, tags, MCP promotion, hints. It is data. Api.bind attaches the function later. OpenAPI and MCP read EndpointDoc. HTTP runs decodeIn / encodeOut.
Write getShow
val getShow =
Endpoint
.get("shows" / int("id"))
.out[Show]
.outError[NotFound](Status.NotFound)
.name("get_show")
.summary("One bill")
.hints(Hint.ReadOnly)
Api.job is explicit promotion. Heddle will not auto-export every REST operation as a tool.
.in[A] and .out[A] need a BodyCodec[A]. derives Schema, JsonCodec on the domain type is the
JSON default. A given BodyCodec[A] replaces it.
Click a field
Each field on EndpointDoc is read by a different interpreter. Click through them.
EndpointDoc · click a field
GET/shows/{id}.mcpReadOnly
read by
HTTP, OpenAPI, derived tool name
Next
Bind the effect is the only implementation.