Slack MCP 서버

Slack MCP 서버

LiteLLM MCP 게이트웨이를 통해 Slack의 호스팅 MCP 서버를 연결해 워크스페이스 검색, 채널 읽기, 메시징을 다뤄 보세요.

Slack이 서버를 호스팅·유지하므로 직접 배포하거나 실행할 것이 없어요. LiteLLM은 키·팀별 접근 제어, 도구 호출별 비용 추적, 노출한 모든 MCP 서버에 걸친 단일 감사 추적과 함께 중앙 집중식 인증을 추가해요.

출처: 문서

본문

이 서버를 언제 사용하나요 (When should you use this server)

  • 에이전트에게 워크스페이스 컨텍스트 주기: 채널에서 결정된 것, 누가 말했는지, 언제인지
  • 에이전트가 채팅으로만 보고하지 않고 업데이트·요약·알림을 Slack에 게시하게 하기
  • 답변 전 검색 단계로 메시지, 파일, 캔버스에서 검색하기

주요 기능 (Key features)

  • 도구 표면이 부여한 OAuth 스코프에 따라 달라지므로 읽기 전용 롤아웃과 전체 읽기/쓰기 롤아웃이 같은 서버를 다른 동의로 사용해요
  • Streamable HTTP로 Slack이 호스팅. 로컬 프로세스도, 회전할 봇 토큰도 없음
  • 사용자별 인증이라 모든 도구 호출이 로그인한 사람으로 실행되고 그 사람이 Slack에서 볼 수 있는 것만 봐요

인증 (Authentication)

  • 방법: 사용자 토큰을 사용하는 OAuth 2.1. Slack은 동적 클라이언트 등록을 지원하지 않으므로 Slack 앱을 만들고 LiteLLM에 클라이언트 자격 증명을 줘야 해요.
  • Slack 앱: api.slack.com/apps에서 생성하세요. 리다이렉트 URL을 설정하고, 사용자 토큰 스코프를 추가하고, Model Context Protocol 토글을 활성화해야 해요. Slack은 내부 앱과 디렉터리 게시 앱에서만 MCP를 허용하므로 자체 워크스페이스에 구축한 앱이 자격이 돼요.

엔드포인트 (Endpoint)

원격 MCP 서버:

https://mcp.slack.com/mcp

LiteLLM MCP 게이트웨이로 연결 (Connect via LiteLLM MCP Gateway)

info — Slack은 명시적 클라이언트 자격 증명이 필요한 서버 중 하나예요. LiteLLM은 보통 AtlassianLinear 서버처럼 동적 등록으로 OAuth 클라이언트 설정을 처리하지만, Slack은 자체 앱이 필요해요.

1단계: Slack OAuth 앱 생성 (Create a Slack OAuth app)

  1. api.slack.com/apps로 가서 Create New App, From scratch 클릭 후 에이전트가 도달해야 하는 워크스페이스를 선택하세요.
  2. OAuth & Permissions를 엽니다.
  3. Redirect URLs 아래에 {PROXY_BASE_URL}/callback을 추가하고 Save URLs 클릭:
https://llm.example.com/callback
  1. https://llm.example.com을 사용자가 주소창에서 보는 origin으로 바꾸세요. 이 값은 LiteLLM이 upstream에 redirect_uri로 보내는 값이므로, 불일치하면 Slack의 동의 화면에서 흐름이 실패해요. LiteLLM이 인그레스 뒤에 있다면 Reverse proxy and ingress configuration을 참고하세요.
  2. User Token Scopes 아래에서 Tools provided의 표와 일치하는 원하는 기능의 스코프를 추가하세요. 광범위한 롤아웃은 읽기 전용으로 시작하고 신뢰하는 팀에는 쓰기 스코프를 추가하세요.
  3. Basic Information에서 Client IDClient Secret을 복사하세요.

2단계: MCP 활성화 (Agents & AI Apps)

warning — MCP 엔드포인트는 Agents & AI Apps 아래의 앱별 토글 뒤에 있어요. 끄면 OAuth는 여전히 성공하고 도구 목록이 비어 있거나 403으로 돌아오는데, 이는 실제로는 아닌데 LiteLLM 권한 문제처럼 보여요.

  1. 앱 설정에서 Agents & AI Apps 엽니다.
  2. Model Context Protocol 활성화.
  3. 새 스코프가 적용되도록 앱을 워크스페이스에 설치하거나 재설치합니다.

3단계: LiteLLM에 서버 등록 (Register the server in LiteLLM)

LiteLLM UI:

MCP Servers로 이동해 + Add New MCP Server 클릭 후 설정:

필드
Server Name slack_mcp
Transport HTTP
Server URL https://mcp.slack.com/mcp
Authentication OAuth
OAuth flow type Interactive (PKCE)
Client ID / Client Secret 1단계에서

