Claude Code CLI và extension Claude Code trong VS Code dùng chung cơ chế đăng ký MCP server, nên một khi bạn cấu hình Slack MCP đúng ở một nơi, việc mang nó sang môi trường còn lại gần như chỉ là copy config. Bài này tập trung vào workflow thực tế nhất mà kỹ sư senior hay dùng: đăng thông báo build/deploy/test fail ngay từ terminal, và tóm tắt thread dài thành quyết định có thể hành động.
Cài Đặt và Kết Nối Slack MCP Với Claude Code
Cách nhanh nhất là dùng lệnh claude mcp add trực tiếp trong CLI:
claude mcp add slack -- npx -y @modelcontextprotocol/server-slack
Sau khi thêm, Claude Code sẽ hỏi các biến môi trường cần thiết, hoặc bạn set trước:
export SLACK_BOT_TOKEN="xoxb-xxxxxxxxxxxx-xxxxxxxxxxxx-xxxxxxxxxxxxxxxxxxxxxxxx"
export SLACK_TEAM_ID="T0XXXXXXX"
Nếu muốn cấu hình thủ công (khuyến nghị cho team, để commit config chia sẻ — trừ token), sửa file .mcp.json ở root project:
{
"mcpServers": {
"slack": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-slack"],
"env": {
"SLACK_BOT_TOKEN": "${SLACK_BOT_TOKEN}",
"SLACK_TEAM_ID": "${SLACK_TEAM_ID}"
}
}
}
}
Với VS Code, extension Claude Code đọc cùng file .mcp.json này, hoặc bạn có thể thêm qua UI: mở Command Palette → Claude Code: Manage MCP Servers → Add Server → điền command/args/env tương tự. Sau khi lưu, khởi động lại panel Claude Code để server load.
Kiểm tra kết nối:
claude mcp list
Mẹo: Đừng commit token vào
.mcp.json. Dùng cú pháp${SLACK_BOT_TOKEN}để Claude Code đọc từ biến môi trường của shell, và thêm file chứa secret thật (.env) vào.gitignore.
Đăng Thông Báo Build, Deploy và Test Fail Từ Terminal
Đây là workflow giá trị nhất cho engineer đang chạy pipeline local hoặc debug CI ngay trên máy. Ví dụ prompt sau một lần build fail:
Build vừa fail với lỗi TypeScript ở file src/services/payment.ts.
Đăng vào channel #ci-cd một message ngắn gồm: tên branch hiện tại,
commit hash, dòng lỗi chính, và mention @tech-lead-payment.
Không đăng full stack trace, chỉ đăng 3 dòng lỗi quan trọng nhất.
Claude Code sẽ tự gọi git branch --show-current, git rev-parse HEAD để lấy metadata, đọc log lỗi từ terminal output gần nhất, rồi gọi tool post_message của Slack MCP. Kết quả là một message có format gọn, đúng ngữ cảnh, không cần bạn tự soạn tay.
Với deploy, pattern hữu ích là để agent tạo message có cấu trúc cố định mỗi lần deploy thành công hoặc fail:
Sau mỗi lần chạy npm run deploy:prod, nếu thành công, đăng vào
#deploys theo mẫu:
✅ Deploy thành công | service: <tên> | version: <tag> | by: <user>
Nếu fail, đăng theo mẫu:
❌ Deploy fail | service: <tên> | lý do: <rút gọn 1 câu> | cần rollback: có/không
Mẹo: Định nghĩa mẫu message cố định (template) trong system prompt hoặc trong
CLAUDE.mdcủa project, để agent luôn đăng đúng format dù bạn hỏi bằng cách diễn đạt khác nhau mỗi lần — tránh tình trạng mỗi message trông khác nhau, khó scan bằng mắt.
Tóm Tắt Thread Dài Thành Quyết Định Có Thể Hành Động
Đây là use case "must-have" cho bất kỳ senior engineer nào phải theo dõi nhiều thread kỹ thuật song song. Prompt mẫu:
Đọc toàn bộ thread trong #arch-discussion bắt đầu từ message có
link https://yourteam.slack.com/archives/C0XXXXX/p1234567890.
Tóm tắt thành:
1. Vấn đề đang bàn là gì (1 câu)
2. Các phương án được đề xuất (bullet list, kèm tên người đề xuất)
3. Quyết định cuối cùng (nếu có) hoặc trạng thái "chưa quyết"
4. Action item còn treo, kèm người phụ trách
Trả lời trực tiếp trong thread đó bằng bản tóm tắt này.
Claude Code sẽ gọi get_thread_replies để lấy toàn bộ reply theo thread_ts, sau đó dùng chính khả năng đọc hiểu của model để phân loại nội dung — đây chính là giá trị agentic thật sự, khác hẳn với việc chỉ export thread ra text rồi tự đọc.
Một lưu ý về context window (cửa sổ ngữ cảnh): thread quá dài (300+ message) có thể vượt giới hạn token của một lần gọi tool. Khi đó nên chia nhỏ theo mốc thời gian (oldest/latest param của Slack API) hoặc yêu cầu agent tóm tắt theo từng đoạn 50 message rồi tổng hợp lại (kỹ thuật map-reduce quen thuộc khi xử lý văn bản dài).
Mẹo: Với thread cực dài, hãy yêu cầu agent tóm tắt theo từng "chunk" 50-80 message trước, rồi tóm tắt của tóm tắt — độ chính xác cao hơn nhiều so với việc nhồi toàn bộ vào một lần gọi.
Prompt Pattern Cho Giọng Điệu, Format và Mention
Chất lượng message agent đăng ra phụ thuộc rất nhiều vào việc bạn có định nghĩa rõ giọng điệu (tone) và format trong prompt hay không. Vài pattern hiệu quả:
- Chỉ định độ dài tối đa: "không quá 4 dòng" — tránh agent viết văn dài dòng kiểu báo cáo.
- Chỉ định emoji có/không: nhiều team dùng emoji đầu dòng (✅❌⚠️) để scan nhanh, một số team khác coi đó là thiếu chuyên nghiệp — nói rõ preference trong system prompt.
- Chỉ định cách mention: dùng
@usernamehay<!subteam^ID>(mention nhóm) — agent cần biết ID chính xác của user group qua toollist_usershoặc bạn cung cấp sẵn trong config. - Chỉ định format Slack markdown: Slack dùng cú pháp riêng (
*bold*,_italic_,`code`, không dùng**bold**kiểu Markdown chuẩn) — nhắc rõ để agent không đăng message hiển thị sai định dạng.
Ví dụ prompt kiểm soát tone:
Khi đăng thông báo lỗi, dùng giọng điệu trung lập, không đổ lỗi cá nhân
(tránh "John đã làm sai" -> dùng "commit abc123 gây lỗi").
Dùng *bold* cho tên service, không dùng emoji trừ khi là cảnh báo nghiêm trọng.
Mẹo: Test format bằng cách yêu cầu agent in ra nội dung message trước khi thực sự post (dry-run), để bạn duyệt cú pháp Slack markdown còn nguyên vẹn — sai một ký tự
*có thể làm cả message hiển thị lỗi.
Lưu Ý Thêm Khi Dùng Với VS Code
Vài khác biệt nhỏ giữa CLI và VS Code đáng lưu tâm:
- Trong VS Code, log tool call (bao gồm request/response tới Slack API) hiển thị trực tiếp trong panel chat — tiện để debug khi message đăng ra không đúng ý.
- Extension VS Code đôi khi cache danh sách MCP server cũ sau khi sửa
.mcp.json— cần Reload Window (Cmd/Ctrl+Shift+P → "Reload Window") để load lại config mới. - Khi làm việc trong monorepo có nhiều
.mcp.jsonở các cấp thư mục khác nhau, VS Code ưu tiên file gần workspace root nhất — kiểm tra kỹ tránh nhầm server đang chạy là server ở project con.
Mẹo: Nếu nghi ngờ VS Code đang dùng config MCP cũ, chạy
claude mcp listtrong terminal tích hợp của VS Code để xác nhận danh sách server thực tế đang active, thay vì đoán qua UI.