莫度编程网

技术文章干货、编程学习教程与开发工具分享

FastMCP:快速构建大模型的上下文服务

模型上下文协议(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 中,让用户能够更方便地进行数据处理和分析。

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言

    Powered By Z-BlogPHP 1.7.4

    蜀ICP备2024111239号-43