Kembali ke Quickstart

OAuth untuk klien MCP kustom

Jika Anda membangun klien MCP sendiri (CLI, SDK, plugin IDE), halaman ini menjelaskan implementasi OAuth kami: standar yang kami dukung, endpoint, aturan redirect_uri, dan cara mendebug error umum. Pengguna Claude.ai dan ChatGPT tidak memerlukan halaman ini — gunakan Quickstart saja.

Standar yang kami implementasikan

mcp-telegram.com sepenuhnya patuh terhadap spesifikasi OAuth yang menjadi tumpuan ekosistem MCP — tanpa ekstensi proprietary, tanpa shared secret yang ditanam dalam klien.

RFC 6749OAuth 2.0 Authorization Framework — authorization code grant dasar dengan refresh token
RFC 7591Dynamic Client Registration — klien mana pun dapat mendaftar sendiri di /oauth/register tanpa koordinasi sebelumnya
RFC 7636PKCE (Proof Key for Code Exchange) — challenge S256 wajib untuk klien publik
RFC 8252OAuth 2.0 for Native Apps — redirect URI loopback IP dengan fleksibilitas port ephemeral
RFC 8414OAuth 2.0 Authorization Server Metadata — dokumen discovery di /.well-known/oauth-authorization-server
RFC 9728OAuth 2.0 Protected Resource Metadata — discovery batas resource MCP

Endpoint

Metadata authorization server (RFC 8414)
Dynamic client registration (RFC 7591)
Authorization endpoint
Token endpoint
Resource MCP (Streamable HTTP)

Authorization code flow dengan PKCE

Flow standar RFC 6749 §4.1 + RFC 7636. Tanpa kejutan — jika library OAuth Anda menangani "authorization code + PKCE", maka akan langsung bekerja.

1

Daftarkan klien Anda

POST /oauth/register dengan { redirect_uris: ["http://127.0.0.1:«port»/callback"], client_name: "nama-klien-anda" }. Server mengembalikan client_id + client_secret (secret bersifat opsional untuk klien publik PKCE, tapi tidak ada salahnya menerimanya).

2

Buat pasangan PKCE

Buat code_verifier acak sepanjang 43–128 karakter, lalu hitung code_challenge = BASE64URL(SHA256(code_verifier)). Simpan verifier secara lokal untuk langkah 4.

3

Buka /oauth/authorize di browser

Redirect pengguna ke /oauth/authorize?response_type=code&client_id=...&redirect_uri=...&state=...&code_challenge=...&code_challenge_method=S256. Server menampilkan kode QR; pengguna memindainya di aplikasi Telegram untuk autentikasi.

4

Terima authorization code

Setelah QR dipindai, server me-redirect ke redirect_uri Anda dengan ?code=...&state=.... Verifikasi bahwa parameter state cocok dengan yang Anda kirim.

5

Tukar code dengan token

POST /oauth/token dengan grant_type=authorization_code, code, redirect_uri, code_verifier, client_id. Anda akan menerima access_token (TTL 10 tahun — lihat Token Lifetime di bawah) dan refresh_token. Gunakan access_token sebagai Authorization: Bearer ... pada request ke /mcp.

Aturan matching redirect_uri

Kami mengikuti RFC 8252 §7.3 dan §8.4 secara ketat. Algoritma matching tergantung pada apakah URI terdaftar adalah literal IP loopback.

Loopback (http://127.0.0.1 atau http://[::1])

Jika Anda mendaftarkan URI loopback, redirect_uri pada saat authorize harus cocok persis di scheme, host, path, dan query — tetapi port boleh berbeda. Ini diwajibkan oleh RFC 8252 §7.3 karena klien native mengikat port ephemeral yang ditetapkan OS yang bisa berubah antar run.

HTTPS (https://your-domain.example/...)

Kecocokan persis byte-per-byte diperlukan, termasuk path, query, dan port (RFC 6749 §3.1.2). Tanpa fleksibilitas.

localhost (TIDAK direkomendasikan)

Kami memperlakukan http://localhost sebagai hostname biasa — diperlukan kecocokan persis, tanpa fleksibilitas port. RFC 8252 §8.3 merekomendasikan menggunakan literal IP (127.0.0.1 / [::1]) sebagai pengganti localhost karena resolusi DNS bergantung pada implementasi.

PKCE wajibcode_challenge_method=S256 wajib pada setiap authorize request. Method plain ditolak. Jika Anda melewatkan code_challenge sama sekali, pertukaran /token akan gagal saat validasi code_verifier.
Masa berlaku tokenTTL access_token sengaja dibuat panjang (10 tahun) karena beberapa klien MCP tidak menyimpan refresh_token dengan andal. refresh_token tetap diterbitkan dan dirotasi pada setiap refresh (RFC 6819 §5.2.2.3). Pengguna dapat mencabut semua token kapan saja di /my/sessions atau dengan logout dari Telegram. Pengguna juga dapat secara eksplisit POST ke /oauth/revoke (RFC 7009) untuk mengakhiri sesi.

Error umum

Klien yang diuji

Dikonfirmasi dapat beroperasi dengan server kami. Jika Anda membangun sesuatu yang baru dan berhasil, kirimkan PR untuk menambahkannya di sini.

Claude.ai web — melalui konektor MCP bawaan
ChatGPT Apps — melalui konektor MCP bawaan
Hermes Agent — klien CLI MCP open-source (RFC 8252 loopback flow)
Cursor MCP — plugin IDE (RFC 8252 loopback flow)
Klien apa pun yang patuh terhadap RFC 6749 + RFC 7591 + RFC 7636 + RFC 8252 seharusnya bekerja tanpa perubahan kode di sisi kami.

Beberapa akun Telegram pada satu koneksi OAuth

Sejak v2.32.0, satu koneksi OAuth dapat menampung beberapa identitas Telegram dan beralih di antaranya hanya dengan satu pemanggilan tool — tanpa siklus Disconnect/Connect, tanpa pendaftaran client baru.

1

Lihat akun yang terpasang

Panggil telegram-accounts-list. Anda akan melihat akun primary (yang terikat OAuth) Anda ditandai dengan ⭐ jika sedang aktif, beserta akun-akun sekunder yang telah Anda tambahkan.

2

Pasang akun lain

Panggil telegram-accounts-add dengan label opsional (misalnya "testing"). Tool ini mengembalikan URL sekali pakai (TTL 10 menit) — buka URL tersebut di perangkat apa pun dan pindai QR dengan akun Telegram yang ingin Anda tambahkan.

3

Beralih akun aktif

Panggil telegram-accounts-switch dengan identifier=label, @username, account_id, atau 'primary'. Pemanggilan tool telegram-* berikutnya akan langsung menggunakan akun tersebut. Tanpa reconnect.

4

Lepaskan akun sekunder

Panggil telegram-accounts-remove identifier=… pada akun sekunder. Akun Telegram itu sendiri TIDAK di-log out — hanya pengikatannya di sini yang dihapus. Akun primary tidak dapat dihapus dengan cara ini; gunakan alur Disconnect pada klien Anda untuk keluar sepenuhnya.

Setiap koneksi OAuth terisolasi: akun-akun yang Anda pasang melalui Hermes tidak terlihat oleh Claude.ai atau ChatGPT, bahkan jika identitas Telegram-nya sama. Untuk menghubungkan akun yang berbeda ke klien MCP yang berbeda, daftarkan setiap klien secara terpisah dan gunakan telegram-accounts-add di dalam sesinya masing-masing.