引言:MCP协议与FastMCP框架

Model Context Protocol(MCP)是连接AI模型与外部服务的标准化协议,允许LLM(如Claude、Gemini)调用工具、访问数据。然而,直接实现MCP协议需要处理JSON-RPC、会话管理等繁琐细节。FastMCP作为Python框架,封装了这些底层逻辑,让开发者专注于业务功能。本文将通过分步实战,从零构建一个完整的MCP服务器,涵盖工具、资源、动态模板等核心功能。

一、环境准备:安装FastMCP

首先确保安装FastMCP框架,推荐使用pip:

pip install fastmcp

二、Step 1:创建基础服务器

所有FastMCP应用的起点是FastMCP类实例,它作为工具、资源的容器。

代码示例

# my_mcp_server.py
from fastmcp import FastMCP# 初始化MCP服务器,指定名称(用于标识服务)
mcp = FastMCP(name="My First MCP Server")

说明

  • 这行代码创建了一个空的MCP服务器,暂时不包含任何功能。
  • 名称参数(name)用于区分不同服务器,便于客户端识别。

三、Step 2:添加工具(Tools)

工具是LLM可调用的函数(如计算、数据处理),通过@mcp.tool装饰器定义。

代码示例

from fastmcp import FastMCPmcp = FastMCP(name="My First MCP Server")@mcp.tool
def add(a: int, b: int) -> int:"""Adds two integer numbers together."""return a + b

FastMCP自动处理的细节

  • 工具名称:默认使用函数名(如add)。
  • 描述:从函数文档字符串(docstring)提取,供LLM理解用途。
  • 输入 schema:通过类型注解(a: intb: int)生成JSON schema,确保LLM传入正确类型的参数。

优势:无需手动定义协议格式,专注函数逻辑即可。

四、Step 3:添加静态资源(Resources)

资源是LLM可访问的只读数据(如配置、知识库),通过@mcp.resource装饰器定义,并绑定唯一URI。

代码示例

@mcp.resource("resource://config")
def get_config() -> dict:"""Provides the application's configuration."""return {"version": "1.0", "author": "MyTeam"}

说明

  • URIresource://config是资源的唯一标识,客户端通过该路径访问。
  • 懒加载:函数get_config仅在客户端请求时执行,避免不必要的计算。
  • 返回格式:支持字典、字符串等,FastMCP自动序列化为JSON返回给客户端。

五、Step 4:添加动态资源模板(Resource Templates)

资源模板允许通过URI参数生成动态内容,URI中的占位符(如{name})会映射为函数参数。

代码示例

@mcp.resource("greetings://{name}")
def personalized_greeting(name: str) -> str:"""Generates a personalized greeting for the given name."""return f"Hello, {name}! Welcome to the MCP server."

