天气信息服务

提供从美国国家气象局API获取天气警报和预报的服务。

  • by asifdotpy
  • Python
  • 本地部署
  • 1 星标
  • 更新于
在 GitHub 查看 asifdotpy/mcp-weather-server

使用说明

天气信息服务

该项目提供了从美国国家气象局(NWS)API获取天气信息的服务,包括警报和预报。

项目结构

  • main.py:项目的一个简单切入点。(目前,它只打印一条问候消息)。
  • weather.py:这是项目的核心。它实现了 WeatherService 它使用 FastMCP 该框架公开了获取天气数据的工具。它包括结构化JSON日志记录,并与NWS API通信。
  • smithery.yaml:这是Smithery的配置文件,该工具用于定义如何运行和与 WeatherService.
  • Dockerfile:建议使用Docker对项目进行容器化。
  • pyproject.toml:定义Python项目的项目元数据和依赖关系。
  • .gitignore:指定Git应忽略的有意未跟踪的文件。
  • .python-version:指定项目的Python版本(可能与以下工具一起使用 pyenv).
  • uv.lock:由生成的锁文件 uv Python包安装程序和解析器,确保可复制的构建。

(后续步骤中将添加有关WeatherService工具、运行项目和日志记录的更多部分)。

Weather维修工具

这 weather.py 脚本提供了 WeatherService 使用以下工具:

get_alerts(state: str) -> str

  • 目的: 获取美国特定州的活跃天气警报。
  • 论据:
    • state (str):两个字母的美国州代码(例如。, CA, NY).
  • 输出: 一个包含格式化天气警报的字符串,或者在没有发现警报或发生错误时显示一条消息。
    • 示例(成功获取警报):
      Event: Special Weather Statement
      Area: San Francisco Bay Shoreline
      Severity: Minor
      Description: ...
      Instructions: ...
      ---
      Event: Coastal Flood Advisory
      Area: North Bay Interior Valleys
      Severity: Moderate
      Description: ...
      Instructions: ...
      
    • 示例(无警报):
      No active alerts for this state.
      
    • 示例(错误):
      Unable to fetch alerts or no alerts found.
      

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

  • 目的: 获取特定地理位置的天气预报。
  • 论据:
    • latitude (float):位置的纬度。
    • longitude (float):位置的经度。
  • 输出: 一个字符串,包含未来5个时段的格式化天气预报,如果无法获取预报,则显示一条消息。
    • 示例(成功获取预测):
      Tonight:
      Temperature: 55°F
      Wind: 5 to 10 mph W
      Forecast: Mostly clear, with a low around 55. West wind 5 to 10 mph.
      ---
      Wednesday:
      Temperature: 70°F
      Wind: 5 to 15 mph W
      Forecast: Sunny, with a high near 70. West wind 5 to 15 mph, with gusts as high as 20 mph.
      ... (up to 5 periods)
      
    • 示例(错误):
      Unable to fetch forecast data for this location.
      

运行项目

该项目旨在作为服务运行,可能使用 FastMCP 框架和提供 smithery.yaml 配置。

  1. 先决条件:

    • Python 3.x
    • 这 httpx 库(以及中定义的其他依赖项 pyproject.toml).您通常可以使用pip安装这些:
      pip install httpx
      # Or, if using a full project setup with pyproject.toml
      pip install .
      
  2. 运行服务: 这 weather.py 可以直接执行脚本来启动服务。给定 smithery.yaml 文件,运行此操作的预期方式可能是:

    python weather.py
    

    这将启动 FastMCP 服务器,它将监听请求(例如,通过中配置的stdio) smithery.yaml).

    如果您安装了Smithery,您也可以使用Smithery命令运行它,但要运行 weather.py 直接为本地开发和测试工作。

    这 main.py 脚本是一个简单的入口点,不运行主天气服务。

日志记录

这 WeatherService 在……里面 weather.py 使用结构化JSON日志记录。这对于日志可能被日志管理系统摄取的生产环境特别有用。

日志实现的关键特征:

  • JSON格式(生产): 时中 ENV 环境变量设置为 production,日志以JSON格式输出。每个日志条目包括:
    • timestamp
    • level (例如,信息、错误)
    • logger (记录器名称。, WeatherService)
    • message
    • correlation_id (跟踪逻辑操作或流)
    • request_id (跟踪单个请求)
    • user_id
    • file 和 lineno (日志来源)
    • function (日志发生的函数名)
    • process 和 thread
    • environment (从 ENV 变量)
    • app_version (从 APP_VERSION 变量)
    • host (从 HOSTNAME 变量)
    • duration (适用于操作)
    • error_details (如果发生异常,则进行堆栈跟踪)
  • 可读格式(开发): 如果 ENV 未设置为 production (或者设置为其他类似的东西 development),日志以更易读的纯文本格式输出。
  • 可配置日志级别: 日志级别可以使用配置 LOG_LEVEL 环境变量(例如。, INFO, DEBUG, ERROR).默认值为 INFO.
  • 背景信息: 日志记录包括 correlation_id, request_id,以及 user_id 以帮助跟踪系统中的操作。

日志记录的环境变量:

  • LOG_LEVEL:设置日志的详细程度(例如。, DEBUG, INFO, WARNING, ERROR).默认为 INFO.
  • ENV:设置为 production 用于JSON日志记录。默认为 development 用于可读日志。
  • APP_VERSION:在日志中设置应用程序版本。默认为 0.1.0.
  • HOSTNAME:设置日志中的主机名。默认为 localhost.