Skip to main content
Glama

GitHub MCP Server

by HyunjunGil

GitHub MCP Server (FastMCP)

GitHub API를 활용한 Model Context Protocol (MCP) 서버입니다. Claude Desktop, Cursor, 또는 다른 MCP 클라이언트에서 GitHub 작업을 직접 수행할 수 있도록 포괄적인 도구를 제공합니다.

🌟 특징

  • 완전한 GitHub API 통합: 리포지토리, 브랜치, 이슈, PR, 파일 관리 등 주요 GitHub 기능을 모두 지원
  • FastMCP 기반: 최신 MCP 프로토콜을 사용한 고성능 서버
  • PyGithub 활용: 안정적이고 검증된 GitHub API 클라이언트 라이브러리 사용
  • 상세한 에러 처리: 명확한 에러 메시지와 로깅
  • 타입 안전성: Pydantic 모델을 통한 데이터 검증
  • 확장 가능한 구조: 새로운 GitHub API 기능을 쉽게 추가할 수 있는 모듈화된 설계

🚀 주요 기능

📁 Repository 관리

  • 새 리포지토리 생성: 공개/비공개 리포지토리 생성
  • 리포지토리 조회: 특정 리포지토리 정보 확인
  • 리포지토리 목록: 사용자의 모든 리포지토리 조회

🌿 Branch 관리

  • 새 브랜치 생성: 기존 브랜치에서 새 브랜치 생성
  • 브랜치 목록 조회: 리포지토리의 모든 브랜치 확인

🐛 Issue 관리

  • 이슈 생성: 새 이슈 작성 (라벨, 담당자 지정 가능)
  • 이슈 목록 조회: 열린/닫힌/모든 이슈 확인
  • 특정 이슈 조회: 이슈 번호로 상세 정보 확인

🔀 Pull Request 관리

  • PR 생성: 새 Pull Request 생성 (Draft PR 지원)
  • PR 목록 조회: 열린/닫힌/모든 PR 확인
  • 특정 PR 조회: PR 번호로 상세 정보 확인

📝 파일 관리

  • 파일 생성: 새 파일 생성 및 커밋
  • 파일 수정: 기존 파일 업데이트
  • 파일 조회: 파일 내용 및 메타데이터 확인

📝 커밋 관리

  • 커밋 목록 조회: 리포지토리 또는 특정 브랜치의 커밋 히스토리

👤 사용자 정보

  • 사용자 프로필 조회: GitHub 사용자 정보 확인

📋 요구사항

  • Python 3.8+
  • GitHub Personal Access Token
  • Claude Desktop 또는 Cursor (연동용)

🛠️ 설치 및 설정

1. 프로젝트 복제 및 설치

# 의존성 설치 pip install -r requirements.txt # 개발모드로 패키지 설치 pip install -e .

2. GitHub Token 생성

  1. GitHub → Settings → Developer settings → Personal access tokens → Tokens (classic)
  2. Generate new token 클릭
  3. 필요한 권한 선택:
    • repo (전체 리포지토리 액세스)
  4. 생성된 토큰 복사

3. 환경변수 설정

# env.example을 .env로 복사 cp env.example .env # .env 파일 편집 GITHUB_TOKEN=your_github_token_here

4. 서버 테스트

# 직접 실행 python -m github_mcp_server # 또는 설치된 명령어 사용 github-mcp-server

🔗 Claude Desktop 연동

1. Claude Desktop 설정 파일 위치

  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
  • Windows: %APPDATA%\\Claude\\claude_desktop_config.json

2. 설정 파일 수정

{ "mcpServers": { "github-mcp-server": { "command": "python", "args": ["-m", "github_mcp_server"], "cwd": "/path/to/your/github-mcp-server", "env": { "GITHUB_TOKEN": "your_github_token_here" } } } }

3. Claude Desktop 재시작

설정 변경 후 Claude Desktop을 완전히 종료하고 다시 시작하세요.

📖 사용 방법

Claude Desktop에서 다음과 같이 요청할 수 있습니다:

📁 Repository 관리

