Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этом руководстве вы узнаете, как предоставить функциональные возможности веб-приложения Spring Boot через протокол MCP, добавить его в GitHub Copilot и взаимодействовать с приложением с помощью естественного языка в режиме агента Copilot Chat.
Если веб-приложение уже имеет полезные функции, такие как покупки, бронирование отелей или управление данными, это легко сделать эти возможности доступными для:
- Любое приложение, поддерживающее интеграцию MCP, например режим агента чата GitHub Copilot в Visual Studio Code или в GitHub Codespaces.
- Пользовательский агент, который обращается к удаленным средствам с помощью клиента MCP.
Добавив сервер MCP в веб-приложение, вы можете агенту понять и использовать возможности приложения при реагировании на запросы пользователей. Это означает, что ваше приложение может сделать все, что может сделать агент.
- Добавьте сервер MCP в веб-приложение.
- Протестируйте сервер MCP локально в режиме агента чата GitHub Copilot.
- Разверните сервер MCP в Службе приложений Azure и подключитесь к нему в GitHub Copilot Chat.
Prerequisites
В этом руководстве предполагается, что вы работаете с примером, используемым в руководстве. Создание веб-приложения Java Spring Boot с помощью Службы приложений Azure в Linux и Azure Cosmos DB.
По крайней мере, откройте образец приложения в GitHub Codespaces и разверните приложение, запустив команду azd up.
Добавление сервера MCP в веб-приложение
В пространстве кода откройте pom.xml и добавьте
spring-ai-starter-mcp-server-webmvcпакет в проект:<dependency> <groupId>org.springframework.ai</groupId> <artifactId>spring-ai-starter-mcp-server-webmvc</artifactId> <version>1.0.0</version> </dependency>Откройте src/main/java/com/microsoft/azure/appservice/examples/springbootmongodb/TodoApplication.java. Для простоты сценария вы добавите весь код сервера MCP здесь.
В конце TodoApplication.java добавьте следующий класс.
@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"; } }Приведенный выше код предоставляет средства для Spring AI с помощью следующих конкретных атрибутов:
-
@Service: помечаетTodoListToolServiceкак управляемый Spring сервис. -
@Tool: помечает метод как вызываемое средство в Spring AI. -
description: они предоставляют человеко-читаемые описания для каждого инструмента. Он помогает вызывающему агенту понять, как использовать средство.
Этот код дублирует функциональные возможности существующего src/main/java/com/microsoft/azure/appservice/examples/springbootmongodb/controller/TodoListController.java, что необязательно, но вы оставите его для простоты. Рекомендуется переместить логику приложения в класс сервиса, а затем вызывать методы сервиса как из
TodoListController, так и изTodoListToolService.-
В TodoApplication.java добавьте следующий метод в
TodoApplicationкласс.@Bean public ToolCallbackProvider todoTools(TodoListToolService todoListToolService) { return MethodToolCallbackProvider.builder().toolObjects(todoListToolService).build(); }Этот метод предоставляет средства в
TodoListToolService, используемые как обратные вызовы для Spring AI. По умолчанию автоматическая настройка СЕРВЕРА MCP вspring-ai-starter-mcp-server-webmvcпакете автоматически выполняет передачу этих обратных вызовов средства. Кроме того, по умолчанию используется<base-url>/sseконечная точка СЕРВЕРА MCP.В верхней части TodoApplication.java добавьте следующие импорты.
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;
Тестирование сервера MCP локально
В терминале пространства кода запустите приложение, используя
mvn spring-boot:run.Выберите "Открыть в браузере", а затем добавьте задачу.
Оставьте Spring Boot запущенным. Сейчас конечная точка сервера MCP доступна
http://localhost:8080/sse.Вернитесь в пространство кода, откройте Copilot Chat, а затем выберите режим агента в поле запроса.
Нажмите кнопку "Сервис", а затем в раскрывающемся списке нажмите кнопку "Добавить другие инструменты".
Выберите "Добавить СЕРВЕР MCP".
Выберите HTTP (HTTP или Server-Sent события).
Введите URL-адрес сервера, введите http://localhost:8080/sse.
В Введите идентификатор сервера введите todos-mcp или любое имя по вашему выбору.
Выберите параметры рабочей области.
В новом окне чата Copilot введите примерно следующее "Покажи мне дела".
По умолчанию GitHub Copilot показывает подтверждение безопасности при вызове сервера MCP. Нажмите Продолжить.
Теперь вы увидите ответ, указывающий на успешное выполнение вызова средства MCP.
Разверните ваш сервер MCP в App Service.
Вернитесь в терминал codespace, зафиксируйте изменения (метод GitHub Actions) или запустите
azd up(метод Azure Developer CLI).В выходных данных AZD найдите URL-адрес приложения. URL-адрес выглядит следующим образом в выходных данных AZD:
Deploying services (azd deploy) (✓) Done: Deploying service web - Endpoint: <app-url>
После завершения
azd up, откройте .vscode/mcp.json. Изменить URL-адрес на<app-url>/sse.Над измененной конфигурацией сервера MCP нажмите кнопку "Пуск".
Запустите новое окно чата GitHub Copilot. Вы должны иметь возможность просматривать, создавать, обновлять и удалять задачи в агенте Copilot.
Рекомендации по обеспечению безопасности
Когда сервер MCP вызывается агентом, управляемым моделями большого языка (LLM), будьте внимательны к атакам типа внедрение команды. Рассмотрим следующие рекомендации по обеспечению безопасности:
- Аутентификация и авторизация: Защита вашего сервера MCP с использованием аутентификации Microsoft Entra, чтобы обеспечить доступ только авторизованным пользователям или агентам. См. пошаговое руководство по вызовам протокола контекста безопасной модели в Службе приложений Azure из Visual Studio Code с проверкой подлинности Microsoft Entra.
- Проверка и очистка входных данных. Пример кода в этом руководстве исключает проверку ввода и очистку для простоты и ясности. В рабочих сценариях всегда реализуйте правильную проверку и очистку для защиты приложения. Сведения о Spring см. в разделе Spring: Проверка входных данных формы.
- HTTPS: В примере используется служба приложений Azure, которая по умолчанию применяет ПРОТОКОЛ HTTPS и предоставляет бесплатные СЕРТИФИКАТЫ TLS/SSL для шифрования данных во время передачи.
- Принцип наименьшей привилегии: предоставление только необходимых средств и данных, необходимых для вашего варианта использования. Избегайте предоставления конфиденциальных операций, если это не необходимо.
- Ограничение скорости и регулирование. Используйте управление API или пользовательское ПО промежуточного слоя для предотвращения злоупотреблений и атак типа "отказ в обслуживании".
- Ведение журнала и мониторинг. Доступ к журналам и использование конечных точек MCP для аудита и обнаружения аномалий. Отслеживайте подозрительные действия.
- Конфигурация CORS: ограничьте кросс-доменные запросы до доверенных доменов, если доступ к вашему серверу MCP осуществляется из браузеров. Дополнительные сведения см. в разделе "Включение CORS".
- Регулярные обновления: обновляйте зависимости, чтобы устранить известные уязвимости.