English 简体中文 繁體中文 한국 사람 日本語 Deutsch русский بالعربية TÜRKÇE português คนไทย french
查看: 4|回复: 0

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

[复制链接]
查看: 4|回复: 0

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

[复制链接]
查看: 4|回复: 0

241

主题

0

回帖

733

积分

高级会员

积分
733
ToziJGS4OFZE

241

主题

0

回帖

733

积分

高级会员

积分
733
6 天前 | 显示全部楼层 |阅读模式
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")    @Override    public 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;      @Override    public 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();    @Override    public 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。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

241

主题

0

回帖

733

积分

高级会员

积分
733

QQ|智能设备 | 粤ICP备2024353841号-1

GMT+8, 2025-5-2 14:34 , Processed in 3.793133 second(s), 21 queries .

Powered by 智能设备

©2025