Aracılığıyla paylaş


App Service uygulamasını GitHub Copilot Sohbeti (Spring Boot) için MCP Sunucusu olarak tümleştirme

Bu öğreticide, Model Bağlam Protokolü (MCP) aracılığıyla Spring Boot web uygulamasının işlevselliğini kullanıma sunma, GitHub Copilot'a araç olarak ekleme ve Copilot Sohbet aracı modunda doğal dil kullanarak uygulamanızla etkileşim kurma hakkında bilgi edineceksiniz.

Azure App Service'te barındırılan Todos MCP sunucusunu çağıran GitHub Copilot'ı gösteren ekran görüntüsü.

Web uygulamanızın alışveriş, otel rezervasyonu veya veri yönetimi gibi yararlı özellikleri zaten varsa, bu özellikleri şu özellikler için kullanılabilir hale getirmek kolaydır:

Web uygulamanıza bir MCP sunucusu ekleyerek, bir aracının kullanıcı istemlerine yanıt verirken uygulamanızın özelliklerini anlamasını ve kullanmasını sağlarsınız. Bu, uygulamanızın yapabileceği her şeyi aracın da yapabileceği anlamına gelir.

  • Web uygulamanıza bir MCP sunucusu ekleyin.
  • MCP sunucusunu GitHub Copilot Sohbet aracı modunda yerel olarak test edin.
  • MCP sunucusunu Azure App Service'e dağıtın ve GitHub Copilot Sohbeti'nde bu sunucuya bağlanın.

Prerequisites

Bu öğretici, Tutorial: Linux ve Azure Cosmos DB üzerinde Azure App Service ile Java Spring Boot web uygulaması derleme bölümünde kullanılan örnekle çalıştığınızı varsayar.

En azından GitHub Codespaces'ta örnek uygulamayı açın ve komutunu çalıştırarak azd upuygulamayı dağıtın.

Web uygulamanıza MCP sunucusu ekleme

  1. kod alanında pom.xml açın ve paketi projenize ekleyin 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>
    
  2. src/main/java/com/microsoft/azure/appservice/examples/springbootmongodb/TodoApplication.java dosyasını açın. Senaryonun basitliği için tüm MCP sunucu kodunuzu buraya ekleyeceksiniz.

  3. TodoApplication.java sonuna aşağıdaki sınıfı ekleyin.

    @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";
        }
    }
    

    Yukarıdaki kod, aşağıdaki belirli öznitelikleri kullanarak Spring AI için araçlar sağlar:

    • @Service: Spring tarafından yönetilen bir hizmet olarak işaretler TodoListToolService .
    • @Tool: Spring AI'da bir yöntemi çağrılabilen bir araç olarak işaretler.
    • description: Bunlar her araç için insan tarafından okunabilen açıklamalar sağlar. Çağrı temsilcisinin aracın nasıl kullanılacağını anlamasına yardımcı olur.

    Bu kod, var olan src/main/java/com/microsoft/azure/appservice/examples/springbootmongodb/controller/TodoListController.java işlevlerini yinelediğinden, bu gerekli değildir, ancak kolaylık sağlamak için bu işlevi kullanacaksınız. En iyi uygulama, uygulama mantığını bir hizmet sınıfına taşımak ve ardından hizmet yöntemlerini hem TodoListController hem de TodoListToolService öğelerinden çağırmaktır.

  4. TodoApplication.java aşağıdaki yöntemi sınıfına TodoApplication ekleyin.

    @Bean
    public ToolCallbackProvider todoTools(TodoListToolService todoListToolService) {
        return MethodToolCallbackProvider.builder().toolObjects(todoListToolService).build();
    }
    

    Bu yöntem, Spring AI için TodoListToolService içindeki araçları geri çağırma işlevleri olarak sağlar. Varsayılan olarak, spring-ai-starter-mcp-server-webmvc paketindeki MCP Sunucusu'nun otomatik yapılandırması, bu araç geri çağrımlarını otomatik olarak bağlar. Ayrıca, varsayılan olarak MCP Sunucusu uç noktasıdır <base-url>/sse.

  5. TodoApplication.java en üstüne aşağıdaki içeri aktarmaları ekleyin.

    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 sunucusunu yerel olarak test edin

  1. Codespace terminalinde, uygulamayı mvn spring-boot:run ile çalıştırın.

  2. Tarayıcıda Aç'ı seçin ve bir görev ekleyin.

    Spring Boot'u çalışır durumda bırak. MCP sunucu uç noktanız şu anda çalışmakta http://localhost:8080/sse.

  3. Codespace'a geri dönün, Copilot Sohbeti'ni açın ve ardından istem kutusunda Aracı modu'nu seçin.

  4. Araçlar düğmesini ve ardından açılan listeden Daha Fazla Araç Ekle... öğesini seçin.

    GitHub Copilot Sohbet aracı modunda MCP sunucusu eklemeyi gösteren ekran görüntüsü.

  5. MCP Sunucusu Ekle'yi seçin.

  6. HTTP (HTTP veya Server-Sent Olayları) öğesini seçin.

  7. Sunucu URL'sini Girin alanına yazınhttp://localhost:8080/sse.

  8. Sunucu Kimliğini Girin alanına todos-mcp veya istediğiniz adı yazın.

  9. Çalışma Alanı Ayarları'nı seçin.

  10. Yeni bir Copilot Sohbet penceresine "Yapılacakları göster" gibi bir ifade yazın.

  11. Varsayılan olarak, Bir MCP sunucusunu çağırdığınızda GitHub Copilot size bir güvenlik onayı gösterir. Devamtuşuna basın.

    GitHub Copilot Chat'teki bir MCP çağrısından gelen varsayılan güvenlik iletisini gösteren ekran görüntüsü.

    Şimdi MCP araç çağrısının başarılı olduğunu belirten bir yanıt görmeniz gerekir.

    MCP aracından gelen yanıtı GitHub Copilot Sohbet penceresinde gösteren ekran görüntüsü.

