OAuth dla własnych klientów MCP
Jeśli budujesz własnego klienta MCP (CLI, SDK, wtyczkę do IDE), na tej stronie znajdziesz opis naszej implementacji OAuth: jakie standardy wspieramy, jakie są endpointy, reguły redirect_uri oraz jak debugować typowe błędy. Użytkownicy Claude.ai i ChatGPT nie potrzebują tej strony — skorzystaj z Quickstart.
Standardy, które wdrażamy
mcp-telegram.com jest w pełni zgodny ze specyfikacjami OAuth, na których opiera się ekosystem MCP — bez własnościowych rozszerzeń, bez współdzielonych sekretów zaszytych w klientach.
Endpointy
Authorization code flow z PKCE
Standardowy przepływ RFC 6749 §4.1 + RFC 7636. Bez niespodzianek — jeśli twoja biblioteka OAuth obsługuje "authorization code + PKCE", zadziała.
Zarejestruj swojego klienta
POST /oauth/register z { redirect_uris: ["http://127.0.0.1:«port»/callback"], client_name: "nazwa-twojego-klienta" }. Serwer zwraca client_id + client_secret (secret jest opcjonalny dla publicznych klientów PKCE, ale jego otrzymanie nie zaszkodzi).
Wygeneruj parę PKCE
Wygeneruj losowy code_verifier o długości 43–128 znaków, następnie policz code_challenge = BASE64URL(SHA256(code_verifier)). Zapisz verifier lokalnie na potrzeby kroku 4.
Otwórz /oauth/authorize w przeglądarce
Przekieruj użytkownika na /oauth/authorize?response_type=code&client_id=...&redirect_uri=...&state=...&code_challenge=...&code_challenge_method=S256. Serwer wyświetla kod QR; użytkownik skanuje go w aplikacji Telegram, żeby się uwierzytelnić.
Odbierz authorization code
Po zeskanowaniu QR serwer przekierowuje na twój redirect_uri z ?code=...&state=.... Sprawdź, czy parametr state zgadza się z tym, który wysłałeś.
Wymień code na token
POST /oauth/token z grant_type=authorization_code, code, redirect_uri, code_verifier, client_id. Otrzymujesz access_token (TTL 10 lat — zobacz Token lifetime poniżej) oraz refresh_token. Używaj access_token jako Authorization: Bearer ... w żądaniach do /mcp.
Reguły matchingu redirect_uri
Ściśle stosujemy RFC 8252 §7.3 i §8.4. Algorytm matchingu zależy od tego, czy zarejestrowany URI jest literałem IP loopback.
Loopback (http://127.0.0.1 lub http://[::1])
Jeśli zarejestrowałeś URI loopback, to redirect_uri w momencie authorize musi się zgadzać dokładnie pod względem scheme, host, path i query — ale port może być inny. Wymaga tego RFC 8252 §7.3, ponieważ klienty natywne bindują efemeryczny port przyznany przez system operacyjny, który może się zmieniać między uruchomieniami.
- Zarejestrowane http://127.0.0.1:36201/callback pasuje przy authorize do http://127.0.0.1:50000/callback ✅
- Zarejestrowane http://127.0.0.1:36201/callback NIE pasuje do http://127.0.0.1:50000/different-path — path musi się zgadzać dokładnie
- Zarejestrowane http://[::1]:36201/cb NIE pasuje do http://127.0.0.1:36201/cb — loopback IPv4 i IPv6 to oddzielne identyfikatory
HTTPS (https://twoja-domena.example/...)
Wymagana dokładna zgodność bajt po bajcie, włącznie z path, query i portem (RFC 6749 §3.1.2). Żadnej elastyczności.
localhost (NIE polecane)
http://localhost traktujemy jako zwykły hostname — wymagany jest dokładny match, bez elastyczności portu. RFC 8252 §8.3 zaleca używanie literałów IP (127.0.0.1 / [::1]) zamiast localhost, ponieważ rozwiązywanie DNS zależy od implementacji.
Typowe błędy
Sprawdzeni klienci
Potwierdzona współpraca z naszym serwerem. Jeśli zbudujesz coś nowego i zadziała, przyślij PR, żebyśmy mogli to tu dodać.
Wiele kont Telegram w jednym połączeniu OAuth
Od wersji v2.32.0 pojedyncze połączenie OAuth może obsługiwać kilka tożsamości Telegram i przełączać się między nimi jednym wywołaniem narzędzia — bez cyklu Disconnect/Connect i bez rejestrowania nowego klienta.
Wyświetlić podłączone konta
Wywołać telegram-accounts-list. Zostanie wyświetlone konto primary (powiązane z OAuth) oznaczone symbolem ⭐, jeśli jest aktywne, wraz z dodanymi kontami pomocniczymi.
Podłączyć kolejne konto
Wywołać telegram-accounts-add z opcjonalnym label (np. "testing"). Narzędzie zwróci jednorazowy URL (TTL 10 minutes) — należy otworzyć go na dowolnym urządzeniu i zeskanować QR za pomocą konta Telegram, które ma zostać dodane.
Przełączyć aktywne konto
Wywołać telegram-accounts-switch z identifier=label, @username, account_id lub 'primary'. Następne wywołanie telegram-* zostanie natychmiast wykonane z poziomu tego konta. Bez ponownego łączenia.
Odłączyć konto pomocnicze
Wywołać telegram-accounts-remove identifier=… na koncie pomocniczym. Samo konto Telegram NIE zostanie wylogowane — usuwane jest tylko powiązanie w tym miejscu. Konta primary nie można w ten sposób usunąć; aby całkowicie się wylogować, należy użyć Disconnect w kliencie.
Każde połączenie OAuth jest odizolowane: konta podłączone przez Hermes są niewidoczne dla Claude.ai ani ChatGPT, nawet jeśli chodzi o tę samą tożsamość Telegram. Aby podłączyć różne konta do różnych klientów MCP, należy zarejestrować każdego klienta osobno i użyć telegram-accounts-add w obrębie jego własnej sesji.