一、简介

  • • FastAPI-MCP是一个基于python FastAPI框架开发的开源项目,可以自动识别并暴露FastAPI接口为MCP工具

  • • 拥有FastAPI框架的所有优点,如异步高并发、独立远程部署、OpenAPI文档

  • • 提供SSE、mcp-remote接入方式,支持设置授权访问,适配各种支持MCP协议客户端

  • • FastAPI-MCP开源地址:https://github.com/tadata-org/fastapi_mcp,工作原理参考下图:

    图片

二、安装并启动示例

1. 安装fastapi-mcp

  • • 提前准备好python 3.10+、uv/pip软件环境(此处不做赘述)

  • • 直接一键安装

//安装方式1: 使用uv命令
uv add fastapi-mcp
//安装方式2:使用pip命令
pip install fastapi-mcp

2. 编写示例代码 fastapi-mcp.py,实现两个测试工具

  • • 一个获取当前时间的接口/工具(不需要授权)

  • • 一个模拟获取用户信息的/工具(需要授权)

from datetime import datetimeimport uvicorn
from fastapi import FastAPI, Depends, HTTPException, Header
from fastapi_mcp import FastApiMCPapp = FastAPI()# 授权验证,如果不需要,可以删除
asyncdefverify_token(authorization: str | None = Header(None)):# 这里替换为实际的验证逻辑,比如数据库查询,JWT验证等valid_tokens = {"123456", "abcdef"}  # 示例有效token集合if authorization notin valid_tokens:raise HTTPException(status_code=403, detail="Invalid Token")returnTrue# 注意:要设置添加明确的 operation_id 参数,这会让大模型更容易理解工具的作用
# 编写一个获取当前时间的接口
@app.get("/getCurrentTime", operation_id="get_current_time")
asyncdefget_current_time():return {"current_time": datetime.now().strftime("%Y-%m-%d %H:%M:%S")}# 编写一个模拟获取用户信息的接口
@app.get("/users/{user_id}", operation_id="get_user_info")
asyncdefget_user_info(user_id: int, is_auth: bool = Depends(verify_token)):  # 验证请求头,需要授权访问# 这里的data可以替换成实际的查询数据库,这里只作为示例返回data = {"user_id": user_id,"name": "小狗狗","sex": "男","birthday": "2002-07-06",}return data# 创建 MCP 服务器实例,绑定到 FastAPI app
mcp = FastApiMCP(app)
# 挂载 MCP 服务器,默认路径是 /mcp(可以修改)
mcp.mount()if __name__ == "__main__":uvicorn.run(app, host="0.0.0.0", port=8000)

3. 启动运行测试用例

python fastapi-mcp.py 

在这里插入图片描述

4. 启动之后,可以直接访问原本FastAPI提供的在线文档、接口等

  • • 在线 Swagger 文档,访问:http://localhost:8000/docs

    在这里插入图片描述

  • • 既是MCP工具,也是正常的API接口,如下使用 Postman 访问示例

    在这里插入图片描述

三、在Cherry Studio中使用FastAPI-MCP服务

下载并安装 Cherry Studio 客户端软件,下载地址:https://www.cherry-ai.com/

在这里插入图片描述

配置使用 FastAPI-MCP 启动后提供的服务,默认MCP服务运行在:http://localhost:8000/mcp,配置如下:

  • • Cherry Studio提供的非常方便的可视化配置界面

