/ 디렉터리 / 플레이그라운드 / Microsoft Teams
● 커뮤니티 InditexTech 🔑 본인 키 필요

Microsoft Teams

제작: InditexTech · InditexTech/mcp-teams-server

Teams 채널을 읽고, 메시지를 게시하고, 자연어로 엔지니어에게 @-멘션하기 — Microsoft Teams에서 활동하는 팀을 위한 채팅 옵스 브리지입니다.

Inditex의 Microsoft Teams용 커뮤니티 MCP는 Graph API를 래핑하여 에이전트가 채널 메시지를 읽고, 메시지/답글을 게시하고, 사용자를 @-멘션하고, 팀/채널을 나열할 수 있도록 합니다. 선택한 Graph 스코프로 Azure AD 앱 등록이 필요합니다. 인시던트 커뮤니케이션과 스탠드업 자동화에 최적화되어 있습니다.

왜 쓰나요

핵심 기능

라이브 데모

실제 사용 모습

ms-teams.replay ▶ 준비됨
0/0

설치

클라이언트 선택

~/Library/Application Support/Claude/claude_desktop_config.json  · Windows: %APPDATA%\Claude\claude_desktop_config.json
{
  "mcpServers": {
    "ms-teams": {
      "command": "uvx",
      "args": [
        "mcp-teams-server"
      ]
    }
  }
}

Claude Desktop → Settings → Developer → Edit Config 열기. 저장 후 앱 재시작.

~/.cursor/mcp.json · .cursor/mcp.json
{
  "mcpServers": {
    "ms-teams": {
      "command": "uvx",
      "args": [
        "mcp-teams-server"
      ]
    }
  }
}

Cursor는 Claude Desktop과 동일한 mcpServers 스키마 사용. 프로젝트 설정이 전역보다 우선.

VS Code → Cline → MCP Servers → Edit
{
  "mcpServers": {
    "ms-teams": {
      "command": "uvx",
      "args": [
        "mcp-teams-server"
      ]
    }
  }
}

Cline 사이드바의 MCP Servers 아이콘 클릭 후 "Edit Configuration" 선택.

~/.codeium/windsurf/mcp_config.json
{
  "mcpServers": {
    "ms-teams": {
      "command": "uvx",
      "args": [
        "mcp-teams-server"
      ]
    }
  }
}

Claude Desktop과 같은 형식. Windsurf 재시작 후 적용.

~/.continue/config.json
{
  "mcpServers": [
    {
      "name": "ms-teams",
      "command": "uvx",
      "args": [
        "mcp-teams-server"
      ]
    }
  ]
}

Continue는 맵이 아닌 서버 오브젝트 배열 사용.

~/.config/zed/settings.json
{
  "context_servers": {
    "ms-teams": {
      "command": {
        "path": "uvx",
        "args": [
          "mcp-teams-server"
        ]
      }
    }
  }
}

context_servers에 추가. 저장 시 Zed가 핫 리로드.

claude mcp add ms-teams -- uvx mcp-teams-server

한 줄 명령. claude mcp list로 확인, claude mcp remove로 제거.

사용 사례

실전 활용법: Microsoft Teams

인시던트 Slack 스타일의 스레드를 Teams 채널로 미러링

👤 Microsoft 환경의 Ops / 온콜 ⏱ ~30 min advanced

언제 쓸까: Sentry가 중요 이슈를 발급하면, 요약과 온콜 엔지니어 @-멘션을 #incidents Teams 채널에 게시하고 싶을 때.

사전 조건
  • Graph 스코프 ChannelMessage.Send, Channel.ReadBasic.All, User.Read.All을 가진 Azure AD 앱 등록 — entra.microsoft.com → 앱 등록 → 새로 만들기, 관리자 동의 부여
  • 대상 채널의 팀 ID와 채널 ID — 채널 우클릭 → 채널 링크 가져오기, ID는 URL에 포함되어 있습니다
흐름
  1. 경고 작성
    Sentry 이슈 [붙여넣기]에서 3줄 인시던트 요약을 작성하세요: 무엇이 깨졌는지, 사용자 영향, 의심되는 릴리스.✓ 복사됨
    → 간결한 요약
  2. 멘션할 사람 확인
    온콜은 누구입니까? Teams 사용자 ID를 이메일 [이메일]에서 해결하세요. 멘션 객체를 반환하세요.✓ 복사됨
    → 사용자 및 AAD ID 해결
  3. 채널에 게시
    채널 <id>에 요약을 게시하고 온콜 엔지니어를 @-멘션하세요. 또한 Sentry 이슈 링크와 함께 후속 답글을 게시하세요.✓ 복사됨
    → messageId 반환; Teams에서 보임

