mcp - 支持的三种内容服务
MCP 协议,包括上面讲到的 Tool 服务外,共支持三种内容服务。
内容 | 描述 | 备注 |
---|---|---|
Tool | 工具 | 一般由模型控制使用 |
Prompt | 提示语 | 一般由用户控制使用 |
Resouce | 资源(支持,路径变量) | 一般由应用控制使用 |
Mcp Resouce 会有两种概念或形态(在 solon-ai-mcp 里,开发方式是相同的):
- 资源(Resouce),即资源路径是静态的
- 资源模板(ResouceTemplate),即资源路径里有变量
1、完整的 Mcp Server 展示(使用注解模式)
@McpServerEndpoint(sseEndpoint = "/mcp/sse")
public class McpServerTool {
@ToolMapping(description = "查询天气预报")
public String getWeather(@Param(description = "城市位置") String location, Context ctx) {
System.out.println("------------: sessionId: " + ctx.sessionId());
//ctx.realIp(); //ctx 可用于小范围鉴权
return "晴,14度";
}
@ResourceMapping(uri = "config://app-version", description = "获取应用版本号", mimeType = "text/config")
public String getAppVersion() {
return "v3.2.0";
}
@Produces("text/config") //(@Produces 注解申明 mimeType,v3.3.1 后支持)
@ResourceMapping(uri = "config://app-version", description = "获取应用版本号")
public String getAppVersion2() {
return "v3.2.0";
}
//资源模板(v3.3.1 后支持)
@ResourceMapping(uri = "db://users/{user_id}/email", description = "根据用户ID查询邮箱")
public String getEmail(@Param(description = "用户Id") String user_id) {
return user_id + "@example.com";
}
@PromptMapping(description = "生成关于某个主题的提问")
public Collection<ChatMessage> askQuestion(@Param(description = "主题") String topic) {
return Arrays.asList(
ChatMessage.ofUser("请解释一下'" + topic + "'的概念?")
);
}
}
没有 @Param
注解的参数,不会转给大模型处理。
2、客户端对应的接口示意
McpClientProvider::callToolAsText(name, args)
McpClientProvider::getTools()
McpClientProvider::readResourceAsText(uri)
McpClientProvider::getResources()
McpClientProvider::getResourceTemplates() //v3.3.1 后支持
McpClientProvider::getPromptAsMessages(name, args)
McpClientProvider::getPrompts()
具体,参考后面的资料