天气警报服务

一个通过MCP服务器提供天气警报工具的项目,支持交互式客户端查询美国各州的天气警报。

  • by Bhanuteja072
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 Bhanuteja072/WeatherServicesUsingMCP

使用说明

使用MCP的天气服务

一个示例项目,通过MCP(模型上下文协议)服务器暴露一个天气警报工具,并提供一个由……驱动的交互式客户端 mcp-use 以及Groq的大型语言模型(LLM)通过 langchain-groq。

这个仓库展示了如何:

  • 使用(某种技术或方法)构建一个MCP服务器 FastMCP 并发布工具。
  • 通过JSON配置文件启动服务器,并使用代理与其进行交互。
  • 调用国家气象局(NWS)API,并以用户友好的格式呈现结果。

特点/特性

  • 带有天气工具的MCP服务器:
    • get_alerts(state: str) 返回美国某州(例如。, CA, NY)。
  • 基于代理的交互式聊天客户端,可选会话记忆功能。
  • 为警报(事件、区域、严重程度、描述、指示)提供简洁、面向用户的结果输出。
  • 跨机器便携性的与工作区相关的MCP配置。

建筑学

  • server/weather.py (MCP服务器)
    • 用途 FastMCP("weather") 来自 mcp.server.fastmcp。
    • 声明带有(某种特性/功能)的工具 @mcp.tool().
    • 用途 httpx.AsyncClient 调用NWS API(https://api.weather.gov) 并附上适当的标题。
  • server/weather.json (MCP配置)
    • 指示MCP运行时使用(指定的配置/参数)启动服务器 uv run --with mcp[cli] mcp run server/weather.py。
    • 使用相对于工作区的路径以避免特定环境下的故障。
  • server/client.py (交互式代理客户端)
    • 通过加载环境变量 python-dotenv (.env)。
    • 创建一个 MCPClient 并且 MCPAgent 来自 mcp_use。
    • 用途 ChatGroq 来自 langchain-groq (介词)和……一起;带着;用;凭借 GROQ_API_KEY。
  • pyproject.toml
    • 项目元数据和依赖项由……管理 uv.
    • 注:项目名称不得为 mcp 以避免自我依赖的冲突。

项目结构

.
├── main.py
├── pyproject.toml
├── README.md
└── server/
		├── client.py         # Interactive REPL using MCPAgent + ChatGroq
		├── weather.py        # MCP server exposing the get_alerts tool
		└── weather.json      # MCP config to launch the weather server

先决条件

  • Python(由……管理) uv)。
  • uv 安装在您的系统上。
  • Groq API密钥已设置在环境变量中或 .env 文件: GROQ_API_KEY。

安装与设置

  1. 安装依赖项(捕获在 pyproject.toml)。
    • 如有需要,请添加/更新依赖项:
      • mcp[cli] 用于运行MCP服务器。
      • mcp-use 用于客户端和代理的协调管理。
      • langchain-groq 用于访问Groq模型。
  2. 创建一个 .env 在项目根目录下创建文件并填入您的Groq密钥:
    GROQ_API_KEY=your-key-here
    

如何跑步

  • 启动交互式客户端(推荐):

    uv run server/client.py
    

    然后输入一个提示,例如:

    • Provide me the weather alerts for CA
    • Provide me the weather alerts for NY
  • 可选地,直接运行MCP服务器以进行调试:

    uv run --with mcp[cli] mcp run server/weather.py
    

工具:获取警报(state)

输入

  • state (字符串):两位字母的州代码,例如。 CA, NY.

行为

  • 通话 https://api.weather.gov/alerts/active/area/{state}。
  • 为每个警报返回一个格式化的字符串,包括:
    • 事件、区域、严重程度、描述、说明。
  • 如果没有警报或发生错误,则返回一条有用的提示信息。

故障排除

  • 使用客户端时连接已关闭

    • 确保 server/weather.json 使用 server/weather.py (相对路径),而不是指向另一台机器的绝对路径。
    • 确认 mcp[cli] 已安装并可供使用 uv。
    • 验证您的 .env 包含有效内容 GROQ_API_KEY (由……要求/规定) ChatGroq)。
  • 在添加时出现的自依赖错误 mcp

    • 如果 pyproject.toml [project].name 是 mcp, uv add mcp[cli] 将会失败。
    • 重命名项目(例如。, weather-services-using-mcp)并重试。
  • 无状态警报

    • 终端点合法地返回没有活动警报。请尝试另一种状态或检查NWS(国家气象局)状态。

扩展服务器

  • 通过装饰异步函数来添加更多工具 @mcp.tool() 在 server/weather.py。
  • 除非消费者期望结构化数据,否则请保持输出格式用户友好(纯文本)。
  • 重复使用 httpx.AsyncClient 用于外部调用;请包含适当的头部信息。