본문 바로가기

MCP

여러 MCP 조합하기 — DB + Slack + GitHub 연동으로 자동화 파이프라인 만들기

반응형

MCP 서버 하나씩 쓰면 편해요. 근데 여러 개를 조합하면 차원이 달라져요.

혼자: "DB 조회해줘" → 결과 반환

조합: "DB에서 결제 실패 급증하면 
       GitHub 이슈 자동 생성하고
       Slack으로 팀에 알림 보내줘"
→ 한 번의 명령으로 3개 서비스 동시 처리

전체 MCP 설정

// .claude/mcp.json
{
  "mcpServers": {
    "postgres": {
      "command": "npx",
      "args": ["@anthropic/mcp-postgres"],
      "env": {
        "DATABASE_URL": "${DATABASE_URL}"
      }
    },
    "github": {
      "command": "npx",
      "args": ["@modelcontextprotocol/server-github"],
      "env": {
        "GITHUB_PERSONAL_ACCESS_TOKEN": "${GITHUB_TOKEN}"
      }
    },
    "slack": {
      "command": "npx",
      "args": ["@modelcontextprotocol/server-slack"],
      "env": {
        "SLACK_BOT_TOKEN": "${SLACK_BOT_TOKEN}",
        "SLACK_TEAM_ID": "${SLACK_TEAM_ID}"
      }
    },
    "notion": {
      "command": "npx",
      "args": ["@notionhq/notion-mcp-server"],
      "env": {
        "NOTION_API_KEY": "${NOTION_API_KEY}"
      }
    },
    "google-sheets": {
      "command": "uvx",
      "args": ["mcp-google-sheets@latest"],
      "env": {
        "GOOGLE_APPLICATION_CREDENTIALS": "${GOOGLE_CREDS_PATH}"
      }
    }
  }
}

.env:

DATABASE_URL=postgresql://user:pass@localhost/mydb
GITHUB_TOKEN=ghp_...
SLACK_BOT_TOKEN=xoxb-...
SLACK_TEAM_ID=T0123456
NOTION_API_KEY=ntn_...
GOOGLE_CREDS_PATH=/path/to/service-account.json

실전 시나리오 1 — 장애 대응 자동화

나: "결제 실패율 모니터링하고 이상하면 대응해줘"

Claude:
(postgres) 결제 실패율 조회
→ SELECT 
    COUNT(*) FILTER (WHERE status = 'failed') * 100.0 / COUNT(*) as fail_rate,
    DATE_TRUNC('hour', created_at) as hour
  FROM payments
  WHERE created_at > NOW() - INTERVAL '3 hours'
  GROUP BY hour
  ORDER BY hour DESC

→ 조회 결과:
  14:00 - 실패율 2.1% (정상)
  15:00 - 실패율 3.4% (정상)
  16:00 - 실패율 18.7% ← 급증!

(github) 이슈 자동 생성
→ 제목: "🚨 결제 실패율 급증 - 16:00 18.7%"
→ 내용: DB 조회 결과 + 영향 범위 + 조회 쿼리
→ 라벨: critical, payment

(slack) 팀 알림
→ #dev-alert 채널:
  "🚨 결제 실패율 급증
   16:00 기준 18.7% (정상: 3% 이하)
   GitHub 이슈 #89 생성됨
   담당자 확인 부탁드립니다"

→ "✅ 완료: 이슈 #89 생성, #dev-alert 알림 발송"

DB 이상 감지 → 이슈 생성 → 알림까지 한 번에 돼요.


실전 시나리오 2 — 주간 리포트 자동화

매주 월요일 아침 명령 하나로 리포트 완성이에요.

나: "지난주 개발 현황 리포트 만들어줘"

Claude:
(github) 지난주 머지된 PR 조회
→ PR #85: feat: 쿠폰 적용 API
→ PR #83: fix: 로그인 버그 수정
→ PR #81: refactor: 결제 로직 개선
→ 총 3개 PR, 기여자: cell(2), dev1(1)

(github) 지난주 생성/해결된 이슈 조회
→ 생성: 7건 / 해결: 5건 / 미해결: 2건

(postgres) 지난주 주요 지표 조회
→ 총 주문: 1,247건
→ 결제 성공률: 97.3%
→ 평균 응답시간: 234ms

(notion) 이번 주 스프린트 목표 조회
→ "결제 취소 API 개발, 테스트 커버리지 80% 달성"

