본문 바로가기

MCP

GitHub MCP 연동 실전 가이드 — 이슈 분석부터 PR 생성까지 자동화

반응형

개발하다 보면 이런 게 반복돼요.

나: "#47 이슈 분석해서 수정해줘"
Claude: "GitHub에 접근할 수 없어요. 이슈 내용 복사해서 붙여넣어주세요."

GitHub MCP 연동하면 이렇게 바뀌어요.

나: "#47 이슈 수정해줘"
Claude: (이슈 읽기 → 코드 분석 → 수정 → PR 생성까지 자동)

설치 및 연결

GitHub Personal Access Token 발급

GitHub → Settings → Developer settings
→ Personal access tokens → Tokens (classic)
→ Generate new token

필요한 권한:
✅ repo (전체)
✅ read:org (조직 레포 쓸 경우)

Claude Code에 등록

claude mcp add github \
  --env GITHUB_PERSONAL_ACCESS_TOKEN=ghp_your_token \
  npx @modelcontextprotocol/server-github

프로젝트 설정 파일

// .claude/mcp.json
{
  "mcpServers": {
    "github": {
      "command": "npx",
      "args": ["@modelcontextprotocol/server-github"],
      "env": {
        "GITHUB_PERSONAL_ACCESS_TOKEN": "${GITHUB_TOKEN}"
      }
    }
  }
}
# .env
GITHUB_TOKEN=ghp_your_token_here

연결 확인

claude mcp list
# github: npx @modelcontextprotocol/server-github (connected)

실전 사용 예시

1 — 이슈 읽고 바로 수정

나: "#47 이슈 수정해줘"

