목차
MCP란 무엇인가
최근에 AI 코딩 툴을 사용하면서 MCP라는 단어를 자주 접하게 되었습니다. MCP는 Model Context Protocol의 약자입니다. 마지막에 프로토콜이 붙은 것을 보면 프로토콜의 한 종류임을 알 수 있습니다. 프로토콜은 기기 간 데이터를 원활하게 주고받기 위해 정의된 통신 규약 및 약속입니다. 즉, MCP는 AI가 외부 시스템과 데이터를 주고받기 위해 사용하는 통신 규약입니다. MCP가 무엇인지, 그리고 MCP 동작 방식에 대해 알아보겠습니다.
프로토콜이 작동하려면 데이터를 주고받을 기기가 있어야 하는데, 요청하는 쪽이 Client가 되고 요청에 대한 응답을 주는 쪽이 Server가 됩니다. 잘 알려진 프로토콜 중 하나인 HTTP를 볼까요? 우리 PC에서 실행한 브라우저가 HTTP 클라이언트가 되고, 웹사이트를 제공하는 서버가 HTTP 서버가 됩니다. URL을 입력하면 브라우저가 HTTP 서버에게 요청을 보내서 응답을 받아 데이터를 표시해주게 되죠.

그렇다면 AI에게는 왜 별도의 프로토콜이 필요할까요? 기본적으로 AI는 학습된 데이터를 바탕으로 대화를 나누는 것만 가능합니다. 마치 방대한 도서관 안에 갇혀 책만 읽을 수 있는 사람과 같습니다. 실시간 정보를 검색하거나, 깃허브에서 코드를 가져오거나, 슬랙에 메시지를 보내는 것은 원래 불가능합니다. MCP는 이 AI에게 외부 세계와 소통할 수 있는 전화기를 쥐여주는 것과 같습니다.
MCP는 AI 도구가 외부 시스템과 데이터를 주고받을 수 있게 하기 위해서 만들어진 프로토콜입니다. MCP에서 클라이언트 역할을 하는 것은 Claude Code와 같은 AI 도구이고, Github, Slack 등 외부 시스템이 MCP 서버를 사이에 두고 데이터를 주고 받습니다. (Claude 모델 자체는 클라이언트가 아닙니다. 이 부분은 뒤에서 더 자세히 설명하겠습니다.)