"GitHub에 새 리포지토리를 만들어주세요" - 이름: my-awesome-project - 설명: 새로운 프로젝트입니다 - 공개 리포지토리로 설정 "내 GitHub 리포지토리 목록을 보여주세요" "facebook/react 리포지토리 정보를 알려주세요"

🌿 Branch 관리

"새 브랜치를 만들어주세요" - 리포지토리: username/my-repo - 브랜치 이름: feature/new-feature - 기준 브랜치: main "username/my-repo의 모든 브랜치를 보여주세요"

🐛 Issue 관리

"이슈를 만들어주세요" - 리포지토리: username/my-repo - 제목: 버그 수정 필요 - 내용: 상세한 버그 내용... "username/my-repo의 열린 이슈 목록을 보여주세요" "username/my-repo의 이슈 #42 상세 정보를 알려주세요"

🔀 Pull Request 관리

"풀 리퀘스트를 만들어주세요" - 리포지토리: username/my-repo - 제목: 새 기능 추가 - 소스 브랜치: feature/new-feature - 타겟 브랜치: main "username/my-repo의 모든 PR을 보여주세요" "username/my-repo의 PR #15 정보를 알려주세요"

📝 커밋 및 사용자 정보

"username/my-repo의 최근 커밋들을 보여주세요" "facebook 사용자 정보를 알려주세요" "내 GitHub 프로필 정보를 보여주세요"

🏗️ 아키텍처 및 구조

📁 프로젝트 구조

src/github_mcp_server/ ├── __init__.py # 패키지 초기화 ├── __main__.py # CLI 진입점 및 서버 시작 ├── server.py # FastMCP 서버 및 도구 정의 └── github_client.py # GitHub API 클라이언트 (PyGithub 래퍼)

🔗 주요 구성요소

1. GitHubClient (github_client.py)
  • 역할: GitHub API와의 실제 통신 담당
  • 기술: PyGithub 라이브러리 기반
  • 데이터 모델: Pydantic 모델을 통한 타입 안전성 보장
  • 에러 처리: 상세한 로깅 및 예외 처리
2. FastMCP Server (server.py)
  • 역할: MCP 프로토콜 구현 및 도구 노출
  • 기술: FastMCP 프레임워크 사용
  • 도구 등록: @mcp.tool 데코레이터를 통한 자동 도구 등록
  • 응답 형식: 일관된 JSON 응답 구조
3. CLI Interface (__main__.py)
  • 역할: 명령줄 인터페이스 및 서버 초기화
  • 환경 설정: .env 파일 로드 및 환경변수 검증
  • 로깅 설정: 파일 및 콘솔 로깅 구성

📦 데이터 모델

# 주요 Pydantic 모델들 class GitHubRepository(BaseModel): name: str full_name: str description: Optional[str] html_url: str private: bool default_branch: str class GitHubBranch(BaseModel): name: str sha: str url: str class GitHubIssue(BaseModel): number: int title: str body: Optional[str] state: str html_url: str user: Dict[str, Any] class GitHubFile(BaseModel): name: str path: str sha: str size: int content: Optional[str] # ... 기타 필드들

🛠️ MCP 도구 API 레퍼런스

📁 Repository 관리

도구 이름설명필수 매개변수선택 매개변수
create_repository새 리포지토리 생성namedescription, private, auto_init
list_repositories리포지토리 목록 조회없음per_page

🌿 Branch 관리

도구 이름설명필수 매개변수선택 매개변수
create_branch새 브랜치 생성owner, repo, branch_namefrom_branch
list_branches브랜치 목록 조회owner, repoper_page

📝 파일 관리

도구 이름설명필수 매개변수선택 매개변수
create_file새 파일 생성owner, repo, path, content, messagebranch, author_name, author_email
update_file파일 수정owner, repo, path, content, message, shabranch, author_name, author_email
get_file파일 조회owner, repo, pathref

🐛 Issue 관리

도구 이름설명필수 매개변수선택 매개변수
create_issue새 이슈 생성owner, repo, titlebody, labels, assignees
get_issue특정 이슈 조회owner, repo, issue_number없음
list_issues이슈 목록 조회owner, repostate, per_page

🔀 Pull Request 관리

