LLM은 똑똑하지만, 혼자서는 아무것도 만지지 못한다. 파일을 읽거나, DB를 조회하거나, 외부 API를 호출하는 일은 모두 모델 바깥에서 일어난다. 그동안 이 연결은 각 애플리케이션이 제각각 구현했다. MCP(Model Context Protocol)는 바로 이 연결 방식을 표준화한 프로토콜이다.
왜 표준이 필요한가
도구가 10개, 모델을 쓰는 앱이 5개라고 해보자. 표준이 없으면 5×10, 즉 50가지 연결을 각자 짜야 한다. MCP는 이걸 “서버는 도구를 한 번만 정의하고, 클라이언트는 규격대로 붙는다”로 바꾼다. USB-C가 충전기와 기기 사이를 통일한 것과 같은 발상이다.
클라이언트와 서버
MCP는 두 역할로 나뉜다.
- 서버: 도구·데이터를 제공한다. “이런 기능이 있다”고 목록을 알려주고, 호출을 받으면 실행한다.
- 클라이언트: LLM을 품은 쪽(예: Claude Code). 서버 목록을 읽어 모델에게 넘기고, 모델이 고른 도구를 서버에 요청한다.
모델은 서버 내부 구현을 알 필요가 없다. “무슨 도구가 있고, 어떤 인자를 받는가”라는 계약만 본다.
도구는 이렇게 생겼다
서버가 도구를 정의할 때 핵심은 이름, 설명, 그리고 입력 스키마다.
{
"name": "get_weather",
"description": "도시 이름으로 현재 날씨를 조회한다",
"inputSchema": {
"type": "object",
"properties": {
"city": { "type": "string" }
},
"required": ["city"]
}
}
description은 사람이 아니라 모델이 읽는다. 모델은 이 문장을 보고 “지금 날씨를 물었으니 이 도구를 쓰자”고 판단한다. 그래서 설명을 명확히 쓰는 일이 곧 도구 설계다.
정리
MCP는 LLM과 바깥 세상을 잇는 공용 규격이다. 서버는 기능을 표준 형태로 내놓고, 클라이언트는 그걸 모델에 연결한다.
이 글에 대한 의견은 아래 댓글로 남겨주세요 (GitHub 계정 필요). 로그인 없이 남기고 싶다면