MCP 서버와 연결하면 AI가 할 수 있는 일이 크게 확장됩니다. GitHub MCP 서버를 연결하면 PR 생성과 이슈 조회가 가능해지고, Slack MCP 서버를 연결하면 메시지 전송과 채널 조회가 가능해집니다. PostgreSQL MCP 서버를 연결하면 SQL 쿼리를 직접 실행할 수도 있습니다.
MCP는 어떤 규격인가
MCP가 단순히 “연결해주는 것”이 아니라 표준 규격이라는 점이 중요합니다. USB를 생각해보면 이해가 쉽습니다. USB 이전에는 기기마다 다른 케이블이 필요했고 제조사마다 드라이버를 따로 개발해야 했습니다. USB 이후에는 규격만 맞추면 어떤 기기든 꽂으면 작동합니다. MCP도 마찬가지입니다. MCP 이전에는 AI마다 다른 방식으로 외부 툴을 연동해야 했지만, MCP 이후에는 규격만 맞추면 어떤 AI든 어떤 외부 서비스든 연결이 가능합니다.
MCP는 기술적으로 JSON-RPC 2.0을 기반으로 합니다. JSON-RPC는 JSON 형태로 요청과 응답을 주고받는 원격 호출 방식입니다. 이 형식을 따르면 누구든 MCP 서버를 만들 수 있고, AI 도구들이 그것을 동일한 방식으로 사용할 수 있습니다. Anthropic이 2024년에 오픈소스로 공개했고, 현재는 OpenAI와 Google 등 다른 AI들도 채택하는 방향으로 가고 있어 사실상 AI 툴 연동의 업계 표준이 되어가고 있습니다.
실제로 어떻게 작동하는가
MCP 동작 원리 – PR 리뷰 예시
이제 실제 MCP 동작에 대해 알아보겠습니다. GitHub MCP 서버와 연결된 클로드 코드에게 “#1004 PR 리뷰해줘”라고 요청하면 어떤 일이 벌어질까요?
이 흐름을 이해하려면 “Claude”와 “Claude Code”는 전혀 다른 존재라는 사실을 알아야 합니다.
Claude(모델)은 Anthropic 서버에서 실행되는 AI 언어 모델입니다. 텍스트를 입력 받아 텍스트를 출력하는 것이 전부이며, 파일에 접근하거나 네트워크 요청을 직접 보내는 것은 불가능합니다. 그리고 Claude Code(CLI)는 사용자 PC에서 실행되는 Node.js 프로그램입니다. 파일 읽기/쓰기, 네트워크 요청, 외부 프로세스 실행이 모두 가능합니다. Claude가 두뇌라면 Claude Code는 그 두뇌의 지시를 받아 실제로 행동하는 손과 발에 해당합니다.
참고로, Claude Code가 내 PC의 파일을 읽고 수정하는 것은 MCP와는 별개입니다. 파일 접근은 Claude Code에 기본으로 내장된 도구(Read, Write, Bash 등)로 처리되며, MCP는 GitHub나 Slack처럼 외부 서비스와 연결할 때 사용됩니다.
MCP 동작 방식을 이해하기 위해 그다음으로 알아야 할 것은 MCP 서버가 자신이 제공하는 도구 목록과 각 도구의 설명을 미리 전달한다는 점입니다. Claude Code가 시작될 때 등록된 MCP 서버에 “어떤 도구를 쓸 수 있어?”라고 묻고, 서버는 도구 목록과 각 설명을 응답합니다. Claude Code는 이것을 Claude(모델)의 컨텍스트에 포함시킵니다. 예를 들면 다음과 같은 형태로 전달됩니다.
사용 가능한 도구:
- get_pull_request(owner, repo, pull_number): GitHub PR 정보를 가져옵니다
- get_pull_request_files(owner, repo, pull_number): PR의 변경 파일 목록을 가져옵니다
- create_pull_request_review(...): PR에 리뷰를 작성합니다
여기서 각 도구의 설명(description)이 매우 중요합니다. Claude(모델)는 이 설명 텍스트를 보고 어떤 상황에 어떤 도구를 써야 할지 스스로 판단하기 때문입니다. 도구 설명이 명확할수록 Claude가 올바른 도구를 더 정확하게 선택하게 됩니다. 결국 MCP 서버를 만드는 개발자가 설명을 얼마나 잘 작성하느냐가 AI의 도구 선택 정확도에 직결됩니다.
이 상태에서 “#1004 PR 리뷰해줘”라는 요청이 들어오면, Claude(모델)는 이렇게 추론합니다. “이 질문에 답하려면 PR의 실제 코드 변경 내용이 필요하다. 그 정보는 내 학습 데이터에 없다. 도구 목록을 보니 get_pull_request_files가 그걸 줄 수 있다. 이 도구를 호출해야겠다.”
Claude(모델)는 도구를 호출하겠다는 신호를 텍스트로 출력합니다. 그러면 Claude Code(CLI)가 그 신호를 받아 MCP 서버에 아래와 같은 JSON을 전송합니다.
{
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"name": "get_pull_request_files",
"arguments": {
"owner": "my-org",
"repo": "my-repo",
"pull_number": 1004
}
},
"id": 1
}
이후 응답은 요청의 역순으로 돌아옵니다. 전체 흐름을 정리하면 다음과 같습니다.

