[FastMCP设计、原理与应用-15]挂载一个MCP服务器就像挂载一个目录一样容易
随着应用程序的增长我们可能需要将一个单一的MCP服务器拆分为多个功能专一的服务器例如一个用于天气一个用于日历一个用于管理后台并通过挂载Mount的方式将它们合并成可用通过一个客户端连接的单一服务器。挂载服务器后其所有工具、资源和提示都会通过父进程变为可用状态。连接是实时的挂载后向子进程添加工具该工具会立即在父进程中可见。1. 挂载一个FastMCP对象以如下这个演示程序为例我们创建的名为Server的FastMCP对象并通过调用mount方法挂载了两个FastMCP对象命名为Weather的服务器提供了返回天气信息的工具get_weather命名为OA的服务器提供的工具is_available用于确定某个人在指定的日志是否由任务安排。fromfastmcpimportFastMCPfromfastmcp.clientimportClientfromdatetimeimportdateimportasyncio weatherFastMCP(Weather)weather.tool()asyncdefget_weather(location:str)-str:Get the current weather for a given location.returnfThe current weather in{location}is sunny.oaFastMCP(OA)oa.tool()asyncdefis_available(name:str,date:date)-bool:Check if a person is available on a given date.returnTrueasyncdefmain():serverFastMCP(Server)server.mount(serverweather)server.mount(serveroa)asyncwithClient(server)asclient:toolsawaitclient.list_tools()tool_namesset([tool.namefortoolintools])asserttool_names{get_weather,is_available}serverFastMCP(Server)server.mount(serverweather,namespaceweather)server.mount(serveroa,namespaceoa)asyncwithClient(server)asclient:toolsawaitclient.list_tools()tool_namesset([tool.namefortoolintools])asserttool_names{weather_get_weather,oa_is_available}asyncio.run(main())上面的例子演示了针对mount方法的两次调用第一次仅仅指定被挂载的FastMCP对象所以工具名称保持不变。第二次指定了命名空间weather和os它会作为工具的名称前缀weather_get_weather和oa_is_available。classFastMCP(AggregateProvider,LifespanMixin,MCPOperationsMixin,TransportMixin,Generic[LifespanResultT],):defmount(self,server:FastMCP[LifespanResultT],namespace:str|NoneNone,as_proxy:bool|NoneNone,tool_names:dict[str,str]|NoneNone,prefix:str|NoneNone,)-None上面给出了mount方法的定义它的参数说明如下server被挂载的作为MCP服务器的FastMCP对象namespace命名空间。工具和提示词的名称将以{namespace}_为前缀资源将其作为前置路径as_proxy以代理的形式被挂载这个参数已经废弃因为我们倾向于自行创建代理tool_names: 提供一个字典来修改工具的名称prefix: 命名前缀已经废弃并使用namespace代替。2. 挂载一个代理由于mount方法只支持针对FastMCP对象的挂载。对于一个需要通过客户端远程调用MCP服务器我们可以采用代理的形式进行挂载。作为MCP服务器代理的FastMCPProxy对象之所以能够被挂载是因为它自身就是一个FastMCP对象。FastMCPProxy对象利用ProxyProvider提供组件后者又利用Client远程获取组件构造函数参数client_factory用于提供创建Client的工厂。出于性能的考虑远程获取的组件会在本地进行缓存缓存的过期时间默认为300秒。如果手工创建ProxyProvider可以利用构造函数的cache_ttl参数对缓存过期时间进行设置。classFastMCPProxy(FastMCP):def__init__(self,*,client_factory:ClientFactoryT,**kwargs,):super().__init__(**kwargs)self.client_factoryclient_factory provider:ProviderProxyProvider(client_factory)self.add_provider(provider)classProxyProvider(Provider):def__init__(self,client_factory:ClientFactoryT,cache_ttl:float|NoneNone,)ClientFactoryTCallable[[],Client]|Callable[[],Awaitable[Client]]FastMCPProxy可以通过如下这个全局函数fastmcp.server.create_proxy来创建。defcreate_proxy(target:(Client[ClientTransportT]|ClientTransport|FastMCP[Any]|FastMCP1Server|AnyUrl|Path|MCPConfig|dict[str,Any]|str),**settings:Any,)-FastMCPProxy如下的程序演示了以代理的形式挂载远程MCP服务器。fromfastmcpimportFastMCPfromfastmcp.clientimportClientfromfastmcp.serverimportcreate_proxyfromdatetimeimportdateimportasyncio serverFastMCP(Server)server.tool()asyncdefget_weather(location:str)-str:Get the current weather for a given location.returnfThe current weather in{location}is sunny.server.tool()asyncdefis_available(name:str,date:date)-bool:Check if a person is available on a given date.returnTrueasyncdefmain():asyncio.create_task(server.run_async(transportstreamable-http,host0.0.0.0,port3721))awaitasyncio.sleep(5)# Wait for the server to startmcpFastMCP()mcp.mount(create_proxy(http://localhost:3721/mcp))asyncwithClient(mcp)asclient:toolsawaitclient.list_tools()tool_namesset([tool.namefortoolintools])print(fTools:{tool_names})asserttool_names{get_weather,is_available}asyncio.run(main())

相关新闻

Linux内存规整机制深度剖析:伙伴系统应对高阶外部碎片的核心算法

Linux内存规整机制深度剖析:伙伴系统应对高阶外部碎片的核心算法

