DevOps & ChatOps

Server Slack MCP: Alur Kerja Agen Tim & Panduan ChatOps

Jawaban Cepat: Server Slack MCP menghubungkan agen pengkodean AI (Claude Code, Cursor, Windsurf) dan bot otonom ke ruang kerja Slack menggunakan Model Context Protocol dari Anthropic. Dengan menyediakan alat untuk perpesanan saluran, analisis riwayat utas (thread), dan persetujuan interaktif Block Kit (Human-in-the-Loop), server ini mengubah Slack menjadi pusat kendali ChatOps yang aman di bawah batasan izin OAuth2 yang ketat.


1. Pengantar: Dari Chatbot Pasif ke ChatOps Otonom di Tahun 2026

Dalam tim rekayasa perangkat lunak modern, Slack berfungsi sebagai sistem saraf pusat operasi harian: pemberitahuan pull request, kegagalan integrasi berkelanjutan (CI/CD), peringatan insiden PagerDuty, dan diskusi arsitektur semuanya berkumpul di saluran khusus. Namun, secara historis, berinteraksi dengan Slack melalui otomatisasi sering kali terasa kaku dan membuat frustrasi.

Bot Slack tradisional bergantung pada mesin aturan yang kaku, pencocokan kata kunci, atau integrasi webhook yang rapuh. Setiap kali peringatan muncul, para insinyur harus:

  • Terus-menerus beralih konteks antara IDE mereka dan Slack.
  • Membaca ratusan balasan utas yang tidak teratur untuk memahami kronologi insiden.
  • Mencocokkan cuplikan log kesalahan secara manual dengan commit Git dan metrik Kubernetes.
  • Mengetik perintah CLI yang panjang atau mengeklik konsol cloud untuk menyetujui penerapan (deployment) staging atau produksi.

Kemunculan Model Context Protocol (MCP) telah menstandarkan cara Model Bahasa Besar (LLM) berinteraksi dengan alat perangkat lunak dan API. Alih-alih membangun integrasi khusus yang memerlukan hosting terpisah dan listener webhook yang rumit, pengembang kini dapat menerapkan server Slack MCP standar.

Dengan mengekspos Slack sebagai rangkaian mcp tool standar ke lingkungan agen seperti Claude Code, Cursor IDE, Windsurf, atau swarm agen otonom, tim rekayasa dapat membangun alur kerja ChatOps MCP yang sesungguhnya. Instans slack bot ai agent otonom dapat:

  1. Melakukan peringkasan utas lintas saluran untuk menghasilkan laporan eksekutif instan.
  2. Mengotomatiskan respons insiden: membuat saluran ruang krisis (war room), mengundang personel siaga (on-call), menarik telemetri, dan menyusun daftar tindakan runbook.
  3. Menegakkan persetujuan interaktif dengan keterlibatan manusia (Human-in-the-Loop, HITL) melalui elemen UI Slack Block Kit sebelum menerapkan migrasi basis data berisiko tinggi atau rilis produksi.
  4. Menjalankan penyelidikan lintas platform yang menggabungkan konteks Slack dengan PR GitHub, kesalahan Sentry, dan log basis data.
+----------------------------------------------------------------------------------------------------+
|                         ARSITEKTUR CHATOPS OTONOM MODERN (SLACK MCP)                               |
+----------------------------------------------------------------------------------------------------+
                                                 |
             +-----------------------------------+-----------------------------------+
             |                                                                       |
             v                                                                       v
+-------------------------------+                                   +-------------------------------+
|         Tim Rekayasa          |                                   |   Pemantauan & Observabilitas |
| - Saluran & Utas Slack        |                                   | - Datadog / Sentry / CloudWatch|
| - Klik Tombol Interaktif      |                                   | - Peringatan CI/CD (GitLab/GH)|
+---------------+---------------+                                   +---------------+---------------+
                |                                                                   |
                | Membaca / Mengirim Pesan & Persetujuan                            | Mengirimkan Webhook Peringatan
                v                                                                   v
+----------------------------------------------------------------------------------------------------+
|                                INFRASTRUKTUR API & RUANG KERJA SLACK                               |
|             (Web API, Socket Mode, Block Kit Engine, Event Subscriptions, Scope OAuth2)            |
+-------------------------------------------------+--------------------------------------------------+
                                                 |
                                                 | Model Context Protocol (stdio / SSE JSON-RPC 2.0)
                                                 v
