List
지난 글에서는 MCP(Model Context Protocol)가 무엇이고, 왜 중요한지에 대해 이야기했습니다. MCP는 AI 모델이 외부 데이터나 기능과 안전하고 표준화된 방식으로 상호작용할 수 있게 도와주는 역할을 합니다.
이번 글에서는 실제로 MCP 서버를 어떻게 만들 수 있는지, 그리고 그 과정을 도와주는 MCP Python SDK에 대해 소개하려고 합니다. MCP Python SDK는 말 그대로 Python으로 MCP 서버와 클라이언트를 쉽게 구현할 수 있게 도와주는 개발 도구입니다. 복잡한 API 설계 없이, 단 몇 줄의 코드로 AI와 상호작용할 수 있는 기능에 대해서 알아보겠습니다.
MCP Python SDK
MCP Python SDK는 MCP 프로토콜을 파이썬에서 간편하게 구현할 수 있게 해주는 도구입니다. 이 SDK를 활용하면 LLM 기반의 애플리케이션에서 리소스, 도구, 프롬프트를 손쉽게 정의하고 노출할 수 있습니다.
대표적인 기능
•
MCP 클라이언트 개발 (서버와의 연결)
•
MCP 서버 구축 (데이터 및 기능 제공)
•
stdio, SSE(Server-Sent Events) 등 다양한 통신 방식 지원
설치 방법
설치는 매우 간단합니다. pip 또는 uv를 이용해 설치할 수 있습니다.
# uv를 사용하는 경우
uv add "mcp[cli]"
# pip을 사용하는 경우
pip install mcp
Shell
복사
설치 후, MCP 도구를 실행하려면 다음 명령어를 사용합니다.
# uv 환경에서 실행
uv run mcp
Shell
복사
간단한 MCP 서버 만들기
그럼 실제로 MCP Python SDK를 사용해 MCP 서버를 하나 만들어보겠습니다. 이번에는 단순한 계산 대신, 날씨 정보를 제공하는 리소스와 긴 문장을 요약하는 도구, 그리고 반복적으로 쓸 수 있는 프롬프트 템플릿을 만들어보겠습니다.
from mcp.server.fastmcp import FastMCP
app = FastMCP("MyAssistant")
# 날씨 정보를 제공하는 리소스
@app.resource("weather://{city}")
def get_weather(city: str) -> str:
fake_weather_data = {
"seoul": "맑고 기온은 22도입니다.",
"busan": "흐리고 약간의 비가 내릴 수 있습니다.",
}
return fake_weather_data.get(city.lower(), "날씨 정보를 찾을 수 없습니다.")
# 긴 텍스트를 요약해주는 도구
@app.tool()
def summarize(text: str) -> str:
if len(text.split()) < 20:
return "요약할 만큼 긴 텍스트가 아닙니다."
return text[:100] + "... (요약된 내용)"
# 메일 작성용 프롬프트 템플릿
@app.prompt()
def email_reply_prompt(topic: str) -> str:
return f"다음 주제에 대해 정중하게 답장하는 이메일을 작성해줘: {topic}"
Python
복사
위 코드는 아래와 같은 세 가지 기능을 제공합니다
•
weather://seoul → "서울의 날씨"라는 리소스를 제공합니다.
•
summarize → 긴 글을 요약해주는 도구입니다.
•
email_reply_prompt → 특정 주제에 대해 이메일을 작성할 수 있는 프롬프트 템플릿입니다.
실행은 이전과 동일하게 다음 명령어로 가능합니다.
mcp install server.py
mcp dev server.py
Shell
복사
핵심 구성 요소 다시 보기
MCP Python SDK에서는 다음 세 가지 핵심 개념을 중심으로 MCP 서버를 구성합니다.
1. 리소스 (Resources)
AI 모델이 외부 데이터를 참조할 수 있게 해주는 "읽기 전용" 요소입니다. 마치 정적인 API(GET)처럼 작동합니다.
•
주로 상태 정보를 반환하거나, 외부 데이터베이스나 API와 연결하는 데 사용됩니다.
•
LLM은 이 리소스를 통해 외부 세계의 정보를 가져올 수 있습니다.
@app.resource("weather://{city}")
def get_weather(city: str) -> str:
...
Python
복사
2. 도구 (Tools)
LLM이 직접 호출할 수 있는 실행 기능입니다. 입력을 받아 처리하고 결과를 반환합니다. POST 요청과 유사합니다.
•
내부 알고리즘, 외부 API 호출, 파일 저장 등 실행형 작업에 적합합니다.
•
GPT 모델이 어떤 액션을 취하도록 설계할 때 가장 핵심적인 구성 요소입니다.
@app.tool()
def summarize(text: str) -> str:
...
Python
복사
3. 프롬프트 (Prompts)
자주 쓰이는 입력 형태나 요청을 템플릿화하여 LLM이 더 잘 이해하고 반응할 수 있도록 돕습니다.
•
"이 문서를 요약해줘", "정중하게 거절하는 이메일을 작성해줘" 등 템플릿 문장을 생성합니다.
•
모델이 정형화된 역할을 수행해야 할 때 매우 유용합니다.
@app.prompt()
def email_reply_prompt(topic: str) -> str:
...
Python
복사
마무리
MCP Python SDK를 이용하여 실제 AI와의 대화 흐름을 설계하는 쪽으로 MCP를 활용할 수 있습니다. 다양한 리소스와 도구, 프롬프트를 조합하면 상당히 복잡한 시나리오도 손쉽게 구현할 수 있습니다.
다음 글에서는 실제로 이 MCP 서버를 Claude Desktop이나 다른 LLM 환경과 어떻게 연동할 수 있는지 알아보겠습니다.