MCP 客户端 SDK

MCP 服务端 SDK

其他

工具(Tool)开发

在标记了 @McpService 注解的类中,通过为方法添加 @Tool 注解来创建工具。框架会自动发现这些方法,并将其暴露为可调用的工具。

@McpService
public class MyTools {
    @Tool(description = "回显字符串")
    public String echoString(@ToolArg(description = "要回显的字符串") String input) {
        return input;
    }

    @Tool("customName", description = "自定义名称工具")
    public String myMethod() {
        return "result";
    }
}

参数处理与校验

工具参数通过 @ToolArg 注解,提供用于校验和生成元数据的参数说明。每个参数可指定名称、描述及是否必填。

参数注解

属性 描述 默认值
value 参数名(若为空则用方法参数名) 空字符串
description 面向客户端的参数描述 空字符串
required 是否为必填参数 true

类型映射

框架自动将 Java 类型映射为 JSON Schema 类型:

Java 类型 JSON Schema 类型
String, Character "string"
int, long, float, double, Number "number"
boolean, Boolean "boolean"
其它类型 "Object"

工具实现示例

基础字符串工具

@Tool(description = "回显字符串")
public String echoString(@ToolArg(description = "要回显的字符串") String input) {
    return input;
}

无参数工具

@Tool(description = "耗时 10 秒完成")
public String longOperation() throws Exception {
    TimeUnit.SECONDS.sleep(5);
    return "ok";
}

返回内容工具

@Tool(description = "一张图片")
public ContentImage image() {
    String base64EncodedImage = ServerUtils.encodeImageToBase64("bird-eye.jpg");
    ContentImage content = new ContentImage();
    content.setMimeType("image/jpg");
    content.setData(base64EncodedImage);
    return content;
}

多内容工具

@Tool(description = "列出全部内容")
public List<Content> getAll() {
        List<Content> list = new ArrayList<>();
        list.add(new ContentImage(/* ... */));
        list.add(new ContentText("Hello World"));
        return list;
        }