MCP sunucunuzu App Service'e dağıtma

  1. Kod alanı terminaline geri dönerek, değişikliklerinizi işleyerek (GitHub Actions yöntemi) veya azd up komutunu çalıştırarak (Azure Geliştirici CLI yöntemi) değişikliklerinizi dağıtın.

  2. AZD çıkışında uygulamanızın URL'sini bulun. AZD çıktısındaki URL şöyle görünür:

     Deploying services (azd deploy)
    
       (✓) Done: Deploying service web
       - Endpoint: <app-url>
     
  3. İşlem tamamlandıktan sonra azd up.vscode/mcp.jsondosyasını açın. URL'yi <app-url>/sse olarak değiştirin.

  4. Değiştirilen MCP sunucu yapılandırmanızın üst kısmındaki Başlat'ı seçin.

    McP sunucusunu yerel mcp.json dosyasından el ile başlatmayı gösteren ekran görüntüsü.

  5. Yeni bir GitHub Copilot Sohbet penceresi başlatın. Copilot aracısında görevleri görüntüleyebilmeniz, oluşturabilmeniz, güncelleştirebilmeniz ve silebilmeniz gerekir.

En iyi güvenlik uygulamaları

MCP sunucunuz, büyük dil modelleri (LLM) tarafından desteklenen bir aracı tarafından çağrıldığında, prompt ekleme saldırılarına dikkat edin. Aşağıdaki en iyi güvenlik uygulamalarını göz önünde bulundurun:

  • Kimlik Doğrulaması ve Yetkilendirme: Araçlarınıza yalnızca yetkili kullanıcıların veya aracıların erişebildiğinden emin olmak için MCP sunucunuzun güvenliğini Microsoft Entra kimlik doğrulaması ile sağlayın. Adım adım kılavuz için bkz. Microsoft Entra kimlik doğrulaması ile Visual Studio Code'dan Azure App Service'e Güvenli Model Bağlam Protokolü çağrıları .
  • Giriş Doğrulama ve Temizleme: Bu öğreticideki örnek kod, basitlik ve netlik için giriş doğrulama ve temizlemeyi atlar. Üretim senaryolarında, uygulamanızı korumak için her zaman doğru doğrulama ve temizleme uygulayın. Spring için bkz . Spring: Form Girişi Doğrulanıyor.
  • HTTPS: Örnek, varsayılan olarak HTTPS'yi zorlayan ve aktarımdaki verileri şifrelemek için ücretsiz TLS/SSL sertifikaları sağlayan Azure App Service'e dayanır.
  • En Az Ayrıcalık İlkesi: Yalnızca kullanım örneğininiz için gerekli araçları ve verileri kullanıma sunma. Gerekli olmadıkça hassas işlemleri ortaya çıkarmaktan kaçının.
  • Hız Sınırlama ve Azaltma: Kötüye kullanım ve hizmet reddi saldırılarını önlemek için API Management veya özel ara yazılım kullanın.
  • Günlük ve İzleme: Denetim ve anomali algılama için MCP uç noktalarının günlük erişimi ve kullanımı. Şüpheli etkinliği izleyin.
  • CORS Yapılandırması: MCP sunucunuza tarayıcılardan erişiliyorsa, çapraz kökenli istekleri güvenilen etki alanlarıyla kısıtlayın. Daha fazla bilgi için bkz. CORS'yi etkinleştirme.
  • Düzenli Güncelleştirmeler: Bilinen güvenlik açıklarını azaltmak için bağımlılıklarınızı güncel tutun.

Daha fazla kaynak