徐州建设网站价格网站空间在线解压

张小明 2026/1/8 7:38:19
徐州建设网站价格,网站空间在线解压,公司网站开发 nodejs,线上卖货平台有哪些一、服务组合 使用挂载和导入功能#xff0c;将多个 FastMCP 服务器合并成一个更大的应用程序。 随着您的 MCP 应用程序不断发展#xff0c;您可能希望将工具、资源和提示组织到逻辑模块中#xff0c;或者重用现有的服务器组件。FastMCP 通过两种方法支持组合#xff1a; i…一、服务组合使用挂载和导入功能将多个 FastMCP 服务器合并成一个更大的应用程序。随着您的 MCP 应用程序不断发展您可能希望将工具、资源和提示组织到逻辑模块中或者重用现有的服务器组件。FastMCP 通过两种方法支持组合import_server: 用于带有前缀的组件的一次性复制静态组合。mount: 用于创建一个实时链接其中主服务器将请求委托给子服务器动态组合。二、为什么要组合服务Modularity 将大型应用程序拆分为更小、专注于特定功能的服务器例如天气服务器、数据库服务器、日历服务器。Reusability 创建通用的实用服务器例如一个文本处理服务器并在任何需要的地方挂载它们。Teamwork 不同的团队可以在各自独立的 FastMCP 服务器上工作这些服务器之后会被合并。Organization 将相关功能按逻辑分组在一起。三、导入和挂载的对比选择导入还是挂载取决于您的使用场景和需求。特性导入挂载方法FastMCP.import_server(server, prefixNone)FastMCP.mount(server, prefixNone)组成类型一次性复制静态实时链接动态更新子服务器的更改未显示出来对子服务器的更改会立即生效性能快速 —— 无运行时委托更慢 —— 受最慢的已挂载服务器影响前缀可选 - 对于原名可省略可选 - 原名可省略最适合捆绑最终确定的组件、性能关键型设置模块化运行时组合四、代理服务器FastMCP 支持 MCP 代理功能这使你能够在本地的 FastMCP 实例中镜像本地或远程服务器。代理与导入和挂载功能都完全兼容。4.1 导入静态组合import_server ()(注意这个方法是异步的) 方法会将所有组件工具、资源、模板、提示词从一个 FastMCP 实例子服务器复制到另一个实例主服务器中。可以提供一个可选前缀以避免命名冲突。如果未提供前缀组件将不经修改地被导入。当多个服务器使用相同前缀或无前缀导入时最近导入的服务器的组件将具有优先权。服务端fromfastmcpimportFastMCPimportasyncio# Define subserversweather_mcpFastMCP(nameWeatherService)weather_mcp.tooldefget_forecast(city:str)-dict:Get weather forecast.return{city:city,forecast:Sunny}weather_mcp.resource(data://cities/supported)deflist_supported_cities()-list[str]:List cities with weather support.return[London,Paris,Tokyo]# Define main servermain_mcpFastMCP(nameMainApp)# Import subserverasyncdefsetup():awaitmain_mcp.import_server(weather_mcp,prefixweather)# Result: main_mcp now contains prefixed components:# - Tool: weather_get_forecast# - Resource: data://weather/cities/supportedif__name____main__:asyncio.run(setup())main_mcp.run(transporthttp,# 使用HTTP传输host127.0.0.1,# 绑定本地地址外部访问可改为 0.0.0.0port8000,# 服务端口)客户端importasynciofromfastmcpimportClient clientClient(http://localhost:8000/mcp)asyncdefcall():asyncwithclient:resultawaitclient.call_tool(weather_get_forecast,{city:西安})print(result)resultawaitclient.read_resource(data://weather/cities/supported)print(result)asyncio.run(call())导入是如何工作的当你调用await main_mcp.import_server(subserver, prefix{whatever}):Tools子服务器中的所有工具都被添加到main_mcp中其名称前缀为{prefix}_。subserver.tool(namemy_tool)becomesmain_mcp.tool(name{prefix}_my_tool)Resources: 所有资源在添加时其统一资源标识符URI和名称都带有前缀。URI:subserver.resource(uridata://info)变成了main_mcp.resource(uridata://{prefix}/info)Name:resource.namebecomes{prefix}_{resource.name}Resource Templates: 模板的前缀与资源的前缀类似URIsubserver.resource(uridata://{id})变成了main_mcp.resource(uridata://{prefix}/{id}).Name:template.namebecomes{prefix}_{template.name}.​Prompts: 所有提示词都添加了以 {prefix}_为前缀的名称。subserver.prompt(namemy_prompt)变成了main_mcp.prompt(name{prefix}_my_prompt)请注意import_server 会执行组件的一次性复制。导入后对子服务器所做的更改不会反映在 main_mcp 中。主服务器也不会执行子服务器的生命周期上下文。prefix 参数是可选的。如果省略组件将未经修改地导入。服务端-无前缀导入fromfastmcpimportFastMCPimportasyncio# Define subserversweather_mcpFastMCP(nameWeatherService)weather_mcp.tooldefget_forecast(city:str)-dict:Get weather forecast.return{city:city,forecast:Sunny}weather_mcp.resource(data://cities/supported)deflist_supported_cities()-list[str]:List cities with weather support.return[London,Paris,Tokyo]# Define main servermain_mcpFastMCP(nameMainApp)# Import subserverasyncdefsetup():# Import without prefix - components keep original namesawaitmain_mcp.import_server(weather_mcp)# Result: main_mcp now contains:# - Tool: get_forecast (original name preserved)# - Resource: data://cities/supported (original URI preserved)if__name____main__:asyncio.run(setup())main_mcp.run()无前缀-客户端importasynciofromfastmcpimportClient clientClient(http://localhost:8000/mcp)asyncdefcall():asyncwithclient:resultawaitclient.call_tool(get_forecast,{city:西安})print(result)resultawaitclient.read_resource(data://cities/supported)print(result)asyncio.run(call())冲突解决导入具有相同前缀或无前缀的多个服务器时最近导入的服务器中的组件具有优先级。五、挂载实时链接mount ()方法会在main_mcp服务器和子服务器之间创建一个实时链接。它不会复制组件而是在运行时将与可选prefix匹配的组件请求委托给subserver。如果未提供前缀子服务器的组件可以无需前缀直接访问。当多个服务器以相同前缀或无前缀挂载时对于存在冲突的组件名称最近挂载的服务器具有优先级。importasynciofromfastmcpimportFastMCP,Client# Define subserverdynamic_mcpFastMCP(nameDynamicService)dynamic_mcp.tooldefinitial_tool():Initial tool demonstration.returnInitial Tool Exists# Mount subserver (synchronous operation)main_mcpFastMCP(nameMainAppLive)main_mcp.mount(dynamic_mcp,prefixdynamic)# Add a tool AFTER mounting - it will be accessible through main_mcpdynamic_mcp.tooldefadded_later():Tool added after mounting.returnTool Added Dynamically!# Testing access to mounted toolsasyncdeftest_dynamic_mount():toolsawaitmain_mcp.get_tools()print(Available tools:,list(tools.keys()))# Shows: [dynamic_initial_tool, dynamic_added_later]asyncwithClient(main_mcp)asclient:resultawaitclient.call_tool(dynamic_added_later)print(Result:,result.content[0].text)# Shows: Tool Added Dynamically!if__name____main__:asyncio.run(test_dynamic_mount())执行结果Available tools:[dynamic_initial_tool,dynamic_added_later]Result: Tool Added Dynamically!挂载如何工作的实时链接父服务器与挂载的服务器建立连接。动态更新当通过父服务器访问时挂载服务器的更改会立即体现出来。前缀访问父服务器使用前缀将请求路由到挂载的服务器。委派在运行时与前缀匹配的组件请求会被委派给挂载的服务器。给工具、资源、模板还有提示词命名的时候用的前缀规则和import_server是一模一样的。这就意味着不管是统一资源标识符 / 密钥还是资源、模板的名称都得加上前缀 —— 这样在多服务器的配置环境里才能更方便地识别它们。prefix 参数是可选的。如果省略该参数组件将在不经过修改的情况下被挂载。在挂载服务器时使用 server.custom_route () 定义的自定义 HTTP 路由也会转发到父服务器从而可以通过父服务器的 HTTP 应用程序访问它们。性能考量由于 “实时链接” 的存在父服务器上诸如 list_tools () 之类的操作会受到最慢挂载服务器速度的影响。特别是基于 HTTP 的挂载服务器可能会引入显著的延迟300-400 毫秒而本地工具仅为 1-2 毫秒并且这种减速会影响整个服务器而不仅仅是与 HTTP 代理工具的交互。如果性能很重要通过 import_server () 导入工具可能是一个更合适的解决方案因为它在启动时一次性复制组件而不是在运行时委托请求。不带前缀的挂载你也可以在不指定前缀的情况下挂载服务器这样组件就可以在不添加前缀的情况下被访问。这与不带前缀的导入方式效果完全相同包括冲突解决机制。直接挂载和代理挂载的比较FastMCP 支持两种安装模式直接挂载默认父服务器直接访问已挂载服务器在内存中的对象。已挂载服务器上不会发生任何客户端生命周期事件已挂载服务器的生命周期上下文不会执行通信通过直接方法调用进行处理代理挂载父服务器将被挂载的服务器视为一个独立实体并通过客户端接口与其通信。完整的客户端生命周期事件在被挂载的服务器上发生当客户端连接时被挂载服务器的生命周期开始执行通信通过内存中的客户端传输进行# Direct mounting (default when no custom lifespan)main_mcp.mount(api_server,prefixapi)# Proxy mounting (preserves full client lifecycle)main_mcp.mount(api_server,prefixapi,as_proxyTrue)# Mounting without a prefix (components accessible without prefixing)main_mcp.mount(api_server)当挂载的服务器具有自定义生命周期时FastMCP 会自动使用代理挂载但您可以通过 as_proxy 参数覆盖此行为。在FastMCP中Direct Mounting直接挂载和Proxy Mounting代理挂载是两种核心挂载模式核心差异体现在通信方式、生命周期处理、适用场景上具体区别如下对比维度Direct Mounting默认Proxy Mounting代理模式通信方式父服务器直接访问子服务器的内存对象通过直接方法调用通信父服务器将子服务器视为独立实体通过客户端接口in-memory Client transport通信客户端生命周期事件子服务器不会触发任何客户端生命周期事件子服务器会触发完整的客户端生命周期事件如连接、断开等子服务器生命周期执行子服务器的lifespan上下文初始化、清理等逻辑不会被执行当客户端连接时子服务器的lifespan上下文会被执行启用方式默认模式无需额外参数除非子服务器有自定义lifespan或手动指定as_proxyTrue1. 子服务器有自定义lifespan时自动启用2. 手动指定as_proxyTrue参数3. 挂载通过FastMCP.as_proxy()创建的代理服务器时强制启用适用场景简单本地挂载、追求低延迟、无需子服务器生命周期管理的场景需要子服务器完整生命周期如初始化资源、连接数据库、需模拟客户端-服务器交互、挂载远程代理服务器的场景代码示例main_mcp.mount(api_server, prefixapi)main_mcp.mount(api_server, prefixapi, as_proxyTrue)补充说明自动切换逻辑FastMCP会在子服务器定义了自定义lifespan时自动将挂载模式切换为Proxy Mounting确保子服务器的生命周期逻辑能正常执行若需强制使用Direct Mounting需手动指定as_proxyFalse需确认子服务器无依赖lifespan的逻辑。性能差异Direct Mounting因直接操作内存对象通信延迟更低Proxy Mounting因多了客户端接口转发和生命周期处理性能略逊但功能更完整。与代理服务器的兼容性若通过FastMCP.as_proxy()创建远程服务器代理挂载该代理时强制使用Proxy Mounting无论是否指定as_proxy参数。与代理服务器的交互使用 FastMCP.as_proxy () 创建代理服务器时挂载该服务器将始终使用代理挂载# Create a proxy for a remote serverremote_proxyFastMCP.as_proxy(Client(http://example.com/mcp))# Mount the proxy (always uses proxy mounting)main_server.mount(remote_proxy,prefixremote)六、带有组合标签的筛选在父服务器上使用 include_tags 或 exclude_tags 时这些过滤器会递归地应用于所有组件包括来自已挂载或导入的服务器的组件。这使您能够控制在父级暴露哪些组件无论您的应用程序是如何组成的。importasynciofromfastmcpimportFastMCP,Client# Create a subserver with tools tagged for different environmentsapi_serverFastMCP(nameAPIServer)api_server.tool(tags{production})defprod_endpoint()-str:Production-ready endpoint.returnProduction dataapi_server.tool(tags{development})defdev_endpoint()-str:Development-only endpoint.returnDebug data# Mount the subserver with production tag filtering at parent levelprod_appFastMCP(nameProductionApp,include_tags{production})prod_app.mount(api_server,prefixapi)# Test the filteringasyncdeftest_filtering():asyncwithClient(prod_app)asclient:toolsawaitclient.list_tools()print(Available tools:,[t.namefortintools])# Shows: [api_prod_endpoint]# The api_dev_endpoint is filtered out# Calling the filtered tool raises an errortry:awaitclient.call_tool(api_dev_endpoint)exceptExceptionase:print(fFiltered tool not accessible:{e})if__name____main__:asyncio.run(test_filtering())执行结果Available tools:[api_prod_endpoint]Filtered toolnotaccessible:Unknown tool:api_dev_endpoint Toolapi_dev_endpointnotlisted,no validation will be performed递归过滤的工作原理标签过滤器按以下顺序应用子服务器过滤器每个挂载 / 导入的服务器首先对其组件应用自身的包含标签 / 排除标签。父服务器过滤器然后父服务器对所有组件包括来自子服务器的组件应用自身的包含标签 / 排除标签。这确保了父服务器标签策略充当父服务器所公开的所有内容的全局策略无论你的应用程序是如何组成的。这种过滤既适用于列表操作例如list_tools ()也适用于执行操作例如call_tool ()。被过滤的组件既无法通过父服务器看到也无法通过父服务器执行。
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