(google-sheets) 주간 리포트 시트에 데이터 입력
→ 4월 2주차 행에 모든 지표 자동 입력

(slack) #weekly-report 채널에 요약 발송
→ "📊 4월 2주차 개발 현황
   PR 머지: 3건 | 이슈 해결: 5건
   결제 성공률: 97.3% ✅
   이번 주 목표: 결제 취소 API 개발
   상세 내용: [Notion 리포트 링크]"

→ "✅ 주간 리포트 완료"

GitHub + DB + Notion + Sheets + Slack 5개가 동시에 돌아요.


실전 시나리오 3 — 스프린트 시작 자동화

나: "새 스프린트 시작해줘. Notion 스프린트 24 기획서 기반으로"

Claude:
(notion) 스프린트 24 기획서 읽기
→ 작업 목록:
  - 결제 취소 API (3일, cell)
  - 정기결제 API (5일, dev1)
  - 테스트 커버리지 80% (2일, cell)

(github) 각 작업에 대한 이슈 자동 생성
→ 이슈 #90: feat: 결제 취소 API 구현
   담당자: cell, 라벨: sprint-24, feature
→ 이슈 #91: feat: 정기결제 API 구현
   담당자: dev1, 라벨: sprint-24, feature
→ 이슈 #92: chore: 테스트 커버리지 80% 달성
   담당자: cell, 라벨: sprint-24

(google-sheets) 스프린트 트래킹 시트 업데이트
→ 스프린트 24 탭에 작업 목록 + 담당자 + 상태 자동 입력

(slack) #dev 채널에 스프린트 시작 알림
→ "🚀 스프린트 24 시작!
   총 3개 작업, 예상 10일
   GitHub 이슈 #90~#92 생성됨
   트래킹 시트: [링크]"

→ "✅ 스프린트 24 시작 완료"

실전 시나리오 4 — 배포 후 자동 처리

나: "v2.3.1 프로덕션 배포 완료. 후속 처리 해줘"

Claude:
(github) 릴리즈 생성
→ v2.3.1 태그 + 릴리즈 노트 자동 작성
→ 해당 버전 PR들에서 변경사항 추출

(notion) 배포 기록 페이지 업데이트
→ "배포 이력" 페이지에 행 추가
→ 날짜, 버전, 변경사항, 배포자 자동 기록

(postgres) 배포 전후 지표 비교
→ 응답시간: 234ms → 198ms (-15%)
→ 에러율: 2.1% → 1.8% (-14%)

(slack) 배포 완료 알림
→ #releases 채널:
  "✅ v2.3.1 배포 완료
   응답시간 15% 개선, 에러율 14% 감소
   릴리즈 노트: [GitHub 링크]"

→ "✅ 배포 후속 처리 완료"

슬래시 커맨드로 시나리오 저장

자주 쓰는 조합은 커맨드로 만들어요.

# .claude/commands/weekly-report.md
지난주 개발 현황 리포트를 만들어줘.

순서:
1. GitHub에서 지난주 PR, 이슈 통계 조회
2. DB에서 주요 지표 조회 (주문, 결제 성공률, 응답시간)
3. Notion에서 이번 주 스프린트 목표 확인
4. Google Sheets 주간 리포트 시트에 데이터 입력
5. Slack #weekly-report에 요약 발송

리포트 형식:
- PR 머지 건수
- 이슈 생성/해결 건수
- 주요 지표 (전주 대비)
- 이번 주 목표
# .claude/commands/deploy-done.md
$ARGUMENTS 버전 프로덕션 배포 완료. 후속 처리 해줘.

1. GitHub에 릴리즈 생성 ($ARGUMENTS 버전)
2. Notion 배포 이력 업데이트
3. DB에서 배포 전후 지표 비교 (최근 30분 vs 이전 30분)
4. Slack #releases에 배포 완료 알림 (지표 변화 포함)

사용:

/weekly-report
/deploy-done v2.3.1

전후 비교

MCP 조합 전:

주간 리포트 만들기:
1. GitHub 수동 확인 (10분)
2. DB 직접 쿼리 (5분)
3. Notion 확인 (3분)
4. Sheets에 수동 입력 (5분)
5. Slack 메시지 직접 작성 (5분)
총: ~30분

MCP 조합 후:

/weekly-report
총: ~1분

 

반응형