·

Slack MCP với Cursor

Cài đặt Slack MCP trong Cursor để AI agent có thể đọc và gửi tin nhắn, quản lý channel ngay trong trình soạn thảo.

Cursor là IDE mà nhiều engineer dùng cả ngày để viết code, nên việc mang Slack vào ngay trong agent mode của Cursor giúp giảm việc chuyển tab liên tục giữa editor và Slack app. Khác với các CLI thuần (Claude Code, OpenCode, Gemini CLI), Cursor có UI riêng cho MCP và một agent mode gắn chặt với context của file đang mở — điều này mở ra vài workflow đặc thù, nhưng cũng có giới hạn riêng cần biết trước khi tin tưởng giao việc quan trọng.

Kết Nối Slack MCP Với Cursor Agent Mode

Cursor đọc cấu hình MCP từ file .cursor/mcp.json trong project, hoặc ~/.cursor/mcp.json cho cấu hình áp dụng toàn máy:

{
  "mcpServers": {
    "slack": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-slack"],
      "env": {
        "SLACK_BOT_TOKEN": "xoxb-xxxxxxxxxxxx-xxxxxxxxxxxx-xxxxxxxxxxxxxxxxxxxxxxxx",
        "SLACK_TEAM_ID": "T0XXXXXXX"
      }
    }
  }
}

Khác với Claude Code hay Gemini CLI, Cursor không hỗ trợ nội suy biến môi trường trực tiếp trong mcp.json ở mọi version — nhiều bản Cursor yêu cầu bạn điền giá trị token trực tiếp (plaintext) vào file này. Vì vậy:

  • Không commit .cursor/mcp.json chứa token thật lên git. Thêm vào .gitignore ngay khi tạo file.
  • Nếu team cần chia sẻ cấu hình mà không lộ token, tạo file mẫu .cursor/mcp.json.example với placeholder, và hướng dẫn từng người tự điền token cá nhân/service account.

Sau khi lưu file, mở Cursor Settings → MCP để xem danh sách server và trạng thái kết nối (chấm xanh là connected). Bật Agent Mode (Cmd/Ctrl+I hoặc chọn từ dropdown chat), agent mode này mới có quyền gọi tool MCP — chat mode thường (Ask mode) trong một số version Cursor không tự động gọi tool ngoài, cần agent mode để có tool-calling đầy đủ.

Mẹo: Vì token thường phải điền plaintext, hãy tạo riêng một Slack App/bot token chỉ dùng cho máy dev cá nhân, không dùng chung token service account của cả team cho việc test trên Cursor — nếu máy cá nhân bị lộ file config, blast radius (phạm vi ảnh hưởng) sẽ nhỏ hơn nhiều.

Chia Sẻ Code Context và Trạng Thái PR Lên Slack Từ Cursor

Giá trị lớn nhất của Slack MCP trong Cursor là khả năng agent đã đang đọc code của bạn trong cùng session, nên khi cần báo cáo, nó không cần bạn giải thích lại ngữ cảnh. Ví dụ:

Tôi vừa sửa xong bug ở hàm calculateDiscount trong
src/services/pricing.ts. Tóm tắt thay đổi trong 2-3 câu
(nguyên nhân gốc, cách sửa) và đăng vào #eng-updates,
kèm link tới PR #512 trên GitHub.

Cursor agent đọc diff hiện tại (qua git integration tích hợp sẵn), tóm tắt, rồi gọi Slack MCP để post — toàn bộ không cần bạn rời khỏi editor. Với PR status, pattern hữu ích hơn là để agent tự động cập nhật khi trạng thái PR thay đổi:

Khi PR #512 chuyển từ "Changes requested" sang "Approved",
đăng một message ngắn vào #eng-updates: "PR #512 (fix discount
calculation bug) đã được approve, sẽ merge sau khi CI xanh."

Lưu ý: Cursor agent mode không tự "theo dõi" sự kiện GitHub theo thời gian thực trừ khi bạn có thêm GitHub MCP server chạy song song và agent được kích hoạt lại (re-invoke) mỗi khi bạn hỏi — nó không chạy như một daemon nền liên tục. Với nhu cầu tự động thực sự theo event, bạn cần kết hợp thêm webhook/CI job gọi lại agent, MCP một mình không đủ để làm real-time trigger.

Mẹo: Khi báo trạng thái PR lên Slack, luôn yêu cầu agent trích dẫn số PR và tên hàm/module cụ thể thay vì mô tả chung "đã sửa bug" — giúp người đọc trong channel biết ngay có liên quan đến phần code họ đang động vào hay không.

