LLM SSE MCP Demo について
Spring Boot を使い、SSE 対応の MCP サーバー、OAuth 2.0 認証、複数の LLM プロバイダーを組み合わせたデモです。MCP のツール検出や呼び出し、可観測性を学ぶ開発者向けです。
主な機能
- 01SSE による MCP 通信
- 02数学・日時ツール
- 03OAuth 2.0 認可サーバー
- 04複数 LLM プロバイダー対応チャット
- 05Prometheus、Tempo、Loki、Grafana による可観測性
活用シーン
- 01LLM による算術ツール呼び出しのテスト
- 02現在時刻の確認やアラーム設定
- 03MCP での OAuth 2.0 の検証
- 04メトリクス、トレース、ログの確認
MCP 対応
MCP サーバーは SSE 経由で数学・日時ツールをクライアントに公開します。デモクライアントは接続して利用可能なツールを検出し、チャット中に呼び出します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
可観測性(Prometheus/メトリクス、Tempo/トレース、Loki/ログ、Grafana)を備えた LLM SSE MCP
このプロジェクトでは、リアルタイム通信に Server-Sent Events(SSE)を使用して、LLM クライアントと MCP(Model Context Protocol)サーバーを統合する方法を紹介します。OAuth 2.0 セキュリティ、さまざまな LLM モデルによるツール呼び出し機能、安全な認証サービスを紹介する、3 つの Spring Boot アプリケーションで構成されています。
プロジェクト構成
1. Authorization Server Demo (authorization-server-demo)
OAuth 2.0 認可サーバー機能を実装し、安全な認証および認可サービスを提供する Spring Boot アプリケーションです。
機能:
- OAuth 2.0 認可サーバー: アクセストークンを発行し、検証します
ポート: 9000
2. SSE MCP Server Demo (sse-mcp-server-demo)
SSE エンドポイントを介して数学および日付/時刻のツールを公開する、MCP サーバーとして動作する Spring Boot アプリケーションです。
機能:
- 数学ツール: 加算および乗算
- 日時ツール: 現在時刻の取得およびアラームの設定
- SSE 対応: Server-Sent Events によるリアルタイム通信
- MCP プロトコル: ツールの検出と実行のための Model Context Protocol を実装
利用可能なツール:
sumNumbers(int, int)- 2 つの数値を加算しますmultiplyNumbers(int, int)- 2 つの数値を乗算しますgetCurrentDateTime()- ユーザーのタイムゾーンにおける現在の日付/時刻を取得しますsetAlarm(String)- 指定された ISO-8601 時刻にアラームを設定します
ポート: 8080(デフォルト)
3. LLM MCP Client Demo (llm-mcp-client-demo)
MCP サーバーに接続し、複数の LLM プロバイダーに対応した対話型チャットインターフェースを提供する Spring Boot ウェブアプリケーションです。
機能:
- 複数の LLM に対応: Anthropic Claude、OpenAI GPT、Google Gemini、Ollama
- 対話型ウェブチャット: 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. Authorization Server を起動する
cd authorization-server-demo
./gradlew bootRun
3. MCP Server を起動する
cd sse-mcp-server-demo
./gradlew bootRun
4. LLM Client を起動する
cd llm-mcp-client-demo
./gradlew bootRun
5. チャットインターフェースにアクセスする
ブラウザーを開き、http://localhost:10101 にアクセスします。
6. Grafana にアクセスして Prometheus、Tempo、Loki を確認する
ブラウザーを開き、http://localhost:3000 にアクセスします。
データソース->Prometheus->Explore
データソース->Tempo->Explore
データソース->Loki->Explore
使い方
- 上記の順序で両方のサービスを起動します
- ウェブインターフェース
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 - ウェブテンプレート
- Gradle - ビルドシステム
設定
すべてのアプリケーションで YAML 設定ファイルを使用します。
- 認証サーバーの設定:
authorization-server-demo/src/main/resources/application.yml - MCP サーバーの設定:
sse-mcp-server-demo/src/main/resources/application.yml - LLM クライアントの設定:
llm-mcp-client-demo/src/main/resources/application.yml
開発
このプロジェクトでは、次の機能を紹介します。
- Spring AI を使用した MCP プロトコルの実装
- SSE ベースのリアルタイム通信
- 複数プロバイダーの LLM 統合
- ツールの呼び出しと検出
- インタラクティブなウェブインターフェース
- OAuth2 による MCP 認証
- Spring Actuator と Micrometer(OpenTelemetry、Prometheus、Tempo、Loki、Grafana)によるオブザーバビリティ
このデモは、外部ツール機能を備えた、より複雑な LLM 搭載アプリケーションを構築するための基盤となります。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。


