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

fastmcp: 更好用的 MCP Python 框架

GitHub:https://github.com/jlowin/fastmcp

更多AI开源软件:发现分享好用的AI工具、AI开源软件、AI模型、AI变现 - 小众AI

用于构建 MCP(Model Context Protocol)服务器和客户端的 Python 框架,帮助开发者以更快速、简洁的方式向 LLM 暴露数据资源和工具。相比官方 SDK,它的 API 设计更加简洁、开发效率更高,且具备更强的可扩展性,支持多种客户端/服务端传输模式(Stdio、SSE、内存)、资源模板机制,并可通过 OpenAPI/FastAPI 自动生成 MCP 服务,极大地降低了 MCP 服务器与客户端的开发门槛。

主要功能:

🚀 快速:高级接口意味着更少的代码和更快的开发

🍀 简单:使用最少的样板构建 MCP 服务器

🐍 Pythonic:对 Python 开发人员来说感觉很自然

🔍 完整:FastMCP 旨在为服务器和客户端提供核心 MCP 规范的完整实现

安装和使用

我们建议使用 uv 安装 FastMCP:

uv pip install fastmcp

有关完整的安装说明,包括验证、从官方 MCPSDK 升级和开发人员设置,请参阅安装指南。

开始使用

这些是使用 FastMCP 创建 MCP 服务器和客户端的构建块。

服务器FastMCP​

表示 MCP 应用程序的中心对象。它包含您的工具、资源和提示,管理连接,并且可以使用身份验证提供程序等设置进行配置。

from fastmcp import FastMCP# Create a server instance
mcp = FastMCP(name="MyAssistantServer")

在 FastMCP 服务器文档中了解更多信息。

工具

工具允许 LLM 通过执行 Python 函数(同步或异步)来执行作。非常适合计算、API 调用或副作用(如 /)。FastMCP 处理从类型提示和文档字符串生成架构。工具可以使用 fastmcp 返回各种类型的内容,包括文本、JSON 可序列化对象,甚至图像。图像辅助方法。POSTPUT​

@mcp.tool()
def multiply(a: float, b: float) -> float:"""Multiplies two numbers."""return a * b

在工具文档中了解更多信息。

资源和模板

资源公开只读数据源(如请求)。用。在 URI 中使用可创建接受参数的动态模板,从而允许客户端请求特定数据子集。GET@mcp.resource("your://uri"){placeholders}​

# Static resource
@mcp.resource("config://version")
def get_version(): return "2.0.1"# Dynamic resource template
@mcp.resource("users://{user_id}/profile")
def get_profile(user_id: int):# Fetch profile for user_id...return {"name": f"User {user_id}", "status": "active"}

在资源和模板文档中了解更多信息。

提示

提示定义可重用的消息模板以指导 LLM 交互。用 .返回字符串或对象。@mcp.prompt()Message​

@mcp.prompt()
def summarize_request(text: str) -> str:"""Generate a prompt asking for a summary."""return f"Please summarize the following text:\n\n{text}"

在 Prompts 文档中了解更多信息。

上下文

通过添加参数来访问工具、资源或提示中的 MCP 会话功能。Context 提供了以下方法:ctx: Context​

  • 伐木:使用 、 等将消息记录到 MCP 客户端。ctx.info()ctx.error()​
  • LLM 采样:用于从客户端的 LLM 请求完成。ctx.sample()​
  • HTTP 请求:用于向其他服务器发出 HTTP 请求。ctx.http_request()​
  • 资源访问:用于访问服务器上的资源ctx.read_resource()​
  • 进度报告:用于向客户端报告进度。ctx.report_progress()​
  • 以及更多...

要访问上下文,请添加一个带 Comments 的参数,该参数被注释为任何 mcp 修饰的函数。FastMCP 将在调用函数时自动注入正确的上下文对象。Context​

from fastmcp import FastMCP, Contextmcp = FastMCP("My MCP Server")@mcp.tool()
async def process_data(uri: str, ctx: Context):# Log a message to the clientawait ctx.info(f"Processing {uri}...")# Read a resource from the serverdata = await ctx.read_resource(uri)# Ask client LLM to summarize the datasummary = await ctx.sample(f"Summarize: {data.content[:500]}")# Return the summaryreturn summary.text

在上下文文档中了解更多信息。

MCP 客户端

使用 以编程方式与任何 MCP 服务器交互。它支持各种传输方式(Stdio、SSE、In-Memory),并且经常自动检测正确的传输方式。如果您提供适当的处理程序,客户端还可以处理高级模式,例如服务器发起的 LLM 采样请求。fastmcp.Client​