使用方式

  • 客户端请求greetings://Alice时,FastMCP自动调用personalized_greeting(name="Alice"),返回"Hello, Alice!..."
  • 占位符与函数参数名必须一致(如{name}对应name: str),支持多个参数(如greetings://{name}/{title})。

六、Step 5:运行服务器

通过mcp.run()启动服务器,默认使用STDIO传输(适合本地客户端如Claude Desktop)。

完整代码

from fastmcp import FastMCP# 1. 初始化服务器
mcp = FastMCP(name="My First MCP Server")# 2. 添加工具
@mcp.tool
def add(a: int, b: int) -> int:"""Adds two integer numbers together."""return a + b# 3. 添加静态资源
@mcp.resource("resource://config")
def get_config() -> dict:"""Provides the application's configuration."""return {"version": "1.0", "author": "MyTeam"}# 4. 添加动态资源模板
@mcp.resource("greetings://{name}")
def personalized_greeting(name: str) -> str:"""Generates a personalized greeting for the given name."""return f"Hello, {name}! Welcome to the MCP server."# 5. 启动服务器
if __name__ == "__main__":mcp.run()

启动命令

python my_mcp_server.py

传输方式扩展

  • 默认STDIO传输适用于本地客户端。
  • 如需HTTP服务,可通过mcp.http_app()创建ASGI应用,搭配uvicorn运行(详见FastMCP部署文档)。

七、服务器功能验证

客户端(如Claude Desktop)可通过以下方式交互:

  1. 调用工具:请求调用add工具,传入a=3b=5,返回8
  2. 访问静态资源:请求resource://config,返回配置字典。
  3. 访问动态资源:请求greetings://Bob,返回"Hello, Bob!..."

八、总结:FastMCP的核心优势

  1. 极简开发:用Python函数+装饰器定义工具和资源,无需关注协议细节。
  2. 自动适配:自动生成schema、处理序列化,确保与MCP客户端兼容。
  3. 灵活扩展:支持静态资源、动态模板、多传输方式(STDIO/HTTP)。

通过本文的步骤,你已构建了一个功能完整的MCP服务器。后续可扩展更复杂的工具(如数据库查询、API调用)和资源(如实时数据),为LLM提供更强大的外部能力。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/913647.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/913647.shtml
英文地址,请注明出处:http://en.pswp.cn/news/913647.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于FPGA的智能小车设计(包含代码)/ 全栈FPGA智能小车:Verilog实现蓝牙/语音/多传感器融合的移动平台

首先先声明一下,本项目已经历多轮测试,可以放心根据我的设计进行二次开发和直接套用!!! 代码有详细的注释,方便同学进行学习!! 制作不易,记得三连哦,给我动…

Object.defineProperties 详解

Object.defineProperties 详解 Object.defineProperties 是 JavaScript 中用于在一个对象上定义或修改多个属性的方法。它是 Object.defineProperty 的复数版本,允许你一次性定义多个属性。 基本语法 Object.defineProperties(obj, props)obj:要在其上定…

MyBatis-Plus:深入探索与最佳实践

MyBatis-Plus作为MyBatis的增强版,已经在Java开发中得到了广泛应用。它不仅继承了MyBatis的所有功能,还提供了许多强大的扩展功能,帮助开发者提升开发效率和代码质量。本文将深入探讨MyBatis-Plus的高级特性及其在实际项目中的最佳实践。一、…

劳斯莱斯数字孪生技术:重构航空发动机运维的绿色革命

在航空工业迈向智能化的浪潮中,劳斯莱斯以数字孪生技术为核心,构建了发动机全生命周期管理的创新范式。这项技术不仅重新定义了航空发动机的维护策略,更通过数据驱动的决策体系,实现了运营效率与生态效益的双重突破。本文将从技术…

NPM组件 querypilot 等窃取主机敏感信息

【高危】NPM组件 querypilot 等窃取主机敏感信息 漏洞描述 当用户安装受影响版本的 querypilot 等NPM组件包时会窃取用户的主机名、用户名、工作目录、IP地址等信息并发送到攻击者可控的服务器地址。 MPS编号MPS-2kgq-v17b处置建议强烈建议修复发现时间2025-07-05投毒仓库np…

创业商业融资计划书PPT模版

创业商业融资计划书PPT模版:https://pan.quark.cn/s/25a043e4339e

解决GitHub仓库推送子文件夹后打不开的问题

从你描述的情况来看,IELTS_AI_Assessment 很可能被识别为了 Git 子模块(submodule),而不是普通文件夹,这会导致在 GitHub 上无法直接打开查看内容。以下是具体原因和解决办法:为什么文件夹无法打开&#xf…

Web后端开发-请求响应

文章目录概述请求Postman简单参数原始方式SpringBootRequestParam注解小结实体参数数组集合参数日期参数Json参数路径参数总结响应响应-案例概述 请求 Postman 简单参数 原始方式 // 1. 简单参数 // 原始方式RequestMapping("/simpleParam")public String …

Javascript基础内容回顾—变量提升、事件循环和闭包等内容

以下是前端面试中 JavaScript 基础易错问题的详解,结合常见考点和易混淆概念进行解析: ⚠️ 一、变量作用域与提升 var vs let/const ◦ 变量提升:var 声明的变量会提升到作用域顶部(值为 undefined),而 …

UNIX程序设计基本概念和术语

unix体系结构从严格意义上说,可将操作系统定义为一种软件,它控制计算机硬件资源,提供程序运行环境。我们通常将这种软件称为内核(kernel),因为它相对较小,而且位于环境的核心。内核的接口被称为…

【WEB】Polar靶场 16-20题 详细笔记

目录 十六.签到题 十七.签到 十八.session文件包含 PHP 伪协议(PHP Stream Wrappers) base64加解密获取源代码 Session文件包含 namenameShell 是什么? 十九.Dont touch me 二十.robots robots.txt 十六.签到题 把didino改成didiy…

数据结构*搜索树

什么是搜索树 搜索树是一种树形数据结构,用于高效地存储和检索数据。其核心特点是每个节点包含一个键(Key),并遵循特定的排序规则。常见的搜索树有二叉搜索树、自平衡二叉树、多叉搜索树等。AVL树、红黑树、Splay树都属于自平衡二…

语音交互新纪元:Hugging Face LeRobot如何让机器人真正“懂你”

机器人之言:早在2024年,Hugging Face正式进军真实世界机器人应用领域,推出了开源机器人项目LeRobot。LeRobot不仅仅是一个模型库,它是一个完整的机器人学习平台,融合了模仿学习、强化学习、数据可视化以及仿真环境。其…

搭建个人博客系列--MySql

前期提要:搭建个人博客系列--docker-CSDN博客 目前已经拥有了docker所以只需要将MySql安装在docker上即可。 一、在docker安装mysql docker pull mysql 二、查询docker内的mysql镜像 三、启动msql docker run -d -p 33060:3306 -v /home/mysql/conf:/mysql/conf.d…

【Spring】Spring Boot + OAuth2 + JWT + Gateway的完整落地方案,包含认证流程设计

Spring Boot OAuth2 JWT Gateway的完整落地方案,包含认证流程设计网关在服务中的使用一、整体架构设计二、核心组件实现1. OAuth2认证服务器(auth-service)2. JWT自定义增强(存储用户信息)三、Gateway全局拦截&…

第一个小程序

一、前言随着移动互联网的发展,用户对“即用即走”的轻量级应用需求日益增长,而传统 App 在下载安装、更新维护等方面存在一定的门槛。小程序应运而生,它是一种无需下载即可使用的应用程序形态。本文将带你完成人生中第一个微信小程序的开发全…

【办公类-54-07】20250901 2025学年第一学期班级点名册模版(双休国定假涂成灰色、修改标题和页眉,批量导出PDF)

背景需求: 制作了校历单后,第二个要制作的就是点名册(灰色版) 【办公类-54-03】20240828班级点名册模版(双休国定假涂成灰色)2024学年第一学期_姓名周一到周五的点名册怎么画-CSDN博客文章浏览阅读2.1k次,点赞24次,收藏4次。【办公类-54-03】20240828班级点名册模版(…

iOS App首次启动请求异常调试:一次冷启动链路抓包与初始化流程修复

在一次 iOS App 大版本更新后,部分用户反馈首次打开 App 时会出现“无法连接服务器”的提示,需要重启 App 才能正常使用。而后续使用过程中接口调用都正常。服务器端并未记录请求到达,日志中只有 sporadic(零星)断连记…

【Linux网络篇】:网络中的其他重要协议或技术——DNS,ICMP协议,NAT技术等

✨感谢您阅读本篇文章,文章内容是个人学习笔记的整理,如果哪里有误的话还请您指正噢✨ ✨ 个人主页:余辉zmh–CSDN博客 ✨ 文章所属专栏:Linux篇–CSDN博客 文章目录其他重要协议或技术1.DNS2.ICMP协议3.NAT技术4.代理服务器其他重…

HarmonyOS学习4 --- 创建一个页面

1、声明式UI语法Entry Component struct My_page {State isLogin: boolean falsebuild() {Row() {Image(this.isLogin ? $r(app.media.icon_leon) : $r(app.media.icon)).height(60).width(60).onClick(() > {this.isLogin !this.isLogin})Text(this.isLogin ? $r(app.s…