Solon AI 项目中动态添加工具到 McpServer 端点的实现方法
在 Solon AI 项目中,McpServerEndpoint 是一个重要的注解,用于标记和生成服务端点。开发者有时需要在运行时动态地向这些端点添加新的工具(tool),本文将详细介绍在 Spring Boot 2(SB2)环境下实现这一需求的两种方法。
传统模式下的动态添加
对于使用传统模式构建的 McpServerEndpoint,可以通过以下方式动态添加工具:
// 从Solon上下文中获取指定名称的McpServerEndpoint实例
McpServerEndpoint tmp = Solon.context().getBean(name);
// 向该端点添加新工具
tmp.addTool(...);
这种方法直接利用了 Solon 框架的上下文管理能力,简单直接地获取端点实例并进行修改。
新模式下的动态添加
Solon AI 项目提供了更现代化的端点构建方式,在这种模式下,我们可以通过以下步骤实现工具的动态添加:
- 首先创建一个配置类,用于初始化所有 McpServerEndpoint
@Bean
public McpServerConfig init(List<IMcpServerEndpoint> serverEndpoints) {
// 遍历容器中所有实现了IMcpServerEndpoint接口的Bean
for (IMcpServerEndpoint serverEndpoint : serverEndpoints) {
// 获取类上的McpServerEndpoint注解
McpServerEndpoint anno = serverEndpoint.getClass().getAnnotation(McpServerEndpoint.class);
if (anno == null) {
continue;
}
// 构建端点提供者
McpServerEndpointProvider serverEndpointProvider = McpServerEndpointProvider.builder()
.from(serverEndpoint.getClass(), anno)
.build();
// 添加各种提供者
serverEndpointProvider.addTool(new MethodToolProvider(serverEndpoint));
serverEndpointProvider.addResource(new MethodResourceProvider(serverEndpoint));
serverEndpointProvider.addPrompt(new MethodPromptProvider(serverEndpoint));
// 启动后处理
serverEndpointProvider.postStart();
}
return this;
}
- 在这种模式下,我们可以将生成的 serverEndpointProvider 手动添加到 Spring Boot 容器中,然后按照 Spring Boot 的标准方式进行注入和使用。
两种模式的比较
-
传统模式:
- 实现简单直接
- 适合小型项目或快速原型开发
- 依赖 Solon 框架的上下文管理
-
新模式:
- 更加模块化和可扩展
- 与 Spring Boot 集成更好
- 支持更复杂的端点配置
- 提供了更多的扩展点(MethodToolProvider、MethodResourceProvider等)
实际应用建议
在实际项目中,建议:
- 对于新项目,优先考虑使用新模式,它提供了更好的扩展性和与 Spring Boot 的集成
- 对于已有项目,如果已经使用了传统模式,可以逐步迁移到新模式
- 动态添加工具时,要注意线程安全问题,特别是在高并发场景下
- 考虑工具的生命周期管理,必要时提供移除工具的能力
通过合理选择和使用这两种方法,开发者可以在 Solon AI 项目中灵活地管理和扩展 McpServer 端点的功能,满足各种业务需求。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



