n8n에서 MCP(Http-Streamable)로 GitHub PR 코드 리뷰 봇 구현
개요/목표
•
MCP 프로토콜에 HTTP-streamable 추가로, LangGraph로 하던 GitHub 코드 리뷰 자동화를 n8n에서 재현
•
PR 이벤트 트리거 → AI 에이전트 → MCP GitHub 툴로 리뷰 생성
준비물
•
GitHub 저장소와 PR, n8n(엔에잇엔) 인스턴스
•
GitHub 인증: Personal Access Token(PAT) 또는 GitHub App(Client ID/Secret)
•
GitHub MCP 엔드포인트 주소
•
LLM 접근: Azure OpenAI(예: GPT-5 계열) 등
GitHub PR 트리거 설정(n8n)
•
.github/workflows/pr-webhook.yml
name: Pull Request Webhook Notification
on:
pull_request:
types: [opened, synchronize, reopened]
jobs:
notify-webhook:
runs-on: ubuntu-latest
steps:
- name: Send PR notification to webhook
run: |
curl -X POST \
-H "Content-Type: application/json" \
-d '{
"repository_owner": "${{ github.repository_owner }}",
"repository_name": "${{ github.event.repository.name }}",
"pull_request_number": ${{ github.event.pull_request.number }},
"pull_request_url": "${{ github.event.pull_request.html_url }}",
"action": "${{ github.event.action }}",
"pull_request_title": "${{ github.event.pull_request.title }}",
"pull_request_author": "${{ github.event.pull_request.user.login }}"
}' \
# 아래 주소를 변경해서 사용하시면 됩니다
"https://n8n.byeongjinkang.link/webhook-test/67bec60d-498c-492a-920f-0d4f4fb9065e"
YAML
복사
•
트리거 선택: GitHub → On Pull Request
•
크리덴셜 선택:
◦
PAT 사용 시: Developer settings → Personal access tokens(클래식) 발급 후 n8n Credential에 저장
◦
GitHub App 사용 시: Client ID/Secret을 n8n Credential로 등록
•
Repository owner/repo 지정
•
Webhook 엔드포인트 연결:
◦
n8n 트리거에서 제공하는 URL 복사 → GitHub 워크플로우에서 PR 발생 시 POST 요청
◦
준비된 워크플로우(YAML)에서 URL만 교체 후 커밋
◦
PR 닫았다가 다시 열어 트리거 재실행
•
동작 확인: n8n에서 요청 수신 로그 확인
AI 에이전트 노드 구성
•
에이전트 타입: AI Agent 선택, 프롬프트 모드는 Chat 대신 정의형 모드로 전환
•
입력 프롬프트: PR URL 주입
•
모델 선택: Azure OpenAI 모델(gpt-5 계열 등) 지정
•
MCP 클라이언트 툴 설정:
◦
엔드포인트: GitHub MCP(이전 LangGraph 데모와 동일한 주소)
◦
Transport: SSE가 아닌 HTTP-streamable로 설정
◦
인증: Bearer → n8n Credential에서 GitHub PAT 선택(예: 이름 ‘github mcp bearer token’)
◦
필요 시 Tool 권한을 all로 설정
•
실행 결과:
◦
에이전트가 MCP 툴로 PR 정보/디프/펜딩 PR 조회 → 리뷰 코멘트 자동 게시
◦
GitHub PR의 Conversation 및 Files changed 탭에서 리뷰 확인
◦
n8n 로그에서 MCP 툴 호출 시퀀스 확인
멀티 저장소 확장(개선안):
•
Webhook 트리거 + 메타데이터 컨텍스트
◦
문제점: GitHub 트리거는 레포별 플로우 필요 → 관리 복잡
•
대안: Webhook 트리거 사용
◦
Webhook(POST)로 owner, name, pr_url 등 전달
◦
GitHub 워크플로우가 n8n Webhook으로 직접 호출
•
컨텍스트 주입(예: Google Sheets 연동):
◦
시트에 repo name, description, background 등 메타데이터 저장
◦
n8n에서 name 컬럼으로 row 조회(get row)
◦
에이전트 프롬프트에 PR URL + repo description 함께 전달
◦
LLM이 저장소 맥락을 반영해 더 정확한 리뷰 생성
•
주의: 리뷰 작성자의 표시 이름은 사용된 토큰 소유자와 동일
6) 운영 팁/주의사항
•
Transport는 반드시 HTTP-streamable로 설정(SSE 아님)
•
PR 재실행은 PR 닫고 다시 열기 또는 워크플로우 재트리거
•
n8n에서 Listen 이벤트 활성화 상태 확인
•
토큰 보안 관리 및 권한 최소화
•
모델/토큰 제한 회피를 위해 Azure OpenAI 사용 고려
•
Credential 명명 규칙 일관성 유지(혼동 방지)