Telegram MCP सेटअप: AI एजेंट को अपने चैनल से जोड़ें
AI एजेंट को अपने चैनल से MCP के ज़रिए जोड़ना: पहले क्या तैयार करें, claude.ai, ChatGPT, Claude Code और Cursor के चरण, और टूल मना कर दे तो क्या करें।
संक्षेप में। कोई भी क्लाइंट जुड़े, उससे पहले तीन बातें सच होनी चाहिए: वर्कस्पेस के पास अपना बॉट है, वह बॉट चैनल का एडमिन है, और मालिक ने उसके साथ निजी चैट में Start दबाया है। उसके बाद रास्ता चुनिए — सर्वर का पता
https://backend-git-production-cb93.up.railway.app/mcpकस्टम कनेक्टर के तौर पर, Telegram लॉगिन के साथ; या सेटिंग्स → AI एजेंट (MCP) से ली गई कुंजीAuthorizationहेडर में। फिर चौदह टूल आते हैं: पाँच चैनल पढ़ते हैं, सात पोस्ट पर काम करते हैं, दो ऑडियंस पढ़ते हैं। न प्रोडक्ट, न ऑर्डर, न निजी चैट — और बॉट के बिना तो कुछ भी नहीं। क्लाइंट के चरण 8 सितंबर 2026 को जाँचे गए।
यह Telegram MCP सर्वरों की तुलना का व्यावहारिक आधा हिस्सा है: वहाँ यह तय होता है कि बॉट वाला रास्ता आपको चाहिए भी या नहीं, और यहाँ आप जुड़ते हैं और यह भी देखते हैं कि न जुड़े तो क्या करें।
जोड़ने से पहले
लगभग सारी नाकामियाँ यहीं होती हैं, पहला टूल बुलाए जाने से भी पहले।
वर्कस्पेस को अपना बॉट चाहिए। AdminHub का MCP सर्वर उसी बॉट से पब्लिश करता है जिसे चैनल के मालिक ने अपने चैनल के लिए बनाया — कभी किसी साझा AdminHub बॉट से नहीं और कभी आपके निजी अकाउंट से नहीं। बॉट न हो तो टूल चुपचाप कमज़ोर नहीं पड़ते: वे bot_required कहकर मना करते हैं और साथ में वह लिंक देते हैं जो एक टैप में बॉट बना देता है — telegram.me/tg_adminhub_bot?startapp=bot। get_workspace अपवाद है, वह बॉट के बिना भी जवाब देता है, ताकि एजेंट ख़ुद समझ सके कि कमी किस चीज़ की है।
बॉट चैनल का एडमिन होना चाहिए। जो बॉट सिर्फ़ सदस्य है वह पब्लिश नहीं कर सकता, और Telegram इस बारे में तब तक कुछ नहीं कहता जब तक कोई भेजना नाकाम न हो जाए। ठीक इसीलिए list_channels हर चैनल पर bot_is_admin का निशान लाता है, और create_post उस चैनल को channel_not_postable कहकर ठुकरा देता है जहाँ यह बंद है — बजाय ऐसी पोस्ट स्वीकार करने के जो बाद में खो जाएगी।
मालिक की बॉट से निजी चैट खुली होनी चाहिए। यह सिर्फ़ तस्वीरों के लिए मायने रखता है, और नियम Telegram का है, हमारा नहीं: बॉट सिर्फ़ उसी फ़ाइल का file id पा सकता है जो उसने ख़ुद भेजी हो। इसीलिए add_post_image तस्वीर डाउनलोड करता है, वह आईडी पाने के लिए उसे एक बार मालिक की बॉट वाली चैट से गुज़ारता है, पोस्ट में जोड़ता है और गुज़ारा हुआ संदेश मिटा देता है। अगर मालिक ने वहाँ कभी Start नहीं दबाया, तो टूल कुछ भी डाउनलोड करने से पहले ही owner_bot_not_started कहकर मना कर देगा।
इसका दुष्प्रभाव खुलकर कह देना चाहिए: एजेंट जो भी तस्वीर जोड़ता है, वह थोड़ी देर के लिए और नोटिफ़िकेशन के साथ मालिक की अपने ही बॉट वाली चैट में पहुँचती है। बाद में वह मिटा दी जाती है, पर पहुँची तो थी — और जिसने कोई तस्वीर माँगी ही नहीं था वह सोचेगा कि यह आई कहाँ से। get_workspace owner_dm_open बताता है, इसलिए यह किसी नाकाम कॉल के बाद नहीं, पहले ही जाँचा जा सकता है।
जुड़ने के दो तरीक़े
सर्वर के पते से, बिना कुंजी। claude.ai, ChatGPT, Claude Desktop और Claude Code के लिए। आप https://backend-git-production-cb93.up.railway.app/mcp की ओर इशारा करता एक कस्टम कनेक्टर जोड़ते हैं, AdminHub का पेज खुलता है, आप Telegram से साइन इन करते हैं, वर्कस्पेस चुनते हैं और अनुमति दें दबाते हैं। जिस वर्कस्पेस में बॉट नहीं है वह सूची में दिखता तो है पर चुना नहीं जा सकता — उसमें पब्लिश करने को कुछ होता ही नहीं। पहुँच एक साथ तीनों अनुमतियों पर मिलती है: channel:read, posts:write और audience:read।
हेडर में कुंजी से। Claude Code, Cursor और बाक़ी हर उस चीज़ के लिए जो Authorization हेडर भेजती है। सेटिंग्स → AI एजेंट (MCP) → कुंजी बनाएं खोलिए। कुंजी ठीक एक बार दिखती है और दूसरी बार देखने का मौक़ा नहीं मिलता: डेटाबेस में सिर्फ़ हैश रहता है। दोनों रास्ते वहीं से रद्द होते हैं, और रद्द किया गया कनेक्शन तुरंत काम करना बंद कर देता है।
एक बात पहले से सोच लेना ठीक रहेगा: कुंजी और पते वाला कनेक्शन — दोनों कनेक्शन ही गिने जाते हैं, और Free एक देता है।
claude.ai
Customize → Connectors → Add custom connector → पता चिपकाइए → Add। ऑथेंटिकेशन की डिफ़ॉल्ट सेटिंग चल जाएँगी: सर्वर Anthropic पर होस्ट किया गया क्लाइंट मेटाडेटा भी लेता है और डायनामिक रजिस्ट्रेशन भी, इसलिए हाथ से भरने को कुछ नहीं है। फिर जोड़िए, Telegram वाला लॉगिन पूरा कीजिए और जिस चैट में चाहिए वहाँ इसे चालू कर दीजिए।
कस्टम कनेक्टर Free, Pro, Max, Team और Enterprise पर चलते हैं; Free पर सिर्फ़ एक। Team और Enterprise में कनेक्टर सिर्फ़ Owner जोड़ता है, Organization settings → Connectors से; बाक़ी सब बाद में अपने Connectors पेज से उससे जुड़ते हैं।
ChatGPT
कनेक्टर जुलाई 2026 में Apps बन गए, और कस्टम MCP सर्वर के लिए ऊपर से डेवलपर मोड भी चाहिए: Settings → Security and login → Developer mode, उसके बाद ऐप Apps से बनता है — सर्वर का पता और ऑथेंटिकेशन के तरीक़े के तौर पर OAuth। किसी वर्कस्पेस में डेवलपर मोड एडमिन Permissions & Roles के नीचे चालू करता है, और ऐप भी वही वर्कस्पेस सेटिंग्स से पब्लिश करता है।
दो सीमाएँ पहले जान लेना बेहतर है: यह वेब की सुविधा है, मोबाइल पर नहीं है; और पूरा MCP — वह आधा हिस्सा जो लिखता है — फ़िलहाल Business और Enterprise/Edu अकाउंट के लिए है, जबकि Pro अकाउंट सर्वर को सिर्फ़ पढ़ने और fetch की अनुमतियों के साथ जोड़ता है। Pro पर पढ़ने वाले टूल के चलने की उम्मीद रखिए, पब्लिश करने वालों के नहीं।
Claude Desktop
वही कनेक्टर वाला रास्ता जो claude.ai में है, कोई कॉन्फ़िग फ़ाइल नहीं — claude_desktop_config.json लोकल stdio सर्वरों के लिए है, और यह वैसा सर्वर नहीं है। रिमोट कनेक्टर तक Claude आपकी मशीन से नहीं, ख़ुद Anthropic के इन्फ़्रास्ट्रक्चर से पहुँचता है; यहाँ इससे कुछ नहीं बदलता, क्योंकि यह पता सार्वजनिक है।
Claude Code
Claude Code दोनों तरीक़ों से कर लेता है, और यह उस कुंजी को बनाने से पहले जान लेना अच्छा है जिसकी शायद ज़रूरत ही न पड़े। कुंजी के साथ:
claude mcp add --transport http adminhub https://backend-git-production-cb93.up.railway.app/mcp --header "Authorization: Bearer <कुंजी>"
बिना कुंजी वही सर्वर हेडर के बिना जोड़िए और लॉगिन Claude Code को ख़ुद करने दीजिए:
claude mcp add --transport http adminhub https://backend-git-production-cb93.up.railway.app/mcp
फिर /mcp चलाइए और ब्राउज़र वाला रास्ता पूरा कीजिए। कुंजी लीजिए अगर कनेक्शन को ब्राउज़र सेशन से ज़्यादा जीना है; लॉगिन लीजिए अगर कॉन्फ़िग फ़ाइल में कोई राज़ नहीं रखना।
Cursor और हेडर वाले बाक़ी क्लाइंट
Cursor सब प्रोजेक्ट के लिए ~/.cursor/mcp.json पढ़ता है और किसी एक के लिए .cursor/mcp.json। रिमोट सर्वर यानी url और headers वाली एक एंट्री — इसमें transport का फ़ील्ड होता ही नहीं; रिमोट इसे url ही बनाता है:
{
"mcpServers": {
"adminhub": {
"url": "https://backend-git-production-cb93.up.railway.app/mcp",
"headers": {
"Authorization": "Bearer ${env:ADMINHUB_MCP_KEY}"
}
}
}
}
Cursor ${env:...} को url और headers के भीतर बदल देता है, इसलिए कुंजी उस फ़ाइल के बजाय एनवायरनमेंट में रह सकती है जिसे आप ग़लती से कमिट कर बैठें। Streamable HTTP बोलने वाली बाक़ी हर चीज़ इसी तरह जुड़ती है: पता, और bearer टोकन के रूप में कुंजी।
वे चौदह टूल
| टूल | क्या करता है |
|---|---|
get_workspace | वर्कस्पेस, प्लान, बॉट की स्थिति, owner_dm_open, इस महीने MCP से बनी पोस्ट |
list_channels | सारे चैनल, सब्सक्राइबर की संख्या, bot_is_admin और is_active के साथ |
get_channel_stats | कुल आँकड़े और दिन-ब-दिन आना-जाना, 90 दिन तक की खिड़की |
list_posts | हाल की पोस्ट, चैनल या स्टेटस के हिसाब से छाँटी जा सकने वाली |
get_post | एक पोस्ट का टेक्स्ट, हर चैनल की डिलीवरी स्थिति और त्रुटि |
create_post | एक या कई चैनलों के लिए टेक्स्ट: ड्राफ़्ट, शेड्यूल या अभी भेजो |
publish_post | सहेजा हुआ ड्राफ़्ट भेजता है |
update_post | ड्राफ़्ट, शेड्यूल्ड या नाकाम पोस्ट का टेक्स्ट, शीर्षक या समय बदलता है |
edit_published_post | उस पोस्ट का टेक्स्ट बदलता है जो चैनल में जा चुकी है |
cancel_post | ड्राफ़्ट, शेड्यूल्ड या नाकाम पोस्ट मिटाता है — पब्लिश हो चुकी रह जाती हैं |
retry_post_delivery | उन चैनलों में दोबारा भेजता है जहाँ डिलीवरी नाकाम या रद्द हुई |
add_post_image | URL से एक तस्वीर जोड़ता है, मालिक की चैट से गुज़ारकर |
list_subscribers | चैनल के सब्सक्राइबर: नाम, यूज़रनेम, Telegram आईडी |
get_subscriber | वही, एक व्यक्ति के लिए |
पोस्ट का टेक्स्ट Telegram HTML होता है, Markdown कभी नहीं, और शेड्यूल किए समय के साथ UTC ऑफ़सेट होना ज़रूरी है। पब्लिशिंग क़तार से होती है: लिखने वाले टूल जवाब तुरंत लौटाते हैं और डिलीवरी एक मिनट के भीतर होती है, इसलिए नतीजा get_post से पढ़ा जाता है।
यह क्या नहीं करेगा
न प्रोडक्ट, न ऑर्डर, न मिनी-CRM, न नॉलेज बेस — AdminHub के कॉमर्स और AI सपोर्ट वाले आधे हिस्से MCP पर खुलते ही नहीं। न निजी चैट, न मनमानी चैट, न मैसेज इतिहास: यहाँ का कोई भी टूल किसी बातचीत को छूता नहीं, और इसी में इसका और किसी यूज़रबॉट सर्वर का पूरा फ़र्क़ है।
ऑडियंस के डेटा की अपनी पंक्ति बनती है, क्योंकि उसके भीतर की सीमा चूक जाना आसान है। नाम, यूज़रनेम और Telegram आईडी audience:read के तहत लौटते हैं; ख़र्च और लाइफ़टाइम वैल्यू उनके साथ नहीं आते — वे तभी दिखते हैं जब एजेंट उसी कॉल में include_spend भेजे। यह सीमा जान-बूझकर है, और इसे तौलने का समय जुड़ने से पहले है, न कि तब जब एजेंट आपके सबसे अच्छे ग्राहकों का सार निकाल चुका हो।
जब काम न करे
हर टूल bot_required कहकर मना कर रहा है। वर्कस्पेस के पास बॉट नहीं है। लिंक त्रुटि के टेक्स्ट में ही आता है, और बॉट बनने तक और कुछ नहीं चलेगा।
पोस्ट बन गई पर कभी पहुँची नहीं। एक मिनट रुकिए — डिलीवरी क़तार से होती है — फिर get_post बुलाइए और हर चैनल के status और error पढ़िए। आम वजह यही होती है कि बॉट अब वहाँ एडमिन नहीं है। अधिकार लौटाइए, फिर retry_post_delivery।
तस्वीर जुड़ नहीं रही। owner_bot_not_started का मतलब है कि मालिक ने वर्कस्पेस के बॉट से कभी निजी चैट खोली ही नहीं। उससे कहिए कि बॉट खोलकर Start दबाए; get_workspace का owner_dm_open इसकी पुष्टि कर देगा। पड़ोसी मामला है owner_unreachable — चैट खुली तो थी, पर उसके बाद बॉट को ब्लॉक कर दिया गया।
plan_limit_reached। Free पर महीने का एक कनेक्शन और MCP से बनाई गई तीस पोस्ट मिलती हैं। काउंटर बनाना गिनता है, इसलिए ड्राफ़्ट भी गिनती में आते हैं; जिनकी डिलीवरी नाकाम रही वे नहीं। कनेक्शन की सीमा दोनों रास्तों पर एक साथ लागू है — कुंजी और पते वाला कनेक्शन दोनों उसी इकलौती जगह को घेरते हैं — और दूसरा कॉल के वक़्त नहीं, बनाते वक़्त ही ठुकरा दिया जाता है। Pro पर ये दोनों सीमाएँ नहीं हैं।
एजेंट को सब्सक्राइबर नहीं दिख रहे। या तो कनेक्शन के पास audience:read नहीं है — जो कुंजियाँ इस अनुमति के आने से पहले जारी हुईं वे सिर्फ़ पुरानी दो लेकर चलती हैं, और इलाज नई कुंजी है — या फिर क्लाइंट ने लॉगिन के वक़्त अनुमतियों का अधूरा सेट माँगा, और यह सर्वर ऐसी माँग को चुपचाप घटी हुई पहुँच देने के बजाय पूरी तरह ठुकरा देता है। तीनों अनुमतियाँ माँगते हुए दोबारा जुड़िए।
MCP पेज पर पता, टूल की सूची और सवाल-जवाब हैं; और कुंजी सेटिंग्स में दो टैप दूर है।
स्रोत
क्लाइंट के चरण 8 सितंबर 2026 को हर वेंडर के अपने दस्तावेज़ों से जाँचे गए: claude.ai और Claude Desktop के लिए Anthropic का हेल्प सेंटर और कनेक्टर दस्तावेज़, claude mcp add के लिए Claude Code का MCP दस्तावेज़, ChatGPT ऐप्स के लिए OpenAI की डेवलपर मोड गाइड और हेल्प सेंटर, और mcp.json के स्वरूप के लिए Cursor का MCP दस्तावेज़। ख़ुद AdminHub का बर्ताव — चौदह टूल, ऊपर बताई गई नाकामियाँ, अनुमतियाँ और Free की सीमाएँ — MCP पेज से है।
लोग आमतौर पर क्या पूछते हैं
- AdminHub का MCP सर्वर जोड़ने से पहले क्या चाहिए?
- तीन चीज़ें, और तीनों बॉट के बारे में हैं। वर्कस्पेस को अपना Telegram बॉट चाहिए: एजेंट उसी के ज़रिए पब्लिश करता है, AdminHub के साझा बॉट से नहीं, और बॉट के बिना हर टूल bot_required कहकर मना कर देता है। वह बॉट हर उस चैनल में एडमिन होना चाहिए जहाँ आप पब्लिश करना चाहते हैं, वरना create_post उस चैनल को शुरू में ही ठुकरा देगा। और मालिक की उस बॉट से निजी चैट खुली होनी चाहिए, यानी उसने कम से कम एक बार Start दबाया हो — तस्वीर जोड़ना इसी से संभव होता है।
- जुड़ने के लिए कुंजी चाहिए क्या?
- सिर्फ़ उन क्लाइंट को जो हेडर से जुड़ते हैं। claude.ai, ChatGPT, Claude Desktop और Claude Code अकेले सर्वर का पता लेकर अपना लॉगिन ख़ुद कराते हैं: AdminHub का एक पेज खुलता है, आप Telegram से साइन इन करते हैं, वर्कस्पेस चुनते हैं और पहुँच दे देते हैं। Claude Code, Cursor और बाक़ी सब जो Authorization हेडर भेज सकते हैं, उसकी जगह कुंजी इस्तेमाल कर सकते हैं। कुंजी सेटिंग्स, AI एजेंट (MCP), कुंजी बनाएं में बनती है और सिर्फ़ एक बार दिखती है: डेटाबेस में सिर्फ़ हैश रहता है, इसलिए खोई हुई कुंजी लौटाई नहीं जाती, नई जारी की जाती है।
- एजेंट मेरे सब्सक्राइबर के बारे में क्या देख सकता है?
- नाम, यूज़रनेम और Telegram आईडी — और वह भी सिर्फ़ अलग audience:read अनुमति के तहत: इसके बिना जुड़े कनेक्शन को ख़ाली सूची नहीं, अनुमति की त्रुटि मिलती है। पैसे वाले फ़ील्ड, यानी कुल ख़र्च, लाइफ़टाइम वैल्यू और भुगतानों की संख्या, तब तक बाहर रहते हैं जब तक एजेंट उसी कॉल में include_spend न भेजे। यह सीमा जान-बूझकर है: कौन सब्सक्राइब है और उसने कितना चुकाया — ये दो अलग सवाल हैं, और दूसरा ऊँची आवाज़ में पूछना पड़ता है।
- Free प्लान MCP से क्या देता है?
- महीने का एक कनेक्शन और MCP से बनाई गई तीस पोस्ट। दोनों संख्याएँ ठीक वैसे ही गिनी जाती हैं जैसे कही गई हैं। कुंजी और पते वाला कनेक्शन — ये दो कनेक्शन हैं, इसलिए Free पर दोनों में से एक मिलता है, दोनों एक साथ नहीं। पोस्ट का काउंटर बनाई गई पोस्ट गिनता है, ड्राफ़्ट समेत, पहुँचाई गई नहीं; और जिनकी डिलीवरी नाकाम रही वे बिलकुल नहीं गिनी जातीं। Pro दोनों सीमाएँ हटा देता है।
- एजेंट कहता है पोस्ट चली गई, पर चैनल ख़ाली है। क्यों?
- पब्लिशिंग क़तार से होती है, इसलिए एक मिनट रुकिए और get_post बुलाइए: वह हर चैनल का स्टेटस और त्रुटि अलग-अलग दिखाता है। सबसे आम वजह यह है कि बॉट अब उस चैनल का एडमिन नहीं रहा। create_post उस चैनल को पहले ही ठुकरा देता है जहाँ बॉट लिख नहीं सकता, इसलिए डिलीवरी तक वही मामला पहुँचता है जिसमें पोस्ट बनने के बाद बॉट का दर्जा घटाया गया हो। एडमिन अधिकार लौटाइए और retry_post_delivery बुलाइए।