摘要:模型上下文协议(Model Context Protocol,MCP)允许人们以安全和标准化的方式,为大语言模型 LLM 应用程序提供数据和功能。遵循 MCP 协议搭建的服务器类似一个网络 API,但它是专门为大语言模型交互设计的,可以通过资源 Resourc
模型上下文协议(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.pyfrom fastmcp import FastMCP# Create an MCP servermcp = FastMCP("Demo")# Add an addition tool@mcp.tooldef 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.pyFastMCP 中,服务器 FastMCP 类实现核心的 MCP 协议交互逻辑,处理包括连接管理、协议合规和消息路由等,可以提供 dependencies 参数指定开发和部署所需的依赖:
from fastmcp import FastMCP# Create a named servermcp = FastMCP("My App")# Specify dependencies for deployment and developmentmcp = 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.tooldef 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.promptdef review_code(code: str) -> str: return f"Please review this code:\n\n{code}"也可以是一条结构化的复杂消息:
from fastmcp.prompts.base import UserMessage, AssistantMessage@mcp.promptdef 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 中,让用户能够更方便地进行数据处理和分析。
来源:每日开源代码