package xiaozhi.modules.agent.controller; import java.util.List; import org.apache.shiro.authz.annotation.RequiresPermissions; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; import xiaozhi.common.exception.ErrorCode; import xiaozhi.common.user.UserDetail; import xiaozhi.common.utils.Result; import xiaozhi.modules.agent.service.AgentMcpAccessPointService; import xiaozhi.modules.agent.service.AgentService; import xiaozhi.modules.security.user.SecurityUser; @Tag(name = "智能体Mcp接入点管理") @RequiredArgsConstructor @RestController @RequestMapping("/agent/mcp") public class AgentMcpAccessPointController { private final AgentMcpAccessPointService agentMcpAccessPointService; private final AgentService agentService; /** * 获取智能体的Mcp接入点地址 * * @param agentId 智能体id * @return 返回错误提醒或者Mcp接入点地址 */ @Operation(summary = "获取智能体的Mcp接入点地址") @GetMapping("/address/{agentId}") @RequiresPermissions("sys:role:normal") public Result getAgentMcpAccessAddress(@PathVariable("agentId") String agentId) { // 获取当前用户 UserDetail user = SecurityUser.getUser(); // 检查权限 if (!agentService.checkAgentPermission(agentId, user.getId())) { return new Result().error(ErrorCode.MCP_ACCESS_POINT_ADDRESS_NO_PERMISSION); } String agentMcpAccessAddress = agentMcpAccessPointService.getAgentMcpAccessAddress(agentId); if (agentMcpAccessAddress == null) { return new Result().error(ErrorCode.MCP_ACCESS_POINT_ADDRESS_NOT_CONFIGURED); } return new Result().ok(agentMcpAccessAddress); } @Operation(summary = "获取智能体的Mcp工具列表") @GetMapping("/tools/{agentId}") @RequiresPermissions("sys:role:normal") public Result> getAgentMcpToolsList(@PathVariable("agentId") String agentId) { // 获取当前用户 UserDetail user = SecurityUser.getUser(); // 检查权限 if (!agentService.checkAgentPermission(agentId, user.getId())) { return new Result>().error(ErrorCode.MCP_ACCESS_POINT_TOOLS_LIST_NO_PERMISSION); } List agentMcpToolsList = agentMcpAccessPointService.getAgentMcpToolsList(agentId); return new Result>().ok(agentMcpToolsList); } }