OAuth per client MCP personalizzati
Se stai costruendo il tuo client MCP (CLI, SDK, plugin per IDE), questa pagina descrive la nostra implementazione OAuth: gli standard che supportiamo, gli endpoint, le regole su redirect_uri e come fare il debug degli errori più comuni. Gli utenti di Claude.ai e ChatGPT non hanno bisogno di questa pagina — usa il Quickstart.
Standard che implementiamo
mcp-telegram.com è pienamente conforme alle specifiche OAuth su cui si basa l'ecosistema MCP — niente estensioni proprietarie, niente segreti condivisi cablati nei client.
Endpoint
Authorization code flow con PKCE
Flusso standard RFC 6749 §4.1 + RFC 7636. Nessuna sorpresa — se la tua libreria OAuth gestisce "authorization code + PKCE", funzionerà.
Registra il tuo client
POST /oauth/register con { redirect_uris: ["http://127.0.0.1:«porta»/callback"], client_name: "nome-del-tuo-client" }. Il server restituisce client_id + client_secret (il secret è opzionale per i client PKCE pubblici, ma riceverlo non fa male).
Genera la coppia PKCE
Genera un code_verifier casuale di 43-128 caratteri, poi calcola code_challenge = BASE64URL(SHA256(code_verifier)). Conserva il verifier in locale per il passo 4.
Apri /oauth/authorize nel browser
Reindirizza l'utente a /oauth/authorize?response_type=code&client_id=...&redirect_uri=...&state=...&code_challenge=...&code_challenge_method=S256. Il server mostra un codice QR; l'utente lo scansiona nell'app Telegram per autenticarsi.
Ricevi l'authorization code
Dopo la scansione del QR, il server reindirizza al tuo redirect_uri con ?code=...&state=.... Verifica che il parametro state corrisponda a quello che hai inviato.
Scambia il code per un token
POST /oauth/token con grant_type=authorization_code, code, redirect_uri, code_verifier, client_id. Ricevi un access_token (TTL di 10 anni — vedi Token lifetime sotto) e un refresh_token. Usa l'access_token come Authorization: Bearer ... nelle richieste a /mcp.
Regole di matching del redirect_uri
Seguiamo rigorosamente RFC 8252 §7.3 e §8.4. L'algoritmo di matching dipende dal fatto che l'URI registrato sia o meno un letterale IP loopback.
Loopback (http://127.0.0.1 o http://[::1])
Se hai registrato un URI loopback, il redirect_uri al momento dell'authorize deve combaciare esattamente in scheme, host, path e query — ma la porta può essere diversa. Lo richiede RFC 8252 §7.3 perché i client nativi si legano a una porta effimera assegnata dal sistema operativo, che può cambiare tra un'esecuzione e l'altra.
- Registrato http://127.0.0.1:36201/callback combacia all'authorize con http://127.0.0.1:50000/callback ✅
- Registrato http://127.0.0.1:36201/callback NON combacia con http://127.0.0.1:50000/different-path — il path deve essere esatto
- Registrato http://[::1]:36201/cb NON combacia con http://127.0.0.1:36201/cb — i loopback IPv4 e IPv6 sono identificatori separati
HTTPS (https://tuo-dominio.example/...)
Corrispondenza byte-per-byte esatta, inclusi path, query e porta (RFC 6749 §3.1.2). Nessuna flessibilità.
localhost (NON consigliato)
Trattiamo http://localhost come un normale hostname — match esatto obbligatorio, nessuna flessibilità sulla porta. RFC 8252 §8.3 consiglia di usare letterali IP (127.0.0.1 / [::1]) invece di localhost perché la risoluzione DNS dipende dall'implementazione.
Errori comuni
Client testati
Confermati come interoperanti con il nostro server. Se costruisci qualcosa di nuovo e funziona, mandaci una PR per aggiungerlo qui.
Più account Telegram su un'unica connessione OAuth
Dalla v2.32.0 una singola connessione OAuth può contenere diverse identità Telegram e passare dall'una all'altra con una sola chiamata di tool — senza ciclo Disconnect/Connect, senza registrare un nuovo client.
Elencare gli account collegati
Chiamare telegram-accounts-list. Apparirà il Suo account primary (legato all'OAuth) contrassegnato con ⭐ se attivo, insieme a eventuali account secondari aggiunti.
Collegare un altro account
Chiamare telegram-accounts-add con un label opzionale (es. "testing"). Il tool restituisce un URL monouso (TTL 10 minutes) — lo apra su un qualsiasi dispositivo e scansioni il QR con l'account Telegram che desidera aggiungere.
Cambiare l'account attivo
Chiamare telegram-accounts-switch con identifier=label, @username, account_id oppure 'primary'. La successiva chiamata telegram-* userà immediatamente quell'account. Senza riconnessione.
Scollegare un account secondario
Chiamare telegram-accounts-remove identifier=… su un account secondario. L'account Telegram in sé NON viene disconnesso — viene rimosso solo il collegamento qui. L'account primary non può essere rimosso in questo modo; utilizzi il flusso di Disconnect del Suo client per uscire completamente.
Ogni connessione OAuth è isolata: gli account che collega tramite Hermes sono invisibili a Claude.ai o ChatGPT, anche se si tratta della stessa identità Telegram. Per collegare account diversi a client MCP diversi, registri ciascun client separatamente e usi telegram-accounts-add all'interno della relativa sessione.