Lấy Bug Report Từ Slack Thread Đưa Vào Code Fix

Đây là hướng ngược lại: dùng Slack như nguồn input cho công việc code, thay vì chỉ là nơi xuất thông báo. Cursor agent mode làm tốt việc này vì nó có thể đọc thread Slack rồi ngay lập tức đi tìm code liên quan trong cùng session:

Đọc thread trong #bug-reports có tiêu đề "Giá hiển thị sai
khi áp dụng 2 coupon cùng lúc". Tóm tắt bug, sau đó tìm trong
codebase (thư mục src/services/pricing) hàm nào có khả năng
gây lỗi này, và đề xuất fix.

Agent gọi search_messages hoặc get_thread_replies để lấy nội dung report, phân tích mô tả lỗi, rồi chuyển sang dùng các tool đọc code (semantic search, grep tích hợp của Cursor) để định vị nguyên nhân. Đây là workflow "từ báo cáo người dùng đến code fix" rút ngắn đáng kể — thay vì bạn tự đọc thread, tự đoán hàm liên quan, tự mở file.

Sau khi có fix, vòng lặp khép lại tự nhiên: agent tạo commit/PR, rồi báo lại vào đúng thread Slack gốc:

Sau khi tạo PR fix bug trên, trả lời vào đúng thread Slack gốc
(#bug-reports) với nội dung: "Đã tạo fix, xem PR #520.
Nguyên nhân: coupon thứ 2 không được nhân đúng vào giá đã giảm
từ coupon thứ nhất."

Mẹo: Luôn yêu cầu agent trả lời (reply) vào đúng thread gốc bằng thread_ts, không tạo message mới trong channel — người báo bug ban đầu sẽ nhận notification ngay trong thread họ đang theo dõi, không cần bạn tag lại họ thủ công.

Hạn Chế Đã Biết và Cách Khắc Phục Khi Dùng Slack MCP Trong Cursor

Vài hạn chế thực tế của Cursor khi tích hợp Slack MCP, và cách xử lý:

  • Không có cơ chế permission per-tool chi tiết như OpenCode. Cursor thường chỉ có toggle "auto-run tool" ở mức tổng quát, không tách riêng được "cho phép đọc, chặn viết" theo từng tool Slack cụ thể. Khắc phục: tách hẳn hai Slack App (một chỉ có scope đọc, một có thêm chat:write), rồi chỉ bật server có quyền viết khi thực sự cần, tắt đi sau khi dùng.
  • Context của agent mode giới hạn theo phiên làm việc trong file hiện tại, nên khi yêu cầu tổng hợp nhiều nguồn (nhiều thread Slack + nhiều file code), đôi khi agent bỏ sót một phần nếu không được nhắc rõ danh sách nguồn cần đọc.
  • File .cursor/mcp.json cần chứa token dạng plaintext ở nhiều version, như đã nói ở phần cài đặt — rủi ro lộ secret nếu không cẩn thận với .gitignore.
  • Một số action Slack (như upload file) không có tool MCP tương ứng sẵn — tương tự các client CLI khác, cần làm ngoài phạm vi MCP nếu cần đính kèm file.

Mẹo: Định kỳ rotate (xoay) token Slack dùng cho Cursor, đặc biệt nếu máy dev từng đồng bộ config qua công cụ chia sẻ dotfile hoặc từng bị máy khác truy cập — coi token trong .cursor/mcp.json như một secret có rủi ro lộ cao hơn bình thường.

Lưu Ý Thêm Khi Triển Khai Cho Cả Team

Vài điểm cần thống nhất trước khi nhân rộng workflow này cho nhiều engineer trong team:

  • Thống nhất một channel test chung (không phải channel thật) để mọi người luyện prompt trước khi áp dụng vào channel sản phẩm.
  • Ghi rõ trong onboarding doc: bot Slack dùng cho Cursor là bot riêng, không phải tài khoản cá nhân — tránh nhầm lẫn khi review log message.
  • Nhắc mọi người kiểm tra kỹ nội dung agent định đăng (đặc biệt với channel công khai toàn công ty) trước khi approve, dù đã quen dùng agent mode hàng ngày — thói quen "approve không đọc" là nguyên nhân phổ biến nhất gây sự cố truyền thông nội bộ.

Mẹo: Tạo một checklist ngắn (3-4 dòng) dán ngay trong README của team về cách dùng Slack MCP với Cursor an toàn — giảm thời gian onboarding cho engineer mới và tránh mỗi người tự tạo quy ước khác nhau.