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

Python FastMCP:让你的AI工具链飞起来

🔥 PythonFastMCP:让你的AI工具链飞起来

  • FastMCP
    • FastMCP 是什么?
  • 1. 工具 (Tools):赋予LLM执行能力
  • 2. Resources(资源):安全数据通道
  • 3. Prompts(提示模板):标准化LLM交互
  • 4.组件协同:构建项目AI工具链
  • 5. 部署架构与性能优化
  • 博主热门文章推荐:


官方文档:

  • FastMCP官方文档 :https://gofastmcp.com/
  • MCP协议规范:https://modelcontextprotocol.io/
  • github: https://github.com/jlowin/fastmcp

FastMCP

The fast, Pythonic way to build MCP servers and clients.
在这里插入图片描述

FastMCP 是什么?

FastMCP 是一个基于 Python 的高效框架,用于构建符合 MCP 协议(Model Context Protocol)的服务器和客户端。MCP 协议由 Anthropic 提出,旨在为大语言模型(LLM)提供标准化接口,使其能安全访问本地工具、私有数据和外部服务 。

FastMCP将python MCP开发变成简洁优雅的代码,让你用装饰器就能构建AI生产力工具链!

# 3行开启
from fastmcp import FastMCP
mcp = FastMCP("Financial", port=9000)  # 取名+端口
mcp.run(transport="sse")  # 一键启动服务

FastMCP 的核心价值在于:

  • 协议隐形化:把复杂的MCP协议压缩成@tool、@resource装饰器,告别协议文档噩梦
  • 开发闪电化:工具开发代码量直降90%,原本3天的集成现在3小时搞定
  • 生产就绪化:自带OAuth安全校验/资源缓存/多协议传输,出生即战士

“以前对接Claude要写200行胶水代码,现在FastMCP只需15行”

  • 核心功能(三大组件):
    • 工具 (Tools)
    • 资源 (Resources)
    • 提示模板 (Prompts)

核心库:pip install fastmcp uvicorn

1. 工具 (Tools):赋予LLM执行能力

功能:

  1. 动态执行层:处理写操作(POST/PUT)、计算、API调用, 支持同步/异步/多进程任务调度
  2. 协议映射:将Python函数转化为MCP协议的tools/call端点
  3. 安全沙箱:隔离LLM对本地系统的直接访问

