使用说明
天气信息服务
该项目提供了从美国国家气象局(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:由生成的锁文件uvPython包安装程序和解析器,确保可复制的构建。
(后续步骤中将添加有关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 配置。
-
先决条件:
- Python 3.x
- 这
httpx库(以及中定义的其他依赖项pyproject.toml).您通常可以使用pip安装这些:pip install httpx # Or, if using a full project setup with pyproject.toml pip install .
-
运行服务: 这
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格式输出。每个日志条目包括:timestamplevel(例如,信息、错误)logger(记录器名称。,WeatherService)messagecorrelation_id(跟踪逻辑操作或流)request_id(跟踪单个请求)user_idfile和lineno(日志来源)function(日志发生的函数名)process和threadenvironment(从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.