도구 이름설명필수 매개변수선택 매개변수
create_pull_request새 PR 생성owner, repo, title, headbase, body, draft
get_pull_request특정 PR 조회owner, repo, pr_number없음
list_pull_requestsPR 목록 조회owner, repostate, per_page

📝 커밋 관리

도구 이름설명필수 매개변수선택 매개변수
list_commits커밋 목록 조회owner, repobranch, per_page

👤 사용자 정보

도구 이름설명필수 매개변수선택 매개변수
get_user_info사용자 정보 조회없음username

🔌 MCP Client 개발 가이드

🚀 빠른 시작

MCP 클라이언트에서 이 서버에 연결하려면:

  1. 서버 시작:
    python -m github_mcp_server
  2. 연결 설정:
    # MCP 클라이언트 코드 예시 import asyncio from mcp import ClientSession, StdioServerParameters async def main(): server_params = StdioServerParameters( command="python", args=["-m", "github_mcp_server"], env={"GITHUB_TOKEN": "your_token_here"} ) async with ClientSession(server_params) as (read, write): # 도구 사용 예시 result = await session.call_tool("list_repositories", {}) print(result)

📋 응답 형식

모든 도구는 일관된 JSON 응답 형식을 반환합니다:

{ "success": true|false, "message": "사용자 친화적 메시지", "data": { /* 실제 데이터 */ }, "error": "에러 메시지 (실패시만)" }
성공 응답 예시:
{ "success": true, "message": "✅ 리포지토리 'my-repo' 생성 완료!", "repository": { "name": "my-repo", "full_name": "username/my-repo", "url": "https://github.com/username/my-repo", "private": false, "default_branch": "main" } }
실패 응답 예시:
{ "success": false, "message": "❌ 리포지토리 생성 실패: Repository already exists", "error": "Repository already exists" }

🔧 에러 처리

클라이언트에서 에러를 처리할 때 고려사항:

  1. HTTP 에러: GitHub API rate limit, 인증 실패 등
  2. 권한 에러: 토큰 권한 부족
  3. 데이터 검증 에러: 잘못된 매개변수
  4. 네트워크 에러: 연결 실패, 타임아웃

📊 Rate Limiting

GitHub API의 rate limit을 고려해야 합니다:

  • 인증된 요청: 시간당 5,000회
  • 비인증 요청: 시간당 60회

클라이언트에서 다음을 구현하는 것을 권장합니다:

  • Rate limit 헤더 모니터링
  • 적절한 재시도 로직
  • 요청 간격 조절

🐛 문제 해결

서버가 시작되지 않는 경우

  • github_mcp_server.log 파일 확인
  • GitHub token이 올바른지 확인
  • Python 경로가 올바른지 확인

Claude에서 도구가 보이지 않는 경우

  • Claude Desktop 완전 재시작
  • 설정 파일 경로 확인
  • JSON 문법 오류 확인

GitHub API 오류

  • Token 권한 확인 (repo 스코프 필요)
  • Rate limit 확인 (시간당 5000회)
  • 네트워크 연결 확인

📝 로그 확인

서버 로그는 github_mcp_server.log 파일에 저장됩니다:

# 실시간 로그 확인 tail -f github_mcp_server.log # 최근 로그 확인 tail -n 50 github_mcp_server.log

🔧 개발 및 확장

개발 환경 설정

# 개발 의존성 설치 pip install -e ".[dev]" # 코드 포맷팅 black src/ # 린트 검사 flake8 src/ # 타입 검사 mypy src/

🔨 새로운 도구 추가하기

  1. GitHubClient에 메서드 추가 (github_client.py):
    def my_new_feature(self, param1: str, param2: int) -> MyModel: """새로운 GitHub 기능 구현""" try: # PyGithub API 호출 result = self.github.some_api_call(param1, param2) return self._convert_to_model(result) except Exception as e: logger.error(f"기능 실행 실패: {str(e)}") raise Exception(f"기능 실행 실패: {str(e)}")
  2. MCP 도구로 등록 (server.py):
    @mcp.tool def my_new_feature(param1: str, param2: int) -> Dict[str, Any]: """새로운 GitHub 기능을 위한 MCP 도구""" if not github_client: raise Exception("GitHub 클라이언트가 초기화되지 않았습니다.") try: result = github_client.my_new_feature(param1, param2) return { "success": True, "message": f"✅ 기능 실행 완료!", "data": result.dict() } except Exception as e: return { "success": False, "message": f"❌ 기능 실행 실패: {str(e)}", "error": str(e) }

