开发 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 开发类似的代理。

xml 复制代码
<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

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 直接提供了解析此配置格式的快捷方法。以下是创建代理服务端示例:

java 复制代码
@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 配置。

yaml 复制代码
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>"
      

创建代理服务端

java 复制代码
@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 的方式输出:

java 复制代码
@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 配置,被其它工具使用了:

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

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

java 复制代码
 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。

相关推荐
qq_12498707532 分钟前
基于协同过滤算法的在线教育资源推荐平台的设计与实现(源码+论文+部署+安装)
java·大数据·人工智能·spring boot·spring·毕业设计
总是学不会.4 分钟前
[特殊字符] 自动分区管理系统实践:让大型表维护更轻松
java·后端·数据库开发·开发
大筒木老辈子7 分钟前
C++笔记---并发支持库(future)
java·c++·笔记
全靠bug跑11 分钟前
Sentinel 服务保护实战:限流、隔离与熔断降级详解
java·sentinel
大模型教程13 分钟前
深入理解 Token:大语言模型的最小单位到底是什么?
程序员·llm·agent
五岳13 分钟前
Web层接口通用鉴权注解实践(基于JDK8)
java
咖啡の猫19 分钟前
Python字典元素的增、删、改操作
java·开发语言·python
Lucky小小吴27 分钟前
JAVA漫谈反序列化篇——笔记
java·开发语言·笔记
大模型教程33 分钟前
万字长文!大模型(LLM)推理优化技术总结(非常详细)
程序员·llm·agent
练习时长一年42 分钟前
LeetCode热题100(最小栈)
java·算法·leetcode