사용자 눈에는 질문하고 답변을 받는 것처럼 보이지만, 그 사이에 Claude ↔ Claude Code ↔ MCP 서버 ↔ GitHub API 왕복이 보이지 않는 곳에서 여러 번 일어나고 있는 것입니다.
빌트인 도구 vs MCP 도구
AI 도구가 외부와 연동하는 방식이 MCP만 있는 것은 아닙니다.
예를 들어 Claude(claude.ai)에게 최신 뉴스를 물어보면 MCP 서버를 연결하지 않아도 웹 검색 결과를 가져다 줍니다. 이것은 Anthropic이 처음부터 Claude에 직접 내장해 둔 빌트인 도구 덕분입니다. Claude Code가 별도 설정 없이 내 PC의 파일을 읽고 수정할 수 있는 것도 같은 이유입니다. 파일 접근(Read, Write), 셸 명령 실행(Bash), 파일 검색(Grep) 같은 기능들은 Claude Code를 만든 Anthropic이 처음부터 내장해 둔 것입니다.
정리하면 이렇습니다.
- 빌트인 도구: AI 도구를 만든 주체가 직접 내장한 기능. 별도 설정 없이 바로 사용 가능
- MCP 도구: MCP 규격에 맞게 만들어진 외부 서비스 MCP 서버를 연결한 확장 기능. 별도 설정 필요
빌트인 도구들 만으로는 할 수 없는 일들이 많습니다. AI가 더 많은 일을 해낼 수 있도록 MCP는 외부 서비스들을 표준화된 방식으로 연결해 주는 역할을 합니다.
왜 MCP인가 – 직접 API를 호출하면 안 되나?
여기서 한 가지 의문이 생길 수 있습니다. 굳이 MCP 서버를 거치지 않고, Claude Code가 GitHub API를 직접 호출하면 되는 것 아닐까요?
기술적으로 가능합니다. GitHub는 gh라는 공식 CLI 툴을 제공하고 있어서, gh가 설치되어 있다면 Claude Code는 MCP 없이도 Bash를 통해 gh pr diff 1004 와 같은 명령을 직접 실행하여 REST API를 호출하고, 명령 실행 결과를 받아 분석하는 방식으로 동일한 작업을 처리할 수 있습니다. 분명히 CLI 툴을 사용하는 방식이 가진 장점들도 있을 것입니다.
그럼에도 MCP가 필요한 이유는 무엇일까요?
첫째, 표준화입니다. GitHub 하나만 본다면 CLI로도 충분합니다. 하지만 Slack, Jira, PostgreSQL, 사내 시스템까지 연동해야 한다면 서비스마다 다른 CLI 명령어와 출력 형식을 AI가 제각각 파악해야 합니다. MCP는 모든 외부 서비스를 동일한 방식으로 연결하는 공통 규격을 제공합니다.
둘째, 구조화된 데이터입니다. CLI 툴은 사람이 읽기 좋은 텍스트를 출력하는 반면, MCP 서버는 AI가 처리하기 좋은 구조화된 JSON을 돌려줍니다. Claude가 CLI 출력 결과를 텍스트로 파싱하는 것보다, MCP를 통해 정돈된 데이터를 받는 쪽이 훨씬 정확하고 안정적입니다.
셋째, 생태계 확장성입니다. Anthropic이 모든 서비스 통합을 직접 구현할 수는 없습니다. MCP 규격이 공개되어 있기 때문에 서드파티 개발자가 MCP 서버를 만들어 공개하는 것만으로 AI의 능력이 계속 확장됩니다. 실제로 현재 수백 개의 MCP 서버가 커뮤니티에 의해 만들어지고 있습니다.
마치며
MCP라는 프로토콜에 대한 설명과 MCP 동작 원리에 대해 알아보았습니다. MCP는 단순한 기술 사양이 아니라, AI가 닫힌 대화창 밖으로 나와 외부 서비스와 연결되는 방식을 정의한 규격입니다. MCP 없이도 Claude Code는 이미 파일을 읽고 수정하고, 코드를 실행하고, 터미널 명령을 처리하는 것만으로 개발 업무에 직접적으로 활용되고 있습니다. 간단한 GitHub 작업이라면 CLI 툴로도 충분합니다. MCP는 여러 외부 서비스를 일관된 방식으로 연동해야 할 때, 혹은 서드파티 개발자가 만들어 공개한 서버를 바로 가져다 쓰고 싶을 때 진가를 발휘하는 확장 수단입니다. AI 툴을 어떤 방식으로 활용하느냐는 결국 작업의 성격과 규모에 따라 달라지며, MCP는 그 선택지 중 하나입니다.
