基于数据库的MCP工具动态注册与隔离执行方法及系统与流程

摘要: 本发明涉及计算机软件,尤其涉及大语言模型(largelanguagemodel,llm)应用开发与部署技术,具体涉及一种基于数据库的模型上下文协议(modelc...
基于数据库的MCP工具动态注册与隔离执行方法及系统与流程

本发明涉及计算机软件,尤其涉及大语言模型(large language model,llm)应用开发与部署技术,具体涉及一种基于数据库的模型上下文协议(model contextprotocol, mcp)工具的动态注册、动态组装与隔离执行方法及系统。

背景技术:

1、模型上下文协议(model context protocol, mcp)作为大语言模型接入外部工具和服务的标准化接口,正日益成为ai应用开发的事实标准。在mcp协议框架下,mcp服务器(server)会向大语言模型暴露一个或多个“工具(tool)”。这些工具是对外部能力(如查询天气、访问数据库、调用业务api等)的封装。模型在推理过程中,可根据任务需求选择并调用这些工具,从而获取外部信息或执行具体操作。

2、目前,主流的mcp服务器实现方案,无论是直接基于开发框架编写,还是在框架之上构建管理界面,其工具的实现逻辑均以源代码或编译后代码的形式与服务器进程深度耦合。换言之,工具是服务器应用程序不可分割的一部分。这种设计模式为工具的开发、部署和维护带来了一系列根本性的技术缺陷:

3、(1)工具逻辑与服务进程生命周期强耦合,无法实现热更新:工具的代码在服务器编译期或启动加载期即被固化在进程内存中。任何对工具逻辑的修改,哪怕仅是一行代码的变动,都必须触发完整的应用重新打包、部署和重启流程。这对于需要快速迭代和频繁上线的ai工具而言,极大地降低了开发效率,并引入了不必要的服务中断风险。

4、(2)敏感配置与业务代码混杂,安全隐患与复用困难并存:工具的敏感信息,如api密钥、数据库连接串、第三方服务口令等,通常被直接硬编码在工具实现中,或绑定于特定的环境变量。这导致同一份业务逻辑代码无法在开发、测试、预发布和生产等不同环境间无缝迁移。配置的变更同样需要修改代码并重新部署,不仅效率低下,更增加了密钥泄露的安全风险。

5、(3)缺乏工具级别的版本控制与快速回滚能力:在现有方案下,工具代码的版本历史通常依附于整个服务仓库的git提交记录。当某个工具出现故障时,希望将其单独回滚至某个历史稳定版本的操作极为繁琐,且容易误操作影响服务中的其他部分。无法实现针对单一工具的独立、精准版本管理。

6、(4)接入异构后端系统需要反复开发适配层:mcp工具的后端可能千差万别,包括但不限于restful api、关系型数据库、消息队列、基于openapi规范的服务等(这些后端均可通过本发明统一的http类型或function类型工具进行接入)。现有方案需要针对每一种后端类型单独编写一套协议转换和适配代码,缺乏统一的工具抽象模型,导致大量重复的开发工作,且维护成本高昂。

7、(5)在多消费方场景下,工具能力难以进行有效的分组隔离:当单个mcp服务器需要同时服务于多个不同的业务线(如财务部、人事部)或不同的客户端应用时,现有方案缺乏有效的工具分组和权限控制机制,通常只能向所有接入方暴露全部工具集。这不仅带来了权限噪声,也引入了严重的安全风险,使得不同业务线的客户端可能越权访问非授权的工具。

8、针对上述问题,目前尚未有成熟的解决方案。因此,亟需一种能够打破工具代码与服务器运行状态绑定关系,实现工具动态注册、热部署、安全隔离和高效管理的全新方法与系统。

技术实现思路

1、本发明提供一种基于数据库的mcp工具动态注册与隔离执行方法及系统,以解决上述背景技术中提出的工具无法热更新、配置安全风险、缺乏版本管理、异构接入复杂以及工具无法分组隔离等问题。

2、本发明的核心思想在于:将mcp工具的定义、逻辑代码、配置信息和依赖关系从服务器进程中剥离,作为“数据”持久化存储于数据库中;mcp服务器本身不再内置任何具体工具,而是作为一个轻量级的执行容器;在运行时,动态响应mcp协议请求,从数据库中实时读取并组装所需工具的代码,并在隔离的命名空间中安全执行。

3、具体而言,本发明提供的方法包括以下步骤:

4、步骤一:在元数据库中建立用于描述工具及函数的多维度元数据模型,并完成持久化存储。

5、所述元数据模型至少包括:

6、(1)工具记录表(tb_tool),用于存储每个工具的完整元数据定义。该表的核心字段包括:工具唯一名称(name),作为mcp协议中的工具标识,在同一系统实例范围内不可重复;自然语言描述(description),供大语言模型在推理时选择工具;入参schema(parameters),以json schema格式存储,直接映射为mcp协议的inputschema;工具类型(type),包括纯逻辑函数(function)、http接口(http)、关系型数据库操作(database)、以及从openapi规范导入(openapi)等;类型相关配置(setting),为json字符串,对http类型存储url、method、headers,对database类型存储连接信息与sql模板;工具的业务逻辑代码(code),以字符串形式存储,遵循约定式接口;启用标志(is_enabled),用于控制工具是否出现在mcp工具清单中;标签(tag),用于对工具进行分组标记,支持为每个工具配置一个或多个标签;在具体实现中,标签可采用json数组形式存储于该字段中,或通过独立的工具-标签关联表实现,系统根据标签提供不同的访问端点和过滤条件;配置名称(config_name),用于关联tb_config表中的配置集,系统在运行时根据当前环境和配置名称从配置表中读取对应的键值对注入命名空间;配置名称与类型相关配置(setting)为互补关系--setting存储工具类型所需的固定结构信息(如http的url模板、数据库的连接参数),而config_name指向的配置集存储环境敏感的密钥、口令等动态配置信息,两者在运行时分别以不同的变量名注入命名空间,供工具代码按需使用;

7、(2)公共函数表(tb_func),用于存储可被多个工具共享的公共函数代码;公共函数独立存储的设计,使得同一段函数逻辑可被多个工具共享,避免了代码冗余,且修改一次公共函数即对所有依赖该函数的工具生效,无需逐一修改工具代码。

8、(3)依赖关系表(tb_func_depends),用于记录工具与函数、函数与函数之间的多级依赖关系,形成完整的依赖树。

9、如图3所示,工具记录表(tb_tool)、公共函数表(tb_func)和依赖关系表(tb_func_depends)三者之间的关系为:tb_tool中的每个工具通过依赖关系表关联到其所依赖的零个或多个公共函数(tb_func),公共函数之间亦可通过依赖关系表形成多级依赖链路,从而构成以工具为根节点的完整依赖树结构,供后续动态执行引擎按依赖顺序进行代码拼装。

10、步骤二:动态生成并返回mcp工具清单。

11、响应于mcp客户端发起的“list_tools”请求,系统实时查询所述元数据库,获取当前所有处于启用状态且满足过滤条件的工具记录,根据其存储的名称、描述和入参schema,动态构建符合mcp协议规范的“工具对象列表”,并作为响应返回给客户端,从而实现工具清单的动态注册。

12、步骤三:在隔离命名空间中动态组装并执行工具代码。

13、响应于mcp客户端发起的“call_tool”请求,执行以下子步骤:

14、子步骤301,根据请求中的工具名称,从所述元数据库中查询对应的工具记录及其所有依赖的函数记录;

15、子步骤302,代码拼装器按照依赖顺序,将函数代码与工具自身代码拼接成一份完整的、可独立执行的代码字符串;

16、子步骤303,为本次调用创建一个全新的、隔离的变量命名空间(字典对象),并向该命名空间中注入预定义的上下文变量,包括但不限于:parameters(包含本次调用的输入参数)、config(包含该工具绑定的环境配置,如api密钥、数据库口令);

17、子步骤304,根据工具类型,执行环境初始化补充操作:若为http类型,注入请求方法、url和请求头变量;若为数据库类型,调用内置动态sql渲染器,根据入参和sql模板生成最终sql语句并注入;所述动态sql渲染器支持占位符替换语法和条件标签语法,并对占位符替换值采用参数化查询方式进行安全绑定,以降低sql注入风险;

18、子步骤305,在一个安全的沙箱环境中执行上述组合代码,将代码执行的标准输出和标准错误重定向至内存缓冲区,并使得代码只能访问所述隔离命名空间中的变量,无法触及宿主进程的全局状态;

19、子步骤306,执行完毕后,从隔离命名空间中读取预定义的输出变量(result)作为工具执行结果;同时,将内存缓冲区的输出内容作为运行日志存储,并记录本次调用的入参、耗时和结果至调用日志表,最终将结果封装为mcp协议响应返回。

20、步骤四:为所述工具和函数提供版本管理与一键回滚能力。

21、每次发布或更新工具/函数时,系统自动将更新前的完整元数据记录保存至发布历史表,形成按时间排序的版本链。响应于用户的一键回滚指令,系统将指定历史版本的记录数据覆盖当前工作记录,从而在不涉及代码部署和服务器重启的情况下实现工具的快速回滚。

22、步骤五:基于标签实现工具的多租户分组隔离。

23、为每个工具配置一个或多个标签。系统根据标签为不同的客户端或业务线提供不同的访问端点(endpoint)。当客户端通过特定端点接入时,系统仅暴露带有对应标签的工具集合,实现工具能力的逻辑隔离和按需访问。

24、如图4所示,不同标签对应不同的访问端点(如/mcp/public、/mcp/finance),系统根据客户端所访问的端点路径提取对应标签,在list_tools和call_tool的处理过程中自动附加标签过滤条件,确保不同业务线的客户端仅能发现和调用被授权标签下的工具集合,实现工具能力的多租户逻辑隔离。

25、另一方面,为实现上述方法,本发明还提供一种基于数据库的mcp工具动态注册与隔离执行系统,包括以下相互配合的模块:

26、存储层:用于存储所述元数据库和日志数据库,负责所有工具定义、函数库、配置、依赖关系和版本历史的持久化;

27、服务接入层:用于与mcp客户端进行通信,支持服务器发送事件(sse)和无状态流式http(streamable http)两种连接协议,负责解析mcp请求并路由至核心引擎,同时承担基于标签的访问端点管理;

28、动态注册层:负责实现mcp协议的“list_tools”回调,从所述存储层实时查询并动态生成工具清单;

29、动态执行引擎:负责实现mcp协议的“call_tool”回调,是系统的核心,包含代码查询器、依赖解析器、代码拼装器、隔离命名空间管理器、动态sql渲染器和沙箱执行器,用于完成工具代码的动态组装、上下文注入、隔离执行和结果返回;

30、管理界面层:用于提供用户操作界面,实现在线创建、编辑、调试、发布、版本管理和启停工具的功能。

31、本发明的有益效果在于:

32、(1)实现工具的热部署与即时生效:工具的增删改操作均转化为数据库记录的变更,服务进程无需重启,下一次调用即刻生效,极大加速了ai工具的迭代周期。

33、(2)实现代码与配置的彻底分离:敏感配置信息通过隔离命名空间在运行时动态注入,源代码中不包含任何环境相关配置,从根本上消除了配置泄露风险,并实现了代码在不同环境间的无缝复用。

34、(3)提供工具级别的版本管理与秒级回滚:独立的版本历史和回滚机制,使得故障恢复精准、快速、安全,无需依赖git操作或全量服务部署。

35、(4)简化异构后端的接入:通过内置的动态sql渲染器,数据库类工具的接入成本大幅降低;统一的工具抽象模型使得扩展新的后端类型(如http)变得标准而高效。

36、(5)实现精准的多租户权限隔离:基于标签的访问控制机制,使得一套mcp服务器实例可以安全、高效地服务多个业务方,满足了企业级应用的安全合规要求。