使用说明
MCP气象服务器
模型上下文协议(MCP)服务器,使用Open-Meteo API为任何城市提供详细的天气信息。
特性
- 🌤️ 实时天气数据 适用于全球任何城市
- 📅 七天天气预报 每日气温和降水量
- 🌬️ 空气质量信息 包括欧洲空气质量指数
- 📍 自动地理编码 -只需提供城市名称
- 🌡️ 现状 包括温度、湿度和降水
- 📊 每小时预报 接下来的24小时
- 🌅 日出和日落时间 用于规划户外活动
- 🎯 人类可读的天气描述 而不是原始代码
- ⚡ 稳健的错误处理 具有重试逻辑和超时
- 🛡️ 类型安全 完全支持TypeScript
- 🎨 结构化JSON输出 便于编程访问
安装
npm install
用法
发展
npm run dev
生产
npm start
构建
npm run build
MCP检验员测试
您可以使用MCP Inspector测试天气服务器,这是一个用于测试MCP服务器的GUI工具。
1.安装并运行MCP检查器
npx -y @modelcontextprotocol/inspector
2.配置服务器
在MCP检查器设置中:
- 命令:
npx - 参数:
tsx main.ts
3.测试工具
连接后,您可以测试所有三个工具:
获取天气信息:获取当前天气状况和每小时预报
- 选择
get-weather从可用工具列表中选择工具 - 输入城市名称(例如,“纽约”、“伦敦”、“东京”)
- 点击“呼叫工具”查看当前天气数据
获取预报:获取7天天气预报
- 选择
get-forecast从可用工具列表中选择工具 - 输入城市名称
- 点击“呼叫工具”查看7天天气预报,包括每日温度和日出/日落时间
获得空气质量:获取空气污染数据
- 选择
get-air-quality从可用工具列表中选择工具 - 输入城市名称
- 点击“呼叫工具”查看空气质量指数和污染物水平
检查器将显示JSON响应,其中包含每个工具的所有结构化数据。
API
该服务器提供三种工具来获取全面的天气和空气质量信息:
1. get-weather
获取任何城市的详细当前天气信息。
参数:
city(string,必填):要获取天气的城市名称- 示例:“纽约”、“伦敦”、“东京”、“巴黎”
2. get-forecast
获取任何城市的7天天气预报。
参数:
city(string,必填):要获取预测的城市名称- 示例:“纽约”、“伦敦”、“东京”、“巴黎”
3. get-air-quality
获取任何城市的空气污染数据。
参数:
city(string,必填):要获取空气质量的城市名称- 示例:“纽约”、“伦敦”、“东京”、“巴黎”
输出示例
get-weather 输出
返回包含当前条件和每小时预测的结构化JSON数据:
{
"location": {
"name": "New York",
"fullName": "New York, New York, United States",
"latitude": 40.7128,
"longitude": -74.006,
"country": "United States",
"admin1": "New York"
},
"current": {
"time": "2024-01-15T14:30:00",
"formattedTime": "2:30 PM",
"temperature": 22.5,
"formattedTemperature": "22.5°C",
"feelsLike": 24.1,
"formattedFeelsLike": "24.1°C",
"humidity": 65,
"precipitation": 0,
"formattedPrecipitation": "No precipitation",
"weatherCode": 2,
"weatherDescription": "Partly cloudy"
},
"hourly": [
{
"time": "2024-01-15T15:00:00",
"formattedTime": "3:00 PM",
"temperature": 22.8,
"formattedTemperature": "22.8°C",
"precipitation": 0,
"formattedPrecipitation": "No precipitation"
}
],
"raw": {
// Original Open-Meteo API response for compatibility
}
}
get-forecast 输出
返回7天预报,包括每日温度、降水量和日出/日落时间:
{
"location": {
"name": "New York",
"fullName": "New York, New York, United States",
"latitude": 40.7128,
"longitude": -74.006,
"country": "United States",
"admin1": "New York"
},
"daily": [
{
"date": "2024-01-15",
"formattedDate": "Monday, Jan 15",
"maxTemperature": 25.2,
"formattedMaxTemperature": "25.2°C",
"minTemperature": 18.5,
"formattedMinTemperature": "18.5°C",
"precipitation": 2.1,
"formattedPrecipitation": "2.1mm",
"weatherCode": 3,
"weatherDescription": "Overcast",
"sunrise": "2024-01-15T07:15:00",
"formattedSunrise": "7:15 AM",
"sunset": "2024-01-15T16:45:00",
"formattedSunset": "4:45 PM"
}
],
"raw": {
// Original Open-Meteo API response for compatibility
}
}
get-air-quality 输出
返回欧洲空气质量指数和污染物水平的空气污染数据:
{
"location": {
"name": "New York",
"fullName": "New York, New York, United States",
"latitude": 40.7128,
"longitude": -74.006,
"country": "United States",
"admin1": "New York"
},
"current": {
"time": "2024-01-15T14:30:00",
"formattedTime": "2:30 PM",
"europeanAqi": 35,
"aqiLevel": "Fair",
"aqiDescription": "Air quality is acceptable",
"pm25": 28,
"pm10": 42,
"no2": 45,
"o3": 32,
"so2": 8
},
"hourly": [
{
"time": "2024-01-15T15:00:00",
"formattedTime": "3:00 PM",
"europeanAqi": 38,
"aqiLevel": "Fair",
"pm25": 30,
"pm10": 45,
"no2": 48,
"o3": 35,
"so2": 9
}
],
"raw": {
// Original Open-Meteo API response for compatibility
}
}
所做的改进
1. 增强的数据结构
- 将原始API JSON替换为结构化、经过处理的天气数据
- 添加了原始值和格式化字符串以提高灵活性
- 包括坐标和全名的位置详细信息
- 以结构化数组格式提供每小时预测
- 与原始API响应保持向后兼容性
2. 稳健的错误处理
- 实现了具有指数回退的重试逻辑
- 添加请求超时以防止挂起请求
- 针对不同故障场景提供更好的错误消息
- 优雅处理城市未发现错误
3. 类型安全
- 为所有API响应添加了全面的TypeScript接口
- 对地理编码和天气数据进行正确的类型检查
- 更好的IntelliSense支持和编译时错误检测
4. 配置管理
- 集中配置对象,便于维护
- 可配置的超时、重试次数和API终结点
- 无需接触核心逻辑即可轻松修改设置
5. 性能和可靠性
- 请求超时处理(10秒)
- 失败请求的自动重试(最多3次尝试)
- 城市名称的正确URL编码
- 中止控制器以取消请求
6. 数据处理
- 天气代码映射到人类可读的描述
- 温度、降水和时间的正确格式
- 可用时,使用州/省设置位置名称格式
- 时区感知时间格式
7. 代码组织
- 将关注点分解为实用函数
- 明确的功能命名和文档
- 模块化设计,便于测试和维护
- 一致的错误处理模式
技术细节
- 框架:模型上下文协议(MCP)SDK
- 语言:TypeScript
- 应用程序编程接口:Open Meteo(地理编码和天气)
- 运输: StdioServerTransport
- 验证:Zod模式验证
- 运行时:带ES模块的Node.js
错误处理
服务器处理各种错误情况:
- 未找到城市:返回一条包含拼写建议的有用消息
- 网络错误:最多可退回3次,呈指数级回退
- API错误:提供用户友好的错误消息
- 超时错误:10秒后中止请求
许可证
国际协调委员会