Linux内存规整机制深度剖析:伙伴系统应对高阶外部碎片的核心算法在 Linux 运维或高负载服务开发中,经常能见到一种令人费解的现象:通过 free -m 观察,系统可用内存(Available Memory)还有数个吉字节&#x…

2026/10/7 9:43:30 阅读更多 →
Botpress LLMz 流式对话实战:用 onMessageDelta 与 onTrace 打造终端实时流式 Agent(22_chat_streaming 全解析)

Botpress LLMz 流式对话实战:用 onMessageDelta 与 onTrace 打造终端实时流式 Agent(22_chat_streaming 全解析)

AI 应用后端 【免费下载链接】botpress The open-source hub to build & deploy GPT/LLM Agents ⚡️ 项目地址: https://gitcode.com/gh_mirrors/bo/botpress 点击查看 免费下载 本指南以 Botpress 开源仓库中 LLMz 框架的官方示例 22_chat_streaming&#xf…

2026/10/7 9:43:30 阅读更多 →
虚拟机重启服务就掉线?WinBoat 3 步完成 Windows 服务自动化部署

虚拟机重启服务就掉线?WinBoat 3 步完成 Windows 服务自动化部署

虚拟机重启服务就掉线?WinBoat 3 步完成 Windows 服务自动化部署 【免费下载链接】winboat Run Windows apps on 🐧 Linux with ✨ seamless integration 项目地址: https://gitcode.com/GitHub_Trending/wi/winboat 你在 Linux 上用 WinBoat 运行…

2026/10/7 9:43:30 阅读更多 →

最新新闻

Panther Lake平台与AirJet固态散热技术解析

Panther Lake平台与AirJet固态散热技术解析

1. 这不是概念机,是实打实的物理空间革命“Panther Lake平台首次与AirJet固态散热结合,整机尺寸大幅缩小”——这句话刚在硬件圈传开时,我正拆着一台刚到手的工程样机。手指刚掀开顶盖,第一反应不是看CPU插槽,而是下意…

2026/10/7 10:17:56 阅读更多 →
使用 client-go Fake Client 与 SharedInformerFactory 编写高效 Kubernetes 单元测试

使用 client-go Fake Client 与 SharedInformerFactory 编写高效 Kubernetes 单元测试

云原生后端 【免费下载链接】client-go Go client for Kubernetes. 项目地址: https://gitcode.com/gh_mirrors/cl/client-go 点击查看 免费下载 本文以 client-go 官方示例 examples/fake-client 为骨架,系统讲解如何在测试中创建 fake client、启动真…

2026/10/7 10:17:56 阅读更多 →
开源验货:DBX——让AI看懂数据库的自然语言查询工具

开源验货:DBX——让AI看懂数据库的自然语言查询工具

这次开源验货系列第一期,对象是 DBX。一句话定位:一个让 AI 看懂数据库的开源工具,核心目标是让用户用自然语言去查询、理解和操作数据库,而不是继续在 SQL 编辑器里手工拼语句。 这个项目值不值得试,先看三点&#x…

2026/10/7 10:17:56 阅读更多 →
让AI看懂数据库:DBX类开源工具部署与验证实战指南

让AI看懂数据库:DBX类开源工具部署与验证实战指南

这次我们来看一个方向很明确的开源项目:DBX 这类“让 AI 看懂数据库”的工具。说白了,它就是在大模型和传统数据库之间加一层转化器,你用自然语言问“上个月销量前五的商品是什么”,它帮你翻译成 SQL,去查库&#xff0…

2026/10/7 10:17:56 阅读更多 →
加密流量恶意检测:不依赖解密的会话级统计建模方法

加密流量恶意检测:不依赖解密的会话级统计建模方法

简介:本资源是一套面向网络安全与机器学习交叉领域初学者及进阶研究者的加密恶意流量检测实践方案,聚焦于解决HTTPS等加密协议下恶意行为难以识别的技术难点。项目提供完整Python源码、Flask可视化界面及配套技术文档,涵盖协议解析、词频特征…

2026/10/7 10:17:56 阅读更多 →
Django+Echarts招聘数据可视化分析:从数据导入到交互看板

Django+Echarts招聘数据可视化分析:从数据导入到交互看板

简介:这份资源是面向数据分析初学者与Django入门开发者的实战项目包,围绕招聘数据可视化这一典型场景,将Django、Python与Echarts三者结合,帮助读者理解从数据获取、清洗、统计分析到前端图表呈现的完整链路。项目以Django搭建后端…

2026/10/7 10:16:55 阅读更多 →

日新闻

ROS2机械臂仿真与运动控制:从URDF建模到Gazebo实战全解析

ROS2机械臂仿真与运动控制:从URDF建模到Gazebo实战全解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/7 1:01:58 阅读更多 →
用浏览器直接改ESP32的WiFi密码:NVS键值配置工具设计与实现

用浏览器直接改ESP32的WiFi密码:NVS键值配置工具设计与实现

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/7 1:02:00 阅读更多 →
芯片封装缺陷检测:扫描声学显微镜(SAT)原理与实操指南

芯片封装缺陷检测:扫描声学显微镜(SAT)原理与实操指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/7 1:02:00 阅读更多 →

周新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/6 7:15:40 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/6 5:29:09 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/7 9:29:10 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/6 8:21:32 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/6 4:21:51 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/6 1:18:13 阅读更多 →