天气数据服务

一个基于Open-Meteo API的综合天气工具服务器,提供地理编码、当前天气、每日预报、历史数据和空气质量等功能。

  • by JoshuaChen42
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 JoshuaChen2048/mcp-server-weather

使用说明

MCP天气服务器

这是我为MCP服务器准备的代理型AI实践项目。

这个项目是一个综合性的天气工具服务器,它使用 mcp 库,用于提供来自(某来源)的广泛天气相关数据 Open-Meteo API(开放气象API)。

特点/功能

  • 地理编码: 将城市名称转换为经纬度。
  • 当前天气: 获取任何地点的最新天气状况。
  • 每日预报: 获取长达16天的天气预报。
  • 历史数据: 获取指定日期范围内的历史天气信息。
  • 空气质量: 获取空气质量数据,包括颗粒物浓度和各种气体水平。
  • 异步: 用途 httpx 为了高效、非阻塞的API请求。

要求

  • Python 3.13+
  • httpx>=0.28.1
  • mcp[cli]>=1.15.0

安装

  1. 克隆仓库:

    git clone https://github.com/JoshuaChen2048/mcp-server-weather.git
    cd mcp-server-weather
    
  2. 安装依赖项:

    建议使用虚拟环境。

    python -m venv .venv
    source .venv/bin/activate
    pip install -r requirements.txt 
    

使用方法

要运行服务器,请执行以下命令:

mcp run server.py

服务器将启动并在标准输入/输出上监听请求。

MCP客户端配置

要使用此工具与MCP客户端配合,您需要配置客户端以运行服务器。

Claude 桌面示例

以下是Claude Desktop的一个示例配置: claude_desktop_config.json:

{
  "mcpServers": {
    "weather": {
      "command": "/Users/JoshuaC/.pyenv/shims/uv",
      "args": [
        "run",
        "--with",
        "mcp[cli]",
        "mcp",
        "run",
        "/Users/JoshuaC/Documents/projects/mcp-server-weather/server.py"
      ]
    }
  }
}

注: 在这个示例中,路径是特定于某个用户环境的。您需要根据实际情况进行调整 command 以及通往……的路 server.py 以匹配您自己的系统配置。

API

get_coordinates_for_city(city_name: str) -> str

根据给定的城市名称检索其纬度和经度。

参数:

  • city_name (str): 城市名称。

返回值:

  • str一个包含纬度和经度的JSON字符串,或者如果城市未找到,则返回一条错误信息。

get_current_weather(latitude: float, longitude: float) -> str

获取指定位置的当前天气情况。

参数:

  • latitude (float): 该位置的纬度。
  • longitude (float): 该位置的经度。

返回值:

  • str一个包含来自Open-Meteo API的当前天气数据的JSON字符串,如果无法获取数据,则为错误消息。

get_daily_forecast(latitude: float, longitude: float, days: int = 7) -> str

获取指定地点的每日天气预报。

参数:

  • latitude (float):该位置的纬度。
  • longitude (float):该位置的经度。
  • days (int, 可选):预测的天数,范围在1到16天之间。默认值为7天。

返回值:

  • str一个包含来自Open-Meteo API的每日天气预报数据的JSON字符串,或者如果无法获取数据,则返回一条错误信息。

get_historical_weather(latitude: float, longitude: float, start_date: str, end_date: str) -> str

检索指定地点和日期范围内的历史天气数据。

参数:

  • latitude (float): 该位置的纬度。
  • longitude (float): 该位置的经度。
  • start_date (str): 该时间段的开始日期 YYYY-MM-DD 格式。
  • end_date (str): 该时间段的结束日期为 YYYY-MM-DD 格式。

返回值:

  • str一个包含来自Open-Meteo API的历史天气数据的JSON字符串,或者如果无法获取数据,则为一条错误消息。

get_air_quality(latitude: float, longitude: float) -> str

获取指定地点的空气质量数据。

参数:

  • latitude (float): 该位置的纬度。
  • longitude (float): 该位置的经度。

返回值:

  • str一个包含来自Open-Meteo API的空气质量数据的JSON字符串,如果无法获取数据,则返回错误消息。

许可证

这个项目遵循MIT许可证授权。详见 许可证 详情请见文件。