FastMCP 入门:用 Python 快速搭建 MCP 服务器接入 LLM

Model Context Protocol (MCP) 这个协议简单说就是给大语言模型接入外部数据和工具提供了一套标准化方案。MCP 统一了模型和各种数据源、工具服务之间的交互方式。

FastMCP 是目前用 Python 构建 MCP 服务器最顺手的框架,把底层那些复杂的协议实现全都封装好了,开发者只需要关注业务逻辑就行。

这篇文章会讲清楚 MCP 的基本概念,FastMCP 的工作原理,以及怎么从零开始写一个能跑的 MCP 服务器。

MCP 协议解析

MCP 本质上是个标准协议,让语言模型能安全、一致地和外部系统对话。和传统 API 不太一样的是MCP 是专门为大语言模型设计的。

一个 MCP 服务器主要提供三类能力:

把数据暴露成资源(resources),功能上类似 REST API 的 GET 请求。提供可执行的工具(tools),对标 POST 类的操作接口。定义提示模板(prompts),用来规范模型和数据、用户的交互方式。

如果你有开发经验可以理解为MCP的每一个"能力"其实就是一个 可远程调用的函数(tool) 。只要你能和 MCP Server 建立通信(通常通过 WebSocket、Stdio 或 HTTP RPC),你就可以像调用 REST API 一样调用 MCP 的函数。只不过MCP 的「函数」并不是像 Python RPC 那样"自动调用",它还需要定义 Schema(输入输出结构)+ 元信息(描述) ,告诉大语言模型 怎么用、什么时候用、怎么传参数

为什么选 FastMCP

官方 SDK 当然也能实现 MCP 服务器,但 FastMCP 提供的东西更多。可以说是一个生产级框架,内置了企业身份认证、客户端库、测试工具,还能自动生成 API 文档。

FastMCP 可以很方便地和 Google、GitHub、Azure 这些平台集成,支持部署到云端或者私有化环境。更重要的是开发体验相当友好,几行代码就能跑起来一个完整服务。

动手搭建第一个服务器

先装好 FastMCP,推荐用 uv 这个工具,依赖管理比 pip 效率高:

复制代码
 uv pip install fastmcp

每个 MCP 服务器都从

复制代码
FastMCP

类开始初始化。这个类管理着工具、资源和提示模板。我们先写个最简单的加法服务器。

新建

复制代码
server.py

文件:

复制代码
 from fastmcp import FastMCP  

mcp = FastMCP("Demo Server 🚀")  

@mcp.tool  
def add(a: int, b: int) -> int:  
    """Add two numbers and return the result"""  
    return a + b  
if __name__ == "__main__":  
     mcp.run()

就这么多代码,一个功能完整的 MCP 服务器就写好了。客户端调用

复制代码
add

工具时,服务器会执行加法运算并返回结果。

本地运行很简单

复制代码
 fastmcp run server.py

这个命令会启动 MCP 服务器。如果要做 Web 部署,可以用 HTTP 或 SSE 传输:

复制代码
 mcp.run(transport="http", host="127.0.0.1", port=8000, path="/mcp")

服务跑起来以后,客户端就能远程调用工具了。

扩展更多工具

FastMCP 的工具就是普通 Python 函数加个

复制代码
@mcp.tool

装饰器。想加多少加多少,比如再来个乘法:

复制代码
 @mcp.tool  
 def multiply(a: float, b: float) ->float:  
     """Multiply two numbers"""  
     returna*b

重启服务器后客户端就能同时用

复制代码
add

复制代码
multiply

了。

FastMCP 会根据函数签名和 docstring 自动生成 schema,客户端可以直接理解你的 API 结构。

添加资源接口

资源在 MCP 里代表只读数据,可以是静态的也可以带参数动态生成。比如暴露个版本号或者用户资料:

复制代码
 @mcp.resource("config://version")  
 def get_version():  
     return "1.0.0"  
   
 @mcp.resource("user://{user_id}/profile")  
 def get_profile(user_id: int):  
     return {"name": f"User {user_id}", "status": "active"}

第一个资源返回固定版本号,第二个根据传入的 user_id 动态返回用户信息。

Context 上下文使用

FastMCP 允许在工具、资源或提示里通过

复制代码
ctx: Context

参数访问会话上下文。这个上下文提供了日志、LLM 采样、进度追踪、资源访问等能力。

看个实际例子:

复制代码
 from fastmcp import Context  

@mcp.tool  
async def summarize(uri: str, ctx: Context):  
    await ctx.info(f"Reading resource from {uri}")  
    data = await ctx.read_resource(uri)  
    summary = await ctx.sample(f"Summarize this: {data.content[:500]}")  
     return summary.text

上面代码先记录一条日志然后读取资源内容,最后让客户端的 LLM 生成摘要。有了 Context工具的交互性和智能程度会高很多。

客户端连接方式

服务器跑起来后,用

复制代码
fastmcp.Client

就能连接。支持 STDIO、HTTP、SSE 等方式,测试时甚至可以跑内存模式。

复制代码
 from fastmcp import Client  
import asyncio  

async def main():  
    async with Client("server.py") as client:  
        tools = await client.list_tools()  
        print("Available tools:", tools)  
        result = await client.call_tool("add", {"a": 5, "b": 7})  
        print("Result:", result.content[0].text)  
 asyncio.run(main())