결과: 모든 인시던트가 Teams의 구조화된 메시지로 올바른 사람과 함께 태그됩니다.

함정
  • @-멘션은 AAD ID를 가진 mention 객체가 필요합니다. 일반 텍스트 @name은 알림을 받지 않습니다. — 먼저 Graph를 통해 사용자 AAD ID를 해결하고, 메시지 페이로드의 mentions 배열에 전달하세요.
  • 관리자 동의가 필요합니다. 동의를 부여하지 않으면 앱이 작동하지 않습니다. — AAD 관리자에게 앱의 스코프에 대한 관리자 동의를 요청하세요.
함께 쓰기: sentry

팀 채널에 일일 엔지니어링 스탠드업 다이제스트 게시

👤 MS-Teams 조직의 기술 리드 ⏱ ~20 min intermediate

언제 쓸까: 매일 아침: '어제 병합된 PR + 오늘의 온콜 + 열린 P1'을 #eng-standup에 게시합니다.

흐름
  1. 다이제스트를 사전에 수집
    어제 우리 저장소의 GitHub 병합 PR + 현재 온콜 + 열린 P1 티켓을 가져오세요. 8줄로 요약하세요.✓ 복사됨
    → 다이제스트 내용
  2. 포맷팅과 함께 게시
    채널 <id>에 마크다운 제목으로 게시하세요 (Teams는 메시지에서 기본 포맷팅을 지원합니다).✓ 복사됨
    → 메시지가 표시됨
  3. 스레드 고정
    선택적으로, 어제의 스탠드업 스레드에 답글하여 더 이상 사용되지 않음을 표시하세요.✓ 복사됨
    → 답글이 게시됨

결과: Teams의 예측 가능한 일일 스탠드업; 누구도 수동으로 실행할 필요가 없습니다.

함정
  • Teams 마크다운 렌더링은 제한적입니다 — 일부 GitHub 마크다운이 깨집니다. — 일반 텍스트 + 굵게 + 목록만 사용하세요. 표와 중첩된 코드 블록은 피하세요.
함께 쓰기: github · linear

자리를 비운 동안 바쁜 채널에서 일어난 일을 요약

👤 휴가에서 돌아오거나 긴 회의에서 빠져나온 모든 사람 ⏱ ~10 min beginner

언제 쓸까: #platform에서 200개 메시지를 놓쳤고 요점을 알고 싶을 때.

흐름
  1. 최근 메시지 가져오기
    채널 <id>의 마지막 200개 메시지를 가져오세요. 텍스트 + 작성자 + 타임스탬프를 반환하세요.✓ 복사됨
    → 메시지 스트림
  2. 주제별로 분류
    메시지를 3-5개의 주제별 스레드로 그룹화하세요. 각 주제의 이름을 지정하고 핵심 요점을 나열하세요.✓ 복사됨
    → 주제별 요약
  3. 나를 향한 것 플래그
    나를 @-멘션한 메시지 (이메일 <이메일>) 또는 내 과거 메시지에 대한 답글을 강조하세요. 이들은 필독 항목입니다.✓ 복사됨
    → 개인 조치 목록

결과: 떠들썩한 채널에서 30초 만에 따라잡기.

함정
  • 긴 스레드를 당기면 메시지 크기 제한에 도달합니다. — 50개 배치로 페이지 나누기; 배치당 요약한 후 최종 롤업하세요.

@-멘션을 통해 인바운드 고객 질문을 올바른 팀으로 라우팅

👤 고객 성공 옵스 ⏱ ~20 min intermediate

언제 쓸까: 파트너가 공유 채널에서 기술 질문을 제시할 때, 도메인 전문가에게 라우팅하고 싶을 때.

흐름
  1. 질문 분류
    이 메시지를 읽으세요 [붙여넣기]. 어떤 내부 팀이 이를 소유하는가 (청구, 통합, 데이터)?✓ 복사됨
    → 단일 팀 레이블
  2. 올바른 엔지니어 해결
    우리 온콜 로타 [붙여넣기 또는 조회]에서, 오늘 그 팀의 온콜은 누구입니까? AAD ID를 반환하세요.✓ 복사됨
    → 사람 + AAD ID
  3. 멘션과 함께 답글
    같은 스레드에서 그 사람을 @-멘션하며 답글하고 살펴보도록 요청하세요.✓ 복사됨
    → 작동하는 멘션과 함께 답글이 게시됨

