Search

[LLM 프로젝트] - 9편. MCP Python SDK로 나만의 AI 도구 만들기

[LLM 프로젝트] - 1편. 대규모 언어 모델, 도대체 왜 중요한가?
[LLM 프로젝트] - 1편. 대규모 언어 모델, 도대체 왜 중요한가?
지난 글에서는 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 환경과 어떻게 연동할 수 있는지 알아보겠습니다.