<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>AI工具链 on Kalend's Blog</title><link>https://blog.kalend.top/tags/ai%E5%B7%A5%E5%85%B7%E9%93%BE/</link><description>Recent content in AI工具链 on Kalend's Blog</description><generator>Hugo -- gohugo.io</generator><language>zh</language><lastBuildDate>Tue, 30 Jun 2026 10:00:00 +0800</lastBuildDate><atom:link href="https://blog.kalend.top/tags/ai%E5%B7%A5%E5%85%B7%E9%93%BE/index.xml" rel="self" type="application/rss+xml"/><item><title>FastMCP凭什么吃下70%的MCP生态？25000星背后的技术决策</title><link>https://blog.kalend.top/2026/06/30/2026-06-30-fastmcp-ecosystem.html/</link><pubDate>Tue, 30 Jun 2026 10:00:00 +0800</pubDate><guid>https://blog.kalend.top/2026/06/30/2026-06-30-fastmcp-ecosystem.html/</guid><description>&lt;p&gt;一个 Python 包，日下载量 430 万，累计月下载 8300 万——但你可能连它名字都没听过。&lt;/p&gt;
&lt;p&gt;它叫 FastMCP。GitHub 仓库在 PrefectHQ/fastmcp，25.3k stars，104 个 release，2022 个 merged PR。这些数字背后藏着一个更有趣的故事：一个个人项目怎么变成事实标准，又为什么「官方推荐」反而不是最重要的。&lt;/p&gt;
&lt;h2 id="起源一个人的周末项目"&gt;起源：一个人的周末项目
&lt;/h2&gt;&lt;p&gt;2024 年底，MCP（Model Context Protocol）刚发布不久，Anthropic 提供了一个 Python SDK 让开发者写 MCP 服务器。但说实话，那个 SDK 用起来不太 Pythonic——你要写一堆样板代码，继承类，注册方法，配置 transport。&lt;/p&gt;
&lt;p&gt;Jeremiah Lowin（GitHub ID: jlowin）觉得这不对劲。他做了一个叫 FastMCP 的库，核心思路只有一个：&lt;strong&gt;用装饰器把 MCP 服务器的开发压到 10 行代码以内&lt;/strong&gt;。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;span class="lnt"&gt;6
&lt;/span&gt;&lt;span class="lnt"&gt;7
&lt;/span&gt;&lt;span class="lnt"&gt;8
&lt;/span&gt;&lt;span class="lnt"&gt;9
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;fastmcp&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;FastMCP&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;mcp&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;FastMCP&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;my-server&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nd"&gt;@mcp.tool&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;int&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;int&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;int&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;mcp&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;run&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;就这么多。没有继承，没有注册，没有 transport 配置。一个 &lt;code&gt;@mcp.tool()&lt;/code&gt; 装饰器搞定一切。&lt;/p&gt;
&lt;p&gt;这个设计击中了痛点。开发者不用再学 MCP 协议的底层细节，只要会写 Python 函数就能起一个 MCP 服务器。&lt;/p&gt;
&lt;h2 id="第一次转折被官方-sdk-吸收"&gt;第一次转折：被官方 SDK 吸收
&lt;/h2&gt;&lt;p&gt;FastMCP 1.0 发布后迅速走红，Anthropic 注意到了。他们做了一个在开源世界里很常见的决定——把 FastMCP 的核心功能合并进官方 MCP Python SDK（modelcontextprotocol/python-sdk）。&lt;/p&gt;
&lt;p&gt;听起来是好事对吧？被官方认可了。但合并进官方 SDK 意味着什么？意味着迭代速度被官方 release 节奏绑定，意味着设计决策要过更长的审核流程，意味着你不能随便加新功能。&lt;/p&gt;
&lt;p&gt;jlowin 选择了一条更激进的路：继续独立维护 FastMCP 2.0。功能远超官方 SDK，迭代频率也高得多。&lt;/p&gt;
&lt;h2 id="第二次转折加入-prefecthq"&gt;第二次转折：加入 PrefectHQ
&lt;/h2&gt;&lt;p&gt;jlowin 后来加入了 PrefectHQ（一家专注工作流编排的公司），FastMCP 项目也迁移到 PrefectHQ 组织下维护。这一步很关键——个人项目有了公司级的 CI/CD、review 流程和社区管理，但核心设计思路没变：&lt;strong&gt;做最好用的 Python MCP 框架，宁可功能多，也不宁可简单&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;到 2026 年 6 月，FastMCP 已经发布到 v3.4.2，累计 104 个版本。官方 SDK 这时候还在 1.x。&lt;/p&gt;
&lt;h2 id="技术决策拆解为什么是它"&gt;技术决策拆解：为什么是它？
&lt;/h2&gt;&lt;p&gt;FastMCP 能成为 Python MCP 开发的事实标准，不是因为先发优势，而是因为几个关键设计决策：&lt;/p&gt;
&lt;h3 id="1-装饰器驱动而不是配置驱动"&gt;1. 装饰器驱动，而不是配置驱动
&lt;/h3&gt;&lt;p&gt;官方 SDK 的思路是「先定义 schema，再实现逻辑」。FastMCP 的思路是「先写逻辑，schema 自动生成」。&lt;code&gt;@mcp.tool()&lt;/code&gt; 装饰器会从函数签名和类型注解自动生成 JSON Schema，开发者连 schema 长什么样都不用管。&lt;/p&gt;
&lt;p&gt;这个选择的代价是灵活性稍低——复杂的输入输出需要额外处理。但对 90% 的场景来说，省下的时间远超那 10% 的灵活性损失。&lt;/p&gt;
&lt;h3 id="2-不只是-server是完整工具链"&gt;2. 不只是 Server，是完整工具链
&lt;/h3&gt;&lt;p&gt;FastMCP 不只是一个「写 MCP 服务器的框架」。它同时提供了：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Server&lt;/strong&gt;：写 MCP 服务器（核心功能）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Client&lt;/strong&gt;：写 MCP 客户端，调用其他 MCP 服务器&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Proxy&lt;/strong&gt;：聚合多个 MCP 后端为一个统一入口&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Middleware&lt;/strong&gt;：v2.9 引入，支持日志、限流、认证等横切关注点&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Auth&lt;/strong&gt;：内置认证模块&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Proxy 能力尤其重要。实际场景中，你很少只用一个 MCP 服务器——通常需要把文件系统、数据库、API 网关等多个 MCP 服务聚合起来。FastMCP 的 Proxy Server 让你不用写胶水代码就能做到。&lt;/p&gt;
&lt;h3 id="3-middleware-系统v29-的杀手锏"&gt;3. Middleware 系统：v2.9 的杀手锏
&lt;/h3&gt;&lt;p&gt;2025 年 v2.9 引入的 Middleware 系统是一个架构级决策。它让 FastMCP 从「框架」升级为「平台」——你可以在不改业务代码的情况下插入日志、限流、认证、缓存等横切逻辑。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;fastmcp&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;FastMCP&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;fastmcp.middleware&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;LoggingMiddleware&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;mcp&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;FastMCP&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;my-server&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;mcp&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;add_middleware&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;LoggingMiddleware&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;这在企业级场景下是刚需。单个开发者写个工具可能不需要 middleware，但一个团队要把 MCP 集成到生产环境，没有 middleware 的框架根本不敢用。&lt;/p&gt;
&lt;h2 id="fastmcp-包-vs-mcp-包一个常见坑"&gt;fastmcp 包 vs mcp 包：一个常见坑
&lt;/h2&gt;&lt;p&gt;这里有一个让很多人困惑的问题：PyPI 上有两个包——&lt;code&gt;fastmcp&lt;/code&gt; 和 &lt;code&gt;mcp&lt;/code&gt;。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;fastmcp&lt;/code&gt;：PrefectHQ 维护的独立包，功能最全，迭代最快&lt;/li&gt;
&lt;li&gt;&lt;code&gt;mcp&lt;/code&gt;：Anthropic 官方的 MCP Python SDK，包含 FastMCP 1.0 合并进来的功能，但版本和功能都落后&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;两个包都提供 &lt;code&gt;FastMCP&lt;/code&gt; 类，API 接口相似但不完全兼容。如果你在项目里同时装了两个包，import 顺序不同结果不同——这是真实的坑，Stack Overflow 上相关问题的浏览量很高。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;我的建议&lt;/strong&gt;：直接用 &lt;code&gt;fastmcp&lt;/code&gt;。官方 SDK 的功能它都有，而且更多。除非你有明确的合规需求必须用 Anthropic 官方包。&lt;/p&gt;
&lt;h2 id="pypi-数据说明了什么"&gt;PyPI 数据说明了什么
&lt;/h2&gt;&lt;p&gt;根据 PyPI 官方统计（2026-06-30），&lt;code&gt;fastmcp&lt;/code&gt; 包日下载量 430 万，月下载量 8300 万；对比官方 &lt;code&gt;mcp&lt;/code&gt; 包日下载量 1450 万，月下载量 3 亿。FastMCP 作为独立社区项目，下载量已达官方 SDK 的 27%。&lt;/p&gt;
&lt;p&gt;这个比例比&amp;quot;官方推荐&amp;quot;更有说服力——官方 SDK 有 Anthropic 品牌背书，但大量开发者仍然主动选择 FastMCP。原因很实际：AI/ML 生态几乎被 Python 垄断，写 MCP 服务器的人大概率也是 Python 开发者。FastMCP 把 Python 开发者的体验做到了极致，自然就赢了。&lt;/p&gt;
&lt;p&gt;但这也意味着一个风险：FastMCP 的设计决策会深刻影响 MCP 协议的实际走向。当大量 Python MCP 服务器都基于同一个框架时，这个框架的 bug 就成了生态的 bug，这个框架的设计限制就成了生态的设计限制。&lt;/p&gt;
&lt;h2 id="对开发者的启示"&gt;对开发者的启示
&lt;/h2&gt;&lt;h3 id="选型时看谁在维护比官方推荐更重要"&gt;选型时看「谁在维护」比「官方推荐」更重要
&lt;/h3&gt;&lt;p&gt;FastMCP 的故事说明，开源生态里「官方推荐」和「社区选择」经常不一致。官方 SDK 有品牌背书，但迭代速度和功能完整度可能不如独立维护的社区项目。&lt;/p&gt;
&lt;p&gt;选型时我建议看三个维度：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;迭代速度&lt;/strong&gt;：过去半年有多少 release？&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;社区活跃度&lt;/strong&gt;：open issues 的响应速度，PR 的合并速度&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;谁在用&lt;/strong&gt;：看实际 MCP 服务器仓库的 import 语句，比看推荐列表靠谱&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id="装饰器模式值得学习"&gt;装饰器模式值得学习
&lt;/h3&gt;&lt;p&gt;FastMCP 的 &lt;code&gt;@mcp.tool()&lt;/code&gt; 装饰器不只是语法糖——它把「协议层」和「业务层」彻底解耦。开发者只写业务逻辑，协议细节由框架处理。这个思路可以推广到很多场景：Web 框架、消息队列消费者、定时任务。&lt;/p&gt;
&lt;h3 id="proxy-是被低估的能力"&gt;Proxy 是被低估的能力
&lt;/h3&gt;&lt;p&gt;很多开发者只用 FastMCP 的 Server 功能，但 Proxy 才是它和其他框架拉开差距的地方。如果你的场景涉及多个 MCP 服务器，先看看 Proxy 能不能解决，别急着写胶水代码。&lt;/p&gt;
&lt;h2 id="写在最后"&gt;写在最后
&lt;/h2&gt;&lt;p&gt;FastMCP 的故事不是「一个人做了个好东西然后火了」这么简单。它经历了被官方吸收、独立重生、公司化运营三个阶段，每个阶段都做出了正确的技术决策。&lt;/p&gt;
&lt;p&gt;25.3k stars 不是终点。当日下载 430 万、月下载 8300 万的规模意味着，你已经不是在做一个库了。&lt;/p&gt;
&lt;p&gt;这才是 FastMCP 真正厉害的地方。&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;作者：varkm&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;数据来源：GitHub PrefectHQ/fastmcp，PyPI 下载统计，MCP 生态调研（2026-06-30）&lt;/em&gt;&lt;/p&gt;</description></item></channel></rss>