iT邦幫忙

2026 iThome 鐵人賽

DAY 11
0
AI Engineering

30 天探索 MCP:從基礎概念到實作系列 第 11 篇

把 REST API 變成 MCP Tool

  • 分享至 

  • xImage
  •  

上一篇我們做了 SQLite MCP,讓 MCP Server 可以操作資料庫,這次來做一個比較生活化的例子,讓 MCP Server 取得天氣資訊,不過這次我們不自己準備天氣資料,而是直接呼叫外部的 REST API。

今天會使用兩個 API:

  • Geocoding API:把城市名稱轉換成經緯度
  • Weather API:根據經緯度取得目前天氣

最後我們希望可以直接在 MCP Inspector 裡輸入 Taipei 就可以取得台北的天氣。


先安裝 httpx

因為這次需要從 Python 呼叫 REST API,所以先安裝 httpx,在 VS Code Terminal 執行python -m pip install httpx,如果遇到使用 pypi.org 發生連線問題,也可以使用其他套件來源。

安裝完成後,就可以開始建立 MCP Tool。


建立 Weather MCP

在 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

呼叫 Weather API

拿到經緯度之後,就可以呼叫天氣 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"
)

完整程式碼

https://ithelp.ithome.com.tw/upload/images/20260923/2017876963O59SEFr3.png

https://ithelp.ithome.com.tw/upload/images/20260923/2017876939oZloD05X.png

使用 MCP Inspector 測試

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

https://ithelp.ithome.com.tw/upload/images/20260923/20178769ZfTwbZLkt3.png

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

https://ithelp.ithome.com.tw/upload/images/20260923/20178769lZvRosHNDl.png

可以看到出現了各種天氣訊息,這就代表我們成功了。


這次做了什麼?

這次的流程其實可以簡單整理成:

使用者輸入城市
        ↓
   MCP Tool
        ↓
Geocoding API
        ↓
取得經緯度
        ↓
  Weather API
        ↓
取得天氣資料
        ↓
   回傳結果

總結

前面的 Calculator MCP 是 MCP Tool 自己完成計算,而這次的 get_weather 則是透過外部 REST API 取得資料,讓我更理解到 MCP Tool 不一定要自己完成所有功能,也可以把現有的 REST API 整合進來,讓 MCP Client 用統一的方式使用。


上一篇
SQLite MCP:讓 AI 開始查詢資料庫
下一篇
一個 Client 同時連接多個 MCP Server
系列文
30 天探索 MCP:從基礎概念到實作 共 17 篇
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言