上一篇我們做了 SQLite MCP,讓 MCP Server 可以操作資料庫,這次來做一個比較生活化的例子,讓 MCP Server 取得天氣資訊,不過這次我們不自己準備天氣資料,而是直接呼叫外部的 REST API。
今天會使用兩個 API:
最後我們希望可以直接在 MCP Inspector 裡輸入 Taipei 就可以取得台北的天氣。
因為這次需要從 Python 呼叫 REST API,所以先安裝 httpx,在 VS Code Terminal 執行python -m pip install httpx,如果遇到使用 pypi.org 發生連線問題,也可以使用其他套件來源。
安裝完成後,就可以開始建立 MCP Tool。
在 mcp-learning 資料夾新增,weather_server.py
首先引入需要的套件:
import httpx
from mcp.server.mcpserver import MCPServer
server = MCPServer("Weather MCP")
接著建立 get_weather Tool:
@server.tool()
def get_weather(city: str) -> str:
"""取得指定城市的目前天氣"""
這次我們讓使用者直接輸入城市名稱,而不是輸入經緯度。
因為天氣 API 需要的是經緯度,所以我們先呼叫 Geocoding API。
location_response = httpx.get(
"https://geocoding-api.open-meteo.com/v1/search",
params={
"name": city,
"count": 1,
"language": "en",
"format": "json"
}
)
location_response.raise_for_status()
location_data = location_response.json()
如果輸入 taipei,API 就會幫我們找到對應的位置,接著把經緯度取出來,這時候就完成:
Taipei
↓
Geocoding API
↓
latitude / longitude
拿到經緯度之後,就可以呼叫天氣 API:
weather_response = httpx.get(
"https://api.open-meteo.com/v1/forecast",
params={
"latitude": latitude,
"longitude": longitude,
"current": "temperature_2m,weather_code,wind_speed_10m"
}
)
weather_response.raise_for_status()
weather_data = weather_response.json()
current = weather_data["current"]
這裡我們取得:
最後整理成比較容易閱讀的文字:
return (
f"地點:{city_name}\n"
f"目前溫度:{current['temperature_2m']}°C\n"
f"天氣代碼:{current['weather_code']}\n"
f"風速:{current['wind_speed_10m']} km/h"
)


接著在 Terminal 執行mcp dev weather_server.py,開啟 MCP Inspector 後,可以看到get_weather點進去後會看到:

之後隨便輸入一個城市,這裡我選擇的是 taipei,目前程式使用英文地名查詢,所以這裡需要打英文才行,接著按下執行

可以看到出現了各種天氣訊息,這就代表我們成功了。
這次的流程其實可以簡單整理成:
使用者輸入城市
↓
MCP Tool
↓
Geocoding API
↓
取得經緯度
↓
Weather API
↓
取得天氣資料
↓
回傳結果
前面的 Calculator MCP 是 MCP Tool 自己完成計算,而這次的 get_weather 則是透過外部 REST API 取得資料,讓我更理解到 MCP Tool 不一定要自己完成所有功能,也可以把現有的 REST API 整合進來,讓 MCP Client 用統一的方式使用。