当前位置: 首页 > news >正文

开发 MCP Proxy(代理)也可以用 Solon AI MCP 哟!

MCP 有三种通讯方式:

通道说明备注
stdio本地进程内通讯现有
sse http远程 http 通讯现有
streamable http远程 http 通讯(MCP 官方刚通过决定,mcp-java-sdk 还没实现)

也可以按两大类分:

  • 本地进程间通讯
  • 远程通讯(比如给前端用,或远程接口用)。

目前看,行业内已经积累了大最 stdio mcp-server。而且还有提供代理转换的开源项目,比如:mcpo,mcp-proxy 之类的。如果是 Java,则可以使用 solon-ai-mcp 开发类似的代理。

<dependency><groupId>org.noear</groupId><artifactId>solon-ai-mcp</artifactId><version>3.2.1-M3</version>
</dependency>

可以借用两种配置方式(也可以手动柜构建):

1、使用经典的 mcpServers 配置格式加载

这种配置格式,目前 mcp 代理很常用。stdio mcp-server 的各种项目也会提供这种配置。添加示例配置(或者找个 mcp-server 复制下),我们从 gitee 的一个项目上,复制了一份并命名为 mcp/mcpServers.case1.json

{"mcpServers": {"gitee": {"command": "mcp-gitee-ent","env": {"GITEE_ENT_API_BASE": "https://api.gitee.com/enterprises","GITEE_ENT_MCP_ACCESS_TOKEN": "<your mcp ent access token>",}}}
}

solon-ai-mcp 直接提供了解析此配置格式的快捷方法。以下是创建代理服务端示例:

@McpServerEndpoint(sseEndpoint = "/mcp/proxy/gitee")
public class McpServerTool implements ToolProvider {McpClientToolProvider toolProvider = McpClientToolProvider.fromMcpServers("classpath:mcp/mcpServers.case1.json").get("gitee")@Overridepublic Collection<FunctionTool> getTools() {return toolProvider.getTools();}
}

mcpServers 配置是支持多服务配置的,所以解析后会是个Map。在原理上,我们用 McpClientToolProvider 加载了 mcpServers,并作为工具提供给 McpServerEndpoint 输出,形成了代理效果。

2、使用 yaml 格式配置加载

这个规范需要参考对应 McpClientProperties 实体属性。在 app.yml 配置里添加 mcp-client 配置。

solon.ai:mcp:client:gitee:  # McpClientProperties 实体属性channel: "stdio"serverParameters:command: "mcp-gitee-ent"env: GITEE_ENT_API_BASE: "https://api.gitee.com/enterprises"GITEE_ENT_MCP_ACCESS_TOKEN: "<your mcp ent access token>"

创建代理服务端

@McpServerEndpoint(sseEndpoint = "/mcp/proxy/gitee")
public class McpServerTool implements ToolProvider {@Inject("${solon.ai.mcp.client.gitee}") //通过配置,可直接注入McpClientToolProvider toolProvider;  @Overridepublic Collection<FunctionTool> getTools() {return toolProvider.getTools();}
}

3、还可以反向代理

其实我们还可以把 sse mcp-server 代理成 stdio 的方式输出:

@McpServerEndpoint(channel = McpChannel.STDIO)
public class McpServerTool implements ToolProvider {McpClientToolProvider sseToolProvider = McpClientToolProvider.builder().apiUrl("http://localhost:8081/mcp/sse").build();@Overridepublic Collection<FunctionTool> getTools() {return toolProvider.getTools();}
}

打包后,就可以通过 mcpServers 配置,被其它工具使用了:

{"mcpServers": {"demo1": {"command": "java","args": ["-jar", "/demo-mcp-stdio/target/demo-mcp-stdio.jar"]}}
}

如果是 java ,还可以使用 solon-ai-mcp 。示例:

 McpClientToolProvider mcpClient = McpClientToolProvider.builder().channel(McpChannel.STDIO) //表示使用 stdio.serverParameters(McpServerParameters.builder("java").args("-jar", "/demo-mcp-stdio/target/demo-mcp-stdio.jar").build()).build();

4、总结

开发 MCP Proxy(代理)也可以用 Solon AI MCP 哟!尤其是 Java 环境,我们同时支持 java8,java11,java17,java21,java24。

相关文章:

  • Netty线上如何做性能调优?
  • 弄清C语言中的链表
  • FPGA上实现YOLOv5的一般过程
  • STM32 的 GPIO和中断
  • 基于深度学习和单目测距的前车防撞及车道偏离预警系统
  • git 操作
  • STM32 串口通信
  • Git 详细使用说明文档(适合小白)
  • MVCC详解
  • maven工程中引入外部jar
  • 信息系统项目管理工程师备考计算类真题讲解八
  • 拥抱健康生活,解锁养生之道
  • Trae或者VsCode无法识别相对路径(不自动切换工作目录)
  • VSCode如何修改默认扩展路径和用户文件夹目录到其他盘以及微信开发工具如何修改扩展路径到其他盘
  • C# 音频分离(MP3伴奏)
  • WHAT - 区分 Git PR 和 MR
  • 使用setGraphicsEffect重新设置阴影导致程序崩溃的问题
  • IP的基础知识以及相关机制
  • QTcpSocket 和 QUdpSocket 来实现基于 TCP 和 UDP 的网络通信
  • 爬虫学习——使用HTTP服务代理、redis使用、通过Scrapy实现分布式爬取
  • 小马智行彭军:今年是Robotaxi量产元年,有望3年后盈亏平衡
  • 央行:25日将开展6000亿元MLF操作,期限为1年期
  • 集合多家“最美书店”,松江成立书店联盟“书香满云间”
  • 上海咖啡消费有多“嗲”?咖啡馆已逾9000家,咖啡节主市集持续4天
  • 洛阳白马寺的墓主人是狄仁杰?其实这个误解从北宋就开始了
  • 研讨会|中国古代石刻与历史研究的多重图景