Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
En este tutorial, aprenderá a exponer la funcionalidad de una aplicación web de Spring Boot a través del Protocolo de contexto de modelo (MCP), agregarla como una herramienta a GitHub Copilot e interactuar con la aplicación mediante lenguaje natural en el modo del agente de chat de Copilot.
Si la aplicación web ya tiene características útiles, como compras, reservas de hoteles o administración de datos, es fácil hacer que esas funcionalidades estén disponibles para:
- Cualquier aplicación que admita la integración de MCP, como el modo del agente de Chat de Copilot de GitHub en Visual Studio Code o en GitHub Codespaces.
- Agente personalizado que accede a herramientas remotas mediante un cliente MCP.
Al agregar un servidor MCP a la aplicación web, se habilita un agente para comprender y usar las funcionalidades de la aplicación cuando responde a las solicitudes del usuario. Esto significa que cualquier cosa que pueda hacer la aplicación, el agente también puede hacerlo.
- Agregue un servidor MCP a la aplicación web.
- Pruebe el servidor MCP localmente en el modo del agente de Chat de Copilot de GitHub.
- Implemente el servidor MCP en Azure App Service y conéctese a él en GitHub Copilot Chat.
Prerequisites
En este tutorial se da por supuesto que está trabajando con el ejemplo usado en Tutorial: Compilación de una aplicación web de Java Spring Boot con Azure App Service en Linux y Azure Cosmos DB.
Como mínimo, abra la aplicación de ejemplo en GitHub Codespaces e implemente la aplicación ejecutando azd up.
Adición de un servidor MCP a la aplicación web
En el espacio de código, abra pom.xml y agregue el
spring-ai-starter-mcp-server-webmvcpaquete al proyecto:<dependency> <groupId>org.springframework.ai</groupId> <artifactId>spring-ai-starter-mcp-server-webmvc</artifactId> <version>1.0.0</version> </dependency>Abra src/main/java/com/microsoft/azure/appservice/examples/springbootmongodb/TodoApplication.java. Para simplificar el escenario, agregará aquí todo el código del servidor MCP.
Al final de TodoApplication.java, agregue la siguiente clase.
@Service class TodoListToolService { private final TodoItemRepository todoItemRepository; public TodoListToolService(TodoItemRepository todoItemRepository) { this.todoItemRepository = todoItemRepository; } @Tool(description = "Get a todo item by its id") public Optional<TodoItem> getTodoItem(String id) { return todoItemRepository.findById(id); } @Tool(description = "Get all todo items") public List<TodoItem> getAllTodoItems() { return todoItemRepository.findAll(); } @Tool(description = "Add a new todo item") public String addNewTodoItem(String description, String owner) { TodoItem item = new TodoItem(UUID.randomUUID().toString(), description, owner); todoItemRepository.save(item); return "Todo item created"; } @Tool(description = "Update an existing todo item") public String updateTodoItem(String id, String description, String owner, boolean finished) { if (!todoItemRepository.existsById(id)) { return "Todo item not found"; } TodoItem item = new TodoItem(id, description, owner); item.setFinish(finished); todoItemRepository.save(item); return "Todo item updated"; } @Tool(description = "Delete a todo item by its id") public String deleteTodoItem(String id) { if (!todoItemRepository.existsById(id)) { return "Todo item not found"; } todoItemRepository.deleteById(id); return "Todo item deleted"; } }El código anterior hace que las herramientas estén disponibles para Spring AI mediante los siguientes atributos específicos:
-
@Service: marcaTodoListToolServicecomo un servicio administrado por Spring. -
@Tool: marca un método como una herramienta invocable en Spring AI. -
description: proporcionan descripciones legibles para cada herramienta. Ayuda al agente de llamada a comprender cómo usar la herramienta.
Este código duplica la funcionalidad de src/main/java/com/microsoft/azure/appservice/examples/springbootmongodb/controller/TodoListController.java, que no es necesario, pero lo mantendrá por motivos de simplicidad. Un procedimiento recomendado sería mover la lógica de la aplicación a una clase de servicio y, a continuación, llamar a los métodos de servicio desde
TodoListControllery desdeTodoListToolService.-
En TodoApplication.java, agregue el método siguiente a la
TodoApplicationclase .@Bean public ToolCallbackProvider todoTools(TodoListToolService todoListToolService) { return MethodToolCallbackProvider.builder().toolObjects(todoListToolService).build(); }Este método proporciona las funcionalidades en
TodoListToolServicecomo callbacks para Spring AI. De forma predeterminada, la configuración automática del servidor MCP en el paquetespring-ai-starter-mcp-server-webmvcconecta automáticamente estas llamadas de retorno de herramientas. Además, de forma predeterminada, el punto de conexión del servidor MCP es<base-url>/sse.En la parte superior de TodoApplication.java, agregue las siguientes importaciones.
import java.util.List; import java.util.Optional; import java.util.UUID; import org.springframework.ai.tool.ToolCallbackProvider; import org.springframework.ai.tool.annotation.Tool; import org.springframework.ai.tool.method.MethodToolCallbackProvider; import org.springframework.context.annotation.Bean; import org.springframework.stereotype.Service; import com.microsoft.azure.appservice.examples.springbootmongodb.dao.TodoItemRepository; import com.microsoft.azure.appservice.examples.springbootmongodb.model.TodoItem;
Probar el servidor MCP localmente
En el terminal de codespace, ejecute la aplicación con
mvn spring-boot:run.Seleccione Abrir en el explorador y agregue una tarea.
Deje Spring Boot en ejecución. El punto de conexión del servidor MCP se está ejecutando ahora en
http://localhost:8080/sse.De nuevo en el espacio de código, abre Copilot Chat y, a continuación, selecciona Modo de agente en el cuadro de entrada.
Seleccione el botón Herramientas y, a continuación, seleccione Agregar más herramientas... en la lista desplegable.
Seleccione Agregar servidor MCP.
Seleccione HTTP (HTTP o eventos Server-Sent).
En Escriba dirección URL del servidor, escriba http://localhost:8080/sse.
En Escriba id. de servidor, escriba todos-mcp o cualquier nombre que desee.
Seleccione Configuración del área de trabajo.
En una nueva ventana de Chat de Copilot, escriba algo como "Muéstrame las tareas."
De forma predeterminada, GitHub Copilot muestra una confirmación de seguridad al invocar un servidor MCP. Selecciona Continuar.
Ahora debería ver una respuesta que indica que la llamada a la herramienta MCP es correcta.
Implementación del servidor MCP en App Service
De nuevo en el terminal de codespace, implemente los cambios confirmando los cambios (método Acciones de GitHub) o ejecute
azd up(método de la CLI para desarrolladores de Azure).En la salida de AZD, busque la dirección URL de la aplicación. La dirección URL tiene este aspecto en la salida de AZD:
Deploying services (azd deploy) (✓) Done: Deploying service web - Endpoint: <app-url>
Una vez que
azd upfinalice, abre .vscode/mcp.json. Cambie la dirección URL a<app-url>/sse.Encima de la configuración modificada del servidor MCP, seleccione Iniciar.
Inicie una nueva ventana de Chat de GitHub Copilot. Debería poder ver, crear, actualizar y eliminar tareas en el agente de Copilot.
Procedimientos recomendados de seguridad
Cuando un agente con tecnología de modelos de lenguaje de gran escala (LLM) llama al servidor MCP, tenga en cuenta los ataques de inyección de instrucciones. Tenga en cuenta los siguientes procedimientos recomendados de seguridad:
- Autenticación y autorización: proteja el servidor MCP con la autenticación de Microsoft Entra para asegurarse de que solo los usuarios o agentes autorizados puedan acceder a sus herramientas. Consulte Secure Model Context Protocol calls to Azure App Service from Visual Studio Code with Microsoft Entra authentication (Protocolo de contexto de modelo seguro de llamadas a Azure App Service desde Visual Studio Code con autenticación de Microsoft Entra ) para obtener una guía paso a paso.
- Validación y saneamiento de entrada: el código de ejemplo de este tutorial omite la validación y la limpieza de entrada para simplificar y claridad. En escenarios de producción, implemente siempre la validación y la sanación adecuadas para proteger la aplicación. Para Spring, vea Spring: Validación de la entrada del formulario.
- HTTPS: El ejemplo se basa en Azure App Service, que aplica HTTPS de forma predeterminada y proporciona certificados TLS/SSL gratuitos para cifrar los datos en tránsito.
- Principio de privilegios mínimos: exponga solo las herramientas y los datos necesarios para su caso de uso. Evite exponer operaciones confidenciales a menos que sea necesario.
- Limitación de velocidad y limitación: use API Management o middleware personalizado para evitar ataques por denegación de servicio y abuso.
- Registro y supervisión: registro de acceso y uso de puntos de conexión de MCP para la auditoría y la detección de anomalías. Supervisar la actividad sospechosa.
- Configuración de CORS: restrinja las solicitudes entre orígenes a dominios de confianza si se accede al servidor MCP desde exploradores. Para obtener más información, vea Habilitar CORS.
- Actualizaciones periódicas: mantenga actualizadas las dependencias para mitigar las vulnerabilidades conocidas.