🔍 로깅 및 디버깅

  • 로그 레벨 설정: LOG_LEVEL 환경변수 (DEBUG, INFO, WARNING, ERROR)
  • 로그 파일: github_mcp_server.log
  • 실시간 로그 모니터링: tail -f github_mcp_server.log

🧪 테스트 가이드

# 단위 테스트 실행 pytest tests/ # 통합 테스트 (실제 GitHub API 사용) pytest tests/integration/ --github-token=your_token # 커버리지 리포트 pytest --cov=github_mcp_server --cov-report=html # 특정 도구 테스트 pytest tests/test_tools.py::test_create_repository

📊 성능 모니터링

  • Rate Limit 모니터링: GitHub API 응답 헤더 추적
  • 응답 시간 측정: 각 도구의 실행 시간 로깅
  • 메모리 사용량: 대용량 리포지토리 작업 시 모니터링

🚀 배포 및 운영

🐳 Docker 배포

FROM python:3.11-slim WORKDIR /app COPY requirements.txt . RUN pip install -r requirements.txt COPY src/ src/ RUN pip install -e . ENV GITHUB_TOKEN="" CMD ["python", "-m", "github_mcp_server"]

☁️ 클라우드 배포

AWS Lambda
# lambda_handler.py import asyncio from github_mcp_server.server import mcp def lambda_handler(event, context): # MCP over HTTP 구현 return asyncio.run(handle_mcp_request(event))
Google Cloud Functions
# main.py from flask import Flask, request from github_mcp_server.server import mcp app = Flask(__name__) @app.route('/mcp', methods=['POST']) def handle_mcp(): # MCP over HTTP 구현 return process_mcp_request(request.json)

🔐 보안 고려사항

  1. 토큰 관리:
    • 환경변수 또는 비밀 관리 서비스 사용
    • 토큰 로테이션 주기적 수행
    • 최소 권한 원칙 적용
  2. 네트워크 보안:
    • HTTPS 통신 강제
    • IP 화이트리스트 적용 (필요시)
    • VPN 또는 프라이빗 네트워크 사용
  3. 입력 검증:
    • Pydantic을 통한 데이터 검증
    • SQL Injection 등 보안 취약점 방지
    • 파일 경로 검증

📈 모니터링 및 알림

# monitoring.py import logging from prometheus_client import Counter, Histogram, start_http_server # 메트릭 정의 api_calls_total = Counter('github_api_calls_total', 'Total GitHub API calls', ['method', 'status']) api_duration = Histogram('github_api_duration_seconds', 'GitHub API call duration') # 사용 예시 @api_duration.time() def timed_api_call(): # GitHub API 호출 api_calls_total.labels(method='GET', status='success').inc()

🔄 CI/CD 파이프라인

# .github/workflows/ci.yml name: CI/CD Pipeline on: [push, pull_request] jobs: test: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - name: Set up Python uses: actions/setup-python@v4 with: python-version: '3.11' - name: Install dependencies run: | pip install -r requirements.txt pip install -e . - name: Run tests run: pytest env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - name: Deploy to production if: github.ref == 'refs/heads/main' run: | # 배포 스크립트 실행 ./deploy.sh

📄 라이선스

MIT License

🤝 기여

이슈와 풀 리퀘스트를 환영합니다!

📚 추가 리소스

🔗 관련 문서

📖 예시 프로젝트

🎯 사용 사례

  1. 자동화된 릴리즈: PR 머지 시 자동 태그 및 릴리즈 생성
  2. 이슈 관리: 템플릿 기반 이슈 생성 및 라벨링
  3. 코드 리뷰: 자동 리뷰어 할당 및 체크리스트 생성
  4. 프로젝트 관리: 마일스톤 기반 작업 추적

📞 지원 및 커뮤니티

🐛 이슈 신고

💡 기능 요청

🤝 기여 가이드

  1. Fork 후 feature 브랜치 생성
  2. 코드 작성 및 테스트 추가
  3. PR 생성 (템플릿 사용)
  4. 코드 리뷰 및 피드백 반영