Claude:
(이슈 #47 읽기)
→ 제목: "결제 시 userId null이면 500 에러"
→ 내용: "userId 없는 요청 들어오면 서버 500 반환. 400으로 처리해야 함"
→ 라벨: bug, critical

(코드 분석)
→ src/services/payment.service.ts 확인
→ 34번째 줄: userId 검증 없이 바로 DB 조회

(수정)
→ if (!userId) throw new AppError('userId 필수', 400) 추가
→ 테스트 케이스 추가

(PR 생성)
→ 브랜치: fix/issue-47-userid-null-check
→ PR 제목: "fix: userId null 체크 추가 (#47)"
→ PR 본문: 이슈 링크, 변경사항, 테스트 방법 자동 작성
→ "✅ PR #52 생성 완료: https://github.com/..."

이슈 번호 하나로 수정부터 PR까지 끝나요.


2 — 여러 이슈 한번에 파악

나: "이번 주 들어온 Critical 이슈 전부 알려줘"

Claude:
(labels: critical, created: 최근 7일 조건으로 이슈 조회)
→ "#47 결제 userId null 에러 (2일 전, 미배정)
   #45 로그인 소셜 연동 500 에러 (3일 전, cell 배정)
   #43 쿠폰 중복 적용 버그 (5일 전, 미배정)"

나: "미배정 이슈들 우선순위 분석해줘"

Claude:
(#47, #43 내용 상세 읽기)
→ "#47 먼저 수정 권장:
   - 결제 플로우 직접 영향 → 매출 손실 가능
   - 수정 난이도 낮음 (단순 null 체크)
   #43은 쿠폰 시스템 전체 검토 필요 → 시간 더 걸림"

3 — PR 리뷰 자동화

나: "PR #52 리뷰해줘"

Claude:
(PR #52 diff 읽기)
→ 변경 파일: payment.service.ts, payment.service.test.ts

(코드 리뷰)
→ "🚨 Critical:
   payment.service.ts:38 — userId 체크는 했지만
   amount 체크가 없음. 0원 결제 가능한 상태.

   💡 Suggestion:
   에러 메시지를 한국어로 통일하는 게 좋을 것 같음.
   현재: 'userId required', 다른 곳: '사용자 ID 필수'

   ✅ Good:
   테스트 케이스 edge case 잘 커버함"

나: "amount 체크도 추가해줘"
Claude: (코드 수정 → PR에 커밋 추가)

4 — 릴리즈 노트 자동 작성

나: "v2.3.0에서 v2.3.1 사이 머지된 PR들로 릴리즈 노트 작성해줘"

Claude:
(v2.3.0...v2.3.1 비교해서 머지된 PR 목록 조회)
→ PR #52: fix: userId null 체크 추가
→ PR #50: feat: 결제 취소 API 추가
→ PR #48: refactor: 쿠폰 적용 로직 개선

(릴리즈 노트 작성)
→ "## v2.3.1 (2026-04-14)

   ### 🐛 버그 수정
   - 결제 시 userId null이면 500 에러 나던 문제 수정 (#52)

   ### ✨ 새 기능
   - 결제 취소 API 추가 (#50)

   ### 🔧 개선
   - 쿠폰 적용 로직 성능 개선 (#48)"

나: "GitHub Releases에 올려줘"
Claude: (GitHub Release 자동 생성)
→ "✅ v2.3.1 릴리즈 생성 완료"

5 — 코드 리뷰 요청 자동 배정

나: "PR #52에 백엔드 팀 리뷰어 추가해줘"

Claude:
(레포 멤버 목록 확인)
→ 백엔드 팀: dev1, dev2, dev3

(PR에 리뷰어 추가)
→ dev1, dev2 추가
→ "✅ 리뷰어 추가 완료: @dev1, @dev2"

CLAUDE.md에 GitHub 워크플로우 추가

# CLAUDE.md

## GitHub 워크플로우
- 이슈 수정 시 반드시 해당 이슈 번호 먼저 읽기
- PR 브랜치명: fix/issue-{번호}-{간단설명}
- PR 제목: "타입: 설명 (#{이슈번호})"
- PR 생성 후 항상 이슈에 PR 링크 코멘트 달기
- Critical 라벨 이슈는 다른 작업 전에 먼저 처리

이 규칙 넣어두면 Claude가 GitHub 작업할 때 자동으로 따라요.


슬래시 커맨드로 GitHub 워크플로우 자동화

# .claude/commands/fix-issue.md
$ARGUMENTS 번호의 이슈를 수정하고 PR을 만들어줘.

순서:
1. 이슈 내용 읽기
2. 관련 코드 파악
3. /plan으로 수정 계획 작성 후 승인 받기
4. 코드 수정
5. 테스트 추가
6. PR 생성 (이슈 번호 본문에 포함)
7. 이슈에 PR 링크 코멘트 달기

사용:

/fix-issue 47
# → 이슈 읽기부터 PR 생성까지 자동

전후 비교

GitHub MCP 전:

이슈 수정 과정:
1. GitHub에서 이슈 열기 (1분)
2. 내용 복사해서 Claude에 붙여넣기 (1분)
3. Claude가 코드 분석 (설명 필요)
4. 코드 수정
5. PR 본문 직접 작성 (5분)
6. gh pr create 실행 (1분)
7. 이슈에 PR 링크 달기 (1분)
총: ~15분

GitHub MCP 후:

/fix-issue 47
→ 전부 자동
총: ~2분 (코드 수정 시간 제외)

 

📌 관련 글

Notion + Google Sheets MCP 연동

 

Notion + Google Sheets MCP 연동 실전 가이드 — Claude Code로 문서/데이터 자동화

개발하다 보면 이런 상황이 반복돼요.나: "기획서에서 API 스펙 찾아줘"Claude: "Notion에 접근할 수 없어요. 내용을 복사해서 붙여넣어주세요."나: "Q1 매출 데이터 분석해줘"Claude: "스프레드시트에 접

cell-devlog.tistory.com

 

MCP 서버 직접 만들기

 

MCP 서버 직접 만들기 — 내 서비스를 Claude에 연동하는 법

MCP(Model Context Protocol)는 Claude가 외부 서비스랑 직접 대화하게 해주는 표준 프로토콜이에요.기존에는 이랬어요.나: "우리 DB에서 오늘 주문 건수 알려줘"Claude: "저는 DB에 접근할 수 없어요. 직접 확

cell-devlog.tistory.com

 

반응형