这是一个生产就绪的 MCP(模型上下文协议)服务器,可将实时马来西亚天气预报带给您最喜欢的 AI 助手。
该项目实现了一个本地 MCP 服务器,该服务器从 MET 马来西亚的 API 获取实时天气数据,并将其无缝集成到任何兼容 MCP 的客户端(如 Claude Desktop、Cursor、Cline 等)。用户可以使用自然语言询问他们的 AI 助手关于马来西亚的天气情况,AI 助手将使用此服务器获取准确且最新的预报。
模型上下文协议(MCP) 是一个标准,允许 AI 助手与外部工具和服务进行交互。通过将这个 MCP 服务器与您的 AI 助手集成,您可以使它能够:
check_weather_today 和 check_7day_forecast),您的 AI 助手可以调用这些工具┌─────────────────────────────────────────────────────┐
│ 您的本地机器 │
├─────────────────────────────────────────────────────┤
│ 您的 MCP 客户端(Claude、Cursor、Cline等) │
│ ↓ │
│ MCP 服务器(weather-by-met)← 本项目 │
│ ├─ server.py (MCP 服务器) │
│ ├─ scheduler.py (更新天气数据) │
│ └─ MySQL DB (存储预报) │
│ ↓ │
│ MET 马来西亚 API(天气数据源) │
└─────────────────────────────────────────────────────┘
用户:"吉隆坡的天气怎么样?"
↓
AI 向 MCP 服务器询问 → MCP 查询数据库 → AI 回应
五分钟内启动!这将在您的机器上设置一切。
开始前,请确保您拥有:
brew install mysql)git clone https://github.com/zhenkai-dev/weather-by-met.git
cd weather-by-met
pip install -r requirements.txt
这会安装:
fastmcp - MCP 服务器框架mysql-connector-python - MySQL 数据库驱动程序pydantic - 输入验证requests - 用于 API 调用# 从模板创建 .env 文件
cp .env.example .env
现在编辑 .env 文件,填写您的 MySQL 凭证:
# macOS/Linux
nano .env
# Windows - 使用记事本或其他编辑器
.env 文件的内容:
DB_HOST=localhost
DB_USER=root
DB_PASSWORD=your_mysql_password_here
DB_NAME=weather_by_met
然后初始化数据库:
python init_db.py
这会自动创建 weather_by_met 数据库和 weather_forecasts 表。
在一个终端中启动调度器以获取天气数据:
python scheduler.py
您将看到如下输出:
[2025-11-10 10:30:00] 开始调度器...
[2025-11-10 10:30:05] ✓ 获取了38个地点的天气
[2025-11-10 10:30:07] ✓ 调度器已准备好 - 将每15分钟更新一次
在后台保持此终端运行。它将:
选择下面的 MCP 客户端之一并按照配置步骤操作。
步骤 5.1:打开配置文件
macOS/Linux:
nano ~/Library/Application\ Support/Claude/claude_desktop_config.json
Windows:
使用 %APPDATA%\Claude\claude_desktop_config.json 打开记事本
步骤 5.2:添加配置(替换路径为您实际路径):
{
"mcpServers": {
"weather-malaysia": {
"command": "python",
"args": ["/path/to/weather-by-met/server.py"],
"env": {
"DB_HOST": "localhost",
"DB_USER": "root",
"DB_PASSWORD": "your_mysql_password",
"DB_NAME": "weather_by_met"
}
}
}
}
步骤 5.3:重启 Claude Desktop
步骤 5.1:打开 Cursor 设置
步骤 5.2:添加 MCP 服务器配置
python/path/to/weather-by-met/server.py{
"DB_HOST": "localhost",
"DB_USER": "root",
"DB_PASSWORD": "your_mysql_password",
"DB_NAME": "weather_by_met"
}
步骤 5.3:重启 Cursor
步骤 5.1:打开 Cline 设置
步骤 5.2:添加 MCP 服务器配置
stdiopython/path/to/weather-by-met/server.py{
"DB_HOST": "localhost",
"DB_USER": "root",
"DB_PASSWORD": "your_mysql_password",
"DB_NAME": "weather_by_met"
}
步骤 5.3:重启 Cline
路径示例(替换为您实际路径):
/Users/john/weather-by-met/server.pyC:\Users\john\weather-by-met\server.py/home/john/weather-by-met/server.py尝试询问您的 AI 助手:
"今天吉隆坡的天气怎么样?"
"给我彭亨的3天预报"
"显示本周日兰卡威的天气"
您应该能看到真实的天气数据!🎉
| 文件 | 目的 |
|---|---|
server.py | MCP 服务器 - 您的 AI 助手连接到此 |
scheduler.py | 在后台运行 - 每15分钟获取一次天气数据 |
init_db.py | 一次性设置 - 初始化 MySQL 数据库 |
.env | 您的配置 - 数据库凭证(不要提交!) |
.env.example | 模板展示 .env 应包含的内容 |
"command": "python" - 告诉您的 MCP 客户端运行 Python"args" - 到 server.py 的完整绝对路径(不是相对路径如 ./server.py)"env" - 传递给服务器的环境变量
DB_HOST:MySQL 运行的位置(通常为 localhost)DB_USER:MySQL 用户名(默认为 root)DB_PASSWORD:您在 MySQL 安装期间设置的密码DB_NAME:数据库名称(保留为 weather_by_met)验证您的路径是否正确:
# 运行此命令检查您的 weather-by-met 路径
ls -la /path/you/entered/server.py
# 应显示:server.py(而不是说“没有这样的文件或目录”)
您的 MCP 客户端可以使用这些工具来获取天气数据:
检查特定马来西亚地点的今日天气预报。
何时使用:当询问今日天气且未提及具体时间段时(例如,“今天的天气怎么样?”、“告诉我吉隆坡的天气”)。
参数:
location_query(字符串,可选):地点名称(例如城市、城镇、州)。如果没有提供,您的 AI 助手可能会使用设备/浏览器位置(如果可用)。返回:
示例:
"今天兰卡威的天气怎么样?"
"告诉我吉隆坡的天气"
"今天雪兰莪的天气怎么样?"
获取马来西亚地点的自定义时间段或特定日期天气预报。
两种模式可用:
days 参数)当请求特定时间段时使用(例如,“给我2天预报”,“明天的天气怎么样?”,“显示下周的天气”)。
参数:
location_query(字符串,可选):地点名称(例如城市、城镇、州)。如果没有提供,您的 AI 助手可能会使用设备/浏览器位置(如果可用)。days(整数):天数(1-7)。您的 AI 助手从用户的时段查询中提取此值。预报语义(与 MET 马来西亚的定义一致):
days=1(“明天”):仅返回明天的预报days=2+(“N天预报”):返回今天加上接下来的(N-1)天(包括今天作为第1天)
示例:
"明天下龙的天气怎么样?"
→ 仅返回明天
"给我兰卡威的2天预报"
→ 返回今天 + 明天
"显示吉隆坡的7天预报"
→ 返回今天至第7天
specific_day_name 参数)当请求特定日期时使用(例如,“这个星期天的天气怎么样?”、“显示下个星期二的天气”,“星期三会怎样?”)。
参数:
location_query(字符串,可选):地点名称(例如城市、城镇、州)。如果没有提供,您的 AI 助手可能会使用设备/浏览器位置(如果可用)。specific_day_name(字符串):日期名称(例如 '星期天'、'星期一'、'星期二' 等)。您的 AI 助手从用户的查询中提取此值。返回:仅返回所请求日期的预报
示例:
"这个星期天雪兰莪的天气怎么样?"
→ 仅返回星期天的预报
"显示下个星期二的天气"
→ 仅返回星期二的预报
"星期三吉隆坡会怎样?"
→ 仅返回星期三的预报
返回(两种模式):
响应格式: 您的 AI 助手以紧凑易读的格式呈现 JSON 数据,按日期分组:
周五,11月7日 - 23-32°C
柔佛(一般):
早晨:内陆地区有雨
下午:雷暴
夜间:无雨
柔佛巴鲁:
早晨:有雨
下午:无雨
夜间:无雨
周六,11月8日 - 23-32°C
柔佛(一般):
早晨:无雨
下午:雷暴
夜间:无雨
柔佛巴鲁:
早晨:无雨
下午:雷暴
夜间:无雨
总结:[天气模式分析]
重要说明:
您的 AI 助手按工具返回的所有日期的确切顺序显示
数据可用性:此工具仅提供从今天起的预报
所有地点都包含在每个日期中,其早晨、下午和夜晚的预报分别显示以提高清晰度。
自动从 MET 马来西亚 API 获取最新天气预报数据。
https://api.data.gov.my/weather/forecast删除过时的天气预报记录。
forecast_date < today 的记录| 变量 | 描述 | 默认值 | 是否必需 |
|---|---|---|---|
DB_HOST | MySQL 主机 | localhost | 是 |
DB_USER | MySQL 用户 | root | 是 |
DB_PASSWORD | MySQL 密码 | (空) | 是 |
DB_NAME | 数据库名称 | weather_by_met | 是 |
TELEGRAM_BOT_TOKEN | Telegram 机器人 API 令牌 | (空) | 否 |
TELEGRAM_CHAT_ID | Telegram 聊天 ID 用于警报 | (空) | 否 |
当调度器作业遇到问题时,通过 Telegram 接收错误警报:
创建 Telegram 机器人:
/newbot 并按照指示操作获取您的聊天 ID:
配置环境变量:
# 添加到您的 .env 文件:
TELEGRAM_BOT_TOKEN=your_bot_token_here
TELEGRAM_CHAT_ID=your_chat_id_here
如何工作: