GitHub MCP Server 핵심 기능

조현상·2025년 5월 4일

mcp

목록 보기
3/3
post-thumbnail

글 목표 

GitHub MCP Server가 제공하는 각 툴(명령) 을 내 것으로 만들자

1. Github MCP 연결하기

아래 코드는 LangChain MCP 어댑터를 통해 GitHub MCP Server와 연결한 뒤, 서버가 제공하는 모든 툴 목록을 가져오는 예시입니다. 각 구성 요소가 어떤 역할을 하는지 한 줄씩 상세히 설명드리겠습니다.

from langchain_mcp_adapters.client import MultiServerMCPClient

async with MultiServerMCPClient({
    "github": {                         # 서버 식별자
        "command": "docker",            # MCP 서버를 도커로 즉시 기동
        "args": ["run","-i","--rm",
                 "-e","GITHUB_PERSONAL_ACCESS_TOKEN",
                 "ghcr.io/github/github-mcp-server"],
        "env": {"GITHUB_PERSONAL_ACCESS_TOKEN": "<PAT>"},
        "transport": "stdio"
    }
}) as client:
    tools = {t.name: t for t in client.get_tools()}  # 오늘 사용할 Github MCP 도구들

MCP 어댑터

항목설명
MultiServerMCPClient여러 MCP 서버(github, jira, slack 등)를 한 번에 다룰 수 있는 어댑터입니다. async with 블록이 열리면 내부적으로 서버와 연결을 맺고, 블록을 벗어나면 연결을 정리합니다.

MCP 서버 실행 방식

의미
command"docker"MCP 서버를 도커 컨테이너로 실행하겠다는 뜻입니다.
args["run", "-i", "--rm", ...]실제로 실행할 docker run … 인자 목록입니다. CLI 형식을 배열로 그대로 넣어 주시면 됩니다.
env{"GITHUB_PERSONAL_ACCESS_TOKEN": "<PAT>"}컨테이너 안에 환경 변수로 전파할 값입니다. 여기서는 GitHub API 인증용 Personal Access Token(PAT)을 넘깁니다.
transport"stdio"MCP 서버와 표준 입출력(stdin/stdout) 으로 통신하겠다는 설정입니다. (다른 옵션: sse, websocket 등)

 툴 목록 가져오기

tools = {t.name: t for t in client.get_tools()}

client.get_tools() 는 현재 활성화된 MCP 툴 객체 리스트를 반환합니다.

2. branch 생성 도구

파라미터타입필수설명
ownerstr저장소 소유자
repostr저장소 이름
branchstr새 브랜치 이름
from_branchstr기준 브랜치 (default_branch 기본)
await tools["create_branch"].ainvoke({
    "owner": "my‑org",
    "repo":  "demo",
    "branch": "feat/auto‑docs",
    "from_branch": "main"
})

3. 파일 push 도구

파라미터타입필수설명
filesList[dict]{path, content, encoding?}
messagestr커밋 메시지
branchstr대상 브랜치(이미 존재해야 함)
files = [
    {"path": "src/app.py", "content": "print('hi')"},
    {"path": "img/logo.png",
     "content": base64.b64encode(open("logo.png","rb").read()).decode(),
     "encoding": "base64"}
]
await tools["push_files"].ainvoke({
    "owner": "my‑org", "repo": "demo",
    "branch": "feat/auto‑docs",
    "files": files,
    "message": "chore: initial commit via MCP"
})

4. PR 생성 도구

#필드타입필수상세 설명
1ownerstr저장소 소유자 (개인 계정 ID 또는 Organization 이름)
2repostr저장소 이름
3titlestrPR 제목. Conventional Commit(feat: fix: …) 활용 추천
4bodystrPR 본문 (Markdown). 이미지 첨부는 ![](url) 로 가능
5headstr내 브랜치
owner:branch 형식도 지원 (포크 간 PR)
6basestr병합 대상 브랜치. 보통 main·dev
7draftboolTrue → 초안(Draft) PR 로 열림
  리뷰 전 수정·CI 점검용
await tools["create_pull_request"].ainvoke({
    "owner": "my‑org",          
    "repo":  "demo",            
    "title": "feat: auto docs", 
    "body":  "MCP generated docs", 
    "head":  "feat/auto‑docs",  
    "base":  "main",            
    "draft": False              
})

GitHub REST POST /repos/{owner}/{repo}/pulls 와 1:1 대응하므로,
GitHub API 문서에 있는 파라미터(maintainer_can_modify, issue 등)도 동일하게 전달 가능합니다.

샘플 코드 보러 가기

profile
꿈꾸는 개발자

0개의 댓글