From d9e8edc89e7f6e77038a139002c3007a4a2d7cd7 Mon Sep 17 00:00:00 2001 From: Felix Trepanier Date: Wed, 1 Oct 2025 13:38:32 -0400 Subject: [PATCH] wip --- build.gradle.kts | 10 ++++++ .../inf5190/demo/BookServiceApplication.java | 16 +++++++-- .../java/com/inf5190/demo/mcp/BooksTools.java | 34 +++++++++++++++++++ src/main/resources/application.properties | 7 ++++ 4 files changed, 64 insertions(+), 3 deletions(-) create mode 100644 src/main/java/com/inf5190/demo/mcp/BooksTools.java diff --git a/build.gradle.kts b/build.gradle.kts index c4ce212..6bd289b 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -17,13 +17,23 @@ repositories { mavenCentral() } +extra["springAiVersion"] = "1.0.2" + dependencies { implementation("org.springframework.boot:spring-boot-starter-web") + implementation("org.springframework.ai:spring-ai-starter-mcp-server-webmvc") + implementation("org.springframework.boot:spring-boot-starter-actuator") developmentOnly("org.springframework.boot:spring-boot-devtools") testImplementation("org.springframework.boot:spring-boot-starter-test") testRuntimeOnly("org.junit.platform:junit-platform-launcher") } +dependencyManagement { + imports { + mavenBom("org.springframework.ai:spring-ai-bom:${property("springAiVersion")}") + } +} + tasks.withType { useJUnitPlatform() } diff --git a/src/main/java/com/inf5190/demo/BookServiceApplication.java b/src/main/java/com/inf5190/demo/BookServiceApplication.java index b3cff2a..392d771 100644 --- a/src/main/java/com/inf5190/demo/BookServiceApplication.java +++ b/src/main/java/com/inf5190/demo/BookServiceApplication.java @@ -1,13 +1,23 @@ package com.inf5190.demo; +import java.util.List; +import org.springframework.ai.support.ToolCallbacks; +import org.springframework.ai.tool.ToolCallback; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.context.annotation.Bean; +import com.inf5190.demo.mcp.BooksTools; @SpringBootApplication public class BookServiceApplication { - public static void main(String[] args) { - SpringApplication.run(BookServiceApplication.class, args); - } + public static void main(String[] args) { + SpringApplication.run(BookServiceApplication.class, args); + } + + @Bean + public List fxTools(BooksTools booksTools) { + return List.of(ToolCallbacks.from(booksTools)); + } } diff --git a/src/main/java/com/inf5190/demo/mcp/BooksTools.java b/src/main/java/com/inf5190/demo/mcp/BooksTools.java new file mode 100644 index 0000000..e6bb7d3 --- /dev/null +++ b/src/main/java/com/inf5190/demo/mcp/BooksTools.java @@ -0,0 +1,34 @@ +package com.inf5190.demo.mcp; + +import java.util.Collection; +import org.springframework.ai.tool.annotation.Tool; +import org.springframework.stereotype.Service; +import com.inf5190.demo.books.model.Book; +import com.inf5190.demo.books.model.BookField; +import com.inf5190.demo.books.repository.BooksRepository; + +@Service +public class BooksTools { + + private BooksRepository repository; + + public BooksTools(BooksRepository repository) { + this.repository = repository; + } + + @Tool(name = "fx-lister-livres", + description = "Obtenir la liste de tous les livres de ma collection personnelle") + public Collection getBooks() { + return repository.getAllBooks(BookField.id, null, 0L, 100); + } + + @Tool(name = "fx-obtenir-livre", description = "Obtenir un livre par son identificateur") + public Book getBookById(Long id) { + return repository.getBook(id).orElse(null); + } + + @Tool(name = "fx-ajouter-livre", description = "Ajouter un livre à ma collection") + public void addBook(Book book) { + repository.addBook(book); + } +} diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index 3a53b23..6c75905 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -1,2 +1,9 @@ spring.application.name=book-service books.idGenerator.initialValue=0 + +management.endpoints.web.exposure.include=* + +spring.ai.mcp.server.enabled=true +spring.ai.mcp.server.name=fx-livres +spring.ai.mcp.server.version=0.0.1 +spring.ai.mcp.server.sse-endpoint=/sse