当前位置: 首页 > news >正文

uv运行一个MCP Server的完整流程

uv是一个高性能的Python包管理器,专注于性能提升。与pip相比,uv利用全局模块缓存,减少磁盘空间使用,并支持Linux、Windows和macOS系统。安装uv可以通过多种方式实现,例如使用Homebrew、Pacman、pip等。

step 1 安装uv:

        pip install uv

step 2 初始化项目:

          uv init weather

step 3 进入项目目录:

           cd weather

step 4 下载python环境:

           uv add python 3.11

step 5 生成uv虚拟环境:

            uv venv

            source .venv/bin/activate 【For MAC】

           or

            source .venv\Scripts\activate 【For Win】

step 6 切换uv虚拟环境:

          uv python pin 3.11

step 7: 写stdio的MCP Server逻辑 vim weather.py

           

from typing import Any
import httpx
from mcp.server.fastmcp import FastMCP# 初始化 FastMCP 服务器
mcp = FastMCP("weather")NWS_API_BASE = "https://api.weather.gov"
USER_AGENT = "weather-app/1.0"async def make_nws_request(url: str) -> dict[str, Any] | None:"""向 NWS API 发送请求并进行适当的错误处理。"""headers = {"User-Agent": USER_AGENT,"Accept": "application/geo+json"}async with httpx.AsyncClient() as client:try:response = await client.get(url, headers=headers, timeout=30.0)response.raise_for_status()return response.json()except Exception:return Nonedef format_alert(feature: dict) -> str:"""将警报特征格式化为可读字符串。"""props = feature["properties"]return f"""
Event: {props.get('event', 'Unknown')}
Area: {props.get('areaDesc', 'Unknown')}
Severity: {props.get('severity', 'Unknown')}
Description: {props.get('description', 'No description available')}
Instructions: {props.get('instruction', 'No specific instructions provided')}
"""@mcp.tool()
async def get_alerts(state: str) -> str:"""获取美国州的天气警报。Args:state: 美国州的两字母代码(例如 CA, NY)"""url = f"{NWS_API_BASE}/alerts/active/area/{state}"data = await make_nws_request(url)if not data or "features" not in data:return "无法获取警报或未找到警报。"if not data["features"]:return "该州没有活跃警报。"alerts = [format_alert(feature) for feature in data["features"]]return "\n---\n".join(alerts)@mcp.tool()
async def get_forecast(latitude: float, longitude: float) -> str:"""获取某个位置的天气预报。Args:latitude: 位置的纬度longitude: 位置的经度"""# 首先获取预报网格端点points_url = f"{NWS_API_BASE}/points/{latitude},{longitude}"points_data = await make_nws_request(points_url)if not points_data:return "无法获取该位置的预报数据。"# 从 points 响应获取预报 URLforecast_url = points_data["properties"]["forecast"]forecast_data = await make_nws_request(forecast_url)if not forecast_data:return "无法获取详细预报。"# 将周期格式化为可读的预报periods = forecast_data["properties"]["periods"]forecasts = []for period in periods[:5]:  # 仅显示接下来的 5 个周期forecast = f"""
{period['name']}:
Temperature: {period['temperature']}°{period['temperatureUnit']}
Wind: {period['windSpeed']} {period['windDirection']}
Forecast: {period['detailedForecast']}
"""forecasts.append(forecast)return "\n---\n".join(forecasts)if __name__ == "__main__":# 初始化并运行服务器mcp.run(transport='stdio')

step 8: uv run weather.py

http://www.dtcms.com/a/147783.html

相关文章:

  • XAttention
  • 人工智能100问☞第9问:什么是AI芯片?
  • 基于SpringBoot的高校体育馆场地预约管理系统-项目分享
  • 理性决策与情绪偏差
  • 永磁同步电机参数辨识算法--递推最小二乘法辨识
  • 让专业更轻盈,让启蒙更智能——特伦斯便携钢琴V30Pro
  • Stable Diffusion 制作角色三视图
  • HXBC编译相关错误
  • 深度学习:人工智能的核心驱动力
  • 影刀RPA - 简单易用且功能强大的自动化工具
  • wkhtmltopdf - HTML转PDF/图像命令行工具
  • CSS字体
  • 爬虫学习——Item封装数据与Item Pipeline处理数据
  • 基于 Vue,使用Vuex 或事件总线实现跨组件通信
  • Discuz!与DeepSeek结合:打造智能论坛,提升用户体验与运营效率
  • Go语言中的Context
  • 模拟车辆变道 python 可视化
  • MCP实践第一步--磕磕碰碰搭环境
  • Precision Machine Dynamics/Mechatronics Design - 6
  • 20242817李臻《Linux⾼级编程实践》第8周
  • 精准评估机器学习模型:从混淆矩阵到核心指标的深度解析+面试常见问题及解析(看这篇就够了)
  • Emacs入门篇2:安装evil插件以便vi老用户可以使用VI快捷键来快速使用Emacs
  • 笔记:react中 父组件怎么获取子组件中的属性或方法
  • 进程和线程(1)
  • RIP动态路由,实现两台PC互通三个路由器,两台电脑
  • 8086微机原理与接口技术复习(1)存储器(2)接口
  • Java 多态
  • 怎么安装python3.5-以及怎么在这个环境下安装包
  • 【解决】Vue + Vite + TS 配置路径别名成功仍爆红
  • Linux常见压缩格式详解