결과: 질문이 공유 채널에서 소유되지 않은 채로 오래 방치되지 않습니다.

함정
  • 휴가 중인 사람에게 라우팅하는 것은 라우팅하지 않는 것보다 나쁩니다. — 캘린더/자동 부재중 메시지와 대조하세요. 주요 담당자가 자리를 비운 경우 백업으로 에스컬레이션하세요.

조합

다른 MCP와 조합해 10배 효율

ms-teams + sentry

Sentry 경고를 온콜 엔지니어 @-멘션과 함께 Teams에 게시

Sentry 이슈 <id>의 경우, 요약하고 Teams 채널 <id>에 게시하고 온콜 엔지니어 <이메일>을 @-멘션하세요.✓ 복사됨
ms-teams + github

GitHub PR 리뷰 요청을 Teams에 게시

'needs-platform-review'로 태그된 PR이 열리면, Teams #platform에 링크와 함께 메시지를 게시하고 리뷰어 로타를 @-멘션하세요.✓ 복사됨
ms-teams + monday

monday.com 상태 업데이트를 Teams 프로젝트 채널에 게시

매주 금요일, monday 보드 <id>에서 이번 주 이동된 항목을 요약하고 Teams #proj-atlas에 게시하세요.✓ 복사됨

도구

이 MCP가 노출하는 것

도구입력언제 호출비용
list_teams 봇이 속한 팀 발견 1 Graph 호출
list_channels team_id 팀의 채널 인벤토리 1 Graph 호출
list_messages team_id, channel_id, top? 최근 채널 메시지 읽기 1 Graph 호출
send_message team_id, channel_id, content, mentions? 채널에 게시 1 Graph 호출
send_reply team_id, channel_id, message_id, content, mentions? 기존 스레드 내에서 답글 1 Graph 호출
resolve_user email|user_principal_name 멘션 객체를 만들기 전에 1 Graph 호출

비용 및 제한

운영 비용

API 쿼터
Microsoft Graph 제한: 테넌트당 앱당 분당 약 10k 요청
호출당 토큰
채널 메시지 가져오기: 페이지당 200-1500 토큰.
금액
Teams 라이선스가 있는 M365 조직으로 무료.
팀/채널 ID를 캐시하세요 — 거의 변하지 않습니다. 사용자 AAD ID를 이메일당 한 번 해결하고 재사용하세요.

보안

권한, 시크릿, 파급범위

최소 스코프: ChannelMessage.Send Channel.ReadBasic.All User.Read.All
자격 증명 저장: Azure AD 클라이언트 ID, 클라이언트 시크릿, 테넌트 ID를 환경 변수로
데이터 외부 송신: graph.microsoft.com으로의 모든 호출 (테넌트 내)
절대 부여 금지: Group.ReadWrite.All Directory.ReadWrite.All

문제 해결

자주 발생하는 오류와 해결

AADSTS70011: Invalid scope

스코프 이름이 잘못되었거나 부여되지 않았습니다. Graph 앱 스코프에는 관리자 동의가 필요합니다.

확인: 앱 등록 → API 권한 확인 → 상태 열에 '부여됨'이 표시되어야 합니다.
403 Forbidden on sendMessage

앱에 ChannelMessage.Send 권한이 없거나 사용자가 팀의 멤버가 아닙니다.

@-mention doesn't notify the user

일반 텍스트 @name 대신 AAD ID를 가진 mentions 배열을 사용했습니다. 먼저 사용자를 해결하고 멘션 객체를 포함하세요.

429 throttled

Graph 호출이 너무 많습니다. 지수적으로 백오프하세요. 가능하면 배치하고 ID를 캐시하세요.

대안

Microsoft Teams 다른 것과 비교

대안언제 쓰나단점/장점
Slack MCP팀이 Slack을 사용 중다른 플랫폼; Slack MCP는 더 간단한 인증
Power Automate / FlowM365 내에서 노코드 자동화를 원할 때AI 에이전트 기반 워크플로우에는 덜 유연합니다.

더 보기

리소스

📖 GitHub에서 공식 README 읽기

🐙 열린 이슈 보기

🔍 400+ MCP 서버 및 Skills 전체 보기