OpenWeatherMCP
MCP 服务配置
复制以下 JSON 到 OPClaw 或其他 MCP 客户端的配置文件中即可使用
{
"mcpServers": {
"openweather": {
"args": [
"openweather-mcp"
],
"command": "npx",
"env": {
"OPENWEATHER_API_KEY": "your_api_key_here"
}
}
}
}
服务介绍
OpenWeatherMap MCP 服务器
一个基于 Model Context Protocol (MCP) 的 OpenWeatherMap API 集成服务器,为 AI 助手提供全面的天气数据访问能力。
🌟 功能特性
核心天气功能
- 🌡️ 当前天气查询 - 获取实时天气数据,包括温度、湿度、风速、气压等
- 📅 天气预报 - 5天/3小时间隔的详细天气预报,含趋势分析
- 🏭 空气质量监测 - 实时空气质量指数和污染物浓度数据
- 🗺️ 天气地图 - 多图层天气地图瓦片(云层、降水、温度等)
- ⚠️ 天气警报 - 政府发布的天气预警和安全建议
- 📊 历史天气 - 历史天气数据查询和多日对比分析
智能城市名查询
- 🧠 智能回退 - 自动处理中英文城市名
- 🔄 自动地理编码 - 当直接城市名查询失败时,自动使用地理编码获取坐标
- 🌍 通用支持 - 通过地理编码API支持任何语言的城市名
辅助功能
- 🌍 地理编码 - 地名转坐标,支持模糊搜索
- 📍 反向地理编码 - 坐标转地名,获取位置信息
- 🔄 多单位支持 - 公制、英制、标准单位系统
- 🌐 多语言支持 - 中文、英文等多种语言
📦 安装
前置要求
- Node.js 18.0.0 或更高版本
- OpenWeatherMap API 密钥
获取 API 密钥
- 访问 OpenWeatherMap
- 注册账户并获取免费 API 密钥
- 设置环境变量:
bash
export OPENWEATHER_API_KEY="your_api_key_here"
安装方式
方式一:NPM 全局安装
bash
npm install -g openweather-mcp
方式二:从源码构建
bash
git clone https://github.com/QianJue-CN/OpenWeatherMCP.git
cd OpenWeatherMCP
npm install
npm run build
🚀 使用方法
作为 MCP 服务器运行
bash
设置 API 密钥
export OPENWEATHER_API_KEY="your_api_key_here"
启动服务器
npx openweather-mcp
在 Claude Desktop 中配置
在 Claude Desktop 的配置文件中添加:
json
{
"mcpServers": {
"openweather": {
"command": "npx",
"args": ["openweather-mcp"],
"env": {
"OPENWEATHER_API_KEY": "your_api_key_here"
}
}
}
}
在其他 MCP 客户端中使用
任何支持 MCP 协议的客户端都可以连接到此服务器。
🛠️ 可用工具
1. 当前天气查询 (get_current_weather)
获取指定位置的实时天气信息。
参数:
city(可选): 城市名称,如 "北京" 或 "Beijing" 或 "Beijing,CN"lat(可选): 纬度 (-90 到 90)lon(可选): 经度 (-180 到 180)zip(可选): 邮政编码,如 "10001,US"units(可选): 单位系统 (metric/imperial/standard)lang(可选): 语言代码 (zh_cn/en/es/fr/de/ja/ko/ru)
智能城市名支持:
- ✅ "北京"(中文)→ 自动工作
- ✅ "Beijing"(英文)→ 自动工作
- ✅ "上海"(中文)→ 自动工作
- ✅ "Shanghai"(英文)→ 自动工作
示例:
json
{
"city": "北京",
"units": "metric",
"lang": "zh_cn"
}
2. 天气预报 (get_weather_forecast)
获取5天天气预报数据。
参数:
- 位置参数同上
cnt(可选): 预报时间点数量 (最多40个)
示例:
json
{
"lat": 39.9042,
"lon": 116.4074,
"cnt": 16,
"units": "metric"
}
3. 空气质量 (get_air_quality)
获取空气质量数据。
参数:
lat: 纬度lon: 经度
4. 天气地图 (get_weather_map)
获取天气地图瓦片。
参数:
layer: 图层类型 (clouds_new/precipitation_new/pressure_new/wind_new/temp_new)z: 缩放级别 (0-10)x: 瓦片 X 坐标y: 瓦片 Y 坐标
5. 天气警报 (get_weather_alerts)获取天气预警信息。
参数:
lat: 纬度lon: 经度
6. 历史天气 (get_historical_weather)
查询历史天气数据。
参数:
lat: 纬度lon: 经度dt: 查询日期的 Unix 时间戳units: 单位系统lang: 语言代码
7. 地理编码 (geocoding)
根据地名获取坐标。
参数:
q: 位置查询字符串limit: 返回结果数量 (1-5)
8. 反向地理编码 (reverse_geocoding)
根据坐标获取地名。
参数:
lat: 纬度lon: 经度limit: 返回结果数量 (1-5)
📝 使用示例
查询北京当前天气
json
{
"tool": "get_current_weather",
"parameters": {
"city": "北京",
"units": "metric",
"lang": "zh_cn"
}
}
获取上海5天天气预报
json
{
"tool": "get_weather_forecast",
"parameters": {
"city": "上海",
"units": "metric",
"lang": "zh_cn"
}
}
查询空气质量
json
{
"tool": "get_air_quality",
"parameters": {
"lat": 39.9042,
"lon": 116.4074
}
}
🌍 智能城市名查询工作原理
- 直接查询:首先尝试使用提供的城市名直接查询天气
- 自动回退:如果直接查询失败(404错误),自动触发地理编码
- 坐标转换:通过地理编码API将城市名转换为精确坐标
- 重新查询:使用获取的坐标重新查询天气数据
- 无缝体验:整个过程对用户透明,无需手动处理
这意味着您可以使用任何语言的城市名:
- 中文:北京、上海、广州、深圳
- 英文:Beijing、Shanghai、Guangzhou、Shenzhen
- 其他语言:東京、ソウル、Paris、London
🔧 开发
项目结构
src/
├── index.ts # MCP 服务器入口
├── types/
│ ├── weather.ts # 天气数据类型定义
│ └── mcp.ts # MCP 工具类型定义
├── services/
│ └── openweather.ts # OpenWeatherMap API 服务
└── tools/
├── current-weather.ts # 当前天气工具
├── forecast.ts # 天气预报工具
├── air-pollution.ts # 空气质量工具
├── weather-maps.ts # 天气地图工具
├── weather-alerts.ts # 天气警报工具
└── historical-weather.ts # 历史天气工具
构建和测试
bash
安装依赖
npm install
构建项目
npm run build
开发模式(监听文件变化)
npm run dev
运行测试
npm test
代码检查
npm run lint
⚠️ 注意事项
- API 限制: 免费账户有调用次数限制,请合理使用
- 历史数据: 历史天气数据需要付费订阅
- One Call API: 天气警报功能需要 One Call API 3.0 订阅
- 网络连接: 确保服务器能够访问 OpenWeatherMap API
🤝 贡献
欢迎提交 Issue 和 Pull Request!
📄 许可证
MIT License