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

快速构建MCP工具的开发包FastMCP

FastMCP是一个用于快速构建MCP(Model Context Protocol)服务器的Python框架,它能帮你轻松地将自定义工具和数据源接入大型语言模型(LLM)。你的核心需求是查询天气和热点新闻,这正是FastMCP的典型应用场景。

📦 FastMCP核心概念与安装

为了高效开发,了解其核心概念很有帮助。你可以把它看作是为LLM构建“API”的专用框架。

核心概念作用简单类比
工具 (Tools)让LLM执行具体操作,如查询天气、搜索新闻。可执行的函数
资源 (Resources)向LLM提供只读数据,如配置文件、静态文档。数据文件或只读API
提示 (Prompts)为LLM定义可复用的对话模板。预设好的对话脚本

安装FastMCP非常简单,推荐使用uv进行高效的依赖管理:

# 安装uvbrewinstalluv# macOS系统# 使用uv安装FastMCPuv pipinstallfastmcp

🌦️ 实战一:构建天气查询工具

要查询天气,通常需要调用第三方天气API。这里提供一个基于美国国家气象局 (NWS) API的示例,该API免费且无需注册。

fromtypingimportAnyimporthttpxfromfastmcpimportFastMCP# 初始化FastMCP服务器mcp=FastMCP("Weather Server")# 常量NWS_API_BASE="https://api.weather.gov"USER_AGENT="weather-app/1.0"asyncdefmake_nws_request(url:str)->dict[str,Any]|None:"""辅助函数:向NWS API发起请求"""headers={"User-Agent":USER_AGENT,"Accept":"application/geo+json"}asyncwithhttpx.AsyncClient()asclient:try:response=awaitclient.get(url,headers=headers,timeout=30.0)response.raise_for_status()returnresponse.json()exceptException:returnNone@mcp.tool()asyncdefget_forecast(latitude:float,longitude:float)->str:"""获取指定经纬度的天气预报。 参数: latitude: 纬度 longitude: 经度 """# 1. 获取该坐标点的预报接口地址points_url=f"{NWS_API_BASE}/points/{latitude},{longitude}"points_data=awaitmake_nws_request(points_url)ifnotpoints_data:return"无法获取该地点的预报数据。"# 2. 获取详细的天气预报forecast_url=points_data["properties"]["forecast"]forecast_data=awaitmake_nws_request(forecast_url)ifnotforecast_data:return"无法获取详细的预报信息。"# 3. 格式化返回未来5个时段的预报periods=forecast_data["properties"]["periods"][:5]forecasts=[]forperiodinperiods: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()

⚠️注意:此工具基于美国国家气象局(NWS) API,主要覆盖美国地区。如需查询全球天气,可以改用OpenWeatherMap等商业API(通常需要注册并获取API密钥)。

📰 实战二:获取热点新闻

要获取热点新闻,我们可以通过调用聚合新闻的RSS或API来实现。下面是一个示例,它使用了News API(需要注册获取免费API密钥)。

importosimporthttpxfromfastmcpimportFastMCP# 初始化FastMCP服务器mcp=FastMCP("News Server")NEWS_API_KEY=os.getenv("NEWS_API_KEY")# 请将你的API密钥设置在环境变量中NEWS_API_BASE="https://newsapi.org/v2"@mcp.tool()asyncdefget_top_headlines(category:str="general",country:str="us")->str:"""获取指定分类和国家的头条新闻。 参数: category: 新闻分类,如 business, entertainment, general, health, science, sports, technology country: 国家代码,如 us, gb, cn """ifnotNEWS_API_KEY:return"错误:未配置NEWS_API_KEY环境变量。"url=f"{NEWS_API_BASE}/top-headlines"params={"apiKey":NEWS_API_KEY,"category":category,"country":country,"pageSize":10# 获取10条新闻}asyncwithhttpx.AsyncClient()asclient:try:response=awaitclient.get(url,params=params,timeout=30.0)response.raise_for_status()data=response.json()excepthttpx.RequestErrorase:returnf"请求出错:{e}"excepthttpx.HTTPStatusErrorase:returnf"API返回错误:{e.response.status_code}"ifdata["status"]!="ok"ordata["totalResults"]==0:return"未找到相关新闻。"articles=data["articles"]news_list=[]foridx,articleinenumerate(articles,1):news_list.append(f"{idx}.{article['title']}\n"f" 来源:{article['source']['name']}\n"f" 发布时间:{article.get('publishedAt','N/A')}\n"f" 摘要:{article.get('description','暂无描述')}\n")returnf"找到{len(articles)}条新闻:\n\n"+"\n".join(news_list)if__name__=="__main__":# 运行服务器mcp.run()

