使用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。
安装与设置
- 安装依赖项(捕获在
pyproject.toml)。
- 如有需要,请添加/更新依赖项: - mcp[cli] 用于运行MCP服务器。 - mcp-use 用于客户端和代理的协调管理。 - langchain-groq 用于访问Groq模型。
- 创建一个
.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用于外部调用;请包含适当的头部信息。
