关于 LLM SSE MCP Demo
这是一个基于 Spring Boot 的 LLM 应用示例,整合 SSE MCP 服务、OAuth 2.0 身份验证和多个 LLM 提供方,适合开发者了解 MCP 工具发现、调用及可观测性。
主要功能
- 01基于 SSE 的 MCP 通信
- 02数学及日期时间工具
- 03OAuth 2.0 授权服务
- 04支持多个 LLM 提供方的聊天
- 05Prometheus、Tempo、Loki、Grafana 可观测性
适用场景
- 01测试 LLM 的算术工具调用
- 02查询当前时间或设置闹钟
- 03探索 MCP 中的 OAuth 2.0
- 04检查指标、跟踪和日志
MCP 相关
MCP 服务通过 SSE 向客户端提供数学及日期时间工具。示例客户端连接该服务、发现可用工具,并在聊天过程中调用它们。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
LLM SSE MCP 可观测性(Prometheus/指标、Tempo/追踪、Loki/日志、Grafana)
本项目演示 LLM 客户端与 MCP(Model Context Protocol)服务之间的集成,并使用 Server-Sent Events(SSE)进行实时通信。项目由三个 Spring Boot 应用组成,展示 OAuth 2.0 安全机制、使用多种 LLM 模型调用工具的能力,以及安全的身份验证服务。
项目结构
1. 授权服务演示(authorization-server-demo)
一个实现 OAuth 2.0 授权服务功能的 Spring Boot 应用,提供安全的身份验证和授权服务。
功能:
- OAuth 2.0 授权服务:签发访问令牌并验证令牌
端口: 9000
2. SSE MCP 服务演示(sse-mcp-server-demo)
一个作为 MCP 服务运行的 Spring Boot 应用,通过 SSE 端点提供数学和日期/时间工具。
功能:
- 数学工具:加法和乘法运算
- 日期时间工具:获取当前时间和设置闹钟
- SSE 支持:通过 Server-Sent Events 进行实时通信
- MCP 协议:实现 Model Context Protocol,以发现和执行工具
可用工具:
sumNumbers(int, int)- 将两个数字相加multiplyNumbers(int, int)- 将两个数字相乘getCurrentDateTime()- 获取用户所在时区的当前日期/时间setAlarm(String)- 为指定的 ISO-8601 时间设置闹钟
端口: 8080(默认)
3. LLM MCP 客户端演示(llm-mcp-client-demo)
一个连接到 MCP 服务并通过多个 LLM 提供商提供交互式聊天界面的 Spring Boot Web 应用。
功能:
- 支持多种 LLM:Anthropic Claude、OpenAI GPT、Google Gemini、Ollama
- 交互式 Web 聊天:使用 Thymeleaf 实现实时聊天界面
- MCP 集成:连接到 SSE MCP 服务以调用工具
- 工具发现:自动发现并使用 MCP 服务提供的可用工具
支持的 LLM 模型:
- Anthropic Claude:claude-sonnet-4-20250514
- OpenAI:o4-mini-2025-04-16
- Google Gemini:gemini-2.5-flash-preview-05-20
- Ollama:qwen3:8b(本地)
端口: 10101
先决条件
- Java 17 或更高版本
- Gradle
- 云端 LLM 提供商的 API 密钥(可选)
- 本地安装 Ollama(用于本地模型)
- Docker & Docker Compose
环境变量
对于 LLM 客户端,请为云端提供商设置以下环境变量:
export ANTHROPIC_API_KEY=your_anthropic_key
export OPENAI_API_KEY=your_openai_key
export GOOGLE_PROJECT_ID=your_google_project_id
export GOOGLE_ZONE=your_google_zone
快速开始
1. 启动 Prometheus、Tempo、Loki、Grafana
docker compose up -d
2. 启动授权服务
cd authorization-server-demo
./gradlew bootRun
3. 启动 MCP 服务
cd sse-mcp-server-demo
./gradlew bootRun
4. 启动 LLM 客户端
cd llm-mcp-client-demo
./gradlew bootRun
5. 访问聊天界面
打开浏览器并访问:http://localhost:10101
6. 访问 Grafana 并探索 Prometheus、Tempo、Loki
打开浏览器并访问:http://localhost:3000
Data sources->Prometheus->Explore
Data sources->Tempo->Explore
Data sources->Loki->Explore
使用方法
- 按上述顺序启动两个服务
- 打开 Web 界面,访问
http://localhost:9090 - 发送消息,提出需要数学运算或时间查询的问题
- 观察 LLM 自动发现并使用可用工具
示例查询:
- “5 乘以 4 再加 7 等于多少?”
- “现在几点了?”
- “将闹钟设置为 2025-01-01T10:00:00”
技术栈
- Spring Boot 3.x
- Spring Security OAuth2
- Spring AI - LLM 集成框架
- Model Context Protocol (MCP) - 工具发现与执行
- Server-Sent Events (SSE) - 实时通信
- Thymeleaf - Web 模板
- Gradle - 构建系统
配置
所有应用都使用 YAML 配置文件:
- 授权服务器配置位于
authorization-server-demo/src/main/resources/application.yml - MCP 服务配置位于
sse-mcp-server-demo/src/main/resources/application.yml - 大模型客户端配置位于
llm-mcp-client-demo/src/main/resources/application.yml
开发
该项目演示了:
- 使用 Spring AI 实现 MCP 协议
- 基于 SSE 的实时通信
- 多供应商大模型集成
- 工具调用与发现
- 交互式 Web 界面
- 使用 OAuth2 进行 MCP 授权
- 使用 Spring Actuator 和 Micrometer(OpenTelemetry、Prometheus、Tempo、Loki、Grafana)进行可观测性监控
该演示为构建具备外部工具能力的更复杂的大模型应用提供了基础。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。