至关重要的是,客户端允许通过 直接连接到服务器实例,从而对服务器进行高效的内存中测试,而无需在测试期间进行进程管理或网络调用。FastMCPFastMCPTransport​

from fastmcp import Clientasync def main():# Connect via stdio to a local scriptasync with Client("my_server.py") as client:tools = await client.list_tools()print(f"Available tools: {tools}")result = await client.call_tool("add", {"a": 5, "b": 3})print(f"Result: {result.text}")# Connect via SSEasync with Client("http://localhost:8000/sse") as client:# ... use the clientpass

要使用客户端测试服务器,请使用以下模式:

from fastmcp import FastMCP, Clientmcp = FastMCP("My MCP Server")async def main():# Connect via in-memory transportasync with Client(mcp) as client:# ... use the client

实战演习

场景1:代理服务器

使用 创建一个 FastMCP 服务器,该服务器充当另一个本地或远程 MCP 服务器的中介。这对于桥接传输(例如,将远程 SSE 连接到本地 Stdio)或向您无法控制的服务器添加 logic 层特别有用。FastMCP.from_client()​

在 代理文档 中了解更多信息。

场景2:编写 MCP 服务器

通过使用 (实时链接) 或 (静态复制) 将多个实例挂载到父服务器上来构建模块化应用程序。FastMCPmcp.mount()mcp.import_server()​

在合成文档中了解更多信息。

场景3:OpenAPI & FastAPI 生成

从现有的 OpenAPI 规范 () 或 FastAPI 应用程序 () 自动生成 FastMCP 服务器,立即将您的 Web API 引入 MCP 生态系统。FastMCP.from_openapi()FastMCP.from_fastapi()​

知道更多: OpenAPI 整合 |FastAPI 集成。

场景4:运行服务器

运行 FastMCP 服务器的主要方法是在你的服务器实例上调用该方法:run()​

# server.py
from fastmcp import FastMCPmcp = FastMCP("Demo 🚀")@mcp.tool()
def hello(name: str) -> str:return f"Hello, {name}!"if __name__ == "__main__":mcp.run()  # Default: uses STDIO transport

FastMCP 支持三种传输协议:

STDIO (默认):最适合本地工具和命令行脚本。

mcp.run(transport="stdio")  # Default, so transport argument is optional

可流式传输 HTTP:建议用于 Web 部署。

mcp.run(transport="streamable-http", host="127.0.0.1", port=8000, path="/mcp")

SSE:与现有 SSE 客户端兼容。

mcp.run(transport="sse", host="127.0.0.1", port=8000)
http://www.xdnf.cn/news/5236.html

相关文章:

  • SlideLoss与FocalLoss在YOLOv8分类损失中的应用及性能分析
  • 指针运算典型例题解析
  • IOC和Bean
  • 【读书笔记】《编码:隐匿在计算机软硬件背后的语言》01 逻辑与开关
  • Android方法耗时监控插件开发
  • Java 基础面试题
  • 自定义类型-结构体(一)
  • 【Rust】枚举和模式匹配
  • 2025年数维杯赛题C题专家 组委会C题专家疑集锦
  • 5.8线性动态规划2
  • SpringMVC-执行流程
  • 40、C# 数组、链表、哈希、队列、栈数据结构的特点、优点和缺点
  • AI:生成对抗网络(GAN)
  • 【Vue】vuex的getters mapState mapGetters mapMutations mapActions的使用
  • yocto的大致工作流程
  • CSS渲染性能优化
  • MySQL进阶篇2_SQL优化、锁
  • 探索 JWT(JSON Web Token):原理、结构与实践应用对比
  • RK3568-OpenHarmony(1) : OpenHarmony 5.1的编译
  • C# 使用 WinUI 3 项目模板创建桌面应用程序
  • 在 Kubernetes 中使用 Docker 实现 GPU 支持的完整方案
  • Ubuntu 与 Windows 双系统环境下 NTFS 分区挂载教程
  • 添加物体.
  • 2025年5月15日前 免费考试了! Oracle AI 矢量搜索专业​​认证
  • 用jsp简单实现C语言标准化测试系统
  • (2025)图文解锁RAG从原理到实操
  • DeepSeek:开启物流行业创新变革新时代
  • 高效Python开发:uv包管理器全面解析
  • LeetCode热题100 两数之和
  • SAN 对抗网络搜索,搜索—智能编程—仙盟创梦IDE