Il pulsante Connect ora connette davvero
Approvare un assistente non faceva nulla. La pagina diceva che il modulo non veniva da qui, e aveva ragione in un modo che era sbagliato: la pagina di approvazione chiedeva ai browser di non inviare un referrer, e Chrome deriva l'origine di una pagina dalla stessa impostazione — così il modulo della pagina stessa arrivava dichiarando di venire da nessun posto, e il controllo che impedisce a un altro sito di approvare cose per te bloccava la pagina stessa.
Nulla era mai stato connesso tramite di essa. I test non potevano vederlo, perché un test non è un browser e invia qualunque intestazione gli venga detto di inviare; il database sì, e lo diceva chiaramente: ogni richiesta mostrata, nessuna mai approvata.
Dietro a questo ce n'era un secondo. La pagina dice al browser che può inviarti solo verso l'assistente che ha fatto la richiesta — e diceva invece che poteva inviarti solo di nuovo verso di noi, così l'approvazione funzionava e il ritorno verso l'assistente veniva rifiutato dalla pagina stessa. Ora nomina quell'unico indirizzo, e nulla altro.
Approvare un assistente è una pagina e un pulsante: questo sta dietro.
Cosa fa davvero l'approvazione
Accedi qui con l'account che usi già, leggi una pagina che nomina il client e l'indirizzo per cui sta per agire, e premi Connect. Ciò che il client riceve è un token emesso da questo sito — non la tua sessione, non una chiave API. Raggiunge i documenti dell'account e nulla altro: non l'account, non l'accesso, non le tue chiavi API. Una connessione di sola lettura non può salvare, condividere o eliminare, e questo è imposto sulla credenziale, non sugli strumenti.
TransformPipe deve essere il proprio server di autorizzazione per questo: la specifica MCP proibisce a una risorsa di accettare un token emesso da qualcun altro, quindi la sessione di accesso non può semplicemente essere consegnata.
L'ordine degli eventi
- L'assistente invia un POST a
/api/mcpsenza token e riceve un 401 che indica dove guardare. - Legge
/.well-known/oauth-protected-resource, poi/.well-known/oauth-authorization-server, per trovare gli endpoint. - Si identifica — con un documento di metadati che pubblica, oppure registrandosi qui. Nessun segreto in entrambi i casi: un client in esecuzione sulla macchina di qualcun altro non può custodirne uno, ed è esattamente per questo che esiste PKCE.
- Ti invia a
/authorizecon una challenge.code_challenge_method=S256è obbligatorio; una challenge semplice viene rifiutata senz'altro. - Tu approvi con un POST dalla pagina che ti è stata mostrata, così un link da solo non autorizza nulla.
- Scambia il codice e il suo verifier su
/token.
Cosa fanno i token in seguito
Un codice vive cinque minuti e viene bruciato all'inizio del suo scambio, prima di qualunque verifica, così una copia riproposta durante la prima chiamata non ottiene nulla. I refresh token ruotano: consegnarne uno lo revoca ed emette una nuova coppia. Consegnarne uno già ruotato termina l'intera concessione — token di accesso, refresh token e ogni rotazione precedente — perché un refresh token presentato due volte è l'unico segnale che sia stato copiato.
Lo revochi dal menu dell'account, sotto Connettore MCP; smette di funzionare alla chiamata successiva.
Perché il pulsante non aveva fatto nulla
Due intestazioni sulla nostra pagina. Chiedeva ai browser di non inviare un referrer, e Chrome deriva l'Origin di un POST da quella stessa impostazione, così il modulo della pagina arrivava dichiarando di venire da nessun posto — e il controllo che blocca un altro sito dall'approvare cose per te bloccava la pagina stessa. Dietro a questo, la form-action nominava solo questo sito, quindi il ritorno verso l'assistente era rifiutato dopo che il codice era già stato coniato. Ora nomina l'unico indirizzo a cui la richiesta verrà inviata, e nulla altro.
Da leggere: convertire documenti da un assistente, e se un convertitore online è sicuro.