当前位置: 首页 > news >正文

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 serverasync with Client("http://localhost:8000/mcp") as client:  # Call an MCP tool directlyresult = await client.call_tool("add", {"a": 10, "b": 5})  print("MCP Result:", result.content[0].text)  # Use the result inside an LLM promptllm = 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

http://www.dtcms.com/a/564942.html

相关文章:

  • 常见DGX A100服务器维修故障问题及解决方法
  • Linux系统编程——exec函数族
  • 简单搭建express服务器
  • 设置网站建设大连专业网站设计服务商
  • Ollama + Open WebUI
  • 张家界市建设工程造价管理站网站好看的ui界面
  • 【WEB应用安全】XSS攻击实验全流程实战!从漏洞检测到Cookie窃取(附Payload解析+避坑指南)
  • Linux系统启动流程深度解析:从BIOS到用户空间的全链路指南
  • AI编程工具TRAE解决日常问题之SQLite数据复制
  • 百度网盘下载速度被限制怎么办?百度网盘如何解除限速下载方法
  • 多协议网关架构
  • 深入级联不稳定性:从 Lipschitz 连续性视角探讨图像恢复与目标检测的协同作用
  • 如何实现html显示WebRTC视频监控流
  • 长沙网站设计服务商wordpress和vue
  • DeepSeek-OCR 深度解析
  • [手机AI开发sdk] Aid_code IDE | PC浏览器同步访问
  • 视觉语言模型(VLM)深度解析:如何用它来处理文档
  • 空载长线电容效应
  • Text Grab,一款OCR 截图文字识别工具
  • 网站建设与管理教学方案网站的技术解决方案
  • 从零开始学习iOS App开发:Xcode、Swift和发布到App Store完整教程
  • HTMLCollection 对象
  • CANN算子开发实战:Batch Normalization高性能实现指南
  • 【Delphi】再谈给EXE文件动态添加数据(附加大数据 2G)
  • 1、Python-内置函数、Pass空语句
  • 为什么 Transformer 使用 LayerNorm 而不是 BatchNorm?
  • 昇腾 NPU 实战:Gemma 2 模型部署、多维度评测与性能优化全流程解析
  • 使用Visual Studio中的数据断点快速定位内存越界问题的实战案例分享
  • 做网站的大创结项项目建设表态发言稿
  • 家政类网站开发成本青岛最新疫苗接种