دليل

إعداد MCP لتيليجرام: اربط وكيل الذكاء الاصطناعي بقناتك

ربط وكيل ذكاء اصطناعي بقناتك عبر MCP: ما تجهّزه قبل البدء، وخطوات claude.ai وChatGPT وClaude Code وCursor، وما تفعله حين ترفض الأداة.

AdminHub

الخلاصة. قبل أن يتصل أي عميل، لا بد أن تصحّ ثلاثة أمور: لمساحة العمل بوت خاص بها، وذلك البوت مشرف في القناة، والمالك ضغط Start في محادثته الخاصة معه. ثم تختار المسار — عنوان الخادم https://backend-git-production-cb93.up.railway.app/mcp بصفته موصّلًا مخصّصًا مع تسجيل دخول عبر Telegram، أو مفتاحًا في ترويسة Authorization من الإعدادات ← وكلاء الذكاء الاصطناعي (MCP). بعدها تظهر أربع عشرة أداة: خمس تقرأ القناة، وسبع تعمل على المنشورات، واثنتان تقرآن الجمهور. لا منتجات ولا طلبات ولا محادثات خاصة، ولا شيء البتة بغير بوت. جرى التحقق من خطوات العملاء في 8 سبتمبر 2026.

هذا هو النصف العملي من مقارنة خوادم MCP لتيليجرام: هناك يُحسم هل مسار البوت هو ما تريده، وهنا تتصل فعلًا وتعرف ما تفعله حين لا ينجح الأمر.

قبل أن تربط

معظم حالات الرفض تقع هنا، قبل استدعاء أي أداة.

مساحة العمل تحتاج إلى بوت خاص بها. ينشر خادم MCP من AdminHub عبر البوت الذي أنشأه صاحب القناة لقناته هو — لا عبر بوت 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. افتح الإعدادات ← وكلاء الذكاء الاصطناعي (MCP) ← إنشاء مفتاح. يظهر المفتاح مرة واحدة تمامًا ولا نظرة ثانية: لا تحفظ قاعدة البيانات سوى تجزئة. ويُلغى المساران من المكان نفسه، والاتصال الملغى يتوقف عن العمل فورًا.

أمر واحد يستحق التخطيط مسبقًا: المفتاح والاتصال بالعنوان يُحسبان كلاهما اتصالًا، وFree يتيح واحدًا.

claude.ai

في claude.ai افتح Customize ثم Connectors، ثم Add custom connector، والصق العنوان واضغط Add. وإعدادات المصادقة الافتراضية تكفي: الخادم يقبل بيانات العميل الوصفية المستضافة لدى Anthropic والتسجيل الديناميكي معًا، فلا شيء يُملأ يدويًا. ثم تتصل وتُكمل الدخول عبر Telegram وتشغّل الموصّل في المحادثة التي تريده فيها.

والموصّلات المخصّصة تعمل على Free وPro وMax وTeam وEnterprise، مع اقتصار Free على واحد. وفي Team وEnterprise لا يضيف الموصّل إلا مالك المؤسسة، من Organization settings ثم Connectors؛ ويتصل به الباقون بعد ذلك من صفحة Connectors الخاصة بكل منهم.

ChatGPT

صارت الموصّلات تُسمى Apps في يوليو 2026، ويحتاج خادم 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 token.

الأدوات الأربع عشرة

الأداةماذا تفعل
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يرفق صورة واحدة من رابط، ممرَّرة عبر محادثة المالك
list_subscribersمشتركو قناة: الاسم واسم المستخدم ومعرّف Telegram
get_subscriberالشيء نفسه لشخص واحد

ونص المنشور هو HTML الخاص بـ Telegram لا Markdown أبدًا، ولا بد أن تحمل الأوقات المجدولة إزاحة UTC. والنشر يمر عبر طابور: تعود أدوات الكتابة بالجواب فورًا ويأتي التسليم خلال دقيقة، فيُقرأ الناتج من get_post.

ما لا يفعله

لا منتجات ولا طلبات ولا CRM مصغّرة ولا قاعدة معرفة — فنصفا AdminHub التجاري والدعم بالذكاء الاصطناعي غير معروضين عبر MCP إطلاقًا. ولا محادثات خاصة ولا محادثات عشوائية ولا سجل رسائل: لا أداة هنا تلمس محادثة، وفي هذا كل الفرق بينه وبين خادم يوزربوت.

وتستحق بيانات الجمهور سطرًا خاصًا، لأن الحدّ داخلها يسهل أن يفوت. فالأسماء وأسماء المستخدمين ومعرّفات Telegram تعود بصلاحية audience:read؛ أما الإنفاق والقيمة مدى الحياة فلا يأتيان معها، ولا يظهران إلا إذا مرّر الوكيل include_spend في ذلك الاستدعاء. وهو حدّ مقصود، ووقت الموازنة فيه قبل الربط، لا بعد أن يكون وكيل قد لخّص لك أفضل عملائك.

حين لا ينجح الأمر

كل الأدوات ترفض بالرمز bot_required. مساحة العمل بلا بوت. والرابط يأتي في نص الخطأ نفسه، ولن يعمل شيء إلى أن يوجد البوت.

أُنشئ المنشور ولم يصل قط. انتظر دقيقة — فالتسليم يمر عبر طابور — ثم استدعِ get_post واقرأ status وerror لكل قناة. والسبب المعتاد بوت لم يعد مشرفًا هناك. أعد الصلاحيات ثم retry_post_delivery.

