GitHub MCP Server
GitHub MCP Server
AI 어시스턴트가 안전하고 구조화된 도구를 사용해 GitHub와 대화할 수 있게 해주는 프로젝트입니다.
쉽게 말하면, AI가 GitHub의 작동 방식을 추측하는 대신 이 프로젝트에 "내 저장소 목록 보기", "열린 이슈 표시", "파일 읽기" 같은 명확한 동작 메뉴를 제공하는 것입니다. AI가 올바른 동작을 고르면 이 서버가 GitHub와 통신하고, 그 응답은 AI가 이해할 수 있는 깔끔한 형식으로 돌아옵니다.
어떤 문제를 해결하나요?
챗봇은 언어를 잘 다루지만 여러분의 GitHub 계정에 실시간으로 접근할 수 있는 것은 아닙니다.
이 프로젝트는 다리(bridge) 역할을 만듭니다:
여러분이 평범한 영어로 질문합니다 ("Show open issues in microsoft/vscode").
AI 모델(Groq)이 어떤 GitHub 도구를 사용할지 결정합니다.
MCP 서버가 그 도구를 실제 GitHub API에 대해 실행합니다.
결과는 정리(정규화)되어 AI에게 반환됩니다.
AI가 결과를 쉬운 말로 여러분에게 설명합니다.
MCP는 Model Context Protocol의 약자입니다. 표준 플러그라고 생각하면 됩니다. 호환되는 AI 클라이언트는 모두 이 서버에 연결하여 도구를 사용할 수 있습니다.
Related MCP server: GitHub MCP Server
큰 그림(아키텍처)
You
↓
AI Agent (client/agent.py) ← talks to Groq LLM
↓
MCP Server (notebooks/server.py) ← menu of GitHub tools
↓
GitHub Client ← HTTP calls with your token
↓
GitHub REST API
↓
GitHub설계 규칙(중요)
도구는 얇게(thin) 유지합니다:
입력을 확인합니다(저장소 이름이 유효한가?).
GitHub 클라이언트를 호출합니다.
응답을 안정적인 형태로 정규화합니다.
정리된 데이터를 에이전트에게 반환합니다.
GitHub의 복잡한 세부 사항은 모두 클라이언트 계층 안에 남습니다 — 도구들에 흩어지지 않습니다.
프로젝트 폴더(각 부분의 역할)
경로 | 역할 |
| 메인 MCP 서버 — 에이전트가 실행하는 프로덕션 진입점 |
| 에이전트를 위한 안정적인 데이터 형태(Pydantic 모델) |
| 원시 GitHub JSON → 안정적인 형태로 변환 |
| 위험한 도구에 대한 확인 / dry-run / 허용 목록 |
| 목록 도구용 페이지 헬퍼( |
| stderr에 JSON으로 기록(절대 비밀 정보를 출력하지 않습니다) |
| 예전/실험용 사본 — |
| 학습용 노트북(서버가 어떻게 단계별로 만들어졌는지) |
| stdio로 MCP 서버에 연결되는 채팅 에이전트 |
| AI가 예시 프롬프트에 대해 올바른 도구를 고르는지 확인 |
| 여러분의 개인 키(이 파일은 절대 커밋하지 마세요) |
| 필요한 키가 무엇인지 보여주는 템플릿 |
| 설치할 Python 패키지 목록 |
| 비전문가를 위한 단계별 설정 안내 |
도구로 무엇을 할 수 있나요?
서버는 다양한 GitHub 작업을 제공합니다. 간단히 분류하면:
읽기(살펴봐도 안전)
저장소 목록 확인
저장소 세부 정보 확인
이슈 및 풀 러퀘스트 목록/조회
PR diff 열람
브랜치, 커밋, 라벨 목록
저장소 안의 코드 검색에서도 할 수 있습니다. 스타일 코드. 문자열을 번역하지 않습니다.?
저장소에서 코드 검색
파일 내용 읽기
GitHub Actions 워크플로우 실행 목록
쓰기(GitHub를 변경)
이슈, 댓글, PR, 브랜치, 라벨 만들기
이슈 수정, 라벨 추가/제거
이슈 다시 열기
파괴적 작업(문제를 일으킬 가능성 — 보호 대상)
다음 목록은 기본적으로 확인을 추가로 필요로 합니다:
merge_pull_requestdelete_filecreate_repositorycreate_or_update_fileclose_issue
이 작업들에 대해 에이전트는 일반적으로 다음 절차를 따릅니다:
dry_run=true로 호출 → 미리보기만confirm=true로 다시 호출 → 실제로 수행
이 규칙은 환경 설정에서 합치거나 완화할 수 있습니다(아래 참조).
정규화된 응답(에이전트가 좋아하는 이유)
원본 GitHub 응답은 크기가 크고 자주 바뀌기 때문에 이 프로젝트는 안정적인 형태를 반환합니다.
목록 도구는 항상 다음과 같은 형태입니다:
{
"count": 20,
"items": [ ... ],
"page": 1,
"per_page": 20,
"has_next": true,
"has_prev": false,
"next_page": 2,
"prev_page": null,
"last_page": 5
}다음 페이지를 보려면 같은 도구를 page=2(또는 page=next_page)로 다시 호출하세요.
이슈 예시:
{
"number": 42,
"title": "Bug in login",
"state": "open",
"author": "some-user",
"labels": ["bug"],
"comments": 3,
"html_url": "https://github.com/...",
"is_pull_request": false
}또한 get_issues는 풀 러퀘스트를 걸러 (GitHub 이슈 API가 섞여 있기 때문에).
안전 기능
기능 | 의미 |
| 파괴적 도구를 실행하는 데 필요(기본 모드) |
| 어떤 일이 일어날지만 보여줌; GitHub는 변경하지 않습니다 |
| 클라이언트가 위험한 도구라는 것을 알게 하는 MCP 주석 |
Allowlist | 허용할 파괴적 도구를 지정하는 선택 목록 |
Mode |
|
선택 환경 변수:
GITHUB_MCP_DESTRUCTIVE_MODE=confirm
GITHUB_MCP_DESTRUCTIVE_ALLOWLIST=merge_pull_request,delete_file로깅(디버깅용)
서버는 JSON 로그를 stderr에만 씁니다.
왜 stderr인가요? MCP가 프로토콜에 stdout을 사용하기 때문입니다. 거기 로그를 지웠더라면 AI 연결이 끊어집니다.
로그에는 다음이 포함됩니다:
요청 메서드와 경로
HTTP 상태
걸린 시간
남은 rate-limit
로그에는 절대 넣지 않는 것:
GitHub 토큰
Authorization 헤더
비밀 정보처럼 보이는 값(PAT, Bearer 토큰 등)
로그 예시:
{"ts":"2026-08-23T12:00:00+00:00","level":"INFO","event":"github_request","method":"GET","path":"/repos/microsoft/vscode/issues","status_code":200,"duration_ms":120.5}AI 에이전트 (client/agent.py)
에이전트는:
MCP 서버를 하위 프로세스로 시작(
notebooks/server.py).서버에서 도구 목록을 요청.
여러분의 질문 + 도구를 Groq에 보내기.
Groq가 도구를 원하면 에이전트가 MCP를 통해 그 도구를 호출.
최종 답변을 위해 도구 결과를 다시 Groq에 보내기.
유용한 명령(프로젝트 폴더에서, 가상 온실 켠 상태):
# See all registered tools
python client/agent.py --list-tools
# Only show which tool the AI would pick (no GitHub write)
python client/agent.py --dry-run "list my github repos"
# One real question, then exit
python client/agent.py --once "show open issues for microsoft/vscode"
# Interactive chat
python client/agent.py
# Check tool-picking quality on many sample prompts
python client/test_tool_picking.py루프 제한(선택사항):
python client/agent.py --max-rounds 5 --once "..."또는 .env에서:
AGENT_MAX_TOOL_ROUNDS=8
AGENT_MAX_TOOL_CALLS=16
AGENT_MAX_CONSECUTIVE_ERRORS=3환경 변수
MCP 서버에 필요한 변수
변수 | 설명 |
| 서버가 GitHub를 호출할 수 있게 하는 개인 접근 토큰 |
| GitHub 사용자 이름(시작 시 검증에 사용) |
| 테스트에 사용할 기본 저장소(시작 시 검증) |
에이전트에 필요한 변수(챗 / 도구 선택)
변수 | 용도 |
| Groq(LLM)용 API 키 |
선택사항
변수 | 용도 |
| 기본: |
|
|
| 파괴적 도구 이름을 콤마로 구분한 목록 |
| 사용자 메시지당 최대 툴 실행 라운드 수 |
| 사용자 메시지당 최대 툴 호출 수 |
| 연속 N번 실패하면 중단 |
.env.example → .env로 복사하고 실제 값을 채우세요. 자세한 절차는 SETUP.md를 참고하세요.
기술 스택(궁금한 분들을 위한)
Python 3.13+ (프로젝트는 3.13에서 개발됨)
MCP(
mcp) — Python 패캐지, 도구 서버 프로토콜httpx — GitHub용 HTTP 클라이언트
Pydantic — 스키마/검증
python-dotenv —
.env파일 로드OpenAI 호환 클라이언트 → 에이전트에서 Groq 사용
Jupyter (선택) — 학습용 노트북
설치 및 실행 방법
친절한 안내서를 따라 하세요:
👉 SETUP.md — Python 설치, 키 생성, .env 설정, 첫 명령 실행하기
짧은 버전(Python을 이미 안다면):
cd "path\to\Github-MCP-server"
python -m venv .venv
.\.venv\Scripts\Activate.ps1
pip install -r requirements.txt
copy .env.example .env
# edit .env with your tokens
python client/agent.py --list-tools
python client/agent.py --once "list my github repos"학습 경로(권장)
이 README를 읽습니다(지금 여기).
SETUP.md를
--list-tools가 동작할 때까지 수행.아키텍처 HLD+LLD 흐름: docs/ARCHITECTURE_HLD_LLD.md
간단한 읽기 전용 질문으로
--dry-run과--once시험.50개 시나리오 수동 테스트 플랜 실행: tests/MANUAL_TESTING_50_SCENARIOS.md
자동 도구 선택:
python client/run_manual_scenarios.py
notebooks/01_github_mcp_server.ipynb파일인 디렉터리 별로 어떻게 만들어졌는지 확인.가능하다면
dry_run + confirm절차로 쓰기/파괴 도구를 시도.
문제 해결(요약)
문제 | 해결 방법 |
|
|
그루크 모델 404 |
|
환경 변수 누락 |
|
파괴적 도구가 차단됨 | 기본 작동 — |
Windows에서 에이전트가 종료안됨 | 알려진 stdio 문제임 / 원샷 명령은 끝나면 강제 종료됨 |
보안 안내
.env는 절대 커밋하지 마세요.GitHub 또는 Groq 토큰은 채팅, 스크린샷, GitHub 이슈에 절대 올리지 마세요.
필요한 범위만 가진 GitHub 토큰을 사용하세요.
환경이 완전히 신뢰할 수 없다면
GITHUB_MCP_DESTRUCTIVE_MODE=confirm(또는deny)를 유지하세요.
이전 실험에서
server_1.py가 토큰을 출력했다면 해당 디버그 출력을 공유하지 마세요 —server.py를 사용하세요.
라이선스 / 소유
GitHub MCP 서버와 에이전트에 관한 개인 / 학습용 Gen-AI 프로젝트입니다. 공개 배포하기 전에 사용에 맞게 소유권과 라이선스를 조정하세요.
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- AlicenseNot gradedqualityBmaintenanceEnables AI agents to manage GitHub repositories, branches, issues, pull requests, releases, and actions through natural language.1155MIT
- FlicenseNot gradedqualityBmaintenanceEnables AI assistants to perform GitHub operations such as creating repositories, issues, pull requests, and more through natural language.
- FlicenseBqualityDmaintenanceEnables AI assistants to inspect local Git repositories and interact with the GitHub API for reading commits, diffs, files, issues, comments, pull requests, and project boards.10121
- FlicenseBqualityCmaintenanceEnables AI clients to interact with GitHub repositories, issues, pull requests, and code search through the GitHub REST API.12
Related MCP Connectors
Connect AI assistants to GitHub - manage repos, issues, PRs, and workflows through natural language.
Connect AI assistants to your GitHub-hosted Obsidian vault to seamlessly access, search, and analy…
Git-backed platform for skills, tools, and context for AI agents
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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/Arnab1999india/github-mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server