요즘에 MCP가 핫하다. OpenAI도, Microsoft 등 여러 메이저기업도 MCP를 도입한다고 한다.
그래서 MCP가 뭔지 찾아보니 MCP를 만든 Anthropic에서는 아래와 같이 설명하고 있다.
MCP는 애플리케이션이 LLM에 컨텍스트를 제공하는 방법을 표준화하는 개방형 프로토콜이다. MCP는 AI 애플리케이션을 위한 USB-C 포트와 같다. USB-C가 다양한 주변기기와 액세서리에 기기를 연결하는 표준화된 방법을 제공하는 것처럼, MCP는 AI 모델을 다양한 데이터 소스와 도구에 연결하는 표준화된 방법을 제공한다.
위의 문서 내용을 읽으면서 기본내용을 정리하고 이해가 어려운 부분은 추가적인 설명을 추가해놓았다.
Why MCP
일반적인 아키텍처
MCP는 기본적으로 클라이언트-서버 아키텍처를 따르며, 호스트 애플리케이션이 여러 서버에 연결할 수 있도록 설계되어 있다.
MCP를 이해하려면 아래 호스트
, 클라이언트
, 서버
등 3가지 개념을 이해해야 한다.
MCP 호스트(MCP Hosts)
Claude Desktop, IDE, 기타 AI 도구처럼 MCP를 통해 데이터에 접근하고자 하는 프로그램.
부연 설명)
MCP는 일반적으로 웹브라우저가 아니라 특정 클라이언트 프로그램에서 사용한다. 그래서 접속하는 클라이언트 프로그램을 호스트라고 한다.
현재까지는 Claude Desktop(Claude 웹은 안됨)과 Cursor와 같은 AI 도구에서만 사용 가능하다.
MCP 클라이언트(MCP Clients)
서버와 1:1 연결을 유지하는 프로토콜 클라이언트
부연 설명)
클라이언트는 등록한 MCP 서버를 호출할 수 있게 해준다. langchain에서 등록한 tools를 호출하게 해주는 것과 비슷하다고 보면 된다.
클라이언트는 각 호스트에서 각각 만들어야 한다. cursor용, claude용 클라이언트는 이미 해당 호스트 안에 내장되어 있을 것이다. 만일 새로운 앱이 나온다면 서버를 연결하기 위한 클라이언트를 만들어야 할 것이다.
Langchain용 클라이언트도 나와있다.
클라이언트 개발 방법은 아래와 같이 5개의 언어를 지원한다. (python, node, java, kotlin, c#)
https://modelcontextprotocol.io/quickstart/client
MCP 서버(MCP Servers)
표준화된 Model Context Protocol을 통해 특정 기능을 노출하는 경량 프로그램
부연 설명)
서버라는 말의 의미가 헷갈릴 수 있는데 반드시 톰캣같은 웹서비스 형태가 아닐 수도 있다.
서버는 두가지로 실행될 수 있다.
- 실행 가능한 프로그램 (python, node, java 등 서버 프로그램으로 실행)
- 예)
python sample.py
,node sample.js
,java sample.class
- 도구 실행은 PC에서 실행
- mcp를 실행하는 PC에는 python, node, java 등 실행할 유형의 프로그램이 설치가 되어 있어야 한다.
- 웹서버(FastAPI 같은 SSE 서버)
- 웹서비스를 통해 실행을 요청하고 결과를 가져온다. (text/event-stream)
- 도구 실행은 원격 웹서버에서 실행하고 결과만 받아온다.
- mcp를 실행하는 PC에는 python, node, java 등 프로그램 설치가 필요없다.
로컬 데이터 소스(Local Data Sources): MCP 서버가 안전하게 접근할 수 있는 사용자의 컴퓨터 내 파일, 데이터베이스, 서비스
원격 서비스(Remote Services): MCP 서버가 연결할 수 있는 외부 시스템(예: API를 통해 인터넷으로 제공되는 서비스)
통신 방법
클라이언트와 서버의 통신방법은 아래와 같이 2가지가 있다.
1. Stdio
- (로컬) 호스트에서 직접 실행이 된다.
- python sample.py, node sample.js, java sample.class
- 그래서 python, node, java 등 실행하려는 프로그램이 설치되어 있어야 한다. (이 부분이 불편할 수도)
- MCP Server는 미리 실행할 필요가 없다. 도구 호출할 때마다 실행이 된다.
- 현재까지 만들어진 MCP Server는 Stdio 방식이 많다.
2. SSE
- (원격) 웹서버에서 실행이 된다.
- 원격 서버를 호출하고 그 결과만 받는다. (text/event-stream)
- 프로그램을 설치할 필요가 없다.
- MCP Server는 항상 떠있어야 한다.
- SSE 방식으로 발전 가능성이 많다.
Stdio 사용 예)
{
"weather": {
"command": "node",
"args": [
"경로/index.js"
]
}
}
SSE 사용 예)
{
"weather": {
"url": "http://localhost:8000/sse"
}
}
MCP Inspector
https://github.com/modelcontextprotocol/inspector
MCP Inspector는 Model Context Protocol(MCP) 서버를 테스트하고 디버깅하기 위한 대화형 개발자 도구이다. 이 도구는 서버 개발 과정에서 필요한 다양한 테스트와 디버깅 기능을 제공하여, 개발자가 MCP 서버의 동작을 효과적으로 검증하고 문제를 해결할 수 있도록 돕는다.
MCP inspector는 설치 없이 npx를 통해 직접 실행할 수 있다.
npx @modelcontextprotocol/inspector <command>
날씨조회 MCP를 실행해보자.
npx @modelcontextprotocol/inspector uv --directory /Users/rudaks/mcp/server/weather run server_local.py
그리고 나서 http://127.0.0.1:6274으로 접속하면 아래와 화면에서 테스트해 볼 수 있다.
MCP 서버 모음
https://smithery.ai/
https://mcp.so/
https://github.com/punkpeye/awesome-mcp-servers
- Smithery 의 사이트에서 JSON 형식의 내용으로 구동하는 방식은 대부분 Stdio
- URL 방식으로 접근하는 것은 SSE