高端行业网站建设网摘网站推广法

在学术探索的浩瀚星空中,本科与硕士阶段的论文写作犹如一场充满挑战的星际航行。面对选题迷茫、文献梳理耗时、逻辑构建混乱、语言表达不专业等重重暗礁,许多学子在论文的深海中挣扎求索。而今,一款名为“书匠策AI”的科研工具正悄然成为这场…

张小明 2025/12/25 19:04:15 网站建设

婚恋网站女代我做彩票查询网站最新域名

Langchain-Chatchat为何适合构建离线知识问答系统? 在企业数字化转型的浪潮中,一个看似简单却长期困扰组织的问题浮出水面:员工明明拥有成千上万页的制度文档、产品手册和内部资料,为什么每次提问“年假怎么休”还得找HR&#xff…

张小明 2025/12/27 2:12:45 网站建设

珠海建设工程网站常见的软件开发工具

Vistro软件介绍 软件概述 Vistro是一款功能强大的交通信号仿真软件,广泛应用于交通工程、城市规划和交通管理等领域。它能够模拟各种交通信号控制系统,帮助用户评估和优化交通流量、信号配时和道路布局。Vistro软件的核心功能包括交通信号控制仿真、交通…

张小明 2025/12/27 16:53:57 网站建设

普洱市住房城乡建设局网站安卓开发步骤

第一章:Open-AutoGLM作业提醒的核心价值在现代自动化任务调度系统中,Open-AutoGLM作业提醒机制扮演着关键角色。它不仅提升了任务执行的可靠性,还显著降低了人为疏漏带来的风险。通过智能化的触发与通知策略,系统能够在作业即将超…

张小明 2025/12/27 23:36:54 网站建设

建设银行信用卡网站查询上海域邦建设集团网站

时钟电路与时序微控制器的时钟为CPU和各个功能模块的协调工作提供同步信号和基本时序信号。时钟电路经典8051MCU必须通过外接晶振、电容,与内部时钟电路构成时钟发生器来产生MCU工作需要的信号,如下图所示。晶振频率范围一般为1.2MHz~12MHz,常…

张小明 2026/1/5 10:30:17 网站建设