在这里插入图片描述

  • • 实际上在其他支持SSE的MCP客户端,可以使用下面配置
{"mcpServers":{"fastapi-mcp":{"name":"fastapi-mcp","type":"sse","description":"","isActive":true,"baseUrl":"http://localhost:8000/mcp","headers":{"Content-Type":"application/json","Authorization":"123456"}}
}
  • • 配置完成后,MCP客户端可以自动请求获取到相关的MCP工具了

在这里插入图片描述

在对话中,使用fastapi-mcp工具

  • • 开启并选择fastapi-mcp工具

在这里插入图片描述

  • • 获取当前时间示例

在这里插入图片描述

  • • 获取用户ID为888888的用户信息

在这里插入图片描述

  • • 可以自动链式调用多个工具,完成复杂任务:帮我看看用户ID为888888的用户多少岁了

在这里插入图片描述

四、总结

  • • FastAPI-MCP工具可以让你开发MCP工具像开发普通接口一样,灵活扩展、适应性强

  • • 使用FastAPI-MCP,可以快速搭建起自己的私有MCP工具集,独立部署、远程访问

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

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

相关文章

LLMs之Memory:《LLMs Do Not Have Human-Like Working Memory》翻译与解读

LLMs之Memory:《LLMs Do Not Have Human-Like Working Memory》翻译与解读 导读:该论文通过三个精心设计的实验,证明了当前的大型语言模型(LLMs)缺乏类似人类的工作记忆。实验结果表明,LLMs无法在没有明确外…

Node.js验证码:从生成到验证的趣味之旅

文章目录 Node.js验证码:从生成到验证的趣味之旅📜 引言:为什么需要验证码?1. 验证码的基本原理 🧠验证码工作流程示意图 2. 技术栈准备 🛠️3. 验证码生成详解 🎨3.1 生成SVG验证码3.2 转换为P…

芯科科技携最新Matter演示和参考应用精彩亮相Matter开放日和开发者大会

全面展示赋能Matter设备实现跨协议和跨海内外生态的技术能力 作为Matter标准创始厂商之一和其解决方案的领先供应商,Silicon Labs(亦称“芯科科技”)于6月12至13日参加由连接标准联盟中国成员组(CMGC)主办的Matter年度…

AndroidStudio下载的SDK没有tool目录,或者想要使用uiautomatorviewer工具

1.如果没有tool目录可以使用下面的地址进行下载 https://dl.google.com/android/repository/tools_r25.2.5-windows.zip 2.并且把下载的文件解压到放在AndroidStudio的目录中 3.如果使用uiautomatorviewer.bat出现下面的错误 Unable to connect to adb.Check if adb is instal…

FastJSON等工具序列化特殊字符时会加转义字符\

在Java中JSON数据格式用String接收时,此时在FastJSON层面看来该JSON只是普通字符串,所以对原字符串序列化会得到转义字符\ 得到转义后字符串,再反序列化转义后字符串会得到原字符串 String json"{\"name\": \"张三\&quo…

数据结构 学习 队列 2025年6月14日 11点22分

循环队列 循环队列是一种线性数据结构,它遵循FIFO(先进先出)原则,但与普通队列不同的是,循环队列的最后一个元素连接回第一个元素,形成一个环形结构。这种设计有效解决了普通队列的"假溢出"问题&…

打造丝滑滚动体验:Scroll-driven Animations 正式上线!

🌀 打造丝滑滚动体验:Scroll-driven Animations 正式上线! 🚨 告别 JS 手动监听滚动条,CSS 新能力让你用两行代码实现高级滚动动效。 🔍 什么是 Scroll-driven Animations? Scroll-driven anim…

知识体系_研究模型_价格敏感度测试模型(PSM)

1 概述 价格敏感度测试模型(Price Sensitivity Measurement,PSM) ,通过调研潜在用户对于不同价格的满意或接受程度,从而制定出合适的产品价格。 价格敏感度PSM模型的分析一般分为以下几个步骤: (1)确定多个价格 (2)通过一定的方式(通常是问卷)收集目标客户对不同价…

C++11函数封装器 std::function

✅ 1. 什么是 std::function std::function 是 C11 引入的标准库工具,是一个通用的函数封装器,可以包装以下任意可调用对象: 普通函数Lambda 表达式函数指针成员函数指针函数对象(也叫仿函数,定义了 operator() 的类…

centos系统docker配置`milvus-standalone`教程

本人使用的是京东云服务器docker配置milvus 参考教程:https://blog.csdn.net/withme977/article/details/137270087 需要注意:虚拟机安装pymilvus和docker安装milvus版本需要对应,否则会出现connection失败问题 查看虚拟机pymilvus版本&…

AI for 数据分析:技术演进与应用实践

一、AI 数据分析的核心定义与技术演进 概念延伸:从传统分析到智能分析 传统数据分析工作,主要依赖人工使用 Excel、SPSS 等统计工具进行建模与分析。这种方式不仅效率较低,而且对专业人员的依赖度极高。而 AI 驱动的数据分析则借助机器学习…

stm32 f103c8t6仿真 串口收发测试

C8T6串口概述 STM32F103C8T6微控制器包含3个串口模块: USART1 (高级串口) USART2 USART3 (部分型号可能标记为UART3) 引脚分布图 USART1 (串口1) 基本特性 类型:全功能USART(通用同步异步收发器) 通信模式: 全双工异步通信 单线半…

语言特性适用的场景:卫星、火箭控制系统用什么开发语言?

核心飞行控制系统开发语言 卫星、火箭及相关航天系统的软件开发对可靠性、实时性、安全性有极高要求,因此语言选择需严格匹配这些需求。以下是航天领域常用的编程语言及其应用场景分析: 一、核心飞行控制与嵌入式系统:C、C、Ada 航天器的核…

AI for Science:智能科技如何重塑科学研究

AI与科学研究的邂逅 人工智能(Artificial Intelligence,简称AI)作为一门致力于模拟人类智能的交叉学科,近年来已经从实验室走向现实世界的各个角落,而科学研究领域正是其最具变革潜力的舞台之一。AI的核心在于通过算法…

项目三 - 任务7:开发名片管理系统

在本次项目三的任务7中,我们成功开发了一个功能全面的名片管理系统。该系统采用Java语言,基于MVC(模型-视图-控制器)架构模式,实现了用户登录、名片的增删改查等核心功能。通过设计Card类来封装名片信息,Ca…

MySQL 8.0 OCP 英文题库解析(十八)

Oracle 为庆祝 MySQL 30 周年,截止到 2025.07.31 之前。所有人均可以免费考取原价245美元的MySQL OCP 认证。 从今天开始,将英文题库免费公布出来,并进行解析,帮助大家在一个月之内轻松通过OCP认证。 本期公布试题161~170 试题1…

leetcode_503 下一个更大元素

1. 题意 在一个循环数组中,找到下一个比它大的数。 2. 题解 也不知道怎么就单调栈了,可能是刷出来的吧。。。 还是来解释一下吧!!! 如果有新元素入栈 c c c, 那么在栈内的元素只要小于新元素的 s s s…

在postgresql中,group by时取第一个值

在postgresql中,group by时,uuid类型的字段可以用哪个聚集函数: SELECT create_user , (array_agg(myid))[1] AS first_uuid FROM "t_resource_data" GROUP BY create_user 人大金仓、PostgreSQL使用GROUP BY聚合后,取第一个值或最后一个值的办_pgsql gro…

【FineDance】ModuleNotFoundError: No module named ‘pytorch3d‘

pytorch3d Traceback (most recent call last): File “/home/zhangbin/perfwork/01_ai/13_FineDance/data/code/pre_motion.py”, line 12, in from dataset.quaternion import ax_to_6v, ax_from_6v File “/home/zhangbin/perfwork/01_ai/13_FineDance/dataset/quaternion.…