Solon v3.3.0

mcp - 通讯方式的代理转换效果

</> markdown

(v3.2.1 后支持)

上面讲过,服务端支持接口实现的方式。这种方式,可以实现代理转换的效果。

1、stdio mcp-server 通过代理,转为 sse mcp-server

支持 java 包

@McpServerEndpoint(sseEndpoint="/mcp/sse")
public class McpStdioToSseServerDemo1 implements ToolProvider {
    McpClientProvider stdioToolProvider = McpClientProvider.builder()
            .channel(McpChannel.STDIO) //表示使用 stdio
            .serverParameters(ServerParameters.builder("java")
                    .args("-jar", "/Users/noear/Downloads/demo-mcp-stdio/target/demo-mcp-stdio.jar")
                    .build())
            .build();

    @Override
    public Collection<FunctionTool> getTools() {
        return stdioToolProvider.getTools();
    }
}

支持 node.js 包

@McpServerEndpoint(sseEndpoint="/case3/sse")
public class McpStdioToSseServerDemo2 implements ToolProvider {
    McpClientProvider stdioToolProvider = McpClientProvider.builder()
            .channel(McpChannel.STDIO) //表示使用 stdio
            .serverParameters(ServerParameters.builder("npx")
                    .args("-y", "@gitee/mcp-gitee@latest")
                    .addEnvVar("GITEE_API_BASE", "https://gitee.com/api/v5")
                    .addEnvVar("GITEE_ACCESS_TOKEN", "<your personal access token>")
                    .build())
            .build();

    @Override
    public Collection<FunctionTool> getTools() {
        return stdioToolProvider.getTools();
    }
}

不限制,任何语言或环境。

2、sse mcp-server 通过代理,转为 stdio mcp-server

@McpServerEndpoint(channel = McpChannel.STDIO)
public class McpSseToStdioServerDemo implements ToolProvider {
    McpClientProvider sseToolProvider = McpClientProvider.builder()
            .apiUrl("http://localhost:8081/sse")
            .build();

    @Override
    public Collection<FunctionTool> getTools() {
        return sseToolProvider.getTools();
    }
}