💬 커뮤니티


⚠️ 주의사항:

  • 보안: GitHub Personal Access Token을 안전하게 보관하세요
  • 권한: 필요한 최소 권한만 부여하세요 (principle of least privilege)
  • Rate Limit: GitHub API 사용량을 모니터링하세요 (시간당 5,000회)
  • 데이터: 민감한 정보가 로그에 기록되지 않도록 주의하세요
  • 버전: 정기적으로 의존성을 업데이트하세요

🚀 성능 팁:

  • 대량 작업 시 배치 처리 사용
  • 캐싱을 통한 중복 API 호출 방지
  • 비동기 처리로 응답 시간 개선
  • Rate limit에 도달하기 전 미리 대기
-
security - not tested
F
license - not found
-
quality - not tested

remote-capable server

The server can be hosted and run remotely because it primarily relies on remote services or has no dependency on the local environment.

Enables direct GitHub operations through Claude and Cursor, including repository management, branch creation, issue tracking, and pull request management. Provides seamless integration with GitHub API for comprehensive project workflow automation.

  1. 🌟 특징
    1. 🚀 주요 기능
      1. 📁 Repository 관리
      2. 🌿 Branch 관리
      3. 🐛 Issue 관리
      4. 🔀 Pull Request 관리
      5. 📝 파일 관리
      6. 📝 커밋 관리
      7. 👤 사용자 정보
    2. 📋 요구사항
      1. 🛠️ 설치 및 설정
        1. 1. 프로젝트 복제 및 설치
        2. 2. GitHub Token 생성
        3. 3. 환경변수 설정
        4. 4. 서버 테스트
      2. 🔗 Claude Desktop 연동
        1. 1. Claude Desktop 설정 파일 위치
        2. 2. 설정 파일 수정
        3. 3. Claude Desktop 재시작
      3. 📖 사용 방법
        1. 📁 Repository 관리
        2. 🌿 Branch 관리
        3. 🐛 Issue 관리
        4. 🔀 Pull Request 관리
        5. 📝 커밋 및 사용자 정보
      4. 🏗️ 아키텍처 및 구조
        1. 📁 프로젝트 구조
        2. 🔗 주요 구성요소
        3. 📦 데이터 모델
      5. 🛠️ MCP 도구 API 레퍼런스
        1. 📁 Repository 관리
        2. 🌿 Branch 관리
        3. 📝 파일 관리
        4. 🐛 Issue 관리
        5. 🔀 Pull Request 관리
        6. 📝 커밋 관리
        7. 👤 사용자 정보
      6. 🔌 MCP Client 개발 가이드
        1. 🚀 빠른 시작
        2. 📋 응답 형식
        3. 🔧 에러 처리
        4. 📊 Rate Limiting
      7. 🐛 문제 해결
        1. 서버가 시작되지 않는 경우
        2. Claude에서 도구가 보이지 않는 경우
        3. GitHub API 오류
      8. 📝 로그 확인
        1. 🔧 개발 및 확장
          1. 개발 환경 설정
          2. 🔨 새로운 도구 추가하기
          3. 🔍 로깅 및 디버깅
          4. 🧪 테스트 가이드
          5. 📊 성능 모니터링
        2. 🚀 배포 및 운영
          1. 🐳 Docker 배포
          2. ☁️ 클라우드 배포
          3. 🔐 보안 고려사항
          4. 📈 모니터링 및 알림
          5. 🔄 CI/CD 파이프라인
        3. 📄 라이선스
          1. 🤝 기여
            1. 📚 추가 리소스
              1. 🔗 관련 문서
              2. 📖 예시 프로젝트
              3. 🎯 사용 사례
            2. 📞 지원 및 커뮤니티
              1. 🐛 이슈 신고
              2. 💡 기능 요청
              3. 🤝 기여 가이드
              4. 💬 커뮤니티

            MCP directory API

            We provide all the information about MCP servers via our MCP API.

            curl -X GET 'https://glama.ai/api/mcp/v1/servers/HyunjunGil/custom-github-mcp'

            If you have feedback or need assistance with the MCP directory API, please join our Discord server