Crea un client per l’assistente
Accesso con OAuth
Come un assistente accede senza una chiave API: scoperta, registrazione, consenso e token, per creare il tuo client.
Un assistente IA accede a Setherion con OAuth invece che con una chiave API: la persona preme Allow su una pagina di Setherion, e l’assistente riceve un token. Questa pagina è il contratto per creare il tuo client. Se vuoi solo collegare Claude, ChatGPT, Cursor o VS Code, segui MCP: collegare un assistente IA.
Il flusso è OAuth 2.1 come lo richiede la specifica di autorizzazione MCP (2025-06-18):
- il flusso con codice di autorizzazione, con PKCE (S256) sempre obbligatorio;
- solo client pubblici, senza client secret;
- registrazione dinamica del client (RFC 7591), così nessuno incolla un client id da nessuna parte;
- token legati a una sola risorsa, l’endpoint MCP (RFC 8707).
I token funzionano sul Server MCP e da nessun’altra parte. Gli endpoint REST di questo riferimento richiedono una chiave API.
| Elemento | Valore |
|---|---|
| Issuer | https://www.setherion.com |
| Resource | https://www.setherion.com/api/mcp |
| Scope | mcp |
| Access token | Inizia con sto_, dura 1 ora |
| Refresh token | Inizia con str_, dura 30 giorni, viene sostituito a ogni uso |
| Authorization code | Inizia con stc_, dura 10 minuti, funziona una sola volta |
1. Scoperta
Invia una richiesta all’endpoint MCP senza alcuna credenziale. Il 401 indirizza ai metadati della risorsa (RFC 9728) nella sua intestazione WWW-Authenticate:
curl https://www.setherion.com/.well-known/oauth-protected-resource/api/mcp{
"resource": "https://www.setherion.com/api/mcp",
"authorization_servers": ["https://www.setherion.com"],
"bearer_methods_supported": ["header"],
"scopes_supported": ["mcp"],
"resource_name": "Setherion"
}Lo stesso documento si trova su /.well-known/oauth-protected-resource. Poi leggi i metadati del server di autorizzazione (RFC 8414):
curl https://www.setherion.com/.well-known/oauth-authorization-server{
"issuer": "https://www.setherion.com",
"authorization_endpoint": "https://www.setherion.com/oauth/authorize",
"token_endpoint": "https://www.setherion.com/api/oauth/token",
"registration_endpoint": "https://www.setherion.com/api/oauth/register",
"response_types_supported": ["code"],
"grant_types_supported": ["authorization_code", "refresh_token"],
"code_challenge_methods_supported": ["S256"],
"token_endpoint_auth_methods_supported": ["none"],
"scopes_supported": ["mcp"]
}Entrambi i documenti, la registrazione e l’endpoint dei token rispondono a qualsiasi origine (Access-Control-Allow-Origin: *), quindi un client in una pagina del browser può chiamarli.
2. Registrazione
https://www.setherion.com/api/oauth/registerPiano: Ogni piano
Registrati una volta per ogni installazione. La registrazione non concede nulla da sola: una persona deve comunque premere Allow, e il codice viene inviato solo agli indirizzi esatti registrati qui.
curl -X POST https://www.setherion.com/api/oauth/register \
-H "Content-Type: application/json" \
-d '{ "client_name": "My assistant", "redirect_uris": ["http://localhost:8787/callback"] }'| Campo | Significato |
|---|---|
redirect_uris | Obbligatorio. Da 1 a 10 indirizzi, ciascuno di al massimo 2.000 caratteri. I duplicati vengono scartati. |
client_name | Facoltativo. Mostrato alla persona nella pagina di consenso. Tagliato a 100 caratteri; An AI assistant se omesso. |
grant_types | Facoltativo. Sono accettati solo authorization_code e refresh_token. |
response_types | Facoltativo. Solo code. |
Un indirizzo di reindirizzamento deve essere https, oppure http verso questa stessa macchina (localhost, 127.0.0.1 o [::1]). Non può avere un frammento né un nome utente. L’unico indirizzo che non è https né http è cursor://anysphere.cursor-mcp/oauth/callback, per le vecchie app Cursor.
Qualunque metodo di autenticazione chieda un client, viene registrato come client pubblico senza segreto, e la risposta lo dice:
{
"client_id": "5f0c2a9d-4e30-4d7f-b8a5-6f1c2a9d4e30",
"client_id_issued_at": 1790000000,
"client_name": "My assistant",
"redirect_uris": ["http://localhost:8787/callback"],
"grant_types": ["authorization_code", "refresh_token"],
"response_types": ["code"],
"token_endpoint_auth_method": "none"
}Lo stato è 201. Le registrazioni sono limitate a 20 all’ora per indirizzo di rete.
Errori di registrazione
Ogni errore è { "error": "...", "error_description": "..." }.
| Stato | error | error_description |
|---|---|---|
400 | invalid_redirect_uri | Send between one and ten redirect_uris. |
400 | invalid_redirect_uri | Redirect URIs must be HTTPS, or HTTP back to localhost. |
400 | invalid_client_metadata | Only authorization_code and refresh_token are supported. |
400 | invalid_client_metadata | Only the code response type is supported. |
429 | slow_down | Too many registrations. Try again later. |
503 | temporarily_unavailable | Not configured. o Connecting assistants is not switched on yet. |
3. Chiedi alla persona
Apri l’endpoint di autorizzazione nel browser della persona. È una pagina, non un’API: la persona accede a Setherion se non l’ha già fatto, vede il nome che hai registrato e dove verrà rimandata, e preme Allow o Cancel.
https://www.setherion.com/oauth/authorize
?response_type=code
&client_id=5f0c2a9d-4e30-4d7f-b8a5-6f1c2a9d4e30
&redirect_uri=http%3A%2F%2Flocalhost%3A8787%2Fcallback
&code_challenge=E9Melhoa2OwvFrEMTJguCHaoeK1t8URWbuGJSstw-cM
&code_challenge_method=S256
&state=af0ifjsldkj
&resource=https%3A%2F%2Fwww.setherion.com%2Fapi%2Fmcp| Parametro | Significato |
|---|---|
response_type | Obbligatorio. code. |
client_id | Obbligatorio. Dalla registrazione. |
redirect_uri | Uno degli indirizzi registrati, confrontato in modo esatto. Si può omettere solo quando ne hai registrato esattamente uno. |
code_challenge | Obbligatorio. L’hash S256 del tuo verifier, in base64url, da 43 a 128 caratteri. |
code_challenge_method | Obbligatorio. S256. plain non è accettato. |
state | Consigliato. Rimandato invariato. Fino a 1.000 caratteri. |
resource | Facoltativo. Se inviato, deve essere https://www.setherion.com/api/mcp (una barra finale e le maiuscole dello schema e dell’host non contano). |
Il verifier deve avere da 43 a 128 caratteri tra A-Z a-z 0-9 - . _ ~; conservalo fino al passaggio 4.
La persona viene rimandata al tuo redirect_uri con:
- su Allow:
code,stateeiss(l’issuer); - su Cancel:
error=access_denied,error_description=The request was declined.,stateeiss; - su un problema con la richiesta, una volta che client e indirizzo risultano autentici:
error,error_description,stateeiss. L’errorèunsupported_response_type,invalid_request(PKCE mancante, o il metodo non èS256) oppureinvalid_target(la risorsa non è l’endpoint MCP).
Se il client è sconosciuto, o l’indirizzo non è uno di quelli che ha registrato, la pagina lo dice alla persona e non manda nessuno da nessuna parte, quindi questa pagina non può mai essere usata per reindirizzare qualcuno a un indirizzo che non hai registrato.
4. Scambia il codice
https://www.setherion.com/api/oauth/tokenPiano: Ogni piano
Invia i campi codificati come form, come specifica OAuth. Viene accettato anche JSON con gli stessi nomi.
curl -X POST https://www.setherion.com/api/oauth/token \
-d grant_type=authorization_code \
-d code=stc_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx \
-d client_id=5f0c2a9d-4e30-4d7f-b8a5-6f1c2a9d4e30 \
-d redirect_uri=http://localhost:8787/callback \
-d code_verifier=YOUR_VERIFIER| Campo | Significato |
|---|---|
grant_type | authorization_code. |
code | Il codice del reindirizzamento. |
client_id | Il client a cui è stato emesso il codice. |
redirect_uri | Lo stesso indirizzo del passaggio 3. |
code_verifier | Il verifier il cui hash S256 hai inviato come code_challenge. |
resource | Facoltativo. Se inviato, deve corrispondere alla risorsa del codice. |
{
"access_token": "sto_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"token_type": "Bearer",
"expires_in": 3600,
"refresh_token": "str_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"scope": "mcp"
}Invia l’access token al Server MCP come Authorization: Bearer sto_.... I token non vengono mai messi in cache: la risposta contiene Cache-Control: no-store.
5. Aggiornamento
Un access token dura un’ora. Prima che scada, o quando il server MCP risponde 401, scambia il refresh token:
curl -X POST https://www.setherion.com/api/oauth/token \
-d grant_type=refresh_token \
-d refresh_token=str_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx \
-d client_id=5f0c2a9d-4e30-4d7f-b8a5-6f1c2a9d4e30La risposta è la stessa del passaggio 4, con un refresh token nuovo. Quello vecchio smette di funzionare, quindi salva ogni volta quello nuovo.
Un refresh token riutilizzato chiude la connessione
Usare un refresh token una seconda volta viene letto come una copia rubata, e Setherion chiude l’intera connessione: ogni token di quel consenso smette di funzionare e la persona deve premere di nuovo Allow. L’unica eccezione è lo stesso client che presenta lo stesso token entro 60 secondi mentre la connessione è ancora aperta, ed è così che due processi dello stesso assistente, come due finestre, possono aggiornare insieme. Un codice usato due volte chiude la sua connessione allo stesso modo.
Errori
Ogni errore dell’endpoint dei token ha lo stato 400, tranne server_error, e il corpo { "error": "...", "error_description": "..." }.
Errori dei token
error | error_description |
|---|---|
unsupported_grant_type | Use authorization_code or refresh_token. |
invalid_grant | Unknown code. |
invalid_grant | This code was already used. |
invalid_grant | This code has expired. |
invalid_grant | This code was issued to another application. |
invalid_grant | redirect_uri does not match the one the code was issued for. |
invalid_grant | PKCE verification failed. |
invalid_grant | Unknown refresh token. |
invalid_grant | This refresh token has expired. |
invalid_grant | This token was issued to another application. |
invalid_grant | This refresh token was already used. The connection has been ended for safety. |
invalid_target | This code was issued for another resource. o This token was issued for another resource. |
server_error (stato 500) | Not configured. o Could not issue tokens. |
Chiudere una connessione
La persona può scollegare un assistente in Settings, poi AI assistants and MCP. Ogni token di quella connessione, di accesso e di aggiornamento, smette di funzionare alla richiesta successiva, non quando scade l’ora. Elencare e chiudere le connessioni è possibile solo da una sessione Setherion con accesso effettuato, quindi nulla di ciò che un assistente possiede può farlo.
Usare invece una chiave API
Un client che può inviare solo un’intestazione fissa può saltare tutto questo e inviare una chiave API al server MCP. Vedi Autenticazione.
Questa pagina ti è stata utile?
