2025. 5. 27. 19:46ㆍAI
학습 순서
1. 간단한 개념 익히기
2. 상용화된 MCP 서버 사용해보며 익숙해지기
개발 시 유용해보이는 Tool
- Context 7: 코딩 시 AI가 오래된 정보를 제공하거나 존재하지 않는 API를 환각하는 문제를 해결합니다.
- Microsoft Playright MCP 서버: 실제 브라우저를 제어할 수 있는 도구를 제공합니다.
- 웹 개발 후, 브라우저 E2E 테스트 할 때 좋아보임
- Sequential Thinking: AI가 구조화된 사고 과정을 사용하여 문제를 해결하도록 돕습니다.
- Browser Tools MCP: 웹 애플리케이션의 접근성, 성능, SEO 등을 감사하는 도구를 제공합니다.
사용 방법
MCP Server 사용을 위해선 MCP Client가 필요한데요
대표적으로 Claude for Desktop, Cursor 등이 있습니다.
저는 cursor 유료 회원으로 cursor를 사용하여 실습 했습니다만,
유료 결제를 안하셨거나 MCP 찍먹 용도로는 Claude for Desktop 무료 버전을 사용해 보실 것을 권장합니다. (다만, 토큰 소모가 많아서 답변이 잘릴 수 있습니다)
아래 방법대로 사용해보세요
- 원하는 MCP server를 아래 사이트에서 검색합니다.
- 사용할 MCP Server를 선택 후, Client를 선택해 나오는 명령어를 쳐주면 설치 완료!
로그인 연동이 잘되어있다면 api-key도 자동설정됩니다 외부 api key가 필요한 경우 입력 값을 요청할 수 있습니다
3. 간단한 MCP Server 구축해보기
For Server Developers - Model Context Protocol
For Server Developers - Model Context Protocol
When creating the ApplicationHostBuilder, ensure you use CreateEmptyApplicationBuilder instead of CreateDefaultBuilder. This ensures that the server does not write any additional messages to the console. This is only neccessary for servers using STDIO tran
modelcontextprotocol.io
예제를 통해 실습하였습니다. 자세한 내용은 아래 내용을 참고해주세요.
MCP(Model Context Protocol) 서버 구축 및 이해하기
아래 내용을 기반으로 실습해보며, 모르는 내용들을 정리한 내용입니다.
(참고로 필자는 python 기반으로 진행했으며, python을 잘 몰라서 관련 내용도 명시되어 있습니다.)
추가로, 실습 예제를 통해 MCP 서버로 LLM을 어떻게 이해시키고 해당 tool이 사용되는지 정리해두었습니다.
For Server Developers - Model Context Protocol
When creating the ApplicationHostBuilder, ensure you use CreateEmptyApplicationBuilder instead of CreateDefaultBuilder. This ensures that the server does not write any additional messages to the console. This is only neccessary for servers using STDIO tran
modelcontextprotocol.io
UV(Uvicorn)란?
Uvicorn은 ASGI(Asynchronous Server Gateway Interface) 웹 서버 구현체로, 비동기 Python 웹 애플리케이션을 실행하기 위해 설계되었습니다.
주요 특징:
- 고성능: asyncio 기반 비동기 처리 지원
- ASGI 호환: FastAPI, Starlette, Django 등의 ASGI 프레임워크와 함께 사용 가능
- WebSocket 지원: 실시간 양방향 통신 지원
UV 패키지 관리자는 pip의 대안으로, Rust로 작성되어 더 빠른 패키지 설치를 제공합니다.
가상환경을 설정하는 이유
# Create virtual environment and activate it
uv venv
source .venv/bin/activate
주요 이점:
- 의존성 격리
- 프로젝트 간 패키지 버전 충돌 방지
- 시스템 Python 환경 보호
- 재현 가능한 환경
- 모든 개발자가 동일한 환경에서 작업 가능
- 개발 환경과 프로덕션 환경의 일관성 유지
- MCP 서버 관련 특별 고려사항
- 특정 버전 의존성 관리
- ML 라이브러리 호환성 유지
- 실험적 기술의 업데이트 관리
UV 패키지 설치 명령어 이해하기
uv add "mcp[cli]" httpx
명령어 구성 요소:
- uv add: UV 패키지 관리자의 설치 명령어 (pip install과 유사)
- "mcp[cli]"
- mcp: 기본 패키지
- [cli]: extras(선택적 의존성) - CLI 관련 추가 기능 포함
- httpx: 별도로 설치할 HTTP 클라이언트 라이브러리
MCP Tool 호출 로직
LLM이 질문에 의도를 파악하여 mcp의 tool 이름 및 설명을 기준으로 적절한 tool을 호출함
MCP에서 도구(tool) 호출 메커니즘
- LLM의 도구 선택 과정:
- 도구 정의 인식: Claude와 같은 LLM은 서버에서 제공한 도구 정의(이름, 설명, 파라미터 등)를 받습니다
- 의도 파악: 사용자 질문의 의도를 분석합니다
- 도구 선택: 의도에 가장 적합한 도구를 선택합니다
- 파라미터 추출: 질문에서 필요한 파라미터 값을 추출합니다
- 도구 호출: 선택한 도구를 적절한 파라미터와 함께 호출합니다
- 도구 정의 예시:
tools = [
{
"type": "function",
"function": {
"name": "get_forecast",
"description": "Get the weather forecast for a location",
"parameters": {
"type": "object",
"properties": {
"location": {
"type": "string",
"description": "The city and state, e.g. San Francisco, CA",
}
},
"required": ["location"],
},
},
}
]
MCP 데코레이터 변환 과정
Python 함수 데코레이터 @mcp.tool()은 함수를 LLM이 이해할 수 있는 도구 정의로 변환합니다.
이 과정을 통해 개발자는 도구 정의를 수동으로 작성할 필요 없이, 잘 문서화된 Python 함수를 작성하는 것만으로 LLM이 활용할 수 있는 도구를 쉽게 만들 수 있습니다.
원본 코드:
@mcp.tool()
async def get_alerts(state: str) -> str:
"""Get weather alerts for a US state.
Args:
state: Two-letter US state code (e.g. CA, NY)
"""
# 함수 구현...
변환된 도구 정의:
{
"type": "function",
"function": {
"name": "get_alerts",
"description": "Get weather alerts for a US state.",
"parameters": {
"type": "object",
"properties": {
"state": {
"type": "string",
"description": "Two-letter US state code (e.g. CA, NY)"
}
},
"required": ["state"]
}
}
}
변환 요소:
- 함수 이름 → name 필드
- 독스트링 첫 줄 → description 필드
- 매개변수 및 타입 힌트 → parameters 필드
- 필수 매개변수 → required 필드
- 매개변수 설명 → Args 섹션에서 추출
이 방식으로 개발자는 잘 문서화된 Python 함수를 작성하는 것만으로 LLM이 활용할 수 있는 도구를 쉽게 만들 수 있습니다.