模型上下文协议(Model Context Protocol,MCP)允许人们以安全和标准化的方式,为大语言模型 LLM 应用程序提供数据和功能。遵循 MCP 协议搭建的服务器类似一个网络 API,但它是专门为大语言模型交互设计的,可以通过资源 Resource 的方式提供上下文数据,通过工具 Tool 提供工具功能,通过提示 Prompt 定义交互模式等。
MCP 的出现,能帮助人们基于大语言模型构建智能体和复杂工作流,提供更为标准化的方式进行数据交互。而 FastMCP,则是一个简洁高效的 MCP 服务框架。
简介
FastMCP 是一个用于构建 MCP 服务器的 Python 库,其代码仓库位于
https://github.com/jlowin/fastmcp。FastMCP 面向 Python 开发者,让构建 MCP 服务器变得更加简单直观。
FastMCP 致力于提供 MCP 协议的 Python 实现,能够使用简洁的 Python 代码完成工具的创建,资源的暴露,和提示的定义,并具备以下特色和功能:
- 快速开发:提供高层级接口,开发者无需处理复杂的协议细节和服务器管理,只需专注于工具和资源的实现,减少了编写代码的工作量,大大加快了开发效率
- 简单易用:仅需少量的样板代码即可构建 MCP 服务器,开发者可以通过装饰器的方式,轻松定义工具、资源和提示,使代码更加简洁明了
- Pythonic 风格:充分利用了 Python 的语言特性,让代码编写更加符合 Python 的编程习惯
- 功能完整:提供对 MCP 核心规范的完整实现,目前核心功能已经能够满足大多数开发需求,并仍处于活跃开发中
使用
FastMCP 推荐使用 uv 包管理工具进行安装,运行以下命令:
uv pip install fastmcp
如果仅需使用 SDK 而不需要部署服务,也可以直接通过 pip 安装 fastmcp 库:
pip install fastmcp
安装完成后,就可以编写 Python 代码运行一个简单的 MCP 服务器了,样例代码如下:
# server.py
from fastmcp import FastMCP
# Create an MCP server
mcp = FastMCP("Demo")
# Add an addition tool
@mcp.tool()
def add(a: int, b: int) -> int:
"""Add two numbers"""
return a + b
# Add a dynamic greeting resource
@mcp.resource("greeting://{name}")
def get_greeting(name: str) -> str:
"""Get a personalized greeting"""
return f"Hello, {name}!"
以上代码中,首先使用 FastMCP 类创建了一个 MCP 服务器,然后通过 mcp.tool() 装饰器,添加了一个工具 Tool,其功能是对输入的两个整数相加并返回结果。还使用了 mcp.resource() 装饰器,提供了一个资源 Resource,其返回一条问候的字符串。
代码编写完成后,可以运行以下命令,把服务器安装到 Claude Desktop 上并与之交互:
fastmcp install server.py
或使用 MCP Inspector 进行开发调试:
fastmcp dev server.py
FastMCP 中,服务器 FastMCP 类实现核心的 MCP 协议交互逻辑,处理包括连接管理、协议合规和消息路由等,可以提供 dependencies 参数指定开发和部署所需的依赖:
from fastmcp import FastMCP
# Create a named server
mcp = FastMCP("My App")
# Specify dependencies for deployment and development
mcp = FastMCP("My App", dependencies=["pandas", "numpy"])
资源 Resource 是向 LLM 暴露数据的方式,类似于 REST API 中的 GET 请求,仅提供数据而不应包含大量的计算和带有副作用的逻辑。资源可以是静态的,每次返回固定的数据:
@mcp.resource("config://app")
def get_config() -> str:
"""Static configuration data"""
return "App configuration here"
也可以是动态的,通过路由参数每次返回不同的数据:
@mcp.resource("users://{user_id}/profile")
def get_user_profile(user_id: str) -> str:
"""Dynamic user data"""
return f"Profile data for user {user_id}"
工具 Tool 的作用是让 LLM 通过 MCP 服务器执行动作,类似于 POST 请求,包含计算和带有副作用的逻辑:
@mcp.tool()
def calculate_bmi(weight_kg: float, height_m: float) -> float:
"""Calculate BMI given weight in kg and height in meters"""
return weight_kg / (height_m ** 2)
提示 Prompt 相当于是可重复使用的模板,用来帮助 LLM 与 MCP 服务器进行高效的交互。一个 prompt 可以是一条简单的字符串:
@mcp.prompt()
def review_code(code: str) -> str:
return f"Please review this code:\n\n{code}"
也可以是一条结构化的复杂消息:
from fastmcp.prompts.base import UserMessage, AssistantMessage
@mcp.prompt()
def debug_error(error: str) -> list[Message]:
return [
UserMessage("I'm seeing this error:"),
UserMessage(error),
AssistantMessage("I'll help debug that. What have you tried so far?")
]
总结
FastMCP 为开发者提供了一种高效、简洁的方式来构建 MCP 服务器。它通过简化复杂的 MCP 协议细节,让开发者能够更加专注于业务逻辑的实现。
FastMCP 可以广泛应用于各种需要为 LLM 提供上下文和工具支持的场景,加速复杂智能体和工作流的构建。例如,在智能客服系统中,可以使用 FastMCP 构建服务器,为客服人员提供快速查询知识库、调用数据分析工具等功能;在数据分析领域,可以通过 FastMCP 将各种数据分析工具集成到 LLM 中,让用户能够更方便地进行数据处理和分析。