MCP registration: before Commit: 6f21b0f02a8e128374e2a44a48f8b45b270be9f7 Environment: Linux, real development server on loopback; fresh isolated database; T3CODE_DEV_SEED=0. Transport: curl HTTP POST /oauth/mcp/register, Content-Type: application/json. === Valid registration === Request JSON: {"client_name":"Registration test","redirect_uris":["https://client.example/callback"],"token_endpoint_auth_method":"none"} Response: HTTP/1.1 201 Created content-type: application/json content-length: 340 vary: Accept-Encoding, Origin access-control-allow-credentials: true cache-control: no-store pragma: no-cache Date: Fri, 13 Nov 2026 02:35:32 GMT Connection: keep-alive Keep-Alive: timeout=95 {"client_id":"eyJ2IjoxLCJuIjoiUmVnaXN0cmF0aW9uIHRlc3QiLCJyIjpbImh0dHBzOi8vY2xpZW50LmV4YW1wbGUvY2FsbGJhY2siXX0.U16bSOO0u54HqrpOHXel2DIINmcky2NFVtYtTkFpmRc","client_name":"Registration test","redirect_uris":["https://client.example/callback"],"grant_types":["authorization_code"],"response_types":["code"],"token_endpoint_auth_method":"none"} === Disallowed redirect URI === Request JSON: {"redirect_uris":["ftp://client.example/callback"]} Response: HTTP/1.1 400 Bad Request content-type: application/json content-length: 125 vary: Accept-Encoding, Origin access-control-allow-credentials: true Date: Fri, 13 Nov 2026 02:35:32 GMT Connection: keep-alive Keep-Alive: timeout=95 {"error":"invalid_redirect_uri","error_description":"Redirect URIs must be https, or http on localhost, 127.0.0.1 or [::1]."} === Numeric client_name === Request JSON: {"client_name":42,"redirect_uris":["https://client.example/callback"]} Response: HTTP/1.1 400 Bad Request vary: Origin access-control-allow-credentials: true Date: Fri, 13 Nov 2026 02:35:32 GMT Connection: keep-alive Keep-Alive: timeout=95 Transfer-Encoding: chunked === String redirect_uris === Request JSON: {"redirect_uris":"https://client.example/callback"} Response: HTTP/1.1 400 Bad Request vary: Origin access-control-allow-credentials: true Date: Fri, 13 Nov 2026 02:35:32 GMT Connection: keep-alive Keep-Alive: timeout=95 Transfer-Encoding: chunked