找回密码
 立即注册
首页 业界区 业界 开发 MCP Proxy(代理)也可以用 Solon AI MCP 哟! ...

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

泠邸 前天 22:09
MCP 有三种通讯方式:
通道说明备注stdio本地进程内通讯现有sse http远程 http  通讯现有streamable http远程 http  通讯(MCP 官方刚通过决定,mcp-java-sdk 还没实现)也可以按两大类分:

  • 本地进程间通讯
  • 远程通讯(比如给前端用,或远程接口用)。
目前看,行业内已经积累了大最 stdio mcp-server。而且还有提供代理转换的开源项目,比如:mcpo,mcp-proxy 之类的。如果是 Java,则可以使用 solon-ai-mcp 开发类似的代理。
  1. <dependency>
  2.     <groupId>org.noear</groupId>
  3.     solon-ai-mcp</artifactId>
  4.     <version>3.2.1-M3</version>
  5. </dependency>
复制代码
可以借用两种配置方式(也可以手动柜构建):
1、使用经典的 mcpServers 配置格式加载

这种配置格式,目前 mcp 代理很常用。stdio mcp-server 的各种项目也会提供这种配置。添加示例配置(或者找个 mcp-server 复制下),我们从 gitee 的一个项目上,复制了一份并命名为 mcp/mcpServers.case1.json:
  1. {
  2.   "mcpServers": {
  3.     "gitee": {
  4.       "command": "mcp-gitee-ent",
  5.       "env": {
  6.         "GITEE_ENT_API_BASE": "https://api.gitee.com/enterprises",
  7.         "GITEE_ENT_MCP_ACCESS_TOKEN": "<your mcp ent access token>",
  8.       }
  9.     }
  10.   }
  11. }
复制代码
solon-ai-mcp 直接提供了解析此配置格式的快捷方法。以下是创建代理服务端示例:
  1. @McpServerEndpoint(sseEndpoint = "/mcp/proxy/gitee")
  2. public class McpServerTool implements ToolProvider {
  3.     McpClientToolProvider toolProvider = McpClientToolProvider
  4.                 .fromMcpServers("classpath:mcp/mcpServers.case1.json")
  5.                 .get("gitee")
  6.     @Override
  7.     public Collection<FunctionTool> getTools() {
  8.         return toolProvider.getTools();
  9.     }
  10. }
复制代码
mcpServers 配置是支持多服务配置的,所以解析后会是个Map。在原理上,我们用 McpClientToolProvider 加载了 mcpServers,并作为工具提供给 McpServerEndpoint 输出,形成了代理效果。
2、使用 yaml 格式配置加载

这个规范需要参考对应 McpClientProperties 实体属性。在 app.yml 配置里添加 mcp-client 配置。
  1. solon.ai:
  2.   mcp:
  3.     client:
  4.       gitee:  # McpClientProperties 实体属性
  5.         channel: "stdio"
  6.         serverParameters:
  7.           command: "mcp-gitee-ent"
  8.           env:
  9.             GITEE_ENT_API_BASE: "https://api.gitee.com/enterprises"
  10.             GITEE_ENT_MCP_ACCESS_TOKEN: "<your mcp ent access token>"
  11.       
复制代码
创建代理服务端
  1. @McpServerEndpoint(sseEndpoint = "/mcp/proxy/gitee")
  2. public class McpServerTool implements ToolProvider {
  3.     @Inject("${solon.ai.mcp.client.gitee}") //通过配置,可直接注入
  4.     McpClientToolProvider toolProvider;  
  5.     @Override
  6.     public Collection<FunctionTool> getTools() {
  7.         return toolProvider.getTools();
  8.     }
  9. }
复制代码
3、还可以反向代理

其实我们还可以把 sse mcp-server 代理成 stdio 的方式输出:
  1. @McpServerEndpoint(channel = McpChannel.STDIO)
  2. public class McpServerTool implements ToolProvider {
  3.      McpClientToolProvider sseToolProvider = McpClientToolProvider.builder()
  4.             .apiUrl("http://localhost:8081/mcp/sse")
  5.             .build();
  6.     @Override
  7.     public Collection<FunctionTool> getTools() {
  8.         return toolProvider.getTools();
  9.     }
  10. }
复制代码
打包后,就可以通过 mcpServers 配置,被其它工具使用了:
  1. {
  2.   "mcpServers": {
  3.     "demo1": {
  4.       "command": "java",
  5.       "args": ["-jar", "/demo-mcp-stdio/target/demo-mcp-stdio.jar"]
  6.     }
  7.   }
  8. }
复制代码
如果是 java ,还可以使用 solon-ai-mcp 。示例:
  1. McpClientToolProvider mcpClient = McpClientToolProvider.builder()
  2.                 .channel(McpChannel.STDIO) //表示使用 stdio
  3.                 .serverParameters(McpServerParameters.builder("java")
  4.                         .args("-jar", "/demo-mcp-stdio/target/demo-mcp-stdio.jar")
  5.                         .build())
  6.                 .build();
复制代码
4、总结

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

来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
您需要登录后才可以回帖 登录 | 立即注册