[ Slack MCP ]

박태근·2026년 4월 1일

AI 생태계 탐험 로그

목록 보기
13/15

Claude Code로 Slack MCP 연결하기 — 자연어로 메시지 보내고 채널 관리까지

지난 편에서는 Memory MCP를 파이프라인의 상태 관리 도구로 활용해 Velog, GitHub, Notion, Memory 4곳을 프롬프트 하나로 동기화하는 자동화 루틴을 완성했습니다.

이번 편에서는 MCP 생태계를 팀 커뮤니케이션 공간으로 확장합니다. Slack MCP를 연결하면 자연어 한 줄로 채널을 조회하고 메시지를 전송할 수 있으며, GitHub MCP와 조합하면 커밋 현황을 자동으로 알려주는 봇도 만들 수 있습니다.


Slack이란 무엇인가

Slack은 팀과 조직을 위한 업무용 메신저입니다.
카카오톡과 비슷하지만 회사와 팀 단위로 설계된 버전이라고 이해하면 됩니다.
국내외 IT 기업 대부분이 사용하는 사실상 표준 협업 도구입니다.

Slack의 구조는 계층적으로 구성됩니다.

워크스페이스 (Workspace)  ← 회사/팀 단위
  └── 채널 (Channel)      ← #general, #dev, #backend ...
        └── 메시지        ← 대화 내용
              └── 스레드  ← 메시지에 달리는 답글

카카오톡이 개인 중심이라면 Slack은 채널(Channel) 중심입니다.
주제별로 채널을 만들어 대화를 분리할 수 있고, GitHub, Notion, Jira 등 수백 개의 외부 서비스와 연동이 가능합니다.
개발팀에서 Slack을 선호하는 이유가 바로 이 외부 서비스 연동 능력에 있습니다.


Slack MCP 작동 원리

Slack MCP의 요청 흐름은 다음과 같습니다.

Claude Code → Slack MCP Server → Slack API (Bot Token) → Slack 워크스페이스

MCP 서버가 Claude의 자연어 요청을 Slack API 형태로 변환해줍니다.
이때 핵심은 Bot Token입니다.

Bot Token(xoxb-로 시작)은 Slack App을 만들고 워크스페이스에 설치하면 발급됩니다. Bot 이름으로 메시지를 전송하며, 권한을 OAuth Scope 단위로 세밀하게 제어할 수 있습니다.

OAuth Scope는 Slack App이 워크스페이스에서 할 수 있는 행동의 범위를 정의하는 권한 단위입니다.
예를 들어 chat:write는 메시지 전송, channels:read는 채널 목록 조회를 허용합니다.

한 가지 중요한 점이 있습니다. Scope 설정과 MCP 서버의 실제 구현 범위는 별개입니다. search:read Scope를 추가해도 @modelcontextprotocol/server-slack 패키지가 검색 기능을 구현하지 않으면 사용할 수 없습니다. Scope는 "허용 목록"이고, 실제 사용 가능 여부는 MCP 패키지의 구현 수준에 달려 있습니다.


환경 설정 — Slack App 생성부터 MCP 등록까지

1단계: 워크스페이스 생성

slack.com/get-started에서 워크스페이스를 생성합니다. 실습에서는 ai-ecosystem-lab으로 이름을 정했습니다.

2단계: Slack App 생성

api.slack.com/apps에 접속해 Create New App → From scratch를 선택합니다. App 이름은 claude-mcp-bot, 연결할 워크스페이스는 방금 만든 ai-ecosystem-lab을 선택합니다.

3단계: Bot Token Scopes 설정

OAuth & Permissions 메뉴에서 Bot Token Scopes를 추가합니다.

channels:history    channels:read     chat:write
groups:history      groups:read       im:history
im:read             im:write          users:read
search:read.im      search:read.mpim  search:read.public

한 가지 주의할 점이 있습니다.

기존에 search:read 단일 Scope였던 것이 현재는 search:read.im, search:read.mpim, search:read.public 세 가지로 세분화되어 있습니다.
이전 가이드를 참고하면 Scope 목록에서 찾지 못하는 경우가 있으니 세분화된 이름으로 검색해야 합니다.

4단계: Bot Token 발급 및 MCP 등록

Install to Workspace → Allow를 클릭하면 Bot User OAuth Token(xoxb-...)이 발급됩니다. 이 값을 복사해 MCP를 등록합니다.

