GitHub MCP 서버
GitHub MCP 서버는 GitHub API와 원활하게 통합되는 MCP(Model Context Protocol) 서버로, 개발자와 도구를 위한 고급 자동화 및 상호 작용 기능을 제공합니다.
사용 사례
- GitHub 워크플로 및 프로세스 자동화.
- GitHub 저장소에서 데이터 추출 및 분석.
- GitHub 생태계와 상호 작용하는 AI 기반 도구와 애플리케이션을 구축합니다.
필수 조건
- 컨테이너에서 서버를 실행하려면 Docker를 설치해야 합니다.
- Docker가 설치되면 Docker가 실행 중인지 확인해야 합니다. 이미지는 공개 상태이므로, pull 시 오류가 발생하면 토큰이 만료되었을 수 있으며
docker logout ghcr.io
실행해야 할 수 있습니다. - 마지막으로 GitHub 개인 액세스 토큰을 생성 해야 합니다. MCP 서버는 다양한 GitHub API를 사용할 수 있으므로 AI 도구에 허용할 수 있는 권한을 활성화하세요(액세스 토큰에 대한 자세한 내용은 관련 문서를 참조하세요).
설치
VS Code를 사용한 사용
빠른 설치를 위해 이 README 파일 상단에 있는 원클릭 설치 버튼 중 하나를 사용하세요. 설치 과정을 완료한 후, Copilot Chat 텍스트 입력란 옆에 있는 Agent 모드를 전환하면 서버가 시작됩니다.
수동 설치의 경우, VS Code의 사용자 설정(JSON) 파일에 다음 JSON 블록을 추가하세요. Ctrl + Shift + P
를 누르고 Preferences: Open User Settings (JSON)
입력하면 됩니다.
지엑스피1
선택적으로, mcp 키 없이 유사한 예제를 작업 공간의 .vscode/mcp.json
파일에 추가할 수 있습니다. 이렇게 하면 다른 사용자와 구성을 공유할 수 있습니다.
VS Code의 에이전트 모드 설명서 에서 MCP 서버 도구를 사용하는 방법에 대해 자세히 알아보세요.
Claude Desktop과 함께 사용
소스에서 빌드
Docker가 없는 경우, go build
사용하여 cmd/github-mcp-server
디렉터리에서 바이너리를 빌드하고, GITHUB_PERSONAL_ACCESS_TOKEN
환경 변수를 토큰으로 설정한 github-mcp-server stdio
명령을 사용할 수 있습니다. 빌드의 출력 위치를 지정하려면 -o
플래그를 사용하세요. 빌드된 실행 파일을 해당 command
으로 사용하도록 서버를 구성해야 합니다. 예:
도구 구성
GitHub MCP 서버는 --toolsets
플래그를 통해 특정 기능 그룹을 활성화 또는 비활성화할 수 있습니다. 이를 통해 AI 도구에서 사용할 수 있는 GitHub API 기능을 제어할 수 있습니다. 필요한 도구 세트만 활성화하면 LLM의 도구 선택에 도���이 되고 컨텍스트 크기를 줄일 수 있습니다.
사용 가능한 도구 세트
다음 도구 세트를 사용할 수 있습니다(모두 기본적으로 활성화되어 있음).
도구 세트 | 설명 |
---|---|
repos | 저장소 관련 도구(파일 작업, 브랜치, 커밋) |
issues | 이슈 관련 도구(생성, 읽기, 업데이트, 댓글 달기) |
users | GitHub 사용자와 관련된 모든 것 |
pull_requests | 풀 리퀘스트 작업(생성, 병합, 검토) |
code_security | 코드 스캐닝 알림 및 보안 기능 |
experiments | 실험적 특징(안정적이지 않은 것으로 간주됨) |
도구 세트 지정
LLM에서 사용할 수 있는 툴셋을 지정하려면 두 가지 방법으로 허용 목록을 전달할 수 있습니다.
- 명령줄 인수 사용 :
- 환경 변수 사용 :
명령줄 인수와 환경 변수 GITHUB_TOOLSETS
모두 제공된 경우 해당 환경 변수가 명령줄 인수보다 우선합니다.
Docker와 함께 툴셋 사용
Docker를 사용하면 도구 세트를 환경 변수로 전달할 수 있습니다.
"모든" 도구 모음
all
사용 가능한 툴셋을 다른 구성에 관계없이 활성화할 수 있는 특수 툴셋이 제공됩니다.
또는 환경 변수를 사용합니다.
동적 도구 검색
참고 : 이 기능은 현재 베타 버전이므로 일부 환경에서는 사용할 수 없습니다. 테스트해 보시고 문제가 발생하면 알려주세요.
모든 도구가 활성화된 상태로 시작하는 대신, 동적 도구 세트 검색을 활성화할 수 있습니다. 동적 도구 세트를 사용하면 MCP 호스트가 사용자 요청에 따라 도구 세트를 나열하고 활성화할 수 있습니다. 이렇게 하면 사용 가능한 도구의 수가 너무 많아 모델이 혼란스러워지는 상황을 방지하는 데 도움이 됩니다.
동적 도구 검색 사용
바이너리를 사용할 때 --dynamic-toolsets
플래그를 전달할 수 있습니다.
Docker를 사용하면 도구 세트를 환경 변수로 전달할 수 있습니다.
GitHub 엔터프라이즈 서버
--gh-host
플래그와 GITHUB_HOST
환경 변수를 사용하여 GitHub Enterprise Server 호스트 이름을 설정할 수 있습니다. 호스트 이름 앞에 https://
URI 스킴을 추가해야 합니다. 그렇지 않으면 GitHub Enterprise Server에서 지원하지 않는 http://
기본으로 설정됩니다.
i18n / 설명 재정의
바이너리와 같은 디렉토리에 github-mcp-server-config.json
파일을 생성하면 도구에 대한 설명을 재정의할 수 있습니다.
파일에는 도구 이름을 키로, 새 설명을 값으로 갖는 JSON 객체가 포함되어야 합니다. 예:
--export-translations
플래그로 바이너리를 실행하면 현재 번역 내용을 내보낼 수 있습니다.
이 플래그는 마지막으로 내보낸 이후 바이너리에 추가된 모든 새 번역을 추가하는 동시에, 이전에 만든 번역/재정의를 보존합니다.
ENV 변수를 사용하여 설명을 재정의할 수도 있습니다. 환경 변수 이름은 JSON 파일의 키와 동일하며, 접두사는 GITHUB_MCP_
이고 모두 대문자입니다.
예를 들어, TOOL_ADD_ISSUE_COMMENT_DESCRIPTION
도구를 재정의하려면 다음 환경 변수를 설정할 수 있습니다.
도구
사용자
- get_me - 인증된 사용자의 세부 정보를 가져옵니다.
- 매개변수가 필요하지 않습니다
문제
- get_issue - 저장소 내의 이슈 내용을 가져옵니다.
owner
: 저장소 소유자(문자열, 필수)repo
: 저장소 이름(문자열, 필수)issue_number
: 이슈 번호(숫자, 필수)
- get_issue_comments - GitHub 이슈에 대한 댓글 받기
owner
: 저장소 소유자(문자열, 필수)repo
: 저장소 이름(문자열, 필수)issue_number
: 이슈 번호(숫자, 필수)
- create_issue - GitHub 저장소에 새 이슈를 만듭니다.
owner
: 저장소 소유자(문자열, 필수)repo
: 저장소 이름(문자열, 필수)title
: 이슈 제목 (문자열, 필수)body
: 문제 본문 내용(문자열, 선택 사항)assignees
: 이 문제에 할당할 사용자 이름(string[], 선택 사항)labels
: 이 문제에 적용할 레이블(문자열[], 선택 사항)
- add_issue_comment - 이슈에 댓글을 추가합니다.
owner
: 저장소 소유자(문자열, 필수)repo
: 저장소 이름(문자열, 필수)issue_number
: 이슈 번호(숫자, 필수)body
: 댓글 텍스트(문자열, 필수)
- list_issues - 저장소 문제 나열 및 필터링
owner
: 저장소 소유자(문자열, 필수)repo
: 저장소 이름(문자열, 필수)state
: 상태별 필터링('열림', '닫힘', '모두')(문자열, 선택 사항)labels
: 필터링할 레이블(문자열[], 선택 사항)sort
: ('생성됨', '업데이트됨', '댓글')로 정렬 (문자열, 선택 사항)direction
: 정렬 방향 ('asc', 'desc') (문자열, 선택 사항)since
: 날짜별 필터링(ISO 8601 타임스탬프)(문자열, 선택 사항)page
: 페이지 번호(번호, 선택 사항)perPage
: 페이지당 결과(개수, 선택 사항)
- update_issue - GitHub 저장소의 기존 이슈를 업데이트합니다.
owner
: 저장소 소유자(문자열, 필수)repo
: 저장소 이름(문자열, 필수)issue_number
: 업데이트할 이슈 번호(숫자, 필수)title
: 새 제목(문자열, 선택 사항)body
: 새로운 설명(문자열, 선택 사항)state
: 새로운 상태('열림' 또는 '닫힘')(문자열, 선택 사항)labels
: 새 레이블(문자열[], 선택 사항)assignees
: 새로운 담당자(string[], 선택 사항)milestone
: 새로운 마일스톤 번호(숫자, 선택 사항)
- search_issues - 이슈 및 풀 리퀘스트 검색
query
: 검색 쿼리(문자열, 필수)sort
: 정렬 필드(문자열, 선택 사항)order
: 정렬 순서(문자열, 선택 사항)page
: 페이지 번호(번호, 선택 사항)perPage
: 페이지당 결과(개수, 선택 사항)
풀 리퀘스트
- get_pull_request - 특정 풀 리퀘스트의 세부 정보를 가져옵니다.
owner
: 저장소 소유자(문자열, 필수)repo
: 저장소 이름(문자열, 필수)pullNumber
: 풀 리퀘스트 번호(숫자, 필수)
- list_pull_requests - 저장소 풀 리퀘스트 나열 및 필터링
owner
: 저장소 소유자(문자열, 필수)repo
: 저장소 이름(문자열, 필수)state
: PR 상태(문자열, 선택 사항)sort
: 정렬 필드(문자열, 선택 사항)direction
: 정렬 방향(문자열, 선택 사항)perPage
: 페이지당 결과(개수, 선택 사항)page
: 페이지 번호(번호, 선택 사항)
- merge_pull_request - 풀 리퀘스트 병합
owner
: 저장소 소유자(문자열, 필수)repo
: 저장소 이름(문자열, 필수)pullNumber
: 풀 리퀘스트 번호(숫자, 필수)commit_title
: 병합 커밋의 제목(문자열, 선택 사항)commit_message
: 병합 커밋에 대한 메시지(문자열, 선택 사항)merge_method
: 병합 방법(문자열, 선택 사항)
- get_pull_request_files - 풀 리퀘스트에서 변경된 파일 목록을 가져옵니다.
owner
: 저장소 소유자(문자열, 필수)repo
: 저장소 이름(문자열, 필수)pullNumber
: 풀 리퀘스트 번호(숫자, 필수)
- get_pull_request_status - 풀 리퀘스트에 대한 모든 상태 확인의 결합된 상태를 가져옵니다.
owner
: 저장소 소유자(문자열, 필수)repo
: 저장소 이름(문자열, 필수)pullNumber
: 풀 리퀘스트 번호(숫자, 필수)
- update_pull_request_branch - 기본 브랜치의 최신 변경 사항으로 풀 리퀘스트 브랜치 업데이트
owner
: 저장소 소유자(문자열, 필수)repo
: 저장소 이름(문자열, 필수)pullNumber
: 풀 리퀘스트 번호(숫자, 필수)expectedHeadSha
: 풀 요청의 HEAD 참조의 예상 SHA(문자열, 선택 사항)
- get_pull_request_comments - 풀 리퀘스트에 대한 리뷰 코멘트를 가져옵니다.
owner
: 저장소 소유자(문자열, 필수)repo
: 저장소 이름(문자열, 필수)pullNumber
: 풀 리퀘스트 번호(숫자, 필수)
- get_pull_request_reviews - 풀 리퀘스트에 대한 리뷰를 받습니다.
owner
: 저장소 소유자(문자열, 필수)repo
: 저장소 이름(문자열, 필수)pullNumber
: 풀 리퀘스트 번호(숫자, 필수)
- create_pull_request_review - 풀 리퀘스트 리뷰에 대한 리뷰 생성
owner
: 저장소 소유자(문자열, 필수)repo
: 저장소 이름(문자열, 필수)pullNumber
: 풀 리퀘스트 번호(숫자, 필수)body
: 리뷰 코멘트 텍스트(문자열, 선택 사항)event
: 검토 작업('APPROVE', 'REQUEST_CHANGES', 'COMMENT')(문자열, 필수)commitId
: 검토할 커밋의 SHA(문자열, 선택 사항)comments
: 풀 리퀘스트 변경 사항에 대한 주석을 배치할 객체의 라인별 주석 배열(배열, 선택 사항)- 인라인 주석의 경우:
path
,position
(또는line
),body
제공합니다. - 다중 줄 주석의 경우:
path
,start_line
,line
, 선택적side
/start_side
및body
제공합니다.
- 인라인 주석의 경우:
- create_pull_request - 새로운 풀 리퀘스트를 생성합니다
owner
: 저장소 소유자(문자열, 필수)repo
: 저장소 이름(문자열, 필수)title
: PR 제목(문자열, 필수)body
: PR 설명(문자열, 선택 사항)head
: 변경 사항을 포함하는 브랜치(문자열, 필수)base
: 병합할 브랜치(문자열, 필수)draft
: PR을 초안으로 생성합니다(부울, 선택 사항)maintainer_can_modify
: 유지 관리자 편집 허용(부울, 선택 사항)
- add_pull_request_review_comment - 풀 리퀘스트에 리뷰 코멘트를 추가하거나 기존 코멘트에 답변합니다.
owner
: 저장소 소유자(문자열, 필수)repo
: 저장소 이름(문자열, 필수)pull_number
: 풀 리퀘스트 번호(숫자, 필수)body
: 리뷰 코멘트의 텍스트(문자열, 필수)commit_id
: 댓글을 달 커밋의 SHA(문자열, in_reply_to를 사용하지 않는 한 필수)path
: 주석이 필요한 파일의 상대 경로(문자열, in_reply_to를 사용하지 않는 한 필수)line
: 풀 리퀘스트 diff에서 주석이 적용되는 blob의 줄(숫자, 선택 사항)side
: 주석을 달 diff의 측면(LEFT 또는 RIGHT)(문자열, 선택 사항)start_line
: 여러 줄 주석의 경우 범위의 첫 번째 줄(숫자, 선택 사항)start_side
: 여러 줄 주석의 경우 diff의 시작 측면(LEFT 또는 RIGHT)(문자열, 선택 사항)subject_type
: 주석이 타겟으로 삼는 수준(줄 또는 파일)(문자열, 선택 사항)in_reply_to
: 답글을 달 리뷰 댓글의 ID(숫자, 선택 사항). 지정된 경우 본문만 필요하며 다른 매개변수는 무시됩니다.
- update_pull_request - GitHub 저장소의 기존 풀 리퀘스트 업데이트
owner
: 저장소 소유자(문자열, 필수)repo
: 저장소 이름(문자열, 필수)pullNumber
: 업데이트할 풀 리퀘스트 번호(숫자, 필수)title
: 새 제목(문자열, 선택 사항)body
: 새로운 설명(문자열, 선택 사항)state
: 새로운 상태('열림' 또는 '닫힘')(문자열, 선택 사항)base
: 새로운 기본 브랜치 이름(문자열, 선택 사항)maintainer_can_modify
: 유지 관리자 편집 허용(부울, 선택 사항)
- request_copilot_review - 풀 리퀘스트에 대한 GitHub Copilot 검토 요청(실험적, GitHub API 지원에 따라)
owner
: 저장소 소유자(문자열, 필수)repo
: 저장소 이름(문자열, 필수)pullNumber
: 풀 리퀘스트 번호(숫자, 필수)- 참고 : 현재 이 도구는 github.com에서만 작동합니다.
저장소
- create_or_update_file - 저장소에서 단일 파일을 생성하거나 업데이트합니다.
owner
: 저장소 소유자(문자열, 필수)repo
: 저장소 이름(문자열, 필수)path
: 파일 경로(문자열, 필수)message
: 커밋 메시지(문자열, 필수)content
: 파일 내용(문자열, 필수)branch
: 지점 이름(문자열, 선택 사항)sha
: 업데이트 시 파일 SHA(문자열, 선택 사항)
- list_branches - GitHub 저장소의 브랜치 나열
owner
: 저장소 소유자(문자열, 필수)repo
: 저장소 이름(문자열, 필수)page
: 페이지 번호(번호, 선택 사항)perPage
: 페이지당 결과(개수, 선택 사항)
- push_files - 단일 커밋에 여러 파일 푸시
owner
: 저장소 소유자(문자열, 필수)repo
: 저장소 이름(문자열, 필수)branch
: 푸시할 브랜치(문자열, 필수)files
: 푸시할 파일, 각각 경로와 콘텐츠 포함(배열, 필수)message
: 커밋 메시지(문자열, 필수)
- search_repositories - GitHub 저장소 검색
query
: 검색 쿼리(문자열, 필수)sort
: 정렬 필드(문자열, 선택 사항)order
: 정렬 순서(문자열, 선택 사항)page
: 페이지 번호(번호, 선택 사항)perPage
: 페이지당 결과(개수, 선택 사항)
- create_repository - 새로운 GitHub 저장소를 만듭니다.
name
: 저장소 이름(문자열, 필수)description
: 저장소 설명(문자열, 선택 사항)private
: 저장소가 비공개인지 여부(부울, 선택 사항)autoInit
: README로 자동 초기화(부울, 선택 사항)
- get_file_contents - 파일이나 디렉토리의 내용을 가져옵니다
owner
: 저장소 소유자(문자열, 필수)repo
: 저장소 이름(문자열, 필수)path
: 파일 경로(문자열, 필수)ref
: Git 참조(문자열, 선택 사항)
- fork_repository - 저장소 포크
owner
: 저장소 소유자(문자열, 필수)repo
: 저장소 이름(문자열, 필수)organization
: 대상 조직 이름(문자열, 선택 사항)
- create_branch - 새로운 브랜치를 생성합니다
owner
: 저장소 소유자(문자열, 필수)repo
: 저장소 이름(문자열, 필수)branch
: 새로운 브랜치 이름(문자열, 필수)sha
: 브랜치를 생성할 SHA(문자열, 필수)
- list_commits - 저장소의 브랜치 커밋 목록을 가져옵니다.
owner
: 저장소 소유자(문자열, 필수)repo
: 저장소 이름(문자열, 필수)sha
: 브랜치 이름, 태그 또는 커밋 SHA(문자열, 선택 사항)path
: 이 파일 경로를 포함하는 커밋만(문자열, 선택 사항)page
: 페이지 번호(번호, 선택 사항)perPage
: 페이지당 결과(개수, 선택 사항)
- get_commit - 저장소에서 커밋에 대한 세부 정보를 가져옵니다.
owner
: 저장소 소유자(문자열, 필수)repo
: 저장소 이름(문자열, 필수)sha
: 커밋 SHA, 브랜치 이름 또는 태그 이름(문자열, 필수)page
: 커밋에 있는 파일의 페이지 번호(번호, 선택 사항)perPage
: 커밋에 있는 파일에 대한 페이지당 결과(숫자, 선택 사항)
- search_code - GitHub 저장소에서 코드 검색
query
: 검색 쿼리(문자열, 필수)sort
: 정렬 필드(문자열, 선택 사항)order
: 정렬 순서(문자열, 선택 사항)page
: 페이지 번호(번호, 선택 사항)perPage
: 페이지당 결과(개수, 선택 사항)
사용자
- search_users - GitHub 사용자 검색
q
: 검색 쿼리(문자열, 필수)sort
: 정렬 필드(문자열, 선택 사항)order
: 정렬 순서(문자열, 선택 사항)page
: 페이지 번호(번호, 선택 사항)perPage
: 페이지당 결과(개수, 선택 사항)
코드 스캐닝
- get_code_scanning_alert - 코드 스캐닝 알림 받기
owner
: 저장소 소유자(문자열, 필수)repo
: 저장소 이름(문자열, 필수)alertNumber
: 알림 번호(숫자, 필수)
- list_code_scanning_alerts - 저장소에 대한 코드 스캐닝 알림 목록
owner
: 저장소 소유자(문자열, 필수)repo
: 저장소 이름(문자열, 필수)ref
: Git 참조(문자열, 선택 사항)state
: 경고 상태(문자열, 선택 사항)severity
: 경고 심각도(문자열, 선택 사항)tool_name
: 코드 스캐닝에 사용되는 도구의 이름(문자열, 선택 사항)
비밀 스캐닝
- get_secret_scanning_alert - 비밀 스캐닝 알림 받기
owner
: 저장소 소유자(문자열, 필수)repo
: 저장소 이름(문자열, 필수)alertNumber
: 알림 번호(숫자, 필수)
- list_secret_scanning_alerts - 저장소에 대한 비밀 스캐닝 알림 나열
owner
: 저장소 소유자(문자열, 필수)repo
: 저장소 이름(문자열, 필수)state
: 경고 상태(문자열, 선택 사항)secret_type
: 쉼표로 구분된 목록(문자열, 선택 사항)에서 필터링할 비밀 유형resolution
: 해상도 상태(문자열, 선택 사항)
자원
저장소 콘텐츠
- 저장소 콘텐츠 가져오기 특정 경로에 있는 저장소의 콘텐츠를 검색합니다.
- 템플릿 :
repo://{owner}/{repo}/contents{/path*}
- 매개변수 :
owner
: 저장소 소유자(문자열, 필수)repo
: 저장소 이름(문자열, 필수)path
: 파일 또는 디렉토리 경로(문자열, 선택 사항)
- 템플릿 :
- 특정 브랜치의 저장소 콘텐츠 가져오기 특정 경로에 있는 저장소의 콘텐츠를 주어진 브랜치에서 검색합니다.
- 템플릿 :
repo://{owner}/{repo}/refs/heads/{branch}/contents{/path*}
- 매개변수 :
owner
: 저장소 소유자(문자열, 필수)repo
: 저장소 이름(문자열, 필수)branch
: 지점 이름(문자열, 필수)path
: 파일 또는 디렉토리 경로(문자열, 선택 사항)
- 템플릿 :
- 특정 커밋에 대한 저장소 콘텐츠 가져오기 주어진 커밋에 대한 특정 경로의 저장소 콘텐츠를 검색합니다.
- 템플릿 :
repo://{owner}/{repo}/sha/{sha}/contents{/path*}
- 매개변수 :
owner
: 저장소 소유자(문자열, 필수)repo
: 저장소 이름(문자열, 필수)sha
: 커밋 SHA(문자열, 필수)path
: 파일 또는 디렉토리 경로(문자열, 선택 사항)
- 템플릿 :
- 특정 태그에 대한 저장소 콘텐츠 가져오기 주어진 태그에 대한 특정 경로의 저장소 콘텐츠를 검색합니다.
- 템플릿 :
repo://{owner}/{repo}/refs/tags/{tag}/contents{/path*}
- 매개변수 :
owner
: 저장소 소유자(문자열, 필수)repo
: 저장소 이름(문자열, 필수)tag
: 태그 이름(문자열, 필수)path
: 파일 또는 디렉토리 경로(문자열, 선택 사항)
- 템플릿 :
- 특정 풀 리퀘스트에 대한 저장소 콘텐츠 가져오기 주어진 풀 리퀘스트에 대한 특정 경로의 저장소 콘텐츠를 검색합니다.
- 템플릿 :
repo://{owner}/{repo}/refs/pull/{prNumber}/head/contents{/path*}
- 매개변수 :
owner
: 저장소 소유자(문자열, 필수)repo
: 저장소 이름(문자열, 필수)prNumber
: 풀 리퀘스트 번호(문자열, 필수)path
: 파일 또는 디렉토리 경로(문자열, 선택 사항)
- 템플릿 :
도서관 이용
이 모듈의 내보낸 Go API는 현재 불안정하며, 호환성이 손상될 수 있습니다. 향후 안정성을 제공할 수 있습니다. 이 기능이 유용할 수 있는 사용 사례가 있으면 문제를 제기해 주세요.
특허
이 프로젝트는 MIT 오픈 소스 라이선스 조건에 따라 라이선스가 부여됩니다. 전체 조건은 MIT 를 참조하세요.
This server cannot be installed
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.
마 루이유
Related MCP Servers
- PythonMIT License
- PythonGPL 3.0
- GoMIT License
- JavaScriptMIT License