본문 바로가기
개발/python

[MCP] Python으로 날씨 챗봇 만들기

by xwing 2025. 7. 10.

🤖 나만의 AI 비서 만들기: Python과 FastMCP로 날씨 챗봇 도구 제작기

최근 ChatGPT 같은 대화형 AI 모델이 정말 똑똑해졌죠? 하지만 AI가 모든 것을 아는 건 아닙니다. 특히 "오늘 서울 날씨 어때?"와 같은 실시간 정보나 특정 데이터베이스에 접근해야 하는 질문에는 바로 대답하기 어렵습니다.

이때 필요한 것이 바로 "도구(Tool)"입니다. AI가 스스로 할 수 없는 일을 대신 처리해 주는 외부 기능이죠. 오늘은 Python의 FastMCP와 requests 라이브러리를 사용해, 특정 위치의 현재 날씨를 알려주는 간단한 도구를 만들고 서버를 구축하는 과정을 보여드리겠습니다.

✨ 완성된 코드 미리보기

먼저 우리가 만들 전체 코드입니다. 한눈에 봐도 무척 간단하죠?

Python
 
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}&current=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

Python
 
from mcp.server.fastmcp import FastMCP
import requests
  • FastMCP: 우리가 만들 도구를 등록하고 관리할 서버의 뼈대입니다.
  • requests: **외부 웹 서비스(API)**에 접속해서 데이터를 가져오는 역할을 합니다. 여기서는 무료 날씨 정보를 제공하는 Open-Meteo API에 접속하기 위해 사용합니다.

2. 핵심 기능: 날씨 도구 만들기

Python
 
@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. 서버 가동!

Python
 
if __name__ == "__main__":
    print("Starting MCP server...")
    mcp.run(transport="stdio")
  • 이제 준비된 도구를 장착한 서버를 실행할 차례입니다.
  • mcp.run(transport="stdio")는 표준 입출력(stdio) 방식으로 서버를 실행하라는 뜻입니다. 쉽게 말해, 터미널 창에서 직접 텍스트(JSON 형식)로 명령을 내리고 결과도 텍스트로 받아볼 수 있는 상태가 되는 것이죠.

🚀 그래서 이걸로 뭘 할 수 있을까?

이 코드를 실행하면 터미널에는 "Starting MCP server..."라는 메시지와 함께 서버가 조용히 명령을 기다립니다. 이제 다른 프로그램(예: AI 챗봇)이 이 서버에게 일을 시킬 수 있습니다.

예를 들어 AI 챗봇이 "부산 날씨 알려줘"라는 말을 듣는다면,

  1. 챗봇은 부산의 위도와 경도를 파악합니다. (약 35.18, 129.08)
  2. 우리가 만든 서버에 아래와 같은 요청을 보냅니다.
  3. JSON
     
    { "tool_code": "get_weather(latitude=35.18, longitude=129.08)" }
    
  4. 서버는 이 요청을 받아 get_weather 함수를 실행하고, Open-Meteo API에서 날씨 정보를 가져옵니다.
  5. 마지막으로, 서버는 다음과 같은 결과를 챗봇에게 돌려줍니다.
  6. JSON
     
    { "result": { "temperature_2m": 25.4, "wind_speed_10m": 8.5 } }
    
  7. 챗봇은 이 결과를 바탕으로 "현재 부산의 기온은 25.4도, 풍속은 8.5km/h입니다." 라고 멋지게 대답할 수 있게 됩니다.

🚀 Claude 데스크톱 MCP 서버 설정

  1. Claude 데스크톱 앱에서 **설정(Settings)**으로 이동합니다.
  2. 개발자(Developer) 탭을 선택하고 설정 편집(Edit Configuration) 버튼을 클릭하여 claude_desktop_config.json 파일을 엽니다.
  3. 아래의 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" (경로 구분자를 /로 사용해도 괜찮습니다.)

설정 적용 및 테스트

  1. claude_desktop_config.json 파일을 저장한 후, Claude 데스크톱 앱을 완전히 종료했다가 다시 시작하세요.
  2. 다시 설정의 개발자 탭으로 이동하여 weather 서버가 녹색 점과 함께 활성화되었는지 확인합니다.
  3. 이제 Claude 채팅창에서 다음과 같이 프롬프트를 입력하여 날씨 정보를 가져올 수 있습니다.

맺음말

오늘은 FastMCP를 이용해 AI가 실시간 날씨 정보를 조회할 수 있는 간단한 도구를 만들어 보았습니다. 비록 코드는 짧지만, AI의 한계를 보완하고 능력을 확장하는 '툴링(Tooling)'의 핵심 개념을 담고 있습니다.

날씨 정보뿐만 아니라 환율 변환, 주식 가격 조회, 사내 데이터베이스 검색 등 무한한 도구를 직접 만들어 AI를 더욱 강력한 나만의 비서로 만들어보는 건 어떨까요?

claude desktop

 

'개발 > python' 카테고리의 다른 글

[python] Covid19 정보조회  (0) 2021.01.28
[python] pyinstaller  (0) 2021.01.17
[python 기초] 엑셀에 달력출력하기  (0) 2021.01.07