Standards

The specifications ts-kizuna follows. RFC 9110 HTTP semantics, RFC 9457 Problem Details, OpenAPI 3.1.0, OAuth 2.1 resource servers, and the Model Context Protocol.

ts-kizuna is spec-driven. It follows these specifications as closely as it can.

HTTP

StandardWhat it governs
RFC 9110 HTTP SemanticsMethods, status codes, headers, content negotiation, and which methods are safe and idempotent
RFC 5789 PATCH MethodThe PATCH method, which RFC 9110 does not define, and its unsafe and non-idempotent semantics
RFC 9457 Problem DetailsThe body of every error response, as type, title, status, detail, and instance
RFC 3986 URI SyntaxPercent-encoding of path parameters, and exact path matching, so /users/1 and /users/1/ are distinct resources

OpenAPI

StandardWhat it governs
OpenAPI 3.1.0The document @ts-kizuna/openapi generates from a contract

See OpenAPI for the generator and the reference UI it serves.

Authentication

An API that verifies tokens rather than issuing them is a resource server, and kizuna serves the documents and challenges one owes its clients.

StandardWhat it governs
OAuth 2.1The resource server model kizuna implements
RFC 9728 Protected Resource MetadataThe discovery document served at /.well-known/oauth-protected-resource
RFC 8414 Authorization Server MetadataAn identity's issuer
RFC 8707 Resource IndicatorsThe canonical resource URI, and the audience a guard checks a token against
RFC 6750 Bearer Token UsageThe WWW-Authenticate challenge, including insufficient_scope

See authentication for identities, guards, and access gates.

Model Context Protocol

StandardWhat it governs
Model Context ProtocolThe MCP endpoint, its tools, and their input and output schemas
MCP authorizationServing the endpoint as an OAuth 2.1 resource server

See MCP for the plugin and the tools it generates.

Deliberate omissions

OmissionWhy
TRACE is absent from MethodDisabled in production everywhere, and unsupported by the frameworks kizuna mounts on
A HEAD route answers only when the contract declares oneA contract-first API has the routes it describes, so HEAD is declared rather than derived

On this page