oalles_spring_ai_mcp_test

oalles_spring_ai_mcp_test

by oalles
Demonstrates integration of Spring AI with MCP for server-side and client-side geographical data processing.

Spring AI MCP Integration for Geographical Data

Overview

This project demonstrates how to integrate Spring AI's support for MCP (Model Context Protocol) within Spring Boot applications, covering both server-side and client-side implementations. MCP is a standard that streamlines the management of contextual interactions in AI models, enabling consistent integration with external data sources and tools.

Tools

  • Spring AI MCP: Extends the MCP Java SDK and provides dedicated Spring Boot starters for both clients and servers.
  • Llama3.2 via Ollama: The model used in this project, which supports TOOLS.

Modules

Geocoder Service

  • Port: 8081
  • Description: Provides latitude and longitude for a given city.
  • Configuration: application.yml
public interface Geocoder {
    GeoCodeResult geocode(String city) throws Exception;
}

public record GeoCodeResult(double latitude, double longitude) {}

Timezone Service

  • Port: 8082
  • Description: Provides timezone information for a given latitude and longitude.
  • Configuration: application.yml
public interface TimeZoneService {
    Optional<TimeZone> getTimeZoneFromLocation(double latitude, double longitude) throws Exception;
}
public record TimeZone(
        String id,
        String name,
        int rawOffset,
        int dstSavings
) {}

MCP Host

  • Description: Uses the Geocoder and Timezone services via MCP clients and provides a console interface to interact with an LLM.
  • Configuration: application.yml
@Bean
CommandLineRunner runner(final ChatClient.Builder chatClientBuilder, List<ToolCallback> toolCallbacks) {

   final ChatClient agent = chatClientBuilder.build();

   return args -> {
      try (Scanner scanner = new Scanner(System.in)) {
         while (true) {
            System.out.print("\n\nEnter city (or type 'exit' to quit): ");
            String city = scanner.nextLine();
            if ("exit".equalsIgnoreCase(city)) {
               break;
            }

            String queryTemplate = """
                    Please use the available tools to find the latitude and longitude for the city `{city}`. Once you have this information, 
                    use the tools to determine and provide all the timezone details for that location in the same language.
                    """;

            String systemTemplate = """
                    You are an AI assistant specialized in providing geographical information. Your task is to use the provided tools to gather and deliver accurate data.
                    """;

            String llmResponse = agent
                    .prompt()
                    .advisors(new SimpleLoggerAdvisor())
                    .system(systemSpec -> systemSpec.text(systemTemplate))
                    .user(userSpec -> userSpec.text(queryTemplate).param("city", city))
                    .tools(toolCallbacks)
                    .call()
                    .content();

            log.info("\n\n{}", llmResponse);
         }
      }
   };
}

Running the Project

  1. Start Geocoder Service:
    shell cd geocoder mvn spring-boot:run
  2. Start Timezone Service:
    shell cd timezone mvn spring-boot:run
  3. Start MCP Host:
    shell cd mcp-host mvn spring-boot:run

Usage

  1. Interact with MCP Host:
    • Run the MCP Host application.
    • Enter city names in the console.
    • The system will provide latitude, longitude, and timezone information for the entered city.

MCP Demo

About

This project showcases how to integrate Spring AI's support for MCP within Spring Boot applications, covering both server-side and client-side implementations.

Topics

Resources

Stars

Watchers

Forks

Languages

Features & Capabilities

Categories
mcp_server model_context_protocol spring_boot spring_ai java geocoding timezone api_integration

Implementation Details

Stats

0 Views
1 GitHub Stars

Repository Info

oalles Organization

Similar MCP Servers

continuedev_continue by continuedev
25049
21423
9300