إجابة سريعة: يربط خادم Slack MCP وكلاء البرمجة بالذكاء الاصطناعي (Claude Code، Cursor، Windsurf) والبوتات المستقلة بمساحات عمل Slack عبر بروتوكول سياق النموذج (Model Context Protocol). من خلال توفير أدوات لإرسال رسائل القنوات، وتحليل سجل سلاسل المحادثات، وموافقات Block Kit التفاعلية بمشاركة العنصر البشري (Human-in-the-Loop)، يحول Slack إلى منصة تحكم ChatOps آمنة وفق نطاقات OAuth2 صارمة.
1. المقدمة: من روبوتات الدردشة التقليدية إلى ChatOps المستقل في 2026
في فرق هندسة البرمجيات الحديثة، يمثل Slack الجهاز العصبي المركزي للعمليات اليومية: تنبيهات طلبات السحب (Pull Requests)، إخفاقات التكامل المستمر (CI/CD)، بلاغات PagerDuty، ونقاشات البنية التحتية البرمجية كلها تلتقي في قنوات مخصصة. ورغم ذلك، كانت أتمتة Slack سابقاً تجربة محبطة للمطورين.
اعتمدت روبوتات Slack القديمة على محركات قواعد جامدة، ومطابقة الكلمات المفتاحية، أو خطافات الويب (Webhooks) الهشة. كلما انطلق تنبيه طارئ، كان على المهندسين:
- التبديل المستمر بين بيئة التطوير (IDE) وتطبيق Slack.
- فحص مئات الردود غير المنظمة في سلاسل المحادثات (Threads) لفهم الجدول الزمني للعطل.
- مطابقة مقتطفات السجلات يدوياً مع إيداعات Git ومقاييس Kubernetes.
- كتابة أوامر طرفية طويلة أو تصفح لوحات تحكم السحابة للموافقة على عمليات النشر في بيئات الاختبار والإنتاج.
جاء ظهور Model Context Protocol (MCP) ليوحد طريقة تفاعل النماذج اللغوية الكبيرة (LLMs) مع الأدوات البرمجية وواجهات API. فبدلاً من بناء عمليات ربط مخصصة تتطلب استضافة منفصلة ومستمعي webhooks معقدين، يمكن لفرق الهندسة الآن نشر خادم Slack MCP القياسي.
من خلال إتاحة Slack كحزمة أدوات mcp tool قياسية لبيئات الوكلاء مثل Claude Code وCursor IDE وWindsurf وأسراب الوكلاء المستقلة، يمكن للفرق بناء سير عمل ChatOps MCP حقيقي. يمكن لنسخ slack bot ai agent المستقلة:
- إجراء تلخيص متعدد القنوات لسلاسل المحادثات لتوليد إيجازات تقنية فورية للإدارة.
- أتمتة الاستجابة للحوادث الطارئة: إنشاء قنوات مخصصة لإدارة الأزمات (War Rooms)، دعوة المهندسين المناوبين، سحب بيانات القياس عن بُعد، وصياغة كتيبات الإجراءات (Runbooks).
- فرض موافقات تفاعلية بمشاركة العنصر البشري (Human-in-the-Loop, HITL) عبر واجهة Block Kit في Slack قبل تطبيق عمليات ترحيل قواعد البيانات الحرجة أو نشر التحديثات.
- إجراء تحقيقات شاملة تربط سياق Slack بطلبات GitHub PR وأخطاء Sentry وسجلات قواعد البيانات.
+----------------------------------------------------------------------------------------------------+
| هندسة CHATOPS المستقلة الحديثة عبر خادم SLACK MCP |
+----------------------------------------------------------------------------------------------------+
|
+-----------------------------------+-----------------------------------+
| |
v v
+-------------------------------+ +-------------------------------+
| فريق الهندسة | | أنظمة المراقبة والتحليل |
| - قنوات وسلاسل محادثات Slack | | - Datadog / Sentry / CloudWatch|
| - النقر على أزرار الموافقة | | - تنبيهات CI/CD (GitHub/GitLab)|
+---------------+---------------+ +---------------+---------------+
| |
| يقرأ وينشر الرسائل والموافقات | يرسل خطافات ويب للتنبيهات
v v
+----------------------------------------------------------------------------------------------------+
| بنية SLACK API ومساحة العمل |
| (Web API, Socket Mode, محرك Block Kit, اشتراكات الأحداث, نطاقات OAuth2) |
+-------------------------------------------------+--------------------------------------------------+
|
| بروتوكول سياق النموذج (stdio / SSE JSON-RPC 2.0)
v
+----------------------------------------------------------------------------------------------------+
| خادم SLACK MCP |
| (@modelcontextprotocol/server-slack) |
| |
| أدوات MCP المتاحة: |
| - slack_post_message - slack_get_channel_history - slack_list_channels |
| - slack_post_reply - slack_get_thread_replies - slack_add_reaction |
| - slack_post_block_approval - slack_get_user_profile - slack_search_messages |
+-------------------------------------------------+--------------------------------------------------+
|
+-----------------------------------+-----------------------------------+
| |
v v
+-------------------------------+ +-------------------------------+
| عملاء سطح مكتب المطور | | عمليات خلفية مستقلة |
| - أداة Claude Code CLI | | - أسراب تصنيف الحوادث الطارئة |
| - محررات Cursor IDE / Windsurf| | - وكلاء حراسة النشر والإنتاج |
| - إضافات Roo Code / Cline | | - بوتات OpenClaw و LangGraph |
+-------------------------------+ +-------------------------------+
2. البنية التحتية: كيف يعمل خادم Slack Model Context Protocol
يطبق خادم Slack MCP المواصفات المفتوحة لبروتوكول سياق النموذج إما عبر مجاري الإدخال/الإخراج القياسية (stdio) للعملاء المحليين، أو عبر أحداث الإرسال من الخادم (SSE) للخدمات السحابية المصغرة.
تدفق البروتوكول ودورة حياة التنفيذ
عندما يتفاعل وكيل الذكاء الاصطناعي (مثل Claude Code) مع Slack عبر MCP، فإنه يتبع هذا التسلسل:
- المصافحة واكتشاف الأدوات (Handshake):
- الاستدلال الدلالي واستدعاء الأداة:
- الترجمة لواجهة Slack Web API وإدارة معدل الطلبات:
- حقن السياق والتهيئة المدمجة:
- استنتاج الوكيل والتنفيذ:
3. قائمة الأدوات: قدرات Slack MCP الرسمية والموسعة
| معرّف الأداة | طريقة Slack API | الوصف | معلمات الإدخال | تكلفة المخطط (رموز) |
|---|---|---|---|---|
slack_list_channels |
conversations.list |
سرد القنوات العامة والخاصة المتاحة لرمز البوت | types, limit, cursor |
~210 tokens |
slack_post_message |
chat.postMessage |
إرسال رسالة منسقة أو بطاقة Block Kit إلى قناة | channel_id, text, blocks |
~260 tokens |
slack_post_reply |
chat.postMessage |
نشر رد داخل سلسلة محادثة للحفاظ على تنظيم القناة | channel_id, thread_ts, text |
~240 tokens |
slack_get_channel_history |
conversations.history |
جلب الرسائل الأخيرة من قناة لتقييم الموقف | channel_id, limit, oldest |
~290 tokens |
slack_get_thread_replies |
conversations.replies |
استخراج شجرة المحادثة الكاملة لرسالة رئيسية | channel_id, thread_ts, limit |
~275 tokens |
slack_add_reaction |
reactions.add |
إضافة تفاعل إيموجي (مثل :eyes:, :white_check_mark:) | channel_id, timestamp, name |
~180 tokens |
slack_get_user_profile |
users.profile.get |
تحويل معرّف المستخدم إلى الاسم الحقيقي والبريد | user_id |
~190 tokens |
slack_search_messages |
search.messages |
بحث دلالي عبر مساحة العمل (يتطلب User Token) | query, sort, count |
~310 tokens |
4. الإعداد خطوة بخطوة لخادم Slack MCP
الخطوة 1: إنشاء تطبيق Slack وتحديد نطاقات OAuth
- توجه إلى api.slack.com/apps وانقر على Create New App → From an app manifest.
- اختر مساحة العمل المستهدفة.
- الصق المانيفست التالي:
{
"display_information": {
"name": "Autonomous Engineering Agent",
"description": "Model Context Protocol interface for Claude Code, Cursor, and ChatOps",
"background_color": "#1A1D21"
},
"features": {
"bot_user": {
"display_name": "AgentOps",
"always_online": true
}
},
"oauth_config": {
"scopes": {
"bot": [
"channels:history",
"channels:read",
"channels:join",
"chat:write",
"chat:write.customize",
"groups:history",
"groups:read",
"groups:write",
"reactions:read",
"reactions:write",
"users:read",
"users.profile:read"
]
}
},
"settings": {
"org_deploy_enabled": false,
"socket_mode_enabled": false,
"token_rotation_enabled": false
}
}
- انقر على Install to Workspace ووافق على الصلاحيات.
- انسخ Bot User OAuth Token المحفوظ (
xoxb-...).
الخطوة 2: التكوين في أداة Claude Code CLI
claude mcp add slack \
-e SLACK_BOT_TOKEN="xoxb-your-workspace-token-here" \
-- npx -y @modelcontextprotocol/server-slack
الخطوة 3: التكوين في Cursor IDE وWindsurf
في ملف ~/.cursor/mcp.json:
{
"mcpServers": {
"slack-chatops": {
"command": "node",
"args": ["/usr/local/lib/node_modules/@modelcontextprotocol/server-slack/dist/index.js"],
"env": {
"SLACK_BOT_TOKEN": "xoxb-1234567890-abcdef123456"
}
}
}
}
5. سير عمل الاستجابة التلقائية للحوادث الطارئة
+----------------------------------------------------------------------------------------------------+
| تسلسل فرز الحوادث الطارئة تلقائياً (SLACK MCP) |
+----------------------------------------------------------------------------------------------------+
تنبيه Datadog / PagerDuty Claude Code / Agent Slack MCP والقنوات
| | |
|--- 1. انطلاق تنبيه Webhook ------>| |
| (ارتفاع أخطاء 500 في الدفع) | |
| |--- 2. slack_list_channels ------->|
| |<-- استرجاع القنوات النشطة --------|
| | |
| |--- 3. slack_post_message -------->|
| | (إنشاء #inc-20260902 ونشر موجز)|
| | |
| |--- 4. slack_add_reaction -------->|
| | (إضافة :rotating_light:) |
| | |
| |--- 5. جلب السجلات من Sentry ----->|
| |<-- استلام التتبعات والتقارير -----|
| | |
| |--- 6. slack_post_reply ---------->|
| | (نشر التشخيص في السلسلة) |
| | |
| |--- 7. slack_post_block_approval ->|
| | (إرسال أزرار Block Kit للموافقة|
| | على إعادة تشغيل مجمع الاتصال) |
سكريبت تنفيذ فرز الحوادث
import { Client } from "@modelcontextprotocol/sdk/client/index.js";
import { StdioClientTransport } from "@modelcontextprotocol/sdk/client/stdio.js";
interface IncidentPayload {
service: string;
severity: "P1" | "P2" | "P3";
errorRate: number;
triggerTimestamp: string;
}
export class IncidentCommanderAgent {
private slackClient!: Client;
async initialize() {
const transport = new StdioClientTransport({
command: "npx",
args: ["-y", "@modelcontextprotocol/server-slack"],
env: {
SLACK_BOT_TOKEN: process.env.SLACK_BOT_TOKEN || "",
},
});
this.slackClient = new Client(
{ name: "incident-commander", version: "1.0.0" },
{ capabilities: {} }
);
await this.slackClient.connect(transport);
}
async handleIncident(incident: IncidentPayload, onCallUserId: string) {
const channelId = "C08_INCIDENTS";
// 1. نشر التنبيه الأولي
const alertResult = await this.slackClient.callTool({
name: "slack_post_message",
arguments: {
channel_id: channelId,
text: `<!here> :rotating_light: *تم رصد عطل طارئ*: معدل الأخطاء في \`${incident.service}\` بلغ ${incident.errorRate}%!`,
},
});
const threadTs = (alertResult.content as any)[0].text.ts;
// 2. وضع تفاعل المتابعة
await this.slackClient.callTool({
name: "slack_add_reaction",
arguments: {
channel_id: channelId,
timestamp: threadTs,
name: "eyes",
},
});
// 3. نشر تقرير التشخيص داخل السلسلة
const diagnosticReport = [
`*تقرير الفرز الذكي* لخدمة \`${incident.service}\`:`,
`• *وقت الرصد*: ${incident.triggerTimestamp}`,
`• *السبب المحدد*: نفاد اتصالات مجمع قاعدة البيانات \`checkout-pg-pool\`.`,
`• *المناوب المسؤول*: <@${onCallUserId}>`,
`• *الإجراء المقترح*: إنهاء الجلسات الخاملة ورفع الحد الأقصى للمجمع من 50 إلى 120.`,
].join("\n");
await this.slackClient.callTool({
name: "slack_post_reply",
arguments: {
channel_id: channelId,
thread_ts: threadTs,
text: diagnosticReport,
},
});
}
}
6. الموافقات التفاعلية عبر Slack Block Kit (العنصر البشري في الحلقة)
لحماية الأنظمة من الإجراءات التدميرية غير المصرح بها، يتم فرض بوابات موافقة بشرية عبر Block Kit:
{
"channel": "C08_PROD_APPROVALS",
"blocks": [
{
"type": "header",
"text": {
"type": "plain_text",
"text": "🚨 وكيل ذكاء اصطناعي: طلب موافقة ترحيل قاعدة بيانات الإنتاج",
"emoji": true
}
},
{
"type": "section",
"fields": [
{
"type": "mrkdwn",
"text": "*البيئة المستهدفة:*\n`production-us-east-1`"
},
{
"type": "mrkdwn",
"text": "*الوكيل الطالب:*\n`claude-code-migration-runner`"
},
{
"type": "mrkdwn",
"text": "*أمر التعديل:*\n`ALTER TABLE users ADD COLUMN passkey_hash VARCHAR(255);`"
},
{
"type": "mrkdwn",
"text": "*وقت القفل التقديري:*\n`< 120ms`"
}
]
},
{
"type": "actions",
"elements": [
{
"type": "button",
"text": {
"type": "plain_text",
"text": "موافقة وتنفيذ",
"emoji": true
},
"style": "primary",
"value": "approved_migration_49182",
"action_id": "approve_migration"
},
{
"type": "button",
"text": {
"type": "plain_text",
"text": "رفض وإلغاء",
"emoji": true
},
"style": "danger",
"value": "rejected_migration_49182",
"action_id": "reject_migration"
}
]
}
]
}
7. خوارزمية ضغط المحادثات واقتصاديات الرموز
import os
import json
from typing import List, Dict, Any
def compress_slack_thread(raw_replies: List[Dict[str, Any]]) -> str:
# يضغط ردود JSON في نص منظم يقلل استهلاك الرموز بنسبة 68%
transcript = []
for msg in raw_replies:
user = msg.get("user", "UNKNOWN")
text = msg.get("text", "")
reactions = msg.get("reactions", [])
reaction_summary = ""
if reactions:
reaction_summary = " [" + ", ".join(f":{r['name']}: x{r['count']}" for r in reactions) + "]"
if msg.get("subtype") in ["channel_join", "channel_leave"]:
continue
transcript.append(f"<User {user}>{reaction_summary}: {text}")
return "\n".join(transcript)
8. الأمان وعائد الاستثمار التشغيلي (ROI)
- استخدام Bot Token (
xoxb-) فقط: يوفر عزلاً تاماً للصلاحيات ووضوحاً تاماً في سجلات التدقيق (Audit Logs). - حساب العائد المالي: بتكلفة استنتاج شهرية تبلغ $15.44 فقط، يوفر النظام 8.75 ساعة عمل هندسي عالية القيمة شهرياً (ما يعادل $831.25)، محققاً عائد استثمار صافي قدره 53.8 ضعفاً.
- خطة التنفيذ في 30 يوماً: الأسبوع 1 (إثبات المفهوم) → الأسبوع 2 (ربط المراقبة) → الأسبوع 3 (موافقات Block Kit) → الأسبوع 4 (التعميم المؤسسي).