MCP Server for ReportServer Java Application について
ReportServer 向けの実験的な AI チャットアプリと MCP サーバーです。Java RPC によるバックエンド接続とブラウザー自動化を組み合わせ、自然言語でフロントエンドとバックエンドのタスクを実行します。
主な機能
- 01GWT RPC による ReportServer 接続
- 02一括操作とシステム管理
- 03Playwright によるブラウザー自動化
- 04複数 LLM プロバイダーでのチャット
- 05ドキュメントのセマンティック検索と RAG
活用シーン
- 01ReportServer の UI 操作の自動化
- 02RPC によるバックエンド操作
- 03取り込んだドキュメントの検索
- 04UI 検証とバックエンド処理の併用
MCP 対応
MCP サーバーは RPC クライアント経由で ReportServer に接続し、MCP クライアントにバックエンド操作を提供します。HTTP と SSE のトランスポートに対応しています。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
ReportServer 向け MCP サーバーおよび AI チャットアプリケーション
--Experimental--
エンタープライズ向け ReportServer(Java ベースの BI プラットフォーム)のための AI チャットアプリケーションと、高機能な Model Context Protocol(MCP)サーバーです。.NET 9 を基盤とし、Microsoft の最新の AI アプリケーション開発スタックである Microsoft.Extensions.AI(Extensions.AI) と Semantic Kernel を活用して、ツールベースの自動化、セマンティック検索(RAG)、ReportServer の UI とバックエンドにわたるエンドツーエンドの統合を実現します。
🏗️ アーキテクチャの概要

📖 アーキテクチャの説明
RSChatApp は、AI を活用したインテリジェントなチャットインターフェースを提供し、セマンティック検索機能と、Reportserver のフロントエンドおよびバックエンド機能を担う MCP サーバーで強化された、ブラウザベースのワークスペースとして動作します。
🌐 ブラウザベースのワークスペース(RSChatApp.Web)

