Small Spring Boot demo application for demonstrating BootUI on a real MVC/JPA application.
The application imports users, posts, and comments from JSONPlaceholder into PostgreSQL and exposes several REST endpoints that can be inspected using BootUI.
- BootUI GitHub Repository
- BootUI Documentation
- BootUI Features
- BootUI Architecture Checks
- BootUI Sample Application
Use the SDKs configured in .sdkmanrc:
sdk env install
sdk envStart the application:
task runOr directly with Maven:
mvn spring-boot:run -Dspring-boot.run.profiles=devThe dev profile starts compose.yaml automatically using Spring Boot Docker Compose support.
- Application: http://localhost:7777
- BootUI: http://localhost:7777/bootui
- Health: http://localhost:7777/actuator/health
POST /api/syncGET /api/usersGET /api/users/{id}GET /api/users/{id}/postsGET /api/posts/{id}GET /api/posts/{id}/commentsGET /api/statistics
GET /api/statistics intentionally performs multiple per-user repository calls and is useful for demonstrating SQL/runtime behavior in BootUI.
Goal: show how BootUI analyzes the application and turns findings into advisor scores.
- Start the application:
task run- Open BootUI:
http://localhost:7777/bootui
-
Open Overview.
-
Run Re-run all scanners.
-
Review the overall score and individual advisor scores.
-
Open several advisors:
- Architecture
- REST API
- Spring
- Hibernate
- Memory
- Pentesting
- Vulnerabilities
- Open one finding and explain:
- severity,
- what BootUI detected,
- why it matters,
- remediation.
The point of this demo is not to click every panel. It is to show that BootUI gives a developer-oriented overview of the running application and groups findings by area.
Goal: show what the application is doing while it is running.
-
Open Live Activity.
-
Trigger several application requests:
curl http://localhost:7777/api/users
curl http://localhost:7777/api/users/1/posts
curl http://localhost:7777/api/posts/1/comments
curl http://localhost:7777/api/statistics-
Return to Live Activity.
-
Inspect generated HTTP activity.
-
Open the request details for:
GET /api/statistics
-
Inspect the SQL statements associated with the request.
-
Open SQL Trace and compare the executed queries.
The /api/statistics endpoint intentionally performs multiple per-user repository calls, making it useful for demonstrating repeated SQL queries and potential N+1-style behavior.
Useful additional panels:
- HTTP Exchanges
- Exceptions
- Metrics
- Threads
- Database Pool
- Scheduled Tasks
- Mappings
- Beans
Goal: let Codex inspect BootUI advisor/runtime data through MCP, choose a finding, fix the code, restart the application, and verify the result with BootUI.
Start the application before starting Codex:
task runVerify that BootUI is available:
http://localhost:7777/bootui
BootUI MCP is disabled by default.
Open:
BootUI → Configuration → MCP Server
Enable the MCP server using the runtime toggle.
The MCP endpoint is:
http://localhost:7777/bootui/api/mcp
If MCP is not enabled before Codex starts, Codex can fail during MCP handshake with:
MCP client for `bootui` failed to start:
BootUI MCP server is disabled.
Enable it from the MCP Server panel or set bootui.mcp.enabled=ON.
For the live demo, prefer enabling MCP from the UI to show that MCP access is opt-in.
Run:
codex mcp add bootui --url http://localhost:7777/bootui/api/mcpVerify:
codex mcp listImportant startup order:
Spring Boot application UP
↓
BootUI available
↓
BootUI MCP enabled
↓
Start / restart Codex
↓
MCP handshake succeeds
If MCP was enabled after Codex had already started, restart Codex.
Inside Codex, inspect MCP tools with:
/mcp
Typical BootUI MCP tools include:
architecture_scan
spring_scan
hibernate_scan
rest_api_scan
memory_scan
pentest_scan
graalvm_scan
get_overview
get_health
get_config
get_beans
get_mappings
get_live_activity
get_http_exchanges
get_sql_traces
get_traces
get_exceptions
get_exception_detail
get_log_tail
get_security_logs
Use this prompt:
Use the BootUI MCP server to inspect the currently running application.
Start with the BootUI overview and review all available advisor results.
Focus on HIGH severity findings first.
Choose one high-severity finding that:
1. belongs to this application,
2. can be safely demonstrated and fixed locally,
3. does not require external infrastructure changes.
Explain:
- which BootUI advisor reported it,
- the finding ID and severity,
- what BootUI detected,
- why it matters,
- which project files are involved,
- how you would fix it.
Do not modify any files yet.
This demonstrates that the agent is not only reading source code. It is using BootUI data from the currently running application.
If Codex chooses a finding that is not convenient for a short live fix, use:
Use the BootUI MCP server to inspect the Pentesting advisor.
Review all HIGH severity findings and choose the one that can be safely fixed in this application with a small code or configuration change.
Explain:
- the finding ID,
- severity,
- what BootUI detected,
- which project files are involved,
- the proposed fix.
Do not modify any files.
After reviewing the finding, use:
Fix the selected BootUI finding.
Requirements:
- preserve the existing application behavior,
- keep the change focused on this finding,
- do not change unrelated BootUI findings,
- add or update relevant tests.
After the code changes:
1. run the relevant tests,
2. summarize what changed,
3. do not run BootUI scans yet.
Do not commit the demo change if you want to replay the same scenario later.
BootUI is inspecting the running application, not the modified source tree.
After Codex changes the code, stop and restart the application:
task runWait until:
http://localhost:7777/bootui
is available again.
If the MCP runtime toggle is reset after restart, enable MCP again before continuing.
Use:
Use the BootUI MCP server again.
Re-run the advisor that reported the previously selected finding.
Verify whether that finding is resolved.
Compare:
- the previous finding,
- the current finding,
- the advisor score before and after the change.
Do not modify any files.
Then refresh the BootUI Overview and show the before/after result.
The complete flow is:
BootUI Overview
↓
HIGH severity finding
↓
MCP
↓
Codex triage
↓
Source code fix
↓
Tests
↓
Application restart
↓
BootUI re-scan
↓
Before / after verification
After the demo:
codex mcp remove bootuiVerify:
codex mcp listBootUI MCP runs inside the Spring Boot application, so there is no separate BootUI MCP process to stop.
Run:
mvn verifyThe build uses JaCoCo and fails if line coverage for application logic drops below 90%.
Build the GraalVM native executable:
task native-buildOr directly:
mvn clean -Pnative native:compile -Dspring.profiles.active=devRun it:
task native-runThe executable is created at:
target/bootui-demo
Main settings:
server.port=7777
blog.api.base-url=https://jsonplaceholder.typicode.com
blog.sync.fixed-delay=PT10M
Useful files:
src/main/resources/application.yaml
src/main/resources/application-dev.yaml
src/test/resources/application-test.yaml
compose.yaml
Taskfile.yml