🚀 运行、调试与集成

创建好工具后,你需要运行服务器并连接到LLM客户端。

  1. 运行与调试
    最便捷的方式是使用fastmcp dev命令。这会启动一个带图形界面的MCP Inspector,你可以在其中直接测试刚编写的工具,查看参数和返回结果。

    fastmcp dev weather_news_server.py
  2. 集成到LLM客户端
    调试无误后,可以将服务器安装到支持MCP的桌面应用(如Claude Desktop)中。

    fastmcpinstallweather_news_server.py --name"我的天气新闻工具"

    安装后,在Claude等助手中,你就可以直接问:“查询纽约的天气”或“给我看看今天的科技新闻”,模型会自动调用对应的工具并返回结果。

为了让你更清晰地了解完整的开发流程,下图总结了从创建工具到集成使用的关键步骤:

flowchart TD A[定义工具函数] --> B[使用 mcp.tool 装饰器注册] B --> C[使用 fastmcp dev 调试] C --> D[使用 fastmcp install 部署到客户端] D --> E[在LLM客户端中<br>(如Claude)通过对话调用]

总的来说,FastMCP通过其简洁的Python接口,极大地降低了为大语言模型开发外部工具的门槛。除了天气和新闻,你还可以用同样的方式创建计算、文件处理、数据库查询等任何你需要的工具

http://www.jsqmd.com/news/98087/

相关文章:

  • 如何快速掌握Fay数字人框架:从零开始构建智能对话系统的完整指南
  • 全新升级丨博为自主可控新一代消防信息传输控制单元!
  • 太阳能电池串IV检测系统:精准契合行业标准,筑牢光伏质量防线
  • 推荐字节的文档图像解析工具Dolphin
  • DeepSeek-V3训练稳定性终极突破:从架构创新到工程实践的全方位解密
  • RocketMQ 新手入门:10分钟搞定项目集成与基础使用
  • OpenVINO静态批处理性能优化终极指南:从入门到精通
  • 收藏!2025中国大模型市场全景解析:规模破290亿,竞争梯队+核心玩家一文看懂(小白程序员必学)
  • 近端策略优化PPO如何实现3倍训练加速?掌握同策略优化的核心技巧
  • IDEA提示Untrusted Server‘s certificate
  • 你可能不知道的 14 个 QLineEdit 隐藏技能
  • 技术日报|AI工作流工具Sim爆火登顶日增1451星,OpenAI终端助手Codex强势崛
  • UI-TARS智能界面助手:彻底解放你的数字生产力
  • 智变物业管理,效率全面升级
  • day35(12.16)——leetcode面试经典150
  • 日志排查技巧:快速定位问题的方法
  • 计算机毕设java人生感悟总结分享与遗嘱设立系统 基于Java的个人成长与人生规划管理系统 Java驱动的人生回顾与未来规划综合平台
  • 红杉资本 · 合伙人团队:AI的万亿美元级机会(主题演讲 2)
  • 3个关键步骤实现SVG动画加载:Glide图片缓存技术深度解析
  • VMware Cloud Director Availability 4.7.4 发布 - 灾难恢复和迁移 (DRaaS 解决方案)
  • 喵喵喵 XVI
  • 深入解析:人工智能与自动化:重塑未来工作的方式与意义
  • 2025 年 12 月电动升降拉篮品牌权威推荐榜:厨房收纳革新利器,智能升降与静音承重的品质之选 - 品牌企业推荐师(官方)
  • 2025年12月成都四川工作服厂家推荐:基于实力评测的排行榜单分析 - 品牌推荐
  • Ludwig分布式训练优化:从单机到集群的性能提升指南
  • 偏头痛治疗靶点ADCYAP1
  • 冬季交通守护者:加热雨雪传感器在智慧道路中的应用
  • ‌智慧校园平台性价比评估指南:实用思路与落地方法‌
  • 37、Windows 8 安全与诊断实用指南
  • 微前段框架解决方案,零基础入门到精通,收藏这篇就够了