며칠전부터 MCP에게 알고리즘을 점령당하다가, 본 것 중에 가장 이해가 쉬운 MCP에 대한 짧은 강의를 니꼬 선생님이 찍어주셨다.
Model Context Protocol, MCP
2024년 11월, Anthropic님이 MCP라는 프로토콜을 오픈 소스로 공개했다. 이건 AI 모델이 다양한 데이터 소스와 연결되어 실시간으로 정보 공유를 할 수 있도록 설계된 프로토콜이다.
예를 들어, 최근 향상된 이미지 성능에 힘입어 가장 많이 쓸 GPT에게 다음과 같은 상황을 생각할 수 있다.
🍊ME: GPT야 네이버 API를 통해서 날씨 정보 가져와
🤖GPT: 난 네이버 API 못 써.
🍊ME: 내가 미리 그 API 쓸 수 있도록 뚫어놓은 MIP 붙여줄게.
니꼬 선생님은 USB 비유를 했는데 내 PC에 외부 저장소인 USB를 꽂아주는 것과 같다.
MCP의 장점
멀티턴의 강화
AI와의 상호작용은 일회성인 질의응답이 아니라 여러 차례의 대화 수준으로 번지기 마련이다. 이러한 Multi-turn의 상호작용은 더 커지고 있고, 이에 대해 MCP가 좋은 촉매 역할을 한다. MCP가 사용자와의 대화 중 필요한 정보를 실시간으로 가져오고 이를 바탕으로 더 유용한 응답을 제공해준다면 멀티턴과 같은 AI의 활용 범위를 확장시켜줄테니까.
넓은 호환성
오픈소스소로 공개된 이 MCP는 이미 TypeScript, Python, Java, Kotlin 등 다양한 언어로 SDK가 제공되고 있다. Claude, Cursor와 같은 다른 언어 모델에도 활용이 가능하고 이는 AI 생태계 전반에 범용 표준 가능성을 갖추고 있단 의미다.
실사례 증가
X(구 트위터)와 같은 SNS, AI커뮤니티에서도 MCP를 통해 자동화한 사례가 등장 중이고, 각종 커뮤니티를 돌아본 결과 개인단위에서 손 쉽게 적용중이라는 후기들도 많이 볼 수 있다.
핵심 구성요소
MCP Host
- 사용자의 요청을 받아서 MCP 서버에 전달하고 응답을 모델에게 제공한다
- Claude, Cursor등
MCP Client
- LLM 또는 LLM 프롬프트를 실행한다
- 여러 개의 MCP 서버와 연결할 수 있으며, 각 서버에서 필요한 데이터를 가져와서 모델에 제공한다
MCP Server
- 실제 데이터를 제공한다
- 파일 시스템, 날씨 API 등 다양한 Data Source를 MCP 프로토콜을 통해 노출한다
- 로컬일 수도 있고, 외부 원격 서비스일 수도 있다
간단한 구조이며, 이 관계성을 따지면 아래와 같이 볼 수 있다.
[👤 인간 사용자] : 내 로컬 /etc 폴더를 기반으로 데이터 추출해줘 MIP는 만들어놨어.
│
▼
[Host (예: Claude, IDE, App)] ← 사용자 인터페이스를 제공함
│
▼
[MCP Client] ← 내부적으로 세션을 열고, 메시지 전달 역할
│
▼
📨 MCP Protocol 메시지
│
▼
[MCP Server (예: Local File Server)] ← /etc 디렉토리 실제로 접근
MCP 서버 구현의 예시
Building MCP with LLMs - Model Context Protocol
This guide will help you use LLMs to help you build custom Model Context Protocol (MCP) servers and clients. We’ll be focusing on Claude for this tutorial, but you can do this with any frontier LLM. Preparing the documentation Before starting, gather the
modelcontextprotocol.io
위와 같이 매우 친!절!한 가이드가 있다.
Python을 통한 서버 구현
나의 경우 Python을 통해 문자열을 통한 간단한 예제를 만들어 Claude와의 연결 상태만 확인했다.
brew install uv
uv init MCP
uv add "mcp[cli]"
from mcp.server.fastmcp import FastMCP
mcp = FastMCP("KKRMCPServer")
@mcp.resource("kyu://state") # API의 GET과 같은 역할
def get_kyu_state() -> str:
return "Studying..."
@mcp.tool()
def tool_one(symbol:str, age: int) -> str:
return "{symbol}'s age: {age}"
@mcp.tool()
def tool_two(year:str, month: int) -> str:
return "cur year: {year}, month:{month}"
@mcp.prompt()
def prompt(first:str, second: str, third: str) -> str:
return f"""
first:
{first},
second:
{second},
third:
{third}
"""
if __name__ == "__main__":
mcp.run()
어노테이션의 세 가지 요소는, 니꼬가 설명했듯이 아래와 같다.
Tools
- 메시지 전송, DB 업데이트와 같은 서버에서 실행되는 AI가 호출하는 기능
- API 엔드포인트에 대한 POST 요청 같은 것
Resource
- 서버가 AI에 더 많은 Context를 제공하기 위해 노출하는 파일, DB 레코드, API 응답
- API 엔드포인트의 GET요청 같은 것
Prompt
- 유저가 AI에게 응답을 받기 위한 일종의 규격
Claude(ver: MAC Application) 설정
보이는 것처럼 claude_desktop_config 파일을 수정해준다
{
"mcpServers": {
"kkrMCPServer":{
"command" : "uv",
"args": [
"--directory",
"{.py가 존재하는 절대경로}/Enviroment",
"run",
"test.py"
]
}
}
}
Claude와 로컬 MIP서버의 연결 확인
빨간영역 내에 보이는 것이 정상 연결된 모습이며, 작성했던 함수들을 확인할 수 있다.
이제 이를 응용해서 나만의 함수와 상호작용하는 더욱 특별한 AI 활용이 가능하다.