MCP OAuth
JamRelay ma dwie niezależne warstwy autoryzacji: klient AI → JamRelay oraz JamRelay → Spotify. MCP OAuth nie zastępuje Spotify OAuth.
Obsługiwane funkcje
- Authorization Code;
- wymagane PKCE
S256; - dokładna walidacja redirect URI dla każdego klienta;
- parametr
isszgodny z RFC 9207; - protected-resource metadata RFC 9728 dla root oraz
/mcp; - access token ważny 1 godzinę;
- rotowane refresh tokeny;
- public clients z
token_endpoint_auth_method=none; - confidential clients z
client_secret_basiclubclient_secret_post; - statyczny rejestr wielu klientów;
- RFC 7591 Dynamic Client Registration dla kompatybilności z istniejącymi klientami;
- owner approval chronione przez
MCP_OAUTH_OWNER_SECRET.
Automatyczni klienci
PUBLIC_BASE_URL=https://mcp.example.com
MCP_OAUTH_OWNER_SECRET=<STRONG_RANDOM_SECRET>
MCP_OAUTH_DCR_ENABLED=trueKlient może automatycznie odkryć:
/.well-known/oauth-protected-resource
/.well-known/oauth-protected-resource/mcp
/.well-known/oauth-authorization-server
/oauth/register
/oauth/authorize
/oauth/tokenIstniejący ChatGPT nadal działa
MCP_OAUTH_CLIENT_ID=chatgpt-jamrelay
MCP_OAUTH_CLIENT_SECRET=<STRONG_RANDOM_SECRET>
MCP_OAUTH_REDIRECT_URI=<EXACT_CALLBACK_FROM_CHATGPT>
MCP_OAUTH_OWNER_SECRET=<OWNER_APPROVAL_SECRET>Ten klient może działać równocześnie z DCR i statycznym multi-client registry.
Wiele klientów statycznych
Ustaw MCP_OAUTH_CLIENTS_PATH i zacznij od examples/mcp-oauth-clients.example.json. Jeden klient może mieć kilka redirectUris. Klient publiczny może używać tokenEndpointAuthMethods: ["none"].
Bezpieczeństwo DCR
POST /oauth/register jest niezalogowany z założenia protokołu, ale sama rejestracja nie daje dostępu do Spotify. Kod autoryzacyjny jest wydawany dopiero po owner approval. JamRelay dodaje rate limiting, limit dynamicznych klientów, pruning, S256 PKCE, walidację callbacków i hashowanie dynamicznych client secretów.
DCR można wyłączyć:
MCP_OAUTH_DCR_ENABLED=falseKlienci natywni
CLI/desktop może rejestrować callback loopback, np. http://localhost:49152/oauth/callback. Klient z application_type=native może również używać bezpiecznego private-use URI scheme. Niebezpieczne schematy są odrzucane.
Trwały store
Lokalnie: ./data/mcp-oauth.json. W Docker production: /data/mcp-oauth.json. Store powinien być prywatny i trwały.
CIMD
MCP 2026-07-28 preferuje Client ID Metadata Documents (CIMD) i długoterminowo deprecjonuje DCR. JamRelay v1.0.0 celowo nie reklamuje CIMD, ponieważ poprawna implementacja wymaga bezpiecznego pobierania metadata kontrolowanych przez klienta oraz ochrony przed SSRF i DNS rebinding.