Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Dalam tutorial ini, Anda akan mempelajari cara mengekspos fungsionalitas aplikasi web Spring Boot melalui Model Context Protocol (MCP), menambahkannya sebagai alat ke GitHub Copilot, dan berinteraksi dengan aplikasi Anda menggunakan bahasa alami dalam mode agen Obrolan Copilot.
Jika aplikasi web Anda sudah memiliki fitur yang berguna, seperti belanja, pemesanan hotel, atau manajemen data, mudah untuk membuat kemampuan tersebut tersedia untuk:
- Aplikasi apa pun yang mendukung integrasi MCP, seperti mode agen GitHub Copilot Chat di Visual Studio Code atau di GitHub Codespaces.
- Agen kustom yang mengakses alat jarak jauh dengan menggunakan klien MCP.
Dengan menambahkan server MCP ke aplikasi web, Anda memungkinkan agen untuk memahami dan menggunakan kemampuan aplikasi saat merespons permintaan pengguna. Ini berarti apa pun yang dapat dilakukan aplikasi Anda, agen juga dapat melakukannya.
- Tambahkan server MCP ke aplikasi web Anda.
- Uji server MCP secara lokal dalam mode agen GitHub Copilot Chat.
- Sebarkan server MCP ke Azure App Service dan sambungkan di GitHub Copilot Chat.
Prerequisites
Tutorial ini mengasumsikan Anda bekerja dengan sampel yang digunakan dalam Tutorial: Membangun aplikasi web Java Spring Boot dengan Azure App Service di Linux dan Azure Cosmos DB.
Minimal, buka aplikasi sampel di GitHub Codespaces dan sebarkan aplikasi dengan menjalankan azd up.
Menambahkan server MCP ke aplikasi web Anda
Di codespace, buka pom.xml dan tambahkan
spring-ai-starter-mcp-server-webmvcpaket ke proyek Anda:<dependency> <groupId>org.springframework.ai</groupId> <artifactId>spring-ai-starter-mcp-server-webmvc</artifactId> <version>1.0.0</version> </dependency>Buka src/main/java/com/microsoft/azure/appservice/examples/springbootmongodb/TodoApplication.java. Untuk kesederhanaan skenario, Anda akan menambahkan semua kode server MCP Anda di sini.
Di akhir TodoApplication.java, tambahkan kelas berikut.
@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"; } }Kode di atas membuat alat tersedia untuk Spring AI dengan menggunakan atribut tertentu berikut:
-
@Service: MenandaiTodoListToolServicesebagai layanan yang dikelola Spring. -
@Tool: Menandai metode sebagai alat yang dapat dipanggil di Spring AI. -
description: Ini memberikan deskripsi yang dapat dibaca manusia untuk setiap alat. Ini membantu agen panggilan untuk memahami cara menggunakan alat ini.
Kode ini menduplikasi fungsionalitas src/main/java/com/microsoft/azure/appservice/examples/springbootmongodb/controller/TodoListController.java yang ada, yang tidak perlu, tetapi Anda akan menyimpannya untuk kesederhanaan. Salah satu praktik terbaik adalah memindahkan logika aplikasi ke kelas layanan, lalu memanggil metode layanan tersebut baik dari
TodoListControllermaupunTodoListToolService.-
Di TodoApplication.java, tambahkan metode berikut ke
TodoApplicationkelas .@Bean public ToolCallbackProvider todoTools(TodoListToolService todoListToolService) { return MethodToolCallbackProvider.builder().toolObjects(todoListToolService).build(); }Metode ini menyediakan alat di
TodoListToolServicesebagai panggilan balik untuk Spring AI. Secara default, konfigurasi otomatis McP Server dalamspring-ai-starter-mcp-server-webmvcpaket secara otomatis menghubungkan panggilan balik alat ini. Selain itu, secara default, titik akhir McP Server adalah<base-url>/sse.Di bagian atas TodoApplication.java, tambahkan impor berikut.
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;
Menguji server MCP secara lokal
Di terminal codespace, jalankan aplikasi dengan
mvn spring-boot:run.Pilih Buka di Browser, lalu tambahkan tugas.
Biarkan Spring Boot berjalan. Endpoint server MCP Anda sedang aktif di
http://localhost:8080/ssesekarang.Kembali ke codespace, buka Obrolan Copilot, lalu pilih Mode agen di kotak perintah.
Pilih tombol Alat , lalu pilih Tambahkan Alat Lainnya... di menu dropdown.
Pilih Tambahkan Server MCP.
Pilih HTTP (HTTP atau Event Server-Sent).
Di Masukkan URL Server, ketik http://localhost:8080/sse.
Di Masukkan ID Server, ketik todos-mcp atau nama apa pun yang Anda suka.
Pilih Pengaturan Ruang Kerja.
Di dalam jendela Obrolan Copilot baru, ketik sesuatu seperti "Tunjukkan daftar tugas."
Secara default, GitHub Copilot menunjukkan konfirmasi keamanan saat Anda memanggil server MCP. Pilih Lanjutkan.
Anda sekarang akan melihat respons yang menunjukkan bahwa panggilan alat MCP berhasil.
Menyebarkan server MCP Anda ke App Service
Kembali ke terminal codespace, sebarkan perubahan Anda dengan menerapkan perubahan Anda (metode GitHub Actions) atau jalankan
azd up(metode Azure Developer CLI).Di output AZD, temukan URL aplikasi Anda. URL tampak seperti ini dalam keluaran AZD:
Deploying services (azd deploy) (✓) Done: Deploying service web - Endpoint: <app-url>
Setelah
azd upselesai, buka .vscode/mcp.json. Ubah URL menjadi<app-url>/sse.Di atas konfigurasi server MCP Anda yang dimodifikasi, pilih Mulai.
Mulai jendela baru GitHub Copilot Chat. Anda harus dapat melihat, membuat, memperbarui, dan menghapus tugas di agen Copilot.
Praktik terbaik keamanan
Ketika server MCP Anda dipanggil oleh agen yang didukung oleh model bahasa besar (LLM), waspadai serangan injeksi yang cepat . Pertimbangkan praktik terbaik keamanan berikut:
- Autentikasi dan Otorisasi: Amankan server MCP Anda dengan autentikasi Microsoft Entra untuk memastikan hanya pengguna atau agen yang berwenang yang dapat mengakses alat Anda. Lihat Panggilan Secure Model Context Protocol ke Azure App Service dari Visual Studio Code dengan autentikasi Microsoft Entra untuk panduan langkah demi langkah.
- Validasi dan Sanitasi Input: Contoh kode dalam tutorial ini menghilangkan validasi input dan sanitasi untuk kesederhanaan dan kejelasan. Dalam skenario produksi, selalu terapkan validasi dan sanitasi yang tepat untuk melindungi aplikasi Anda. Untuk Spring, lihat Spring: Memvalidasi Input Formulir.
- HTTPS: Sampel bergantung pada Azure App Service, yang memberlakukan HTTPS secara default dan menyediakan sertifikat TLS/SSL gratis untuk mengenkripsi data saat transit.
- Prinsip Hak Istimewa Terkecil: Hanya mengekspos alat dan data yang diperlukan untuk kasus penggunaan Anda. Hindari mengekspos operasi sensitif kecuali diperlukan.
- Pembatasan dan Pembatasan Laju: Gunakan API Management atau middleware kustom untuk mencegah penyalahgunaan dan penolakan serangan layanan.
- Pengelogan dan Pemantauan: Akses log dan penggunaan titik akhir MCP untuk audit dan deteksi anomali. Pantau aktivitas yang mencurigakan.
- Konfigurasi CORS: Membatasi permintaan lintas asal ke domain tepercaya jika server MCP Anda diakses dari browser. Untuk informasi selengkapnya, lihat Mengaktifkan CORS.
- Pembaruan Reguler: Selalu perbarui dependensi Anda untuk memitigasi kerentanan yang diketahui.