Skip to content

Hi, Spring and AWS fans! in this installment industry legend James Ward and his trusty sidekick Josh look at the amazing opportunities marrying Spring AI and AWS Bedrock!

License

Notifications You must be signed in to change notification settings

joshlong-attic/2025-bootiful-aws-ai

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

8 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Sample: Spring AI with Bedrock and MCP

A Spring Boot application that provides an AI-powered dog adoption service using:

  • AWS Bedrock for AI/ML capabilities
  • Spring AI for conversation management
  • PostgreSQL with pgvector for vector storage
  • Two services:
    • Adoptions service: Handles dog adoption inquiries
    • Scheduling service: MCP Server that manages adoption appointments

Architecture

sequenceDiagram
    actor User
    participant Controller as ConversationalController
    participant Memory as ChatMemory
    participant RAG as QuestionAnswerAdvisor
    participant Vector as VectorStore
    participant Chat as ChatClient
    participant MCP as MCPSyncClient
    participant AI as Bedrock AI

    User->>Controller: POST /{id}/inquire
    
    alt New conversation
        Controller->>Memory: computeIfAbsent(id)
        Memory-->>Controller: Create new PromptChatMemoryAdvisor
    end

    par RAG Process
        Controller->>RAG: Process question
        RAG->>Vector: Search relevant context
        Vector-->>RAG: Return matching embeddings
        RAG-->>Controller: Return augmented prompt
    and Memory Management
        Controller->>Memory: Get conversation history
        Memory-->>Controller: Return chat context
    end

    Controller->>Chat: prompt().user(question)
    
    Chat->>MCP: Synchronous tool callback
    MCP-->>Chat: Return tool results
    
    Chat->>AI: Send augmented prompt + context
    AI-->>Chat: Generate response
    
    Chat-->>Controller: Return content
    Controller->>Memory: Store conversation
    Controller-->>User: Return response

    Note over RAG,Vector: Retrieval Augmented Generation
    Note over Memory: Maintains conversation state
    Note over MCP: Handles scheduled operations
Loading

Setup

To run locally you will need:

  • JDK 23 or higher
  • Docker
  1. Setup Bedrock in the AWS Console, request access to Nova Lite and Cohere Embed Multilingual
  2. Setup auth for local development

Build the Scheduling MCP Server as a Docker container:

cd scheduling && ./mvnw spring-boot:build-image && cd ..

Alternatively, for faster MCP server startup, create a GraalVM Native Image container:

cd scheduling && ./mvnw -Pnative spring-boot:build-image && cd ..

Running

This sample includes tests and a "test" main application which will start the dependency services (postgres with pgvector and the scheduling MCP server) in Docker with Testcontainers.

First make sure you are in the adoptions directory:

cd adoptions

Run the tests:

./mvnw test

Run the "adoptions" server:

./mvnw spring-boot:test-run

With the server started you can now make requests to the server. In IntelliJ, open the resources/client.http file and run the two requests. Or via curl:

curl -X POST --location "http://localhost:8080/2/inquire" \
    -H "Content-Type: application/x-www-form-urlencoded" \
    -d 'question=Do+you+have+any+neurotic+dogs%3F'

About

Hi, Spring and AWS fans! in this installment industry legend James Ward and his trusty sidekick Josh look at the amazing opportunities marrying Spring AI and AWS Bedrock!

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published