claude mcp add slack-mcp \
  -s user \
  -e SLACK_BOT_TOKEN=xoxb-여기에_토큰_입력 \
  -e SLACK_TEAM_ID=여기에_팀_ID_입력 \
  -- npx -y @modelcontextprotocol/server-slack

SLACK_TEAM_ID는 Slack 브라우저 주소창에서 확인할 수 있습니다. https://app.slack.com/client/T0AQ4JJKJS2/... 형태의 URL에서 T로 시작하는 값이 Team ID입니다.

Claude Code를 재실행한 뒤 /mcp 명령어로 slack-mcp · ✔ connected 상태를 확인합니다.


실습(기본 기능 테스트)

채널 목록 조회 ✅

"Slack 워크스페이스의 채널 목록을 조회해줘"

channels:read Scope 권한으로 등록된 채널 목록이 즉시 반환됩니다.

메시지 전송 ✅

"#general 채널에 'Slack MCP 연결 테스트입니다' 메시지를 보내줘"

여기서 트러블슈팅이 하나 있었습니다
not_in_channel 에러가 발생했습니다. Bot이 해당 채널에 참여하지 않은 상태였기 때문입니다. Slack 채널에서 아래 명령어로 Bot을 초대하면 해결됩니다.

/invite @claude-mcp-bot

이후 메시지 전송이 정상 동작했습니다.

메시지 읽기 / 멤버 조회 ✅

채널의 메시지 히스토리 조회와 워크스페이스 멤버 목록 조회 모두 정상 동작했습니다.

메시지 검색 ❌

search:read 관련 Scope를 추가했음에도 메시지 검색은 동작하지 않았습니다.
앞서 설명한 대로 Scope 권한과 MCP 패키지의 구현 범위가 다르기 때문입니다. @modelcontextprotocol/server-slack이 검색 기능을 아직 구현하지 않은 패키지 한계입니다.


콤보 실습 — GitHub + Slack 자동 알림 봇

실무에서 가장 흔한 패턴 중 하나는 GitHub 이벤트를 Slack으로 알림 전송하는 것입니다.
이 패턴을 MCP 콤보로 구현했습니다.

프롬프트 한 줄로 아래 4단계가 자동 실행됩니다.

GitHub velog-backup 레포의 최근 커밋 3개를 조회하고
그 현황을 Slack #개발-알림 채널에 전송해줘.
그리고 GitHub에 'Slack MCP 콤보 테스트' 이슈를 생성하고
이슈 생성 완료 알림과 URL도 Slack에 전송해줘.

실행 흐름은 다음과 같습니다.

  1. GitHub MCP: velog-backup 레포 최근 커밋 3개 조회
  2. Slack MCP: 커밋 현황을 #개발-알림 채널에 전송
  3. GitHub MCP: Slack MCP 콤보 테스트 이슈 생성
  4. Slack MCP: 이슈 URL 포함 생성 완료 알림 전송

GitHub에서 데이터를 읽고 Slack으로 전달하는 흐름이 자연어 한 줄로 완성됩니다. 실무에서 배포 알림 봇이나 PR 리뷰 요청 자동화에 사용하는 패턴과 구조적으로 동일합니다.


실무 활용 시나리오

1. 배포 알림 봇: GitHub PR 머지를 감지해 #deploy 채널에 자동 알림을 전송합니다.

2. 이슈 트래킹: GitHub 이슈 생성 및 업데이트 시 담당자에게 Slack DM을 발송합니다.

3. 일일 리포트: 매일 GitHub 커밋 현황을 수집해 팀 채널에 요약 리포트를 전송합니다.

4. 온콜 알림: 특정 키워드가 감지되면 담당자에게 즉시 Slack 알림을 보냅니다.


마무리

이번 실습으로 Slack MCP를 연결하고 Bot Token 발급부터 GitHub 콤보까지 전체 흐름을 익혔습니다. MCP 생태계가 팀 커뮤니케이션 공간까지 확장됐습니다.

다음 편에서는 이 시리즈에서 가장 심화된 주제를 다룹니다.
Claude Code MCP(Nested Agent)를 연결해 Claude가 또 다른 Claude를 호출하는 중첩 에이전트 구조를 실험할 예정입니다.
단일 에이전트가 처리하기 어려운 복잡한 작업을 어떻게 여러 에이전트로 분산할 수 있는지 살펴보겠습니다.


profile
- 전자컴퓨터공학과 4학년 재학 中

0개의 댓글