MCP(Model Context Protocol)란 AI 모델(LLM)이 외부 데이터(구글 드라이브, GitHub 등)나 도구와 통신할 때 사용하는오픈 표준 규약으로, 앤트로픽(Anthropic)이 개발하여 오픈소스로 공개했다.
왜 MCP라는 개념이 등장했는지 생각해 보자.
ChatGPT, Claude, Gemini 같은 LLM을 이용해 내 컴퓨터의 파일 내용을 읽거나 구글 캘린더를 확인하려면 어떻게 해야 할까?
Spring 개발자라면Spring AI의 'Tool Calling'기능을 이용해 구현할 수 있다. Spring AI는 라이브러리 내부에서 모델별 차이를 추상화해주므로, 어떤 모델을 쓰든 동일한 코드로 기능을 구현할 수 있게 도와준다.
하지만 여기서 발생하는 문제는 '구현의 파편화'입니다. Spring AI로 개발한 도구는 Spring 환경에서만 돌아간다. 만약 파이썬 기반의 LangChain으로 환경을 바꾸거나 다른 프레임워크를 쓰게 된다면, 기존에 만든 도구 로직을그 환경에 맞춰 매번 다시 개발해야 한다.
이에 반해 MCP는 특정 언어나 프레임워크에 종속되지 않는 '통신 규약(Protocol)' 이다. 자바로 MCP 서버를 하나 구축해두면, 자바 애플리케이션은 물론 파이썬 프로그램, 심지어Claude 데스크톱 앱 같은 기성 소프트웨어들도별도의 추가 개발 없이 서버 주소만 연결해 즉시 그 기능을 사용할 수 있다.즉, 도구의 재사용성을 개별 앱 단위가 아닌 생태계 단위로 확장한 것이다.
MCP의 작동 원리
MCP 시스템은 크게 3가지 부분으로 구성된다.
MCP Host: AI가 탑재된 프로그램( Claude 데스크톱 앱, Cursor 코드 애디터 등)
MCP Client: 호스트 안에서 서버와 연결을 담당하는 중간 다리 역할로 서버와 1:1로 연결됨
MCP Server: MCP 프로토콜을 통해 도구들을 노출하는 서버 프로그램
이 요소들이 어떻게 동작하는지는 다음의 그림이 잘 보여준다.
MCP Architecture
1. MCP Hosts
역할:AI 에이전트 역할을 하는어플리케이션이다. 이들은 뒷단에 LLM과 연결되어 있다.
예시:그림에 보이는 Claude Desktop이나 Cursor, Vscode같은 툴 또는 웹, 앱일 수 있다.
설명:"데이터를 필요로 하는 주체"입니다. 이전에는 이 호스트들이 각 서비스(슬랙, 구글 등)에 직접 연결해야 했지만, 이제는 MCP라는 표준 입구를 통해 데이터를 받아온다
2. MCP Clients
역할:MCP 호스트(앱) 내부에서MCP 서버와 대화하는 통로이다.
설명:client.py라는 파일명이 적혀 있듯이, 개발자가 작성한 코드 혹은 라이브러리 형태이다. 호스트 앱이 "나 슬랙 메시지 좀 가져와줘"라고 하면, 이 클라이언트가 해당 요청을 MCP 규격에 맞춰 서버로 전달한다.
3. MCP
역할:이 그림의 핵심 비유로,공통 규격(프로토콜)그 자체를 의미한다.
설명:노트북에 여러 장치를 연결할 때 'USB-C 허브' 하나만 있으면 모든 기기가 연결되듯, MCP가 MCP Host와 MCP Server 사이에서표준 연결 고리역할을 한다.
4. MCP Servers
역할:각 데이터 소스(앱, 파일 등)에서 정보를 읽어와MCP 규격으로 변환해주는 어댑터로 Remote Service와 Local Data Source로 구분할 수 있다.
Remote Services (원격 서비스):Slack, Gmail, Google Calendar 같은 클라우드 기반 서비스들이다. 전용 MCP 서버가 이 서비스들의 API를 호출해 AI가 읽을 수 있는 형태로 바꿔준다.
Local Data Sources (로컬 데이터):내 컴퓨터에 있는 파일 시스템(그림의 Finder 아이콘)이다. AI가 내 하드디스크의 파일을 직접 읽을 수 있게 해주는 서버이다.
간단한 동작 시나리오
사용자가 "내 지메일을 읽어서 요약해줘." 라는 요청을 한다면 MCP는 다음과 같이 동작한다.