🤖 나만의 AI 비서 만들기: Python과 FastMCP로 날씨 챗봇 도구 제작기
최근 ChatGPT 같은 대화형 AI 모델이 정말 똑똑해졌죠? 하지만 AI가 모든 것을 아는 건 아닙니다. 특히 "오늘 서울 날씨 어때?"와 같은 실시간 정보나 특정 데이터베이스에 접근해야 하는 질문에는 바로 대답하기 어렵습니다.
이때 필요한 것이 바로 "도구(Tool)"입니다. AI가 스스로 할 수 없는 일을 대신 처리해 주는 외부 기능이죠. 오늘은 Python의 FastMCP와 requests 라이브러리를 사용해, 특정 위치의 현재 날씨를 알려주는 간단한 도구를 만들고 서버를 구축하는 과정을 보여드리겠습니다.
✨ 완성된 코드 미리보기
먼저 우리가 만들 전체 코드입니다. 한눈에 봐도 무척 간단하죠?
from mcp.server.fastmcp import FastMCP
import requests
# 1. MCP 서버 객체 준비
mcp = FastMCP()
# 2. 날씨 정보를 가져오는 '도구' 정의
@mcp.tool()
def get_weather(latitude: float = 37.57, longitude: float = 126.98) -> dict:
"""
지정된 위도와 경도의 현재 기온과 풍속을 반환합니다.
"""
# Open-Meteo 날씨 API에 요청을 보낼 URL
url = (
f"https://api.open-meteo.com/v1/forecast"
f"?latitude={latitude}&longitude={longitude}¤t=temperature_2m,wind_speed_10m"
)
# API 호출 및 응답 처리
response = requests.get(url)
if response.status_code == 200:
data = response.json()
current = data.get("current", {})
return {
"temperature_2m": current.get("temperature_2m"),
"wind_speed_10m": current.get("wind_speed_10m"),
}
else:
return {"error": f"API 호출 실패: {response.status_code}"}
# 3. 서버 실행
if __name__ == "__main__":
print("Starting MCP server...")
mcp.run(transport="stdio")
⚙️ 코드 해부하기: 어떻게 동작할까?
코드는 크게 세 부분으로 나눌 수 있습니다. 서버 준비, 도구 정의, 그리고 서버 실행입니다.
1. 기본 재료 준비: 라이브러리 Import
from mcp.server.fastmcp import FastMCP
import requests
- FastMCP: 우리가 만들 도구를 등록하고 관리할 서버의 뼈대입니다.
- requests: **외부 웹 서비스(API)**에 접속해서 데이터를 가져오는 역할을 합니다. 여기서는 무료 날씨 정보를 제공하는 Open-Meteo API에 접속하기 위해 사용합니다.
2. 핵심 기능: 날씨 도구 만들기
@mcp.tool()
def get_weather(latitude: float = 37.57, longitude: float = 126.98) -> dict:
# ... 함수 내용 ...
이 부분이 바로 우리 코드의 심장입니다.
- @mcp.tool(): 이 한 줄이 마법을 부립니다! 평범한 get_weather 함수를 FastMCP 서버가 인식하고 호출할 수 있는 특별한 "도구"로 등록해 주는 데코레이터(Decorator)입니다.
- get_weather(): 위도(latitude)와 경도(longitude)를 입력받아 날씨 정보를 반환하는 함수입니다.
- Open-Meteo API를 호출해서 현재 기온(temperature_2m)과 풍속(wind_speed_10m) 데이터를 요청합니다.
- 성공적으로 데이터를 받으면(response.status_code == 200), JSON 형식의 응답에서 필요한 값만 깔끔하게 추출하여 딕셔너리 형태로 반환합니다.
3. 서버 가동!
if __name__ == "__main__":
print("Starting MCP server...")
mcp.run(transport="stdio")
- 이제 준비된 도구를 장착한 서버를 실행할 차례입니다.
- mcp.run(transport="stdio")는 표준 입출력(stdio) 방식으로 서버를 실행하라는 뜻입니다. 쉽게 말해, 터미널 창에서 직접 텍스트(JSON 형식)로 명령을 내리고 결과도 텍스트로 받아볼 수 있는 상태가 되는 것이죠.
🚀 그래서 이걸로 뭘 할 수 있을까?
이 코드를 실행하면 터미널에는 "Starting MCP server..."라는 메시지와 함께 서버가 조용히 명령을 기다립니다. 이제 다른 프로그램(예: AI 챗봇)이 이 서버에게 일을 시킬 수 있습니다.
예를 들어 AI 챗봇이 "부산 날씨 알려줘"라는 말을 듣는다면,
- 챗봇은 부산의 위도와 경도를 파악합니다. (약 35.18, 129.08)
- 우리가 만든 서버에 아래와 같은 요청을 보냅니다.
-
JSON
{ "tool_code": "get_weather(latitude=35.18, longitude=129.08)" }
- 서버는 이 요청을 받아 get_weather 함수를 실행하고, Open-Meteo API에서 날씨 정보를 가져옵니다.
- 마지막으로, 서버는 다음과 같은 결과를 챗봇에게 돌려줍니다.
-
JSON
{ "result": { "temperature_2m": 25.4, "wind_speed_10m": 8.5 } }
- 챗봇은 이 결과를 바탕으로 "현재 부산의 기온은 25.4도, 풍속은 8.5km/h입니다." 라고 멋지게 대답할 수 있게 됩니다.
🚀 Claude 데스크톱 MCP 서버 설정
- Claude 데스크톱 앱에서 **설정(Settings)**으로 이동합니다.
- 개발자(Developer) 탭을 선택하고 설정 편집(Edit Configuration) 버튼을 클릭하여 claude_desktop_config.json 파일을 엽니다.
- 아래의 JSON 코드를 파일에 추가하고 저장하세요.
{
"mcpServers": {
"weather": {
"command": "python",
"args": ["/ABSOLUTE/PATH/TO/YOUR/main.py"],
"schemes": ["mcp"]
}
}
}
🚨 가장 중요한 부분
- "/ABSOLUTE/PATH/TO/YOUR/main.py" 부분을 main.py 파일이 있는 실제 절대 경로로 반드시 변경해야 합니다.
- macOS 예시: "/Users/yourname/Documents/mcp_project/main.py"
- Windows 예시: "C:/Users/yourname/Documents/mcp_project/main.py" (경로 구분자를 /로 사용해도 괜찮습니다.)
설정 적용 및 테스트
- claude_desktop_config.json 파일을 저장한 후, Claude 데스크톱 앱을 완전히 종료했다가 다시 시작하세요.
- 다시 설정의 개발자 탭으로 이동하여 weather 서버가 녹색 점과 함께 활성화되었는지 확인합니다.
- 이제 Claude 채팅창에서 다음과 같이 프롬프트를 입력하여 날씨 정보를 가져올 수 있습니다.
맺음말
오늘은 FastMCP를 이용해 AI가 실시간 날씨 정보를 조회할 수 있는 간단한 도구를 만들어 보았습니다. 비록 코드는 짧지만, AI의 한계를 보완하고 능력을 확장하는 '툴링(Tooling)'의 핵심 개념을 담고 있습니다.
날씨 정보뿐만 아니라 환율 변환, 주식 가격 조회, 사내 데이터베이스 검색 등 무한한 도구를 직접 만들어 AI를 더욱 강력한 나만의 비서로 만들어보는 건 어떨까요?
'개발 > python' 카테고리의 다른 글
[python] Covid19 정보조회 (0) | 2021.01.28 |
---|---|
[python] pyinstaller (0) | 2021.01.17 |
[python 기초] 엑셀에 달력출력하기 (0) | 2021.01.07 |