McpServiceController.java
package fr.tiogars.chat.domains.mcp.controllers;
import fr.tiogars.chat.domains.mcp.models.McpActionRequest;
import fr.tiogars.chat.domains.mcp.models.McpActionResponse;
import fr.tiogars.chat.domains.mcp.models.McpServiceConfig;
import fr.tiogars.chat.domains.mcp.services.McpService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.validation.Valid;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* REST controller for MCP service operations.
*/
@RestController
@RequestMapping("/api/mcp/services")
@Tag(name = "MCP Services", description = "MCP service management and actions")
public class McpServiceController {
private final McpService mcpService;
public McpServiceController(McpService mcpService) {
this.mcpService = mcpService;
}
@GetMapping
@Operation(summary = "List all MCP services", description = "Get all registered MCP service configurations")
public ResponseEntity<List<McpServiceConfig>> listServices() {
List<McpServiceConfig> services = mcpService.getAllServices();
return ResponseEntity.ok(services);
}
@GetMapping("/{serviceId}")
@Operation(summary = "Get MCP service configuration", description = "Get configuration for a specific MCP service")
public ResponseEntity<McpServiceConfig> getService(@PathVariable String serviceId) {
McpServiceConfig config = mcpService.getService(serviceId);
if (config == null) {
return ResponseEntity.notFound().build();
}
return ResponseEntity.ok(config);
}
@PostMapping
@Operation(summary = "Register MCP service", description = "Register a new MCP service configuration")
public ResponseEntity<McpServiceConfig> registerService(@Valid @RequestBody McpServiceConfig config) {
McpServiceConfig registered = mcpService.registerService(config);
return ResponseEntity.ok(registered);
}
@PostMapping("/{serviceId}/actions")
@Operation(summary = "Execute MCP action", description = "Execute an action on a specific MCP service")
public ResponseEntity<McpActionResponse> executeAction(
@PathVariable String serviceId,
@Valid @RequestBody McpActionRequest request
) {
// Override serviceId from path
McpActionRequest updatedRequest = new McpActionRequest(
serviceId,
request.action(),
request.parameters()
);
McpActionResponse response = mcpService.executeAction(updatedRequest);
return ResponseEntity.ok(response);
}
}