当前位置: 首页 > 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.cnnetsun.cn/news/81707.html

相关文章:

  • 推荐字节的文档图像解析工具Dolphin
  • 查 Intel CPU 信息不用绕弯!这个专属查询工具,精准直达官网详情~
  • MediaCreationTool 报错?用 Rufus 一键制作 Windows 启动 U 盘,兼容 Win10/11!
  • Dify平台提示词调试功能提升AI输出质量实测
  • Java JDK下载+安装+配置环境(详细教程含图片),小白收藏这篇就够了
  • 前端性能优化之大文件上传,零基础入门到精通,收藏这篇就够了
  • 37、Windows 8 安全与诊断实用指南
  • 蛋白质丙酰化修饰在代谢调控与疾病研究中的进展与应用
  • C# + LiveCharts 工业监控界面,实时数据可视化实战
  • 在数字中国建设大潮中,科技管理部门如何借助靶向的知识产权智能运营平台解决客户流失率高,达成重塑差异化服务优势,最终重塑健全长效运营机制?
  • 如何确保服务器的安全性
  • 获取JD商品详情数据 get_item_pro
  • 提权学习之旅—Windows操作系统如何提升权限,网络安全零基础入门到精通实战教程!
  • Directus:重新定义企业数据管理的开源革命
  • RAX3000M刷机终极指南:从零开始玩转OpenWrt系统
  • 软件产品设计中用户体验提升的主要问题分析
  • Typst数学排版终极指南:告别对齐困扰,打造完美公式
  • 22、企业环境下迁移 Windows 应用到 Linux 及瘦客户端计算的全面解析
  • 24、探索瘦客户端计算与Linux桌面资源
  • IT66122FN-300:低功耗发射器,配备HDMI 1.4 3D
  • uniapp+springboot微信小程序民宿预订管理系统设计与实现_337b01q6_论文
  • 第135篇:美国APT的苹果手机“三角测量“行动是如何被溯源发现的
  • 高效节能的工业动力核心:西门子罗宾康高压变频器LDZ14501000.070
  • CosyVoice语音合成实战指南:从零到一掌握微调全流程
  • 使用 Coze MCP 插件 + curl 调用工具生成高质量提示词示例
  • 5个Apache Weex渲染性能提升技巧:终极优化指南
  • 271. Java Stream API - 理解 Java Stream 的流水线模型:中间操作 vs 终端操作
  • 生成对抗网络:从代码到创意的商业变现指南
  • 【R与Python函数调用适配全攻略】:掌握跨语言协作的5大核心技术
  • R与Python库版本同步实践全解析(20年专家亲授避坑手册)