+----------------------------------------------------------------------------------------------------+
|                                         SERVER SLACK MCP                                           |
|                               (@modelcontextprotocol/server-slack)                                 |
|                                                                                                    |
|  Alat MCP yang Tersedia:                                                                           |
|  - 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
+-------------------------------+                                   +-------------------------------+
|     Klien Desktop Pengembang  |                                   |      Daemon Latar Belakang    |
| - Claude Code CLI             |                                   | - Swarm Triase Insiden        |
| - Cursor IDE / Windsurf       |                                   | - Agen Penjaga Rilis          |
| - Ekstensi Roo Code / Cline   |                                   | - Bot OpenClaw / LangGraph    |
+-------------------------------+                                   +-------------------------------+

2. Arsitektur: Cara Kerja Server Slack Model Context Protocol

Server Slack MCP mengimplementasikan spesifikasi terbuka Model Context Protocol melalui input/output standar (stdio) untuk CLI dan IDE lokal, atau melalui Server-Sent Events (SSE) untuk layanan mikro berbasis cloud terdistribusi.

Siklus Hidup Eksekusi dan Alur Protokol

Ketika agen AI (seperti Claude Code) berinteraksi dengan Slack melalui MCP, ia mengikuti urutan berikut:

  1. Jabat Tangan Kemampuan & Penemuan Alat (Handshake):
  1. Penalaran Semantik & Pemanggilan Alat:
  1. Penerjemahan Slack Web API & Manajemen Batas Panggilan (Rate Limiting):
  1. Injeksi Konteks & Pemformatan Ringkas:
  1. Sintesis Agen & Tindakan Balasan:

3. Inventaris Alat: Kemampuan Resmi dan Lanjutan Slack MCP

Paket resmi @modelcontextprotocol/server-slack menyediakan alat-alat berikut:

Pengidentifikasi Alat Metode Slack API Deskripsi Parameter Masukan Beban Skema (Token)
slack_list_channels conversations.list Mendaftar saluran publik dan privat yang dapat diakses bot types, limit, cursor ~210 tokens
slack_post_message chat.postMessage Mengirim pesan berformat atau kartu Block Kit ke saluran channel_id, text, blocks ~260 tokens
slack_post_reply chat.postMessage Mengirim balasan di dalam utas agar saluran tetap rapi channel_id, thread_ts, text ~240 tokens
slack_get_channel_history conversations.history Mengambil pesan terbaru dari saluran untuk melihat situasi channel_id, limit, oldest ~290 tokens
slack_get_thread_replies conversations.replies Menarik seluruh riwayat pesan dari suatu utas channel_id, thread_ts, limit ~275 tokens
slack_add_reaction reactions.add Menambahkan reaksi emoji status (:eyes:, :white_check_mark:) channel_id, timestamp, name ~180 tokens
slack_get_user_profile users.profile.get Mengonversi ID pengguna menjadi nama asli dan email user_id ~190 tokens
slack_search_messages search.messages Pencarian semantik di seluruh ruang kerja (perlu User Token) query, sort, count ~310 tokens

4. Panduan Konfigurasi Slack MCP Langkah Demi Langkah

Langkah 1: Buat Aplikasi Slack dan Atur Izin OAuth

  1. Buka api.slack.com/apps lalu pilih Create New AppFrom an app manifest.
  2. Pilih ruang kerja target Anda.
  3. Masukkan manifes produksi berikut:
{
  "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
  }
}
  1. Klik Install to Workspace dan berikan otorisasi.
  2. Salin Bot User OAuth Token yang dihasilkan (xoxb-...).

Langkah 2: Konfigurasi di Claude Code CLI

claude mcp add slack \
  -e SLACK_BOT_TOKEN="xoxb-your-workspace-token-here" \
  -- npx -y @modelcontextprotocol/server-slack

Langkah 3: Konfigurasi di Cursor IDE dan Windsurf

Tambahkan pada ~/.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. Alur Kerja Respons Insiden Otomatis

