112 lines
3.2 KiB
Python
112 lines
3.2 KiB
Python
|
import requests
|
||
|
from mcp.server.fastmcp import FastMCP
|
||
|
|
||
|
mcp = FastMCP("hko mcp")
|
||
|
|
||
|
@mcp.tool()
|
||
|
def get_weather_info(dataType: str, lang: str = "en"):
|
||
|
"""
|
||
|
Get weather information from the Hong Kong Observatory.
|
||
|
|
||
|
Args:
|
||
|
dataType: The type of weather information to get.
|
||
|
- flw: Local Weather Forecast
|
||
|
- fnd: 9-day Weather Forecast
|
||
|
- rhrread: Current Weather Report
|
||
|
- warnsum: Weather Warning Summary
|
||
|
- warningInfo: Weather Warning Information
|
||
|
- swt: Special Weather Tips
|
||
|
lang: The language of the weather information.
|
||
|
- en: English
|
||
|
- tc: Traditional Chinese
|
||
|
- sc: Simplified Chinese
|
||
|
Returns:
|
||
|
The weather information by JSON format.
|
||
|
"""
|
||
|
|
||
|
# http get request
|
||
|
# url = f"https://www.hko.gov.hk/wxinfo/fnd/fnd_{lang}.htm"
|
||
|
url = f"https://data.weather.gov.hk/weatherAPI/opendata/weather.php?dataType={dataType}&lang={lang}"
|
||
|
response = requests.get(url)
|
||
|
response.raise_for_status()
|
||
|
html = response.text
|
||
|
# print(html) # for check the response only
|
||
|
|
||
|
return response.json()
|
||
|
|
||
|
|
||
|
@mcp.tool()
|
||
|
def get_earthquake_info(dataType: str, lang: str = "en"):
|
||
|
"""
|
||
|
Get earthquake information from the Hong Kong Observatory.
|
||
|
|
||
|
Args:
|
||
|
dataType: The type of earthquake information to get.
|
||
|
- qem: Quick Earthquake Messages
|
||
|
- feltearthquake: Locally Felt Earth Tremor Report
|
||
|
lang: The language of the earthquake information.
|
||
|
- en: English
|
||
|
- tc: Traditional Chinese
|
||
|
- sc: Simplified Chinese
|
||
|
Returns:
|
||
|
The earthquake information by JSON format.
|
||
|
"""
|
||
|
|
||
|
url = f"https://data.weather.gov.hk/weatherAPI/opendata/earthquake.php?dataType={dataType}&lang={lang}"
|
||
|
response = requests.get(url)
|
||
|
response.raise_for_status()
|
||
|
html = response.text
|
||
|
# print(html) # for check the response only
|
||
|
|
||
|
return response.json()
|
||
|
|
||
|
|
||
|
@mcp.tool()
|
||
|
def Gregorian_Lunar_Calendar_Coversion(date: str):
|
||
|
"""
|
||
|
Convert Gregorian date to Lunar date.
|
||
|
|
||
|
Args:
|
||
|
date: The Gregorian date to convert.
|
||
|
- Format: YYYY-MM-DD
|
||
|
Returns:
|
||
|
The Lunar date in by JSON format.
|
||
|
Args:
|
||
|
LunarYear: The Lunar year.
|
||
|
LunarDate: The Lunar date.
|
||
|
"""
|
||
|
|
||
|
url = f"https://data.weather.gov.hk/weatherAPI/opendata/lunardate.php??date={date}"
|
||
|
response = requests.get(url)
|
||
|
response.raise_for_status()
|
||
|
html = response.text
|
||
|
# print(html) # for check the response only
|
||
|
|
||
|
return html
|
||
|
|
||
|
|
||
|
@mcp.tool()
|
||
|
def rainfall_past_hour_from_station(lang: str = "en"):
|
||
|
"""
|
||
|
Get rainfall past hour from the Hong Kong Observatory.
|
||
|
|
||
|
Args:
|
||
|
lang: The language of the rainfall information.
|
||
|
- en: English
|
||
|
- tc: Traditional Chinese
|
||
|
- sc: Simplified Chinese
|
||
|
Returns:
|
||
|
The rainfall past hour information by JSON format.
|
||
|
"""
|
||
|
|
||
|
url = f"https://data.weather.gov.hk/weatherAPI/opendata/hourlyRainfall.php?lang={lang}"
|
||
|
response = requests.get(url)
|
||
|
response.raise_for_status()
|
||
|
html = response.text
|
||
|
# print(html) # for check the response only
|
||
|
|
||
|
return response.json()
|
||
|
|
||
|
|
||
|
if __name__ == '__main__':
|
||
|
mcp.run(transport='stdio')
|