@mcp.tool()asyncdefget_alerts(state:str)->str:"""获取美国某个州的天气警报。
参数:
state: 两位美国州代码(例如 CA, NY)
""" url =f"{NWS_API_BASE}/alerts/active/area/{state}" data =await make_nws_request(url)ifnot data or"features"notin data:return"无法获取警报或未找到警报。"ifnot data["features"]:return"此州没有活跃警报。" alerts =[format_alert(feature)for feature in data["features"]]return"\n---\n".join(alerts)@mcp.tool()asyncdefget_forecast(latitude:float, longitude:float)->str:"""获取某个位置的天气预报。
参数:
latitude: 位置的纬度
longitude: 位置的经度
"""# 首先获取预报网格端点 points_url =f"{NWS_API_BASE}/points/{latitude},{longitude}" points_data =await make_nws_request(points_url)ifnot points_data:return"无法为此位置获取预报数据。"# 从点响应中获取预报 URL forecast_url = points_data["properties"]["forecast"] forecast_data =await make_nws_request(forecast_url)ifnot forecast_data:return"无法获取详细预报。"# 将周期格式化为可读的预报 periods = forecast_data["properties"]["periods"] forecasts =[]for period in periods[:5]:# 仅显示接下来的 5 个周期 forecast =f"""
{period['name']}:
温度: {period['temperature']}°{period['temperatureUnit']}风速: {period['windSpeed']}{period['windDirection']}预报: {period['detailedForecast']}""" forecasts.append(forecast)return"\n---\n".join(forecasts)
运行服务器
最后,初始化并运行服务器:
if __name__ =="__main__":# 初始化并运行服务器 mcp.run(transport='stdio')
您的服务器已完成!运行 uv run weather.py 以确认一切正常。
现在让我们使用现有的 MCP 主机 Claude for Desktop 测试您的服务器。
使用 Claude for Desktop 测试您的服务器
Claude for Desktop 尚未在 Linux 上提供。Linux 用户可以继续学习构建客户端教程,以构建连接到我们刚刚创建的服务器的 MCP 客户端。
首先,确保已安装 Claude for Desktop。您可以在此处安装最新版本。 如果您已经安装了 Claude for Desktop,请确保已更新到最新版本。
我们需要为想要使用的 MCP 服务器配置 Claude for Desktop。为此,请使用文本编辑器打开 Claude for Desktop 应用程序配置,位于 ~/Library/Application Support/Claude/claude_desktop_config.json。如果文件不存在,请确保创建它。