还可以用标准 MCP 配置文件连多个服务器,构建复杂的多服务交互系统。

身份认证配置

生产环境肯定要考虑安全问题。FastMCP 内置支持 Google、GitHub、Azure、Auth0、WorkOS 这些企业级认证服务商。启用 OAuth 认证只需要几行配置:

复制代码
 from fastmcp.server.auth.providers.google import GoogleProvider  
 from fastmcp import FastMCP  
   
 auth = GoogleProvider(client_id="...", client_secret="...", base_url="https://myserver.com")  
 mcp = FastMCP("Secure Server", auth=auth)

这样就只有通过认证的用户能访问服务了。客户端侧用 OAuth 流程连接:

复制代码
 async with Client("https://secure-server.com/mcp", auth="oauth") as client:  
     result = await client.call_tool("protected_tool")

Token 管理、刷新、错误处理这些 FastMCP 都自动搞定了,我们不用写复杂的代码,只考虑实现我们的工具功能就可以了

部署方案

FastMCP 服务器部署很灵活。测试阶段

复制代码
fastmcp run

命令足够用。生产环境可以部署到 FastMCP Cloud,它提供现成的 HTTPS 端点和认证服务。

如果想自己托管的话,也可以用 HTTP 或 SSE 传输从自己的服务器提供服务:

复制代码
 mcp.run(transport="http", host="0.0.0.0", port=8080)

部署完就能和语言模型、Web 客户端或者自动化工作流对接了。

接入 LLM 应用

服务器部署好之后,下一步是把它接到大语言模型上。这样 LLM 就能安全地调用服务器函数、读取资源、在对话中执行各种操作。

首先要定义 MCP 配置文件,列出可用的服务器、连接方式、认证需求这些信息。配置完成后 LLM 能自动发现 MCP 工具并按需调用。

假设服务器暴露了

复制代码
add

复制代码
summarize

工具,模型就能像调用内置功能一样使用它们。聊天场景下,用户说"总结下最新那篇文章",LLM 会自动调

复制代码
summarize

工具,处理完结果再回复。

如果用 OpenAI Assistants API 或者 LangChain 这类框架开发应用,可以把 MCP 服务器注册成外部工具。LLM 通过 MCP 客户端库和它交互。

复制代码
 from fastmcp import Client  
from openai import OpenAI  
import asyncio  

async def main():  
    # Connect to your MCP server
    async with Client("http://localhost:8000/mcp") as client:  
        # Call an MCP tool directly
        result = await client.call_tool("add", {"a": 10, "b": 5})  
        print("MCP Result:", result.content[0].text)  
        # Use the result inside an LLM prompt
        llm = OpenAI(api_key="YOUR_KEY")  
        response = llm.chat.completions.create(  
            model="gpt-4",  
            messages=[  
                {"role": "system", "content": "You are an AI assistant using MCP tools."},  
                {"role": "user", "content": f"The sum of 10 and 5 is {result.content[0].text}. Explain how MCP helps with this integration."}  
            ]  
        )  
        print(response.choices[0].message.content)  
          
 asyncio.run(main())

这样LLM 的推理能力和服务器逻辑可以无缝结合。它用 MCP 客户端获取数据或执行计算,然后把输出融入对话或工作流。

这个思路能让 AI 系统超越静态提示的限制。把 LLM 连到真实数据库、API、自动化工具上,它就变成了能读写、能执行的主动 agent。

总结

FastMCP 让 AI 和真实世界的数据、API、工具对接变得相当简单。几行 Python 代码就能搭起来功能完整的 MCP 服务器,对接语言模型、自动化工作流,安全地处理实际业务逻辑。

无论是做原型验证还是构建企业级系统,FastMCP 都提供了一条从想法到落地的快速路径。装上试试,起个服务跑跑,看看 MCP 能给 AI 集成带来什么新玩法。

https://avoid.overfit.cn/post/381e204d3caf43edb11439d93c377cf0

作者:Manish Shivanandhan

相关推荐
南宫乘风4 小时前
基于 Flask + APScheduler + MySQL 的自动报表系统设计
python·mysql·flask
lhxcc_fly4 小时前
Linux网络--8、NAT,代理,网络穿透
linux·服务器·网络·nat
番石榴AI4 小时前
基于机器学习优化的主图选择方法(酒店,景点,餐厅等APP上的主图展示推荐)
图像处理·人工智能·python·机器学习
国产化创客5 小时前
基于AI大模型智能硬件--小智AI项目PC端部署测试
人工智能
海边夕阳20065 小时前
【每天一个AI小知识】:什么是零样本学习?
人工智能·经验分享·学习
wow_DG5 小时前
【运维✨】云服务器公网 IP 迷雾:为什么本机看不到那个地址?
运维·服务器·tcp/ip
平凡而伟大(心之所向)5 小时前
云架构设计与实践:从基础到未来趋势
人工智能·阿里云·系统架构·安全架构
数据与后端架构提升之路5 小时前
构建一个可进化的自动驾驶数据管道:规则引擎与异常检测的集成
人工智能·机器学习·自动驾驶
qq7422349845 小时前
Python操作数据库之pyodbc
开发语言·数据库·python