- セッション管理:現在、すぐに応答できるよう、ブラウザーのメモリとキャッシュに会話のコンテキストを保持します。
- インタラクティブなチャットインターフェース:AI モデルとシームレスにやり取りできるリアルタイムの Blazor UI です。
- 今後の展開:トピックベースの会話履歴と、セッションをまたいだコンテキスト保持を備えた永続セッションを計画しています。
🧠 ナレッジベースとの連携 システムは、多様なコンテンツを Qdrant ベクトルデータベースに取り込み、インテリジェントな検索を可能にします。
- 📚 ドキュメント:PDF、Markdown ファイル、API ドキュメント、ユーザーマニュアル
- 🔧 Groovy スクリプト:ビルドスクリプト、自動化スクリプト、カスタムの
.groovyファイル - 💻 ターミナルコマンド:CLI の使用例、コマンド構文のリファレンス、シェルスクリプト
🤖 複数プロバイダー対応の AI インテリジェンス
-
柔軟な LLM プロバイダーレイヤー:複数の AI プロバイダーをサポートし、将来的にはインテリジェントなルーティングとフォールバックにも対応します。
-
Ollama:プライバシーが重要なワークロードやオフライン運用向けのローカルデプロイ
-
Anthropic Claude:Claude-3.5 Sonnet による高品質な推論とコード分析
-
OpenAI GPT:さまざまなユースケースに対応する GPT-4o や o1-mini などの多用途モデル
-
Azure OpenAI:追加のセキュリティを備えた、エンタープライズ向けのホスト型 OpenAI モデル
-
Ollama/Qdrant:強力なローカル埋め込みモデルです。ベクトル検索、埋め込み、セマンティック RAG 機能により、コンテキストを考慮した応答を実現します。
🤖 レガシーソフトウェアと連携する AI チャットアプリケーション(RSChatApp.Web) このチャットアプリケーションは、レガシーソフトウェアと連携する革新的な AI インターフェースを提供します。
- 🌐 Playwright ブラウザーツールによるフロントエンド連携:
- ビジュアル UI 自動化:ReportServer などのレガシーアプリケーション向けの、AI を活用したブラウザー自動化
- スクリーンショット分析:AI が画面をキャプチャして分析し、アプリケーションの状態を把握できます。
- ユーザーワークフローのシミュレーション:自然言語コマンドを通じて、複雑なユーザー操作を自動化します。
- クロスブラウザー対応:Chrome、MS Edge、Firefox、WebKit ブラウザーをサポートします。
- 要素の検査:AI が Web 要素を動的に識別し、操作できます。
🔧 MCP サーバーのバックエンド連携(RsMcpServer.Web) MCP サーバーは、ReportServer とのバックエンド連携機能を提供します。
-
⚙️ バックエンド連携(RPC クライアント):
- Java RPC による直接通信:プログラムからの操作に対応する低レベルの API アクセス
- GWT プロトコルのサポート:ReportServer の GWT バックエンドとのネイティブ通信
- セッション管理:効率的な認証とセッション処理
- 高パフォーマンスな操作:一括データ操作、スクリプトの直接実行、システム管理
-
🔄 二重連携戦略:AI エージェントは、フロントエンドとバックエンドの両方のアプローチを活用できます。
- フロントエンドタスク:チャットアプリで Playwright を使用し、視覚的な検証やユーザーワークフローのテストを行います。
- バックエンドタスク:MCP サーバー経由で RPC を使用し、一括操作やシステム設定を行います。
- ハイブリッドワークフロー:両方のアプローチを組み合わせ、包括的な自動化シナリオを実現します。
🔐 二重認証のサポート システムは、最新の認証方式とレガシー認証方式の両方をサポートします。
- 🆕 モダンな Keycloak OIDC:SSO、JWT トークン、ロール管理を備えたエンタープライズ向け認証(まだ動作していません)
- 🔧 レガシーな ReportServer 認証:GWT RPC セッションブリッジングを利用した、ユーザー名とパスワードによる直接認証
- 🔄 柔軟な認証モード:デプロイ設定に応じて、ユーザーは最適な認証方式を選択して認証できます。
🚀 主な機能
エンタープライズ認証とセキュリティ
- ✅ デュアル認証サポート:最新の Keycloak OIDC と従来の ReportServer 認証の両方に対応
- ✅ PKCE をサポートする一元化された Keycloak OIDC 認証
- ✅ 既存の ReportServer デプロイメント向けの従来の GWT RPC 認証
- ✅ セッションブリッジングによるシームレスな ReportServer 統合
- ✅ 自動更新に対応した JWT トークン管理
- ✅ システム間のセッション同期
- ✅ ロールベースアクセス制御(RBAC)
マルチプロバイダー対応 AI チャットインターフェース
- ✅ リアルタイムチャット機能を備えた最新の Blazor Web UI
- ✅ 複数の LLM プロバイダーをサポート:
- ローカル LLM 推論向けの Ollama 統合(Mistral、Llama、Qwen)
- 高度な推論向けの Anthropic Claude(Claude-3.5 Sonnet、Claude-3、Haiku)
- 多用途な AI 機能を提供する OpenAI GPT(GPT-4o、GPT-4、o1-mini)
- エンタープライズ品質のホスト型モデルを提供する Azure OpenAI
- ✅ セマンティック検索と RAG 向けの Qdrant ベクトルデータベース
- ✅ PDF に対応したドキュメント取り込みパイプライン
- ✅ 取り込み済みドキュメント全体のセマンティック検索
AI を活用したレガシーソフトウェア統合
- ✅ Chat App Playwright Tool によるフロントエンド統合:
- AI チャットインターフェースに直接統合されたビジュアル UI 自動化
- レガシーアプリケーションを操作するための自然言語インターフェース
- チャット内でのスクリーンショット分析と視覚的なフィードバック
- クロスブラウザーサポート(Chromium、Firefox、WebKit)
- 要素の検査と動的な操作機能
- ✅ MCP Server RPC Client によるバックエンド統合:
- プログラム操作向けの直接的な Java RPC 通信
- ReportServer API にネイティブにアクセスするための GWT プロトコルサポート
- 高性能な一括操作とシステム管理
- 認証ブリッジングを伴うセッション管理
- ✅ 両方のアプローチを組み合わせたハイブリッド AI ワークフローにより、包括的な自動化を実現
MCP サーバー統合
- ✅ MCP プロトコル向けの Microsoft Extensions AI Framework
- ✅ Java との相互運用性を実現する直接的な ReportServer RPC クライアント
- ✅ UI テストと操作向けの Playwright ブラウザー自動化
- ✅ AI エージェント機能向けのツール統合
- ✅ ReportServer CLI 向けのターミナル操作サポート
- ✅ HTTP および SSE トランスポートプロトコル
クラウドネイティブなデプロイ
- ✅ マイクロサービス向けの .NET Aspire オーケストレーション
- ✅ 永続ボリュームを備えた Docker コンテナー化
- ✅ OpenTelemetry によるヘルスチェックとモニタリング
- ✅ サービスディスカバリーとロードバランシング
- ✅ 環境ごとの設定に対応した構成管理
🚀 クイックスタート
1. .NET Aspire を使用する(推奨)
次のコマンドを 1 つ実行するだけで、アプリケーションスタック全体を起動できます。
# Navigate to the Aspire host directory
cd src/RSChatApp.AppHost/RSChatApp.AppHost
# Start all services (Ollama with auto-downloaded models, Qdrant, MCP Server, Web App)
dotnet run
💡 Windows ユーザー向けの注意: Docker Desktop を使用している Windows ユーザーは、Docker Compose 用の PowerShell エイリアスを設定する必要がある場合があります。Aspire のオーケストレーション API は、従来の docker-compose 構文を使用します。PowerShell を管理者として実行し、次のコマンドを実行してください。
Set-Alias -Name docker-compose -Value 'docker compose'
これにより、次の処理が自動的に行われます。
- ✅ GPU が利用可能な場合は GPU サポート付きで Ollama を Docker で起動し、デフォルトのローカル LLM プロバイダーとして設定します
- ✅ 必要な AI モデルを自動的に取得して設定します(appsettings.json で構成可能)
- ✅ 複数の LLM プロバイダーのサポートを設定します(Anthropic、OpenAI、Azure OpenAI を appsettings.json で構成できます)
- ✅ Qdrant ベクトルデータベースを永続ストレージ付きで Docker で起動します
- ✅ 認証機能付きの MCP サーバーを起動します
- ✅ LLM プロバイダーをインテリジェントに選択する Blazor Web アプリケーションを起動します
- ✅ モニタリング用の Aspire ダッシュボードを開きます
アクセス先:
- 📱 チャットアプリケーション:
http://localhost:5123(または Aspire ダッシュボードに表示される URL) - 🔧 Aspire ダッシュボード:
http://localhost:15986(またはコンソールに表示される URL) - 🤖 MCP サーバー API:
http://localhost:5002 - 📊 Qdrant ダッシュボード:
http://localhost:6333/dashboard
注意: 初回起動時は、Docker イメージのダウンロードと AI モデルの自動取得に数分かかる場合があります。商用 LLM プロバイダー(Anthropic、OpenAI、Azure)を使用するには、API キーを環境変数として設定し、その名前を appsettings.json ファイルに設定してください。
コアコンポーネント
🚀 ReportServer 統合対応の AI ChatApp と MCP サーバー
- RsMcpServerSDK.Web/:Microsoft Extensions AI フレームワークを使用する最新の MCP サーバー
- RSChatApp.Web/:チャット UI を備えた対話型 Blazor Web クライアント
- ReportServerRPCClient/:Java ReportServer と直接連携する RPC クライアント
- RSChatApp.AppHost/:クラウドネイティブなデプロイ向けの .NET Aspire オーケストレーション
主な機能
- ✅ Microsoft Extensions AI と Playwright の公式 SDK を使用
- ✅ Aspire オーケストレーションとの完全な .NET 9.0 統合
- ✅ ReportServer との直接 RPC 統合
- ✅ 包括的なログ記録とエラー処理
プロジェクト構成
.NET Aspire を使用した最新の MCP サーバー実装
-
RSChatApp.AppHost/:すべてのコンポーネントをオーケストレーションする .NET Aspire アプリホスト
- Program.cs:Ollama、Qdrant、MCP サーバー、Web アプリを構成して連携します
- appsettings.json:構成設定
-
RsMcpServerSDK.Web/:最新の MCP サーバー実装
- Program.cs:Microsoft.Extensions.AI MCP サーバー構成を含むエントリーポイント
- Services/McpReportServer.cs:デコレーター付き関数を備えた MCP サーバー
- Models/:MCP レスポンス用のデータモデル
-
RSChatApp.Web/:対話型チャット Web アプリケーション
- Program.cs:AI クライアントを設定する Web アプリ構成
- Components/:Blazor UI コンポーネント
- Services/:AI チャットサービス、ベクトル検索、データ取り込み
-
ReportServerRPCClient/:Java ReportServer と直接連携する RPC クライアント
- Services/:RPC クライアントの実装
- DTOs/:RPC 通信用のデータ転送オブジェクト
-
ReportServer.Abstraction/:Report Server との通信に関するインターフェース定義
- IReportServerClient.cs:ReportServer との通信に使用するメインインターフェース
- Contracts/:ReportServer API 用のデータコントラクト
前提条件
- ReportServer
- .NET 9.0 SDK 以降
- Docker Desktop(すべてのコンテナー化されたサービス用)
- Playwright(付属のスクリプトを使用してインストール)
- (任意)Keycloak 22 以降(認証用。Docker 経由で実行できます)
注意: Ollama、Qdrant、AI モデルは、Docker コンテナー経由で .NET Aspire AppHost により自動的に管理されるため、手動でインストールする必要はありません。
はじめに
Aspire でアプリケーションを起動する
-
システムで Docker が実行されていることを確認してください
-
RSChatApp.AppHost ディレクトリに移動します。
cd src/RSChatApp.AppHost/RSChatApp.AppHost
- アプリケーションを実行します。
dotnet run
これにより、必要なすべてのサービスが正しい順序で起動します。
- Ollama(指定されたモデルを使用)
- Qdrant ベクトルデータベース
- RsMcpServerSDK.Web MCP サーバー
- RSChatApp.Web Blazor ウェブアプリケーション
-
表示された URL(通常は http://localhost:15986)で Aspire ダッシュボードを開き、すべてのサービスを監視します
-
ダッシュボードに表示された URL(通常は http://localhost:5123)からチャットのウェブインターフェースにアクセスします
⚙️ 設定
AI Chatapp と RsMcpServer で Reportserver の URL を設定することが重要です。 RSChatApp.Web の LLM プロバイダーを設定する必要があります。ローカル LLM を使いたい場合も同様です。ローカルモデルとプロバイダーのモデルのどちらを使う場合も、使用するモデルのみを指定してください。
RSChatApp.AppHost の設定
インフラストラクチャを設定します。主に Ollama が対象です。 警告:Ollama が GPU に対応していない場合、AppHost がクラッシュします。 Ollama がホストするモデルをここで設定してください。
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
},
"Ollama": {
"Gpu": true,
"Model": "",
"EmbeddingModel": "snowflake-arctic-embed2:latest"
}
}
RSChatApp.Web の設定
プロンプト(システム+提案)
チャットアプリは、プレーンテキスト/Markdown ファイルからプロンプトを読み込みます(そのため、JSON のエスケープ処理をせずに、複数行で見やすく書式設定できます)。
- 場所: src/RSChatApp.RSChatApp/RSChatApp.Web/Prompts/
- 必須ファイル:
起動時の動作:
- ホスト型の起動時バリデーターが、両方のプロンプトが存在し、空でないことを確認します。
- 必須のプロンプトが存在しない、または空の場合、アプリは重大メッセージをログに記録し、速やかに終了します。
再読み込み時の動作:
- プロンプトはメモリにキャッシュされます。
.mdファイルが変更されると、プロンプトは自動的に再読み込みされます。
カスタマイズに関する注意:
- 必須のプロンプトキーは
SystemPromptとSuggestionPromptです。 - プロンプトの種類を追加するには、次のファイルを拡張してください。
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning",
"Microsoft.Extensions.AI": "Information",
}
},
"DetailedErrors": true,
"OpenAISettings": { // LLM connection settings, any provider can be used
"Model": "claude-3-7-sonnet-20250219",
"Url": "https://api.anthropic.com/v1/",
"ApiKey": "ANTHROPIC_KEY" // this is the name of env variable, which holds API key
// Store your providers API Key in a local Env variable and insert its name here!!
},
"OpenAIPromptExecutionSettings": { // LLM Prompt execution setting
"MaxTokens": 4096,
"Temperature": 0.7,
"TopP": 1.0,
"FrequencyPenalty": 0.0,
"PresencePenalty": 0.0,
"AllowMultipleToolCalls": true
},
"ReportServer": { // Url for reportserver
"Url": "http://localhost:8080/reportserver",
"SessionTimeout": "01:00:00",
"CookieDomain": "localhost",
"EnableSessionBridge": false
},
"RsMcpServer": { // Url of RsMcpServer, will be filled by aspire
"Url": "http://localhost:5002"
},
"McpClientSettings": { // disabled for now, can be used to integrate various Mcp Servers
"Clients": [
]
},
"AllowedCorsOrigins": [
"http://localhost:5008",
"https://localhost:5008",
"http://localhost:8090",
"https://reportserver.net"
],
"Keycloak": { // can be ignored for now
"Authority": "http://localhost:8090/realms/reportserver",
"ClientId": "rs-chat-app",
"ClientSecret": "",
"Realm": "reportserver",
"Scopes": [
"openid",
"profile",
"email",
"roles",
"offline_access"
],
"RequireHttpsMetadata": false,
"TokenRefreshThreshold": "00:05:00",
"UsePkce": true,
"UsePar": false
}
}
RsMcpServer.Web の設定
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information",
"RSChatApp.ServiceDefaults.Authentication": "Information"
}
},
"Keycloak": {
"Authority": "http://localhost:8081/realms/reportserver",
"Audience": "",
"RequireHttpsMetadata": false
},
"ReportServer": {
"Url": "http://localhost:8080/reportserver/"
}
}
Keycloak:Authority は JWT ベアラートークンの検証に使用するレルム URL です。Audience は任意です
(空の場合、Audience は検証されません)。HTTP のみで Keycloak を使用する場合は、RequireHttpsMetadata を false にする必要があります。
従来の ReportServer セッション(/api/auth/v1/login から取得した Bearer GUID または Cookie)には、Keycloak の設定は不要です。
設定パラメーターの説明
Keycloak の設定:
Authority:Keycloak のレルム URLClientId:Keycloak のクライアント識別子ClientSecret:クライアントシークレット(Keycloak 管理コンソールから取得)Realm:Keycloak のレルム名Scopes:要求する OpenID Connect スコープRequireHttpsMetadata:開発環境ではfalse、本番環境ではtrueに設定TokenRefreshThreshold:トークンの有効期限が切れるまで、更新を開始する時間
ReportServer の設定:
Url:ReportServer のベース URLSessionTimeout:セッションのタイムアウト期間CookieDomain:セッション Cookie のドメインEnableSessionBridge:Keycloak と ReportServer 間のセッションブリッジを有効化
Ollama の設定:
Url:Ollama サーバーの URL。設定可能ですが、独自のインスタンスを使用しますModel:チャット補完モデル(例:"mistral-nemo:12b"、"llama3.2:3b")EmbeddingModel:テキスト埋め込みモデルEnabled:このプロバイダーを利用可能にするかどうか
OpenAI の設定:
Url:LLM プロバイダーの URLApiKey:プロバイダーの ApiKey を保持する環境変数の名前Model:GPT モデルのバリエーション("gpt-4o"、"gpt-4"、"o1-mini")
Qdrant の設定:
Url:Qdrant ベクトルデータベースの URL
環境固有の設定
開発環境:
{
"Keycloak": {
"RequireHttpsMetadata": false,
"Authority": "http://localhost:8080/realms/reportserver"
},
"ReportServer": {
"Url": "http://localhost:8081"
}
}
6. チャットアプリケーションを起動する
cd src/RSChatApp.Web/RSChatApp.Web
dotnet run
注: 手動でセットアップする場合は、すべてのネットワーク設定と依存関係を自分で構成する必要があります。Aspire を使用すれば、適切なサービス検出とヘルスチェックを含め、これらすべてが自動的に処理されます。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。