Cara menghubungkan agen AI ke Telegram lewat MCP
Menyambungkan agen AI ke channel lewat MCP: persiapannya, langkah untuk claude.ai, ChatGPT, Claude Code, dan Cursor, dan cara menangani tool yang menolak.
Singkatnya. Sebelum klien mana pun terhubung, tiga hal harus benar: workspace punya bot sendiri, bot itu admin di channel, dan pemiliknya sudah menekan Start di chat pribadi dengannya. Setelah itu kamu memilih jalur — alamat server
https://backend-git-production-cb93.up.railway.app/mcpsebagai konektor kustom dengan login Telegram, atau kunci di headerAuthorizationdari Pengaturan → Agen AI (MCP). Lalu muncul empat belas tool: lima membaca channel, tujuh mengurus postingan, dua membaca audiens. Tidak ada produk, pesanan, atau chat pribadi, dan tidak ada apa pun tanpa bot. Langkah tiap klien diperiksa 8 September 2026.
Ini paruh praktis dari perbandingan server MCP Telegram: di sana yang diputuskan adalah apakah jalur bot memang yang kamu mau, di sini kamu benar-benar terhubung dan tahu apa yang dilakukan kalau gagal.
Sebelum menghubungkan
Hampir semua penolakan terjadi di sini, sebelum satu tool pun dipanggil.
Workspace butuh bot sendiri. Server MCP AdminHub memposting lewat bot yang dibuat pemilik channel untuk channel-nya sendiri — tidak pernah lewat bot bersama AdminHub dan tidak pernah lewat akun pribadimu. Tanpa bot, tool tidak merosot diam-diam: mereka menolak dengan bot_required beserta tautan yang membuat bot dalam sekali ketuk, telegram.me/tg_adminhub_bot?startapp=bot. get_workspace adalah pengecualian dan tetap menjawab, supaya agen bisa menemukan apa yang kurang.
Bot harus jadi admin channel. Bot yang cuma jadi anggota tidak bisa memposting, dan Telegram tidak berkata apa-apa soal itu sampai sebuah pengiriman gagal. Justru karena itulah list_channels membawa penanda bot_is_admin di tiap channel, dan create_post menolak channel yang penandanya mati, dengan channel_not_postable, alih-alih menerima postingan yang nanti hilang.
Chat pribadi pemilik dengan bot harus terbuka. Ini hanya berlaku untuk gambar, dan aturannya milik Telegram, bukan milik kami: bot hanya bisa memperoleh file id untuk berkas yang ia kirim sendiri. Maka add_post_image mengunduh gambarnya, meneruskannya sekali lewat chat pemilik dengan bot untuk mendapatkan id itu, melampirkannya ke postingan, lalu menghapus pesan yang diteruskan tadi. Kalau pemiliknya belum pernah menekan Start di sana, tool menolak lebih dulu, bahkan sebelum mengunduh apa pun, dengan owner_bot_not_started.
Efek sampingnya perlu dikatakan terus terang: setiap gambar yang dilampirkan agen akan mampir — sebentar dan dengan notifikasi — di chat pemilik dengan botnya sendiri. Pesannya dihapus setelah itu, tapi ia sudah terkirim, dan orang yang tidak memesan gambar apa pun akan bertanya-tanya dari mana asalnya. get_workspace melaporkan owner_dm_open, jadi ini bisa dicek sebelum ada panggilan yang gagal.
Dua cara menghubungkan
Lewat alamat server, tanpa kunci. Untuk claude.ai, ChatGPT, Claude Desktop, dan Claude Code. Kamu menambahkan konektor kustom yang mengarah ke https://backend-git-production-cb93.up.railway.app/mcp, halaman AdminHub terbuka, lalu kamu masuk lewat Telegram, memilih workspace, dan menekan Izinkan. Workspace tanpa bot tetap terlihat di daftar tapi tidak bisa dipilih — tidak ada yang bisa dipakai memposting di sana. Aksesnya mencakup ketiga izin sekaligus: channel:read, posts:write, dan audience:read.
Lewat kunci di header. Untuk Claude Code, Cursor, dan apa pun yang mengirim header Authorization. Buka Pengaturan → Agen AI (MCP) → Buat kunci. Kuncinya ditampilkan tepat sekali dan tidak ada kesempatan kedua: basis data cuma menyimpan hash. Kedua jalur dicabut di tempat yang sama, dan koneksi yang dicabut langsung berhenti bekerja.
Satu hal layak direncanakan lebih dulu: kunci dan koneksi lewat alamat sama-sama dihitung sebagai koneksi, dan Free memberi satu.
claude.ai
Customize → Connectors → Add custom connector → tempel alamatnya → Add. Setelan autentikasi bawaannya sudah cukup: server menerima baik metadata klien yang dihosting Anthropic maupun registrasi dinamis, jadi tidak ada yang perlu diisi manual. Setelah itu hubungkan, selesaikan login Telegram, dan nyalakan di chat tempat kamu mau memakainya.
Konektor kustom tersedia di Free, Pro, Max, Team, dan Enterprise, dengan Free dibatasi satu. Di Team dan Enterprise hanya Owner yang menambahkannya, dari Organization settings → Connectors; sisanya menyambung ke situ belakangan dari halaman Connectors masing-masing.
ChatGPT
Konektor berganti nama menjadi Apps pada Juli 2026, dan server MCP kustom masih perlu mode pengembang: Settings → Security and login → Developer mode, lalu app-nya dibuat dari Apps, dengan alamat server dan OAuth sebagai mekanisme autentikasi. Di sebuah workspace, admin menyalakan mode pengembang di Permissions & Roles dan menerbitkan app-nya dari pengaturan workspace.
Dua batas yang sebaiknya diketahui lebih dulu: ini fitur web dan tidak ada dukungan di ponsel; dan MCP penuh — paruh yang menulis — saat ini untuk akun Business dan Enterprise/Edu, sementara akun Pro menyambungkan server hanya dengan izin baca dan fetch. Di Pro, harapkan tool bacanya bekerja dan tool posting-nya tidak.
Claude Desktop
Alur konektor yang sama seperti claude.ai, bukan berkas konfigurasi — claude_desktop_config.json itu untuk server stdio lokal, dan ini bukan salah satunya. Claude menjangkau konektor jarak jauh dari infrastruktur Anthropic sendiri, bukan dari mesinmu, dan di sini itu tidak mengubah apa pun karena alamat ini publik.
Claude Code
Claude Code bisa keduanya, dan itu layak diketahui sebelum membuat kunci yang mungkin tidak kamu perlukan. Dengan kunci:
claude mcp add --transport http adminhub https://backend-git-production-cb93.up.railway.app/mcp --header "Authorization: Bearer <kunci>"
Tanpa kunci, tambahkan server yang sama tanpa header dan biarkan Claude Code menjalankan loginnya sendiri:
claude mcp add --transport http adminhub https://backend-git-production-cb93.up.railway.app/mcp
lalu jalankan /mcp dan ikuti alurnya di browser. Ambil kunci kalau koneksinya harus bertahan lebih lama dari satu sesi browser; ambil login kalau kamu tidak mau menaruh rahasia di berkas konfigurasi.
Cursor dan klien berbasis header lainnya
Cursor membaca ~/.cursor/mcp.json untuk semua proyek dan .cursor/mcp.json untuk satu proyek. Server jarak jauh adalah entri dengan url dan headers — tidak ada kolom transport; yang membuatnya jarak jauh justru url:
{
"mcpServers": {
"adminhub": {
"url": "https://backend-git-production-cb93.up.railway.app/mcp",
"headers": {
"Authorization": "Bearer ${env:ADMINHUB_MCP_KEY}"
}
}
}
}
Cursor menyisipkan ${env:...} di dalam url dan headers, jadi kuncinya bisa tinggal di variabel lingkungan alih-alih di berkas yang bisa saja ikut ter-commit. Apa pun lain yang berbicara Streamable HTTP menyambung dengan cara yang sama: alamatnya, ditambah kunci sebagai bearer token.
Empat belas tool itu
| Tool | Fungsinya |
|---|---|
get_workspace | Workspace, paket, status bot, owner_dm_open, pemakaian postingan MCP bulan ini |
list_channels | Semua channel, dengan jumlah pelanggan, bot_is_admin, dan is_active |
get_channel_stats | Total serta masuk-keluar per hari, jendela sampai 90 hari |
list_posts | Postingan terbaru, bisa disaring per channel atau status |
get_post | Teks satu postingan, status pengiriman dan galat per channel |
create_post | Teks ke satu atau beberapa channel: draf, terjadwal, atau kirim sekarang |
publish_post | Mengirim draf yang tersimpan |
update_post | Menulis ulang teks, judul, atau waktu postingan draf, terjadwal, atau gagal |
edit_published_post | Menulis ulang postingan yang sudah ada di channel |
cancel_post | Menghapus postingan draf, terjadwal, atau gagal — yang sudah tayang tetap |
retry_post_delivery | Mengulang pengiriman ke channel yang gagal atau dibatalkan |
add_post_image | Melampirkan satu gambar dari URL, diteruskan lewat chat pemilik |
list_subscribers | Pelanggan sebuah channel: nama, username, id Telegram |
get_subscriber | Sama, tapi untuk satu orang |
Teks postingan memakai HTML Telegram, bukan Markdown, dan waktu terjadwal wajib membawa offset UTC. Publikasi berjalan lewat antrean: tool penulis langsung memberi jawaban dan pengiriman menyusul dalam semenit, jadi hasilnya dibaca kembali dari get_post.
Yang tidak dilakukannya
Tidak ada produk, tidak ada pesanan, tidak ada mini-CRM, tidak ada basis pengetahuan — paruh dagang dan paruh dukungan AI milik AdminHub sama sekali tidak dibuka lewat MCP. Tidak ada chat pribadi, tidak ada chat sembarangan, tidak ada riwayat pesan: tidak satu pun tool di sini menyentuh percakapan, dan di situlah seluruh bedanya dengan server userbot.
Data audiens pantas dapat barisnya sendiri, karena batas di dalamnya gampang terlewat. Nama, username, dan id Telegram keluar di bawah audience:read; belanja dan nilai seumur hidup tidak ikut bersamanya, dan baru muncul kalau agen mengirim include_spend pada panggilan itu. Ini batas yang disengaja, dan waktu menimbangnya adalah sebelum menyambung, bukan setelah agen merangkum pelanggan terbaikmu.
Kalau tidak berhasil
Semua tool menolak dengan bot_required. Workspace-nya belum punya bot. Tautannya sudah ikut di teks galat, dan tidak ada yang bekerja sampai botnya ada.
Postingan terbuat tapi tidak pernah sampai. Tunggu semenit — pengiriman berjalan lewat antrean — lalu panggil get_post dan baca status serta error per channel. Penyebab yang biasa adalah bot yang sudah bukan admin di sana. Kembalikan haknya, lalu retry_post_delivery.
Gambar tidak mau terlampir. owner_bot_not_started berarti pemiliknya belum pernah membuka chat pribadi dengan bot workspace. Minta dia membukanya dan menekan Start; owner_dm_open di get_workspace akan memastikannya. owner_unreachable adalah kasus tetangganya — chat-nya pernah terbuka, tapi botnya sudah diblokir sejak itu.
plan_limit_reached. Free memberi satu koneksi dan tiga puluh postingan yang dibuat lewat MCP per bulan. Penghitungnya menghitung pembuatan, jadi draf pun ikut terhitung; postingan yang gagal terkirim tidak. Batas koneksi berlaku untuk kedua jalur — kunci dan koneksi lewat alamat sama-sama memakai satu slot yang ada — dan yang kedua ditolak saat dibuat, bukan saat dipanggil. Pro tidak punya kedua batas itu.
Agen tidak bisa melihat pelanggan. Entah koneksinya tidak punya audience:read — kunci yang diterbitkan sebelum izin itu ada hanya membawa dua izin lama, dan obatnya adalah kunci baru — entah kliennya meminta sebagian izin saja saat login, dan server ini menolak permintaan seperti itu bulat-bulat alih-alih diam-diam memberi akses yang dipersempit. Sambungkan ulang sambil meminta ketiganya.
Di halaman MCP ada alamatnya, daftar tool, dan tanya jawabnya; kuncinya tinggal dua ketukan di pengaturan.
Sumber
Langkah tiap klien diperiksa 8 September 2026 terhadap dokumentasi masing-masing vendor: pusat bantuan dan dokumentasi konektor Anthropic untuk claude.ai dan Claude Desktop, dokumentasi MCP Claude Code untuk claude mcp add, panduan mode pengembang dan pusat bantuan OpenAI untuk app ChatGPT, serta dokumentasi MCP Cursor untuk bentuk mcp.json. Perilaku AdminHub sendiri — empat belas tool itu, penolakan yang disebut di atas, izin-izinnya, dan batas Free — berasal dari halaman MCP.
Yang biasanya ditanyakan
- Apa yang harus disiapkan sebelum menghubungkan server MCP AdminHub?
- Tiga hal, dan ketiganya soal bot. Workspace butuh bot Telegram sendiri: agen memposting lewat bot itu, bukan lewat bot bersama AdminHub, dan tanpa bot setiap tool menolak dengan bot_required. Bot itu harus jadi admin di setiap channel tujuanmu, kalau tidak create_post langsung menolak channel-nya. Dan chat pribadi pemilik dengan bot itu harus terbuka, artinya ia pernah menekan Start setidaknya sekali — itulah yang membuat gambar bisa dilampirkan.
- Apakah perlu kunci untuk terhubung?
- Hanya untuk klien yang terhubung lewat header. claude.ai, ChatGPT, Claude Desktop, dan Claude Code cukup menerima alamat servernya saja lalu menjalankan login sendiri: halaman AdminHub terbuka, kamu masuk lewat Telegram, memilih workspace, dan memberi akses. Claude Code, Cursor, dan apa pun yang mengirim header Authorization bisa memakai kunci sebagai gantinya. Kunci dibuat di Pengaturan, Agen AI (MCP), Buat kunci, dan hanya ditampilkan sekali: basis data cuma menyimpan hash, jadi kunci yang hilang tidak dipulihkan melainkan diterbitkan ulang.
- Apa yang bisa dilihat agen tentang pelangganku?
- Nama, username, dan id Telegram — dan hanya di bawah izin terpisah audience:read: koneksi tanpa izin itu mendapat galat izin, bukan daftar kosong. Kolom uang, yaitu total belanja, nilai seumur hidup, dan jumlah pembayaran, tidak ikut keluar sampai agen mengirim include_spend pada panggilan itu. Batas ini disengaja: siapa yang berlangganan dan berapa yang ia bayar adalah dua pertanyaan berbeda, dan yang kedua harus ditanyakan dengan lantang.
- Apa yang diberikan paket Free lewat MCP?
- Satu koneksi dan tiga puluh postingan yang dibuat lewat MCP per bulan. Kedua angka itu dihitung persis seperti bunyinya. Kunci dan koneksi lewat alamat sama-sama satu koneksi, jadi di Free kamu dapat salah satu, bukan keduanya. Penghitung postingan menghitung yang dibuat, termasuk draf, bukan yang terkirim; postingan yang gagal terkirim tidak dihitung sama sekali. Pro menghapus kedua batas itu.
- Agen bilang postingannya sudah keluar, tapi channel-nya kosong. Kenapa?
- Publikasi berjalan lewat antrean, jadi tunggu semenit lalu panggil get_post: ia menampilkan status dan galat terpisah untuk tiap channel. Penyebab paling umum adalah bot yang sudah bukan admin di channel itu. create_post menolak channel yang tidak bisa dikirimi bot, jadi kasus yang bertahan sampai pengiriman adalah bot yang diturunkan setelah postingan dibuat. Kembalikan hak adminnya lalu panggil retry_post_delivery.