Create MCP Server 클릭 후 서버의 MCP Tools 탭을 열어 LiteLLM이 Slack 도구를 나열할 수 있는지 확인하세요. 첫 목록화는 브라우저 로그인을 트리거해요.

config.yaml:

mcp_servers:
  slack_mcp:
    url: "https://mcp.slack.com/mcp"
    transport: "http"
    description: "Slack workspace search, channels, and messaging"
    auth_type: oauth2
    oauth2_flow: authorization_code
    client_id: os.environ/SLACK_OAUTH_CLIENT_ID
    client_secret: os.environ/SLACK_OAUTH_CLIENT_SECRET

oauth2_flow: authorization_code는 대화형 사용자별 흐름을 선택하며 필수예요. 이를 생략한 auth_type: oauth2 서버에서는 프록시가 시작을 거부해요. MCP 서버 저장에는 store_model_in_db: true도 필요해요.

4단계: 에이전트에서 연결 (Connect from an agent)

게이트웨이는 각 서버를 http://localhost:4000/{server_name}/mcp로 제공하므로 slack_mcphttp://localhost:4000/slack_mcp/mcp에서 접근 가능해요.

Claude Desktop / Cursor:

{
  "mcpServers": {
    "slack": {
      "url": "http://localhost:4000/slack_mcp/mcp",
      "headers": {
        "x-litellm-api-key": "Bearer sk-<your-litellm-api-key>"
      }
    }
  }
}

Claude Code:

claude mcp add --transport http slack http://localhost:4000/slack_mcp/mcp \
  --header "x-litellm-api-key: *** $LITELLM_API_KEY"

첫 호출에서 Slack 로그인용 브라우저가 열려요. LiteLLM이 그 사용자의 토큰을 저장하고 이후 새로고침하므로 이후 세션은 프롬프트 없이 연결돼요.


제공 도구 (Tools provided)

info — Slack은 도구 정의를 런타임에 tools/list로 게시하므로 이름과 필드가 고지 없이 바뀔 수 있어요. LiteLLM UI의 MCP Tools 탭이 워크스페이스가 노출하는 것의 진실이며, 라이브 도구를 나열하고 테스트 인자로 하나를 호출할 수 있게 해줘요. 업스트림 세부 사항은 Slack의 Slack MCP server overview를 참고해 주세요.

영역 도구
검색(Search) search_public, search_public_and_private, search_channels, search_users
읽기(Read) read_channel, read_thread, read_user_profile
메시징(Messaging) send_message, send_message_draft, schedule_message
캔버스(Canvases) create_canvas, read_canvas, update_canvas

Canvas 도구는 유료 Slack 플랜이 필요해요. LiteLLM은 도구 이름에 서버 이름을 접두사로 붙이므로 search_public는 모델에 slack_mcp-search_public로 노출돼요(Tool naming 참고).

기능별 OAuth 스코프 (OAuth scopes by capability)

기능 사용자 토큰 스코프(예시)
메시지·파일 검색 search:read
공개 채널 읽기 channels:read, channels:history
비공개 채널 읽기 groups:read, groups:history
다이렉트 메시지 읽기 im:history
메시지 게시 chat:write
사용자 프로필 확인 users:read
파일 읽기 files:read

Slack은 전체 목록을 OAuth scopes에 문서화해요. 속도 제한은 해당 Web API 메서드의 등급과 일치하도록 도구별로 적용되며, LiteLLM에서 구성한 어떤 것 위에도 쌓여요.


사용자를 제한하세요object_permission으로 서버를 키·팀별로 부여하고 mcp_rpm_limit으로 서버별 호출량 상한을 두세요. 두 가지 모두 MCP Permission Management에서 다룹니다. 대상을 위해 작동하는 가장 좁은 스코프 집합을 부여하세요. 채널 요약만 필요한 키는 chat:write가 필요 없어요.

LiteLLM 키를 x-litellm-api-key에 넣으세요 — 대화형 OAuth는 업스트림 토큰을 위해 Authorization 헤더가 비어 있어야 해요. 클라이언트가 LiteLLM API 키를 Authorization: Bearer ***로 보내면 OAuth 흐름이 실행되지 않고 LiteLLM이 LiteLLM 키를 Slack에 전달하며 Slack이 거부해요. 진단하려면 x-litellm-mcp-debug: true를 추가하고 응답 헤더를 읽으세요. SAME_AS_LITELLM_KEY는 이 경우를 확인하고, m2m-client-credentialstoken_url`이 설정되어 모든 호출자가 하나의 신원을 공유함을 의미해요. Debugging OAuthMCP Troubleshooting Guide를 참고하세요.

더 알아보기 (Learn more)