الصورة لا تُرفق. يعني owner_bot_not_started أن المالك لم يفتح قط محادثة خاصة مع بوت مساحة العمل. اطلب منه أن يفتحه ويضغط Start؛ والحقل owner_dm_open في get_workspace يؤكد ذلك. وجاره هو owner_unreachable: كانت المحادثة مفتوحة ثم حُظر البوت بعدها.

plan_limit_reached. يتيح Free اتصالًا واحدًا وثلاثين منشورًا يُنشأ عبر MCP شهريًا. والعدّاد يحسب الإنشاء، فتدخل المسودات في الحساب، ولا تدخل المنشورات التي فشل تسليمها. وحدّ الاتصالات مشترك بين المسارين — فالمفتاح والاتصال بالعنوان يشغلان الخانة الوحيدة سواءً بسواء — والثاني يُرفض لحظة الإنشاء لا لحظة الاستدعاء. وPro بلا هذين الحدّين.

الوكيل لا يرى المشتركين. إما أن الاتصال لا يملك audience:read — فالمفاتيح الصادرة قبل وجود هذه الصلاحية لا تحمل سوى الصلاحيتين القديمتين، وعلاج ذلك إصدار مفتاح جديد — وإما أن العميل طلب عند الدخول مجموعة صلاحيات ناقصة، وهذا الخادم يرفض ذلك كلّه بدل أن يمنح وصولًا مقلَّصًا في صمت. أعد الاتصال طالبًا الصلاحيات الثلاث.

في صفحة MCP العنوان وقائمة الأدوات والأسئلة الشائعة؛ والمفتاح على بُعد لمستين في الإعدادات.

المصادر

جرى التحقق من خطوات العملاء في 8 سبتمبر 2026 بالرجوع إلى وثائق كل مزوّد نفسه: مركز مساعدة Anthropic ووثائق الموصّلات لـ claude.ai وClaude Desktop، ووثائق MCP في Claude Code لأمر claude mcp add، ودليل OpenAI لوضع المطوّر ومركز المساعدة لتطبيقات ChatGPT، ووثائق MCP في Cursor لشكل mcp.json. أما سلوك AdminHub نفسه — الأدوات الأربع عشرة وحالات الرفض المذكورة أعلاه والصلاحيات وحدود Free — فمن صفحة MCP.

ما الذي يسأل عنه الناس عادةً

ما الذي أحتاجه قبل ربط خادم MCP من AdminHub؟
ثلاثة أشياء، وثلاثتها عن البوت. تحتاج مساحة العمل إلى بوت Telegram خاص بها: الوكيل ينشر عبره لا عبر بوت AdminHub المشترك، وبدون بوت ترفض كل أداة بالخطأ bot_required. ويجب أن يكون ذلك البوت مشرفًا في كل قناة تنوي النشر فيها، وإلا رفض create_post القناة من البداية. وأن تكون محادثة المالك الخاصة مع ذلك البوت مفتوحة، أي أنه ضغط Start مرة واحدة على الأقل — وهذا وحده ما يجعل إرفاق الصور ممكنًا.
هل أحتاج إلى مفتاح كي أتصل؟
فقط للعملاء الذين يتصلون عبر ترويسة. أما claude.ai وChatGPT وClaude Desktop وClaude Code فتأخذ عنوان الخادم وحده وتُجري تسجيل الدخول بنفسها: تُفتح صفحة من AdminHub، فتدخل عبر Telegram وتختار مساحة عمل وتمنح الوصول. وClaude Code وCursor وكل ما يرسل ترويسة Authorization يمكنه استعمال مفتاح بدلًا من ذلك. يُنشأ المفتاح في الإعدادات، وكلاء الذكاء الاصطناعي (MCP)، إنشاء مفتاح، ويظهر مرة واحدة فقط: لا تحفظ قاعدة البيانات سوى تجزئة، فالمفتاح الضائع لا يُستعاد بل يُصدر غيره.
ماذا يرى الوكيل عن مشتركيّ؟
الأسماء وأسماء المستخدمين ومعرّفات Telegram — وذلك فقط بصلاحية منفصلة اسمها audience:read: الاتصال الذي لا يملكها يحصل على خطأ صلاحيات لا على قائمة فارغة. أما حقول المال، أي إجمالي الإنفاق والقيمة مدى الحياة وعدد المدفوعات، فتبقى خارجًا ما لم يمرر الوكيل include_spend في ذلك الاستدعاء نفسه. الحدّ مقصود: من اشترك وكم دفع سؤالان مختلفان، والثاني لا بد أن يُطرح بصوت عالٍ.
ماذا تتيح خطة Free عبر MCP؟
اتصال واحد وثلاثون منشورًا يُنشأ عبر MCP شهريًا. والرقمان يُحسبان تمامًا كما يبدوان. المفتاح والاتصال بالعنوان اتصالان، لذا تحصل في Free على أحدهما لا على كليهما. وعدّاد المنشورات يحسب المُنشأ، بما فيه المسودات، لا المُسلَّم؛ أما المنشورات التي فشل تسليمها فلا تُحسب أصلًا. وPro يرفع الحدّين معًا.
يقول الوكيل إن المنشور خرج، والقناة فارغة. لماذا؟
النشر يمر عبر طابور، فانتظر دقيقة ثم استدعِ get_post: يعرض الحالة والخطأ لكل قناة على حدة. والسبب الأشيع أن البوت لم يعد مشرفًا في تلك القناة. وcreate_post يرفض أصلًا القناة التي لا يستطيع البوت النشر فيها، فالحالة التي تصمد حتى التسليم هي أن يُخفَّض البوت بعد إنشاء المنشور. أعد صلاحيات الإشراف ثم استدعِ retry_post_delivery.