仅需通过@mcp.tool()装饰器, 实现函数到MCP端点的动态映射

   @mcp.tool(description="...",    # 功能说明(AI决策依据)tags=["text", "util"] # 分类标签# 可选thread/process/asyncIO执行器)def func(param: type) -> return_type:# FastMCP自动将类型转换为JSON Schema

实际案例:

能力维度真实场景安全机制
数据写入数据库更新/API调用Pydantic参数校验
复杂计算风险价值分析/实时货币换算异常结构化返回
异步操作多源新闻聚合/批量文件处理权限标签控制

代码实例:

from pydantic import BaseModel, Field
from fastmcp import FastMCP
mcp = FastMCP("FinanceTools", port=9000)# 1. 基础工具:类型提示自动生成Schema
@mcp.tool
def currency_converter(amount: float, from_currency: str, to_currency: str) -> dict:"""实时货币兑换(支持180种法定货币)"""# 实际对接ExchangeRateAPIreturn {"converted": amount * 0.85, "rate": 0.85} # 2. 复杂参数校验:Pydantic模型
class TradeRequest(BaseModel):stock: str = Field(..., pattern=r"^[A-Z]{1,5}$")shares: int = Field(gt=0, le=1000, description="单次交易上限1000股")action: Literal["buy", "sell"]@mcp.tool
def execute_trade(request: TradeRequest) -> dict:"""执行证券交易(自动风控)"""if request.action == "sell":return {"status": "SUCCESS", "order_id": f"SELL_{request.stock}_{uuid.uuid4()}"}# Buy逻辑...# 3. 异步工具:处理IO密集型操作
@mcp.tool
async def query_news(keywords: list[str]) -> list:"""聚合10家媒体实时新闻(支持关键词过滤)"""async with httpx.AsyncClient() as client:tasks = [client.get(f"https://news.org/search?q={k}") for k in keywords]return await asyncio.gather(*tasks)

技巧:

  1. 使用@mcp.tool(name=“custom_name”)覆盖默认函数名

  2. 异常处理返回结构化错误:raise mcp.ToolReturn(code=403, message=“Insufficient balance”)

  3. 敏感操作添加权限标签:@mcp.tool(tags=[“financial”])


2. Resources(资源):安全数据通道

  • 只读数据源:类比GET请求,无副作用
  • 动态模板:URI参数化实现按需查询(如users://{user_id}/profile)
  • 自动编码:支持JSON/Text/Blob返回类型

URI模板引擎原理:

# 动态路由解析伪代码
def resolve_resource(uri: str):if "{var}" in uri:pattern = uri.replace("{var}", "(?P<var>[\w-]+)") match = re.match(pattern, request_uri)return handlers[uri].call(**match.groupdict())

金融数据服务案例:

# 1. 静态资源配置
@mcp.resource("config://risk_policy")
def get_risk_policy() -> dict:"""获取当前风控阈值(JSON格式)"""return {"max_trade": 100000, "currency_blacklist": ["IRR", "VES"]}# 2. 动态模板资源(带参数验证)
@mcp.resource("market://{symbol}/price")
def get_stock_price(symbol: str) -> float:"""查询实时股价(支持6000+美股)"""if not re.match(r"^[A-Z]{1,5}$", symbol):raise ValueError("Invalid stock symbol")return yf.Ticker(symbol).fast_info.last_price# 3. 二进制资源(图片/PDF等)
@mcp.resource(uri="reports://{date}/daily.pdf",mime_type="application/pdf"
)
def generate_report(date: datetime) -> bytes:"""生成当日交易报告PDF"""return pdfkit.from_string(f"<h1>{date} Report</h1>...")

技巧:

  1. 缓存机制:@mcp.resource(uri=“…”, ttl=3600) 设置资源缓存时间
  2. 按需启用:动态控制资源可见性
  market_resource = mcp.resource("market://{symbol}")(get_stock_price)market_resource.disable()  # 收盘后自动禁用
  1. 上下文注入:访问请求元数据
  def get_logs(ctx: mcp.Context) -> str:return f"Request from {ctx.client_id} at {ctx.timestamp}"

3. Prompts(提示模板):标准化LLM交互

核心:

  • 动态工作流:组合工具调用、资源加载、多轮对话
  • 企业级复用:统一客服/代码分析等场景的提示词规范
  • 客户端集成:支持Cursor/Sublime等IDE的快捷命令

动态生成原理:

@mcp.prompt("portfolio_risk")
def gen_prompt(user_id: str) -> list[dict]:# 实时获取资源数据portfolio = mcp.resources.read(f"portfolio://{user_id}")  return [{"role": "user", "content": f"分析{user_id}的资产"},{"role": "assistant", "content": {"type": "tool_call",  # 关键!嵌入工具调用指令"tool": "calculate_var","parameters": {"data": portfolio}  }}]

实际案例:

# 1. 注册提示模板(服务端)
mcp.register_prompt(name="analyze_portfolio",description="投资组合风险评估",arguments=[{"name": "user_id", "required": True},{"name": "time_range", "enum": ["1d", "1w", "1m"]}]
)# 2. 动态提示生成器
@mcp.prompt("analyze_portfolio")
def portfolio_prompt(user_id: str, time_range: str) -> list[dict]:"""构造包含实时数据的多步骤提示"""return [{"role": "system","content": "你是一位CFA持证金融分析师,请评估用户投资组合风险"},{"role": "user","content": {"type": "resource",  # 嵌入资源"resource": {"uri": f"portfolio://{user_id}?range={time_range}","mimeType": "application/json"}}},{"role": "user","content": "基于以上数据,分析:1) 最大回撤 2) 行业集中度 3) 建议调整方案"}]# 3. 客户端调用(Python示例)
async def get_analysis_prompt(user: str):async with mcp.Client() as client:return await client.get_prompt("analyze_portfolio", {"user_id": user, "time_range": "1m"})

技巧:

  1. 多步骤工作流:在content中嵌入tools/call指令实现链式调用
  2. 条件分支:基于参数返回差异化提示结构
  3. 混合内容:同一消息内组合text+resource+tool_call

4.组件协同:构建项目AI工具链

金融行业实战:股票分析工作流

在这里插入图片描述

# 全链路代码实现
@mcp.tool
def calculate_var(portfolio: dict) -> float:"""计算投资组合VaR(风险价值)"""@mcp.resource("risk://models/{model_id}")
def get_risk_model(model_id: int) -> dict: ...# 组合提示模板:Prompt串联一切!
@mcp.prompt("full_analysis")
def analysis_prompt(user_id: str):portfolio = await mcp.resources.read(f"portfolio://{user_id}")return {"messages": [{"role": "user", "content": f"用户{user_id}的持仓分析"},{"role": "assistant", "content": {"type": "tool_call","tool": "calculate_var","parameters": {"portfolio": portfolio} # 动态注入数据}},{"role": "user", "content": {"type": "resource","resource": "risk://models/1024"  # 调用风控模型}}]}

5. 部署架构与性能优化

调试与监控技巧:

# 1. 自动化测试工具
fastmcp test server.py --tool "stress_test" --params '{"portfolio":{}}'# 2. 实时性能监控
fastmcp monitor --metric qps --tool "execute_trade"# 3. 安全审计日志
docker logs -f mcp-server | grep SECURITY_ALERT

多环境部署方案对比:
在这里插入图片描述


博主热门文章推荐:

在这里插入图片描述

一篇读懂系列:

  • 一篇读懂无线充电技术(附方案选型及原理分析)
  • 一篇读懂:Android/iOS手机如何通过音频接口(耳机孔)与外设通信
  • 一篇读懂:Android手机如何通过USB接口与外设通信(附原理分析及方案选型)

LoRa Mesh系列:

  • LoRa学习:LoRa关键参数(扩频因子,编码率,带宽)的设定及解释
  • LoRa学习:信道占用检测原理(CAD)
  • LoRa/FSK 无线频谱波形分析(频谱分析仪测试LoRa/FSK带宽、功率、频率误差等)

网络安全系列:

  • ATECC508A芯片开发笔记(一):初识加密芯片
  • SHA/HMAC/AES-CBC/CTR 算法执行效率及RAM消耗 测试结果
  • 常见加密/签名/哈希算法性能比较 (多平台 AES/DES, DH, ECDSA, RSA等)
  • AES加解密效率测试(纯软件AES128/256)–以嵌入式Cortex-M0与M3 平台为例

嵌入式开发系列:

  • 嵌入式学习中较好的练手项目和课题整理(附代码资料、学习视频和嵌入式学习规划)
  • IAR调试使用技巧汇总:数据断点、CallStack、设置堆栈、查看栈使用和栈深度、Memory、Set Next Statement等
  • Linux内核编译配置(Menuconfig)、制作文件系统 详细步骤
  • Android底层调用C代码(JNI实现)
  • 树莓派到手第一步:上电启动、安装中文字体、虚拟键盘、开启SSH等
  • Android/Linux设备有线&无线 双网共存(同时上内、外网)

AI / 机器学习系列:

  • AI: 机器学习必须懂的几个术语:Lable、Feature、Model…
  • AI:卷积神经网络CNN 解决过拟合的方法 (Overcome Overfitting)
  • AI: 什么是机器学习的数据清洗(Data Cleaning)
  • AI: 机器学习的模型是如何训练的?(在试错中学习)
  • 数据可视化:TensorboardX安装及使用(安装测试+实例演示)

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

相关文章:

  • 深入解析操作系统中的文件控制块(FCB):从原理到现代实现演进
  • 利用动画实现热点图转圈循环放大效果
  • 深入理解 slab cache 内存分配全链路实现
  • 445、两数相加 II
  • 数字人直播:开启直播行业新纪元​
  • 基于LiteNetLib的Server/Client Demo
  • Android各版本适配方案总结归纳
  • 企业网站建设全攻略
  • Linux系统之:进程概念
  • JavaSE -- 对象序列化和反序列化详细讲解
  • HarmonyOS-ArkUI Web控件基础铺垫4--TCP协议- 断联-四次挥手解析
  • 全国计算机等级考试二级题库【C语言】:程序修改题型——结构体、可变数组、链表 自制答案详解合辑
  • 深度学习入门-深度学习简介
  • 屏显智能电子锁语音芯片方案新选择
  • Hinge Loss(铰链损失函数)详解:SVM 中的关键损失函数
  • C++实现单层时间轮
  • UE5网络联机函数
  • RSTP技术
  • Thread,ThreadLocal,ThreadLocalMap 三者的关系, 以及在实际开发中的应用【AI记录用】
  • mysql复制延迟如何处理
  • js中的微任务和宏任务的理解
  • python 实现将文件的非零数据扇区进行提取,并以偏移地址进行命名保存
  • AI(day10)模块化编程概念(模块、包、导入)及常见系统模块总结和第三方模块管理
  • AE PDW2200电源射频手侧使用安装说明含电路图
  • 70 gdb attach $pid, process 2021 is already traced by process 2019
  • 反序列化漏洞3-反序列化漏洞讲解演示
  • 4. PyQGIS整体框架详解
  • Agent AI(3):Agent分类
  • day30——零基础学嵌入式之线程2.0
  • 多线程-2-线程间通信