Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Neste tutorial, você aprenderá como expor a funcionalidade de um aplicativo Web Spring Boot por meio do Model Context Protocol (MCP), adicioná-lo como uma ferramenta ao GitHub Copilot e interagir com seu aplicativo usando linguagem natural no modo de agente Copilot Chat.
Se o seu aplicativo Web já tiver recursos úteis, como compras, reservas de hotéis ou gerenciamento de dados, é fácil disponibilizar esses recursos para:
- Qualquer aplicativo que ofereça suporte à integração MCP, como o modo de agente do GitHub Copilot Chat no Visual Studio Code ou no GitHub Codespaces.
- Um agente personalizado que acessa ferramentas remotas usando um cliente MCP.
Ao adicionar um servidor MCP ao seu aplicativo Web, você permite que um agente compreenda e use os recursos do seu aplicativo quando ele responde às solicitações do usuário. Isso significa que tudo o que seu aplicativo pode fazer, o agente também pode fazer.
- Adicione um servidor MCP ao seu aplicativo Web.
- Teste o servidor MCP localmente no modo de agente do GitHub Copilot Chat.
- Implante o servidor MCP no Serviço de Aplicativo do Azure e conecte-se a ele no Chat do Copiloto do GitHub.
Prerequisites
Este tutorial pressupõe que você esteja trabalhando com o exemplo usado em Tutorial: Criar um aplicativo Web Java Spring Boot com o Serviço de Aplicativo do Azure no Linux e no Azure Cosmos DB.
No mínimo, abra o aplicativo de exemplo no GitHub Codespaces e implante o aplicativo executando azd up.
Adicionar servidor MCP ao seu aplicativo Web
No espaço de código, abra pom.xml e adicione o
spring-ai-starter-mcp-server-webmvcpacote ao seu projeto:<dependency> <groupId>org.springframework.ai</groupId> <artifactId>spring-ai-starter-mcp-server-webmvc</artifactId> <version>1.0.0</version> </dependency>Abre src/main/java/com/microsoft/azure/appservice/examples/springbootmongodb/TodoApplication.java. Para simplificar o cenário, você adicionará todo o código do servidor MCP aqui.
No final de TodoApplication.java, adicione a seguinte classe.
@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"; } }O código acima disponibiliza ferramentas para o Spring AI usando os seguintes atributos específicos:
-
@Service: MarcaTodoListToolServicecomo um serviço gerenciado pelo Spring. -
@Tool: Marca um método como uma ferramenta chamável no Spring AI. -
description: Estes fornecem descrições legíveis por humanos para cada ferramenta. Ele ajuda o agente chamador a entender como usar a ferramenta.
Este código está duplicando a funcionalidade do src/main/java/com/microsoft/azure/appservice/examples/springbootmongodb/controller/TodoListController.java, o que é desnecessário, mas você o manterá para simplificar. Uma prática recomendada seria mover a lógica da aplicação para uma classe de serviço e, em seguida, chamar os métodos desse serviço tanto de
TodoListControllerquanto deTodoListToolService.-
No TodoApplication.java, adicione o seguinte método à
TodoApplicationclasse.@Bean public ToolCallbackProvider todoTools(TodoListToolService todoListToolService) { return MethodToolCallbackProvider.builder().toolObjects(todoListToolService).build(); }Este método fornece as ferramentas como retornos de chamada em
TodoListToolServicepara o Spring AI. Por padrão, a autoconfiguração do Servidor MCP no pacotespring-ai-starter-mcp-server-webmvcconecta automaticamente esses callbacks de ferramentas. Além disso, por padrão, o ponto de extremidade do Servidor MCP é<base-url>/sse.Na parte superior do TodoApplication.java, adicione as seguintes importações.
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;
Teste o servidor MCP localmente
No terminal codespace, execute o aplicativo com
mvn spring-boot:run.Selecione Abrir no Navegador e adicione uma tarefa.
Deixe o Spring Boot em execução. Seu ponto de extremidade do servidor MCP está em execução no
http://localhost:8080/ssemomento.De volta ao espaço de código, abra o Copilot Chat e selecione Modo de agente na caixa de prompt.
Selecione o botão Ferramentas e, em seguida, selecione Adicionar Mais Ferramentas... no menu pendente.
Selecione Adicionar Servidor MCP.
Selecione HTTP (HTTP ou Server-Sent Eventos).
Em Inserir URL do Servidor, digite http://localhost:8080/sse.
Em Enter Server ID, digite todos-mcp ou qualquer nome que desejar.
Selecione Configurações do espaço de trabalho.
Em uma nova janela do Copilot Chat, digite algo como "Mostre-me as tarefas".
Por padrão, o GitHub Copilot mostra uma confirmação de segurança quando você invoca um servidor MCP. Selecione Continuar.
Agora você verá uma resposta que indica que a chamada da ferramenta MCP foi bem-sucedida.
Implantar o seu servidor MCP no App Service
De volta ao terminal do codespace, implante suas alterações confirmando suas alterações (método GitHub Actions) ou executando
azd up(método Azure Developer CLI).Na saída AZD, localize o URL do seu aplicativo. O URL tem esta aparência na saída AZD:
Deploying services (azd deploy) (✓) Done: Deploying service web - Endpoint: <app-url>
Quando
azd upterminar, abra .vscode/mcp.json. Altere o URL para<app-url>/sse.Acima da configuração modificada do servidor MCP, selecione Iniciar.
Inicie uma nova janela de bate-papo do GitHub Copilot. Você deve ser capaz de visualizar, criar, atualizar e excluir tarefas no agente Copilot.
Práticas recomendadas de segurança
Quando o seu servidor MCP é chamado por um agente alimentado por modelos de linguagem grandes (LLM), esteja ciente de ataques de injeção imediata . Considere as seguintes práticas recomendadas de segurança:
- Autenticação e Autorização: Proteja o seu servidor MCP com autenticação Microsoft Entra para garantir que apenas utilizadores ou agentes autorizados possam aceder às suas ferramentas. Consulte as chamadas do protocolo de contexto de modelo seguro para o Azure App Service a partir do Visual Studio Code, utilizando a autenticação Microsoft Entra para um guia passo a passo.
- Validação e limpeza de entrada: O código de exemplo neste tutorial omite validação e limpeza de entrada para simplicidade e clareza. Em cenários de produção, sempre implemente a validação e a higienização adequadas para proteger seu aplicativo. Para Spring, consulte Spring: Validating Form Input.
- HTTPS: O exemplo depende do Serviço de Aplicativo do Azure, que impõe HTTPS por padrão e fornece certificados TLS/SSL gratuitos para criptografar dados em trânsito.
- Princípio do Privilégio Mínimo: Exponha apenas as ferramentas e os dados necessários para o seu caso de uso. Evite expor operações sensíveis, a menos que seja necessário.
- Limitação de Taxa e Controle de Fluxo: use Gerenciamento de API ou middleware personalizado para evitar abusos e ataques de negação de serviço.
- Registo e monitorização: Registe e monitore o acesso e uso de pontos de extremidade MCP para auditoria e deteção de anomalias. Monitore atividades suspeitas.
- Configuração do CORS: restrinja solicitações de origem cruzada a domínios confiáveis se o servidor MCP for acessado a partir de navegadores. Para obter mais informações, consulte Habilitar CORS.
- Atualizações regulares: mantenha suas dependências atualizadas para mitigar vulnerabilidades conhecidas.