mcp - 服务的接口方式(和代理效果)
服务端点除了常规的方法构建方式外,还支持接口实现的方式(或者混合)。比如把本地一个工具类(不修改任何代码),转为 Mcp 服务:
@McpServerEndpoint(sseEndpoint = "/mcp/sse")
public class McpServerTool implements ToolProvider {
private ToolProvider toolProvider = new MethodToolProvider(new DemoTools());
@Override
public Collection<FunctionTool> getTools() {
return toolProvider.getTools();
}
}
1、支持三种内容提供者接口
提供者接口 | 描述 | 备注 |
---|---|---|
ToolProvider | 工具提供者 | 可通过 MethodFunctionTool 快速构建 |
PromptProvider | 提示语提供者 | 可通过 MethodPromptProvider 快速构建 |
ResourceProvider | 资源提供者 | 可通过 MethodResourceProvider 快速构建 |
2、接口实现的代理效果
把一个 McpServer 通过 McpClientProvider(实现了上述三个接口) 连接后,再转为另一个 McpServer。
把 stdio 转为 sse 服务:
@McpServerEndpoint(sseEndpoint = "/mcp/sse")
public class McpServerTool implements ToolProvider {
private 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();
}
}
把 sse 服务转为 stdio 服务:
@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();
}
}