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, Context
mcp = FastMCP("My MCP Server")
@mcp.tool()
async def process_data(uri: str, ctx: Context):
# Log a message to the client
await ctx.info(f"Processing {uri}...")
# Read a resource from the server
data = await ctx.read_resource(uri)
# Ask client LLM to summarize the data
summary = await ctx.sample(f"Summarize: {data.content[:500]}")
# Return the summary
return summary.text
在上下文文档中了解更多信息。
MCP 客户端
使用 以编程方式与任何 MCP 服务器交互。它支持各种传输方式(Stdio、SSE、In-Memory),并且经常自动检测正确的传输方式。如果您提供适当的处理程序,客户端还可以处理高级模式,例如服务器发起的 LLM 采样请求。fastmcp.Client
至关重要的是,客户端允许通过 直接连接到服务器实例,从而对服务器进行高效的内存中测试,而无需在测试期间进行进程管理或网络调用。FastMCPFastMCPTransport
from fastmcp import Client
async def main():
# Connect via stdio to a local script
async 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 SSE
async with Client("http://localhost:8000/sse") as client:
# ... use the client
pass
要使用客户端测试服务器,请使用以下模式:
from fastmcp import FastMCP, Client
mcp = FastMCP("My MCP Server")
async def main():
# Connect via in-memory transport
async 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 FastMCP
mcp = 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)