Anmerkung
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
In diesem Tutorial erfahren Sie, wie Sie die Funktionen einer Spring Boot Web-App über Model Context Protocol (MCP) verfügbar machen, sie als Tool zu GitHub Copilot hinzufügen und mit Ihrer App im Agent-Modus von Copilot-Chat interagieren.
Screenshot, der zeigt, wie GitHub Copilot den Todos MCP-Server aufruft, der in Azure App Service gehostet wird.
Wenn Ihre Webanwendung bereits nützliche Funktionen wie Shopping, Hotelbuchung oder Datenverwaltung aufweist, ist es einfach, diese Funktionen verfügbar zu machen für:
- Jede Anwendung, die MCP-Integration unterstützt, z. B. gitHub Copilot Chat-Agent-Modus in Visual Studio Code oder in GitHub Codespaces.
- Ein benutzerdefinierter Agent, der mithilfe eines MCP-Clients auf Remotetools zugreift.
Indem Sie Ihrer Web-App einen MCP-Server hinzufügen, können Sie einen Agent aktivieren, um die Funktionen Ihrer App zu verstehen und zu verwenden, wenn er auf Benutzeraufforderungen reagiert. Dies bedeutet, dass ihre App alles tun kann, was der Agent auch tun kann.
- Fügen Sie Ihrer Web-App einen MCP-Server hinzu.
- Testen Sie den MCP-Server lokal im GitHub Copilot Chat-Agent-Modus.
- Stellen Sie den MCP-Server in Azure App Service bereit und stellen Sie eine Verbindung mit dem Server in GitHub Copilot Chat her.
Prerequisites
In diesem Lernprogramm wird davon ausgegangen, dass Sie mit dem Beispiel arbeiten, das im Lernprogramm verwendet wird: Erstellen einer Java Spring Boot Web App-App mit Azure App Service unter Linux und Azure Cosmos DB.
Öffnen Sie mindestens die Beispielanwendung in GitHub Codespaces, und stellen Sie die App durch Ausführen azd upbereit.
Hinzufügen eines MCP-Servers zu Ihrer Web-App
Öffnen Sie im Codespace pom.xml , und fügen Sie das
spring-ai-starter-mcp-server-webmvcPaket zu Ihrem Projekt hinzu:<dependency> <groupId>org.springframework.ai</groupId> <artifactId>spring-ai-starter-mcp-server-webmvc</artifactId> <version>1.0.0</version> </dependency>Öffnen Sie src/main/java/com/microsoft/azure/appservice/examples/springbootmongodb/TodoApplication.java. Aus Gründen der Einfachheit des Szenarios fügen Sie hier den gesamten MCP-Servercode hinzu.
Fügen Sie am Ende TodoApplication.java die folgende Klasse hinzu.
@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"; } }Der obige Code stellt Tools für Spring AI mithilfe der folgenden spezifischen Attribute zur Verfügung:
-
@Service: MarkiertTodoListToolServiceals Spring-verwalteter Dienst. -
@Tool: Markiert eine Methode als aufrufbares Tool in Spring AI. -
description: Diese stellen für jedes Tool lesbare Beschreibungen bereit. Es hilft dem aufrufenden Agent zu verstehen, wie das Tool verwendet wird.
Dieser Code dupliziert die Funktionalität des vorhandenen src/main/java/com/microsoft/azure/appservice/examples/springbootmongodb/controller/TodoListController.java, was unnötig ist, aber Sie behalten sie zur Einfachheit bei. Es empfiehlt sich, die App-Logik in eine Dienstklasse zu verschieben und dann die Dienstmethoden sowohl von
TodoListControllerals auch aus aufzurufenTodoListToolService.-
Fügen Sie in TodoApplication.java der Klasse
TodoApplicationdie folgende Methode hinzu.@Bean public ToolCallbackProvider todoTools(TodoListToolService todoListToolService) { return MethodToolCallbackProvider.builder().toolObjects(todoListToolService).build(); }Diese Methode stellt die Tools in
TodoListToolServiceals Rückrufe für Spring KI bereit. Standardmäßig wird die automatische Konfiguration des MCP-Servers imspring-ai-starter-mcp-server-webmvc-Paket automatisch mit diesen Toolrückrufen verknüpft. Außerdem ist<base-url>/ssestandardmäßig der MCP Server-Endpunkt .Fügen Sie oben in TodoApplication.java die folgenden Importe hinzu.
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;
Testen des MCP-Servers lokal
Führen Sie im Codespace-Terminal die Anwendung mit
mvn spring-boot:runaus.Wählen Sie im Browser öffnen und dann eine Aufgabe hinzufügen.
Lassen Sie Spring Boot weiterlaufen. Ihr MCP-Serverendpunkt ist jetzt bei
http://localhost:8080/sseaktiv.Öffnen Sie im Codespace den Copilot-Chat, und wählen Sie dann im Eingabeaufforderungsfeld den Agent-Modus aus.
Wählen Sie die Schaltfläche "Extras " und dann im Dropdownmenü " Weitere Tools hinzufügen" aus.
Wählen Sie "MCP-Server hinzufügen" aus.
Wählen Sie HTTP (HTTP oder Server-Sent Events) aus.
Geben Sie unter "Server-URL eingeben"http://localhost:8080/sse ein.
Geben Sie in "Server-ID eingeben" "todos-mcp" oder einen beliebigen Namen ein.
Wählen Sie "Arbeitsbereichseinstellungen" aus.
Geben Sie in einem neuen Copilot-Chatfenster so etwas wie "Zeig mir die Todos." ein.
Standardmäßig zeigt GitHub Copilot eine Sicherheitsbestätigung an, wenn Sie einen MCP-Server aufrufen. Wählen Sie "Weiter" aus.
Nun sollte eine Antwort angezeigt werden, die angibt, dass der MCP-Toolaufruf erfolgreich ist.
MCP-Server auf App Service bereitstellen
Stellen Sie Ihre Änderungen wieder im Codespace-Terminal bereit, indem Sie Ihre Änderungen commiten (GitHub Actions-Methode) oder führen Sie
azd upaus (Azure Developer CLI-Methode).Suchen Sie in der AZD-Ausgabe die URL Ihrer App. Die URL sieht in der AZD-Ausgabe wie folgt aus:
Deploying services (azd deploy) (✓) Done: Deploying service web - Endpoint: <app-url>
Öffnen Sie nach Abschluss von
azd up.vscode/mcp.json. Ändern Sie die URL in<app-url>/sse.Wählen Sie oberhalb der geänderten MCP-Serverkonfiguration "Start" aus.
Starten Sie ein neues GitHub Copilot-Chatfenster. Sie sollten in der Lage sein, Aufgaben im Copilot-Agent anzuzeigen, zu erstellen, zu aktualisieren und zu löschen.
Bewährte Sicherheitsmethoden
Wenn Ihr MCP-Server von einem Agent aufgerufen wird, der von großen Sprachmodellen (LLM) unterstützt wird, sollten Sie sich über Eingabeaufforderungsangriffe bewusst sein. Berücksichtigen Sie die folgenden bewährten Sicherheitsmethoden:
- Authentifizierung und Autorisierung: Sichern Sie Ihren MCP-Server mit der Microsoft Entra-Authentifizierung, um sicherzustellen, dass nur autorisierte Benutzer oder Agents auf Ihre Tools zugreifen können. Eine schrittweise Anleitung finden Sie unter Secure Model Context Protocol-Aufrufe an Azure App Service von Visual Studio Code mit microsoft Entra-Authentifizierung .
- Eingabeüberprüfung und Bereinigung: Der Beispielcode in diesem Lernprogramm lässt die Eingabeüberprüfung und Bereinigung zur Einfachheit und Klarheit aus. Implementieren Sie in Produktionsszenarien immer die richtige Validierung und Bereinigung, um Ihre Anwendung zu schützen. Für Informationen zu Spring siehe Spring: Validating Form Input.
- HTTPS: Das Beispiel basiert auf Azure App Service, der STANDARDMÄßIG HTTPS erzwingt und kostenlose TLS/SSL-Zertifikate zum Verschlüsseln von Daten während der Übertragung bereitstellt.
- Prinzip der geringsten Rechte: Machen Sie nur die erforderlichen Tools und Daten verfügbar, die für Ihren Anwendungsfall erforderlich sind. Vermeiden Sie das Verfügbarmachen vertraulicher Vorgänge, es sei denn, dies ist erforderlich.
- Rate Limiting and Throttling: Verwenden Sie API-Verwaltung oder benutzerdefinierte Middleware, um Missbrauch und Denial-of-Service-Angriffe zu verhindern.
- Protokollierung und Überwachung: Protokollieren des Zugriffs und der Verwendung von MCP-Endpunkten für die Überwachung und Anomalieerkennung. Überwachen Sie verdächtige Aktivitäten.
- CORS-Konfiguration: Beschränken Sie ursprungsübergreifende Anforderungen auf vertrauenswürdige Domänen, wenn auf Ihren MCP-Server über Browser zugegriffen wird. Weitere Informationen finden Sie unter Aktivieren von CORS.
- Regelmäßige Updates: Halten Sie Ihre Abhängigkeiten auf dem neuesten Stand, um bekannte Sicherheitsrisiken zu mindern.