FastMCP:构建模型上下文协议(MCP)服务器的快速 Python 方法
在人工智能快速发展的时代,如何有效地管理和提供上下文信息给大型语言模型(LLMs)变得越来越重要。为了满足这种需求,FastMCP应运而生,它提供了一种简单且高效的方法来构建MCP服务器,为开发者提供强大的工具和资源,从而帮助他们为LLMs提供上下文信息。
什么是MCP?
模型上下文协议(MCP)是一种标准化的协议,它允许开发者构建服务器,通过安全的方式向LLM应用程序提供数据和功能。与传统的Web API类似,MCP特别针对LLM交互进行了优化。MCP服务器可以:
通过资源提供数据(类似GET端点,用于加载信息到LLM的上下文中)
通过工具提供功能(类似POST端点,用于执行代码或产生副作用)
定义交互模式通过提示(可重用的LLM交互模板)
FastMCP的主要特性
快速:高层接口意味着更少的代码和更快的开发速度。
简单:构建MCP服务器时,所需的样板代码最少。
Pythonic:符合Python开发者的直觉,使用起来更自然。
完整:致力于提供MCP规格的全面实现(当前某些高级功能仍在开发中)。
♂️ FastMCP正在积极开发中,而MCP规格本身也在不断完善。
安装FastMCP
建议使用uv来安装FastMCP,因为这是部署服务器所需的:
uv pip install fastmcp
对于不需要部署的SDK使用者,可以直接通过pip安装:
pip install fastmcp
快速入门
创建一个简单的MCP服务器,公开一个计算器工具和一些数据:
server.py
from fastmcp import FastMCP
创建MCP服务器
mcp = FastMCP("Demo")
添加加法工具
@mcp.tool()
def add(a: int, b: int) -> int:
"""加法两个数字"""
return a + b
添加动态问候资源
@mcp.resource("greeting://")
def get_greeting(name: str) -> str:
"""获取个性化问候"""
return f"Hello, !"
通过以下命令在Claude Desktop中安装此服务器,即可立即与其互动:
fastmcp install server.py
FastMCP的核心概念
服务器
FastMCP服务器是您与MCP协议的核心接口,处理连接管理、协议合规和消息路由:
mcp = FastMCP("My App", dependencies=["pandas", "numpy"])
资源
资源用于向LLMs公开数据,类似于REST API中的GET端点。例如:
@mcp.resource("config://app")
def get_config() -> str:
"""静态配置数据"""
return "App configuration here"
动态资源示例:
@mcp.resource("users:///profile")
def get_user_profile(user_id: str) -> str:
"""动态用户数据"""
return f"Profile data for user "
工具
工具使LLMs通过您的服务器执行操作,类似于POST端点。例如:
@mcp.tool()
def calculate_bmi(weight_kg: float, height_m: float) -> float:
"""计算给定体重和身高的BMI"""
return weight_kg / (height_m ** 2)
提示
提示是帮助LLMs有效地与您的服务器交互的可重用模板:
@mcp.prompt()
def review_code(code: str) -> str:
return f"请审核这段代码:\n\n"
运行您的服务器
开发模式(推荐用于构建和测试)
fastmcp dev server.py
这种模式提供了一个Web界面,可以测试工具和资源,查看详细日志等。
Claude桌面集成(用于常规使用)
服务器声明后,可以通过以下命令安装在Claude Desktop中:
fastmcp install server.py
直接执行(用于高级用例)
您还可以通过以下方式直接执行您的服务器:
mcp.run()
示例
Echo服务器
from fastmcp import FastMCP
mcp = FastMCP("Echo")
@mcp.resource("echo://")
def echo_resource(message: str) -> str:
"""回显消息作为资源"""
return f"Resource echo: "
@mcp.tool()
def echo_tool(message: str) -> str:
"""回显消息作为工具"""
return f"Tool echo: "
SQLite Explorer
from fastmcp import FastMCP
import sqlite3
mcp = FastMCP("SQLite Explorer")
@mcp.resource("schema://main")
def get_schema() -> str:
"""提供数据库模式作为资源"""
conn = sqlite3.connect("database.db")
schema = conn.execute("SELECT sql FROM sqlite_master WHERE type='table'").fetchall()
return "\n".join(sql[0] for sql in schema if sql[0])
@mcp.tool()
def query_data(sql: str) -> str:
"""安全执行SQL查询"""
conn = sqlite3.connect("database.db")
try:
result = conn.execute(sql).fetchall()
return "\n".join(str(row) for row in result)
except Exception as e:
return f"Error: {str(e)}"
同类项目介绍
Flask: 一个轻量级的Web应用框架,可以使用Flask扩展构建REST API。
FastAPI: 一个现代的、快速(高性能)的Web框架,用于构建API,基于标准Python类型提示。
Django REST Framework: 一个用于Django的强大且灵活的REST API库。
这些项目也提供了构建API或与LLM交互的能力,每个项目都有其独特的特性和应用场景。