news 2026/7/7 19:41:40

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
快速构建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接口,极大地降低了为大语言模型开发外部工具的门槛。除了天气和新闻,你还可以用同样的方式创建计算、文件处理、数据库查询等任何你需要的工具

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/7 11:46:54

终极指南:Ocrad.js让JavaScript也能轻松实现OCR文字识别

在数字化时代&#xff0c;你是否曾经遇到过需要从图片中提取文字的困扰&#xff1f;比如想要复制图片中的一段文字&#xff0c;或者需要批量处理扫描文档&#xff1f;现在&#xff0c;通过Ocrad.js这个实用的JavaScript OCR库&#xff0c;这一切都变得简单无比&#xff01; 【免…

作者头像 李华
网站建设 2026/7/7 18:49:39

springboot彝族文化宣传系统-计算机毕业设计源码64025

摘要 随着信息技术的快速发展&#xff0c;少数民族文化传播方式逐渐暴露出覆盖面狭窄、效率低等问题。彝族文化作为我国重要的民族文化之一&#xff0c;面临着如何突破地域和时间限制、触及更广泛受众的挑战。传统的线下文化传播手段无法满足现代社会对高效、多样化文化传播的需…

作者头像 李华
网站建设 2026/7/6 22:32:42

Khoj邮箱验证安全机制深度剖析:从源码看防护设计哲学

在数字化身份验证成为标配的今天&#xff0c;邮箱验证作为用户注册的第一道防线&#xff0c;其安全性直接影响整个系统的稳定性。Khoj项目作为AI知识管理工具&#xff0c;在邮箱验证环节采用了独特的安全设计模式。本文将通过源码深度解析&#xff0c;揭示Khoj如何构建坚固的邮…

作者头像 李华
网站建设 2026/7/7 15:59:45

localStorage

一、localStorage 是什么浏览器本地存储永久保存&#xff08;不主动删就一直在&#xff09;只能存字符串同一域名下共享二、四个核心 API1️⃣ 保存数据localStorage.setItem(key, value);2️⃣ 读取数据localStorage.getItem(key);3️⃣ 删除某一项localStorage.removeItem(ke…

作者头像 李华
网站建设 2026/7/7 19:37:37

键盘布局编辑神器:三步打造你的专属个性化键盘

键盘布局编辑神器&#xff1a;三步打造你的专属个性化键盘 【免费下载链接】keyboard-layout-editor Web application to enable the design & editing of keyboard layouts 项目地址: https://gitcode.com/gh_mirrors/ke/keyboard-layout-editor 在追求个性化电脑使…

作者头像 李华
网站建设 2026/7/7 19:17:32

Visual Studio中的排序方法

目录 一、冒泡排序 1.介绍 2.使用模板 3.示例 4.注意事项 二、选择排序 1.介绍 2.使用模板 3.示例 4.注意事项 三、快速排序 1.介绍 2.使用模板 3.示例 4.注意事项 四、C#内置的排序方法 1.介绍 2.使用模板 3.注意事项 五、简单总结 一、冒泡排序 1.介绍 …

作者头像 李华