MCP开放气象服务器
一个全面的模型上下文协议(MCP)服务器,提供对来自Open-Meteo API的天气数据的访问。该服务器提供当前天气、预报、历史数据、空气质量信息和海洋天气状况。
特性
- 天气预报:获取任何地点的当前天气和预报数据(最多16天)
- 历史天气:访问任何日期范围的历史天气数据
- 空气质量:当前和预测的空气质量数据,包括PM2.5、PM10和其他污染物
- 海洋天气:沿海和海洋位置的波高、方向和周期
- 位置搜索:按名称搜索位置以获取坐标
- 综合数据:访问100多个天气变量
- 动车组:支持不同的温度、风速和降水单位
- 时区支持:自动或手动时区规范
- 免费使用(Open-Meteo API不需要API密钥)
安装
npm install
npm run build用法
使用MCP客户端
将此服务器添加到MCP客户端配置中:
{
"servers": {
"open-meteo": {
"command": "node",
"args": ["path/to/mcp-open-meteo/dist/cli/stdio.js"]
}
}
}发展
在开发模式下运行:
npm run dev运行测试:
npm test工具
获取天气预报
获取某个位置的当前天气和预报数据。
参数:
latitude(数字,必填):纬度坐标(-90到90)longitude(数字,必填):经度坐标(-180至180)forecast_days(数字,可选):预测天数(1-16,默认值:7)hourly(string\[\],可选):要包含的每小时天气变量daily(string\[\],可选):要包含的每日天气变量current(string\[\],可选):要包含的当前天气变量timezone(字符串,可选):时区(默认:自动)temperature_unit(字符串,可选):摄氏度|华氏度(默认值:摄氏度)wind_speed_unit(字符串,可选):公里小时|毫秒|英里小时|节(默认值:公里小时)precipitation_unit(字符串,可选):毫米|英寸(默认值:毫米)
例子:
{
"latitude": 52.52,
"longitude": 13.41,
"forecast_days": 3
}获取历史天气
获取特定位置和日期范围的历史天气数据。
参数:
latitude(数字,必填):纬度坐标(-90到90)longitude(数字,必填):经度坐标(-180至180)start_date(字符串,必填):YYYY-MM-DD格式的开始日期end_date(字符串,必填):YYYY-MM-DD格式的结束日期hourly(string\[\],可选):要包含的每小时天气变量daily(string\[\],可选):要包含的每日天气变量timezone(字符串,可选):时区(默认:自动)temperature_unit(字符串,可选):摄氏度|华氏度(默认值:摄氏度)wind_speed_unit(字符串,可选):公里小时|毫秒|英里小时|节(默认值:公里小时)precipitation_unit(字符串,可选):毫米|英寸(默认值:毫米)
例子:
{
"latitude": 52.52,
"longitude": 13.41,
"start_date": "2024-01-01",
"end_date": "2024-01-07"
}获得空气质量
获取特定位置的当前和预测空气质量数据。
参数:
latitude(数字,必填):纬度坐标(-90到90)longitude(数字,必填):经度坐标(-180至180)forecast_days(数字,可选):预测天数(1-5,默认值:1)hourly(string\[\],可选):要包含的空气质量变量domains(字符串,可选):空气质量预报域(auto|cams_global|cams.europe,默认值:auto)
例子:
{
"latitude": 52.52,
"longitude": 13.41,
"forecast_days": 2
}获取海洋天气
获取沿海和海洋地区的海洋天气状况。
参数:
latitude(数字,必填):纬度坐标(-90到90)longitude(数字,必填):经度坐标(-180至180)forecast_days(数字,可选):预测天数(1-7,默认值:7)hourly(string\[\],可选):要包含的海洋天气变量daily(string\[\],可选):要包含的每日海洋天气变量
例子:
{
"latitude": 54.0,
"longitude": 6.0,
"forecast_days": 3
}搜索位置
按名称搜索位置以获取坐标。
参数:
name(字符串,必填):要搜索的位置名称count(数字,可选):最大结果数(1-100,默认值:10)language(字符串,可选):结果语言(默认值:en)
例子:
{
"name": "Berlin",
"count": 5
}可用天气变量
当前天气
temperature_2m:2米处的空气温度relative_humidity_2m:2米处的相对湿度apparent_temperature:感觉像是温度precipitation:降水量weather_code:WMO天气解释代码cloud_cover:总云量wind_speed_10m:10米处的风速wind_direction_10m:10米处的风向pressure_msl:海平面压力
每小时变量
包括所有当前天气变量以及:
dewpoint_2m:露点温度precipitation_probability:降水概率rain:降雨量showers:淋浴量snowfall:降雪量visibility:可视距离wind_gusts_10m:阵风- 还有更多。..
日常变量
temperature_2m_max:最高日温度temperature_2m_min:最低日温度precipitation_sum:日总降水量wind_speed_10m_max:最大日风速sunrise:日出时间sunset:日落时间uv_index_max:最大紫外线指数- 还有更多。..
例子
获取柏林天气
{
"tool": "get-weather-forecast",
"parameters": {
"latitude": 52.52,
"longitude": 13.41,
"forecast_days": 5,
"current": ["temperature_2m", "weather_code", "wind_speed_10m"],
"daily": ["temperature_2m_max", "temperature_2m_min", "precipitation_sum"]
}
}搜索伦敦
{
"tool": "search-locations",
"parameters": {
"name": "London",
"count": 3
}
}数据源
此服务器使用 开放式API,它提供:
- 全球天气预报长达16天
- 1940年的历史天气数据
- 来自多个天气模型的高分辨率数据
- 不需要API密钥
- 非商业用途免费
许可证
MIT许可证-有关详细信息,请参阅许可证文件。
贡献
- 分叉存储库
- 创建要素分支
- 进行更改
- 添加测试
- 提交拉取请求
发展
项目结构
src/
├── server/
│ ├── tools/ # MCP tools implementation
│ ├── types/ # TypeScript type definitions
│ ├── utils/ # Utility functions
│ └── config/ # Configuration constants
├── cli/
│ └── stdio.ts # CLI entry point
tests/ # Test files
docs/ # Documentation添加新工具
- 在中创建新的工具文件
src/server/tools/ - 从导出工具
src/server/tools/index.ts - 在中注册该工具
src/server/index.ts - 在中添加测试
tests/unit/tools/
运行测试
npm test # Run all tests
npm run test:watch # Run tests in watch mode
npm run test:coverage # Run tests with coverage