+----------------------------------------------------------------------------------------------------+
|                         URUTAN TRIASE INSIDEN OTONOM (SLACK MCP)                                   |
+----------------------------------------------------------------------------------------------------+
Peringatan Datadog / PagerDuty      Claude Code / Agen                 Slack MCP & Saluran
        |                                   |                                   |
        |--- 1. Pemicu Webhook Masuk ------>|                                   |
        |    (Lonjakan 500 Layanan Checkout)|                                   |
        |                                   |--- 2. slack_list_channels ------->|
        |                                   |<-- Mengembalikan saluran aktif ---|
        |                                   |                                   |
        |                                   |--- 3. slack_post_message -------->|
        |                                   |    (Buat #inc-20260902 & ringkasan|
        |                                   |                                   |
        |                                   |--- 4. slack_add_reaction -------->|
        |                                   |    (Tandai :rotating_light:)      |
        |                                   |                                   |
        |                                   |--- 5. Ambil Log dari Sentry ----->|
        |                                   |<-- Menerima jejak tumpukan & log -|
        |                                   |                                   |
        |                                   |--- 6. slack_post_reply ---------->|
        |                                   |    (Kirim temuan diagnosis utas)  |
        |                                   |                                   |
        |                                   |--- 7. slack_post_block_approval ->|
        |                                   |    (Tombol Block Kit interaktif   |
        |                                   |     untuk mulai ulang pool DB)    |

Skrip Eksekusi Triase Insiden

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. Kirim peringatan insiden awal
    const alertResult = await this.slackClient.callTool({
      name: "slack_post_message",
      arguments: {
        channel_id: channelId,
        text: `<!here> :rotating_light: *INSIDEN KRITIS TERDETEKSI*: Tingkat kesalahan pada \`${incident.service}\` mencapai ${incident.errorRate}%!`,
      },
    });

    const threadTs = (alertResult.content as any)[0].text.ts;

    // 2. Tambahkan reaksi sedang ditangani
    await this.slackClient.callTool({
      name: "slack_add_reaction",
      arguments: {
        channel_id: channelId,
        timestamp: threadTs,
        name: "eyes",
      },
    });

    // 3. Kirim laporan diagnosis ke dalam utas
    const diagnosticReport = [
      `*Ringkasan Triase Otomatis* untuk \`${incident.service}\`:`,
      `• *Waktu*: ${incident.triggerTimestamp}`,
      `• *Penyebab*: Kekurangan koneksi pada connection pool \`checkout-pg-pool\`.`,
      `• *Petugas On-Call*: <@${onCallUserId}>`,
      `• *Solusi*: Tutup sesi idle dan tingkatkan batas pool dari 50 ke 120.`,
    ].join("\n");

    await this.slackClient.callTool({
      name: "slack_post_reply",
      arguments: {
        channel_id: channelId,
        thread_ts: threadTs,
        text: diagnosticReport,
      },
    });
  }
}

6. Persetujuan Interaktif Melalui Slack Block Kit (Human-in-the-Loop)

Agen otonom tidak boleh memiliki wewenang sepihak untuk operasi yang merusak. Melalui Block Kit, persetujuan manusia ditegakkan:

{
  "channel": "C08_PROD_APPROVALS",
  "blocks": [
    {
      "type": "header",
      "text": {
        "type": "plain_text",
        "text": "🚨 Agen Otonom: Permintaan Persetujuan Migrasi Produksi",
        "emoji": true
      }
    },
    {
      "type": "section",
      "fields": [
        {
          "type": "mrkdwn",
          "text": "*Lingkungan Target:*\n`production-us-east-1`"
        },
        {
          "type": "mrkdwn",
          "text": "*Agen Pemohon:*\n`claude-code-migration-runner`"
        },
        {
          "type": "mrkdwn",
          "text": "*Perintah SQL:*\n`ALTER TABLE users ADD COLUMN passkey_hash VARCHAR(255);`"
        },
        {
          "type": "mrkdwn",
          "text": "*Estimasi Waktu Lock:*\n`< 120ms`"
        }
      ]
    },
    {
      "type": "actions",
      "elements": [
        {
          "type": "button",
          "text": {
            "type": "plain_text",
            "text": "Setujui & Jalankan",
            "emoji": true
          },
          "style": "primary",
          "value": "approved_migration_49182",
          "action_id": "approve_migration"
        },
        {
          "type": "button",
          "text": {
            "type": "plain_text",
            "text": "Tolak & Batalkan",
            "emoji": true
          },
          "style": "danger",
          "value": "rejected_migration_49182",
          "action_id": "reject_migration"
        }
      ]
    }
  ]
}

7. Algoritma Kompresi Utas untuk Efisiensi Token

import os
import json
from typing import List, Dict, Any

def compress_slack_thread(raw_replies: List[Dict[str, Any]]) -> str:
    # Memadatkan JSON mentah Slack menjadi teks ringkas untuk menghemat 68% token
    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. Keamanan dan Analisis ROI Operasional

  • Hanya Gunakan Bot Token (xoxb-): Mengisolasi izin dan menjamin jejak audit yang dapat dipertanggungjawabkan di Slack Audit Logs.
  • Efisiensi Finansial: Untuk tim yang terdiri dari 10 insinyur, biaya inferensi bulanan hanya sekitar $15.44, sementara menghemat waktu penanganan insiden personel on-call sebanyak 8.75 jam (senilai $831.25), memberikan ROI bersih sebesar 53.8x.
  • Pemecahan Masalah: Jika terjadi error not_in_channel, undang bot ke saluran dengan perintah /invite @AgentOps. Lakukan instal ulang aplikasi jika ada penambahan scope baru.
← Semua artikel
0 / 4