MCP ?
MCP(Model Context Protocol)
MCP는 쉽게 말해 LLM과 외부 데이터 소스(웹 API, 데이터베이스, 파일 시스템 등)를 하나로 연동할 수 있게 해주는 개방형 표준 프로토콜

MCP 이전의 Tool calling
- 프롬프트로 사용자 요청받은 후, LLM (호스트 application) 이 직접 파싱해서 도구를 호출
- 도구 API 마다 포맷이 다르기 때문에 파싱을 잘못할 경우 호출이 제대로 안됨
- 새로운 도구 추가할때마다 프롬프트와 파서 둘다 수정 필요
ex. 1) 사용자가 프롬프트 입력 - " 서울 날씨 알려줘"
2) LLM 프롬프트 안의 규칙을 따라 문자열로 도구 호출 "get_weather("Seoul")
3) 호스트 앱이 문자열을 직접 파싱해서 날씨 API 호출
--> 만약 모델이 "get_weather("서울") 처럼 형식이 조금만 틀려도 파싱 실패 / 호출 불가
MCP (host와 Tool calling 사이에 표준 번역 Client 가 등장)
- 도구 연결 표준으로 제시
- 도구의 스펙 (API Schema) 에 따라서 Tool 을 호출할 수 있도록 안내
ex. 1) 사용자가 프롬프트 입력 - " 서울 날씨 알려줘"
2) LLM 은 이미 도구 스펙을 알고 있음 = get_weather(city : string))
따라서 이 형태에 맞게 요청
3) MCP 클라이언트가 이 호출을 받아서 MCP 서버에 정확히 도구 호출
MCP 통신을 위해 필요한 구성요소 - Host, Client, MCP Server

host (agent) : cursor, cluade, GPT
- 사용자 프롬프트 Agent 가 판단해서 Client 에게로 전송
Client : 호스트 application 내 프로토콜 구현체 ex. langchain mcp adapter
- 서버와 1:1 연결 유지
- host 별로 클라이언트가 필요
- host 에게 요청을 받고, MCP server tool 호출해서 동작
이때 tool의 description을 보고 어떤 tool을 쓸건지 client 가 결정
- tool 의 input, output 을 맞춰주는 번역의 역할
MCP server : 특정 기능이나 리소스 제공 ex. FastMCP
- tool ㅣ수행 도구 제공 - Slack, gmail 에서 제공하는 tool 들
- JSON-RPC 기반 API 구현
따라서, 사용자가 host 에 프롬프트 날리면, host Agent 가 판단해서 Client 로 전송
ex.
(Host ) 사용자 온도 습도 질문 -> [ Host LLM ] 무슨 Tool 을 쓸건지 판단 ->
(Client) Tool 호출 ->
(MCP Server) Tool 결과 반환
MCP Marketplace
- MCP 서버 쉽게 배포하고 사용할 수 있도록 서버들을 모아놓은 앱스토어 같은 곳
ex. smithery, mcpserver
- 마켓 플레이스에서 원하는 MCP 서버를 찾아서 연결하기
ex. gmail-server가 필요하다면,
MCP marketplace에서 gmail-server를 찾아 설치/연결
Marketplace 를 통해 설치하면, 해당 MCP server의 스키마, 엔드포인트가 Client에 등록됨
이제 Client 는 gmail-server가 어떤 메서드를 갖고 있는지 알고 있음
(실제 실행 순서)
[ host ] "gmail 에서 지난주 메일 요약해줘 " 요청 받음
[ client ] gmail-server 스키마에 맞춰서 호출 ==> MCP server 실행
[ MCPserver] 구글 API 실제 호출 -> 결과 반환
댓글