使用说明
使用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。 - 使用相对于工作区的路径以避免特定环境下的故障。
- 指示MCP运行时使用(指定的配置/参数)启动服务器
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 CAProvide 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用于外部调用;请包含适当的头部信息。