关于 MCP Server for ReportServer Java Application
面向 ReportServer 部署的实验性 AI 聊天应用与 MCP 服务,结合 Java RPC 后端访问和浏览器自动化,支持通过自然语言执行前端与后端任务。
主要功能
- 01通过 GWT RPC 访问 ReportServer
- 02支持批量操作与系统管理
- 03通过 Playwright 自动化浏览器
- 04多模型提供方聊天
- 05文档语义搜索与 RAG
适用场景
- 01自动化 ReportServer 页面交互
- 02通过 RPC 执行后台操作
- 03检索已导入的文档
- 04组合前端验证与后端操作
MCP 相关
MCP 服务通过 RPC 客户端连接 ReportServer,向 MCP 客户端提供后端操作能力;支持 HTTP 与 SSE 传输。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
我们还没有获取到这个服务的安装包或远程地址,请按项目 README 中的说明安装。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
ReportServer 的 MCP 服务和 AI 聊天应用
--实验性--
面向企业级 ReportServer(基于 Java 的 BI 平台)的 AI 聊天应用和高级 模型上下文协议(MCP)服务。该解决方案基于 .NET 9,采用 Microsoft 最新的 AI 应用开发技术栈——Microsoft.Extensions.AI (Extensions.AI) 和 Semantic Kernel——实现基于工具的自动化、语义搜索(RAG),以及与 ReportServer 界面和后端的端到端集成。
🏗️ 架构概览

📖 架构说明
RSChatApp 作为一个基于浏览器的工作区运行,提供由 AI 驱动的智能聊天界面,并通过语义搜索功能增强,且借助 MCP 服务支持 Reportserver 的前后端功能:
🌐 基于浏览器的工作区(RSChatApp.Web)

- 会话管理:目前在浏览器内存和缓存中维护对话上下文,以实现即时响应
- 交互式聊天界面:基于 Blazor 的实时 UI,可与 AI 模型无缝交互
- 未来演进:计划支持持久化会话、基于主题的对话历史记录以及跨会话上下文保留
🧠 知识库集成 系统会将多种类型的内容导入 Qdrant 向量数据库,以便进行智能检索:
- 📚 文档:PDF、Markdown 文件、API 文档和用户手册
- 🔧 Groovy 脚本:构建脚本、自动化脚本和自定义
.groovy文件 - 💻 终端命令:CLI 使用示例、命令语法参考和 Shell 脚本
🤖 多供应商 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 自动化:使用 AI 驱动的浏览器自动化来操作 ReportServer 等旧版应用
- 截图分析:AI 可以捕获并分析可视化界面,以了解应用状态
- 用户工作流模拟:通过自然语言命令自动执行复杂的用户交互
- 跨浏览器兼容性:支持 Chrome、MS Edge、Firefox 和 WebKit 浏览器
- 元素检查:AI 可以动态识别并与网页元素交互
🔧 MCP 服务后端集成(RsMcpServer.Web) MCP 服务为 ReportServer 提供后端集成能力:
-
⚙️ 后端集成(RPC 客户端):
- 直接 Java RPC 通信:提供底层 API 访问,以执行程序化操作
- GWT 协议支持:与 ReportServer 的 GWT 后端进行原生通信
- 会话管理:实现高效的身份验证和会话处理
- 高性能操作:批量数据操作、直接脚本执行和系统管理
-
🔄 双重集成策略:AI Agent 可以同时利用前端和后端方式:
- 前端任务:在聊天应用中使用 Playwright 进行可视化验证和用户工作流测试
- 后端任务:通过 MCP 服务使用 RPC 执行批量操作和系统配置
- 混合工作流:结合两种方式,完成全面的自动化场景
🔐 双重身份验证支持 系统同时支持现代和旧版身份验证方式:
- 🆕 现代 Keycloak OIDC:企业级身份验证,支持 SSO、JWT 令牌和角色管理——(目前尚不可用)
- 🔧 旧版 ReportServer 身份验证:通过 GWT RPC 会话桥接直接使用用户名和密码进行身份验证
- 🔄 灵活的身份验证模式:用户可以根据部署配置,选择最合适的方式进行身份验证
🚀 主要功能
企业级身份验证与安全性
- ✅ 双重身份验证支持:同时支持现代 Keycloak OIDC 和旧版 ReportServer 身份验证
- ✅ 集中式 Keycloak OIDC 身份验证,支持 PKCE
- ✅ 旧版 GWT RPC 身份验证,适用于现有 ReportServer 部署
- ✅ 通过会话桥接实现与 ReportServer 无缝集成
- ✅ JWT 令牌管理,支持自动刷新
- ✅ 跨系统会话同步
- ✅ 基于角色的访问控制(RBAC)
多提供商 AI 聊天界面
- ✅ 现代化 Blazor Web UI,支持实时聊天
- ✅ 支持多个大模型提供商:
- 用于本地大模型推理的 Ollama 集成(Mistral、Llama、Qwen)
- 用于高级推理的 Anthropic Claude(Claude-3.5 Sonnet、Claude-3、Haiku)
- 提供多样化 AI 能力的 OpenAI GPT(GPT-4o、GPT-4、o1-mini)
- 面向企业级托管模型的 Azure OpenAI
- ✅ Qdrant 向量数据库,支持语义搜索和 RAG
- ✅ 文档摄取流水线,支持 PDF
- ✅ 对已摄取文档进行语义搜索
AI 驱动的旧版软件集成
- ✅ 通过 Chat App Playwright 工具集成前端:
- 直接集成到 AI 聊天界面的可视化 UI 自动化
- 用于与旧版应用交互的自然语言界面
- 在聊天界面中进行屏幕截图分析并提供可视化反馈
- 跨浏览器支持(Chromium、Firefox、WebKit)
- 元素检查和动态交互能力
- ✅ 通过 MCP 服务 RPC 客户端集成后端:
- 用于编程式操作的直接 Java RPC 通信
- 支持 GWT 协议,可原生访问 ReportServer API
- 高性能批量操作和系统管理
- 通过身份验证桥接实现会话管理
- ✅ 混合 AI 工作流,结合两种方式实现全面自动化
MCP 服务集成
- ✅ 用于 MCP 协议的 Microsoft Extensions AI Framework
- ✅ 用于 Java 互操作的 ReportServer RPC 客户端
- ✅ 用于 UI 测试和交互的 Playwright 浏览器自动化
- ✅ 支持 AI Agent 功能的工具集成
- ✅ 支持 ReportServer CLI 终端操作
- ✅ HTTP 和 SSE 传输协议
云原生部署
- ✅ 用于微服务的 .NET Aspire 编排
- ✅ Docker 容器化,支持持久化卷
- ✅ 使用 OpenTelemetry 实现运行状况检查与监控
- ✅ 服务发现和负载均衡
- ✅ 配置管理,支持特定环境的设置
🚀 快速开始
1. 使用 .NET Aspire(推荐)
使用一条命令启动整个应用程序栈:
# 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 用户须知: 如果你在 Windows 上使用 Docker Desktop,可能需要为 Docker Compose 设置 PowerShell 别名。Aspire 编排 API 使用旧版 docker-compose 语法。以管理员身份在 PowerShell 中运行此命令:
Set-Alias -Name docker-compose -Value 'docker compose'
这将自动:
- ✅ 在 Docker 中启动 Ollama,并在可用时启用 GPU 支持,作为默认的本地大模型提供方
- ✅ 自动拉取并配置所需的 AI 模型(可在 appsettings.json 中配置)
- ✅ 设置 多个大模型提供方支持(在 appsettings.json 中配置 Anthropic、OpenAI、Azure OpenAI)
- ✅ 在 Docker 中启动 Qdrant 向量数据库,并启用持久化存储
- ✅ 启动带身份验证的 MCP 服务
- ✅ 启动具备智能大模型提供方选择功能的 Blazor Web 应用
- ✅ 打开用于监控的 Aspire Dashboard
访问地址:
- 📱 聊天应用:
http://localhost:5123(或以 Aspire Dashboard 中显示的地址为准) - 🔧 Aspire Dashboard:
http://localhost:15986(或以控制台中显示的地址为准) - 🤖 MCP 服务 API:
http://localhost:5002 - 📊 Qdrant Dashboard:
http://localhost:6333/dashboard
注意: 首次运行可能需要几分钟,因为系统会下载 Docker 镜像并自动拉取 AI 模型。若要使用商业大模型提供方(Anthropic、OpenAI、Azure),请将 API 密钥配置为 Env 变量,并在 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
- ✅ 完整集成 .NET 9.0 与 Aspire 编排
- ✅ 直接集成 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:配置 Web 应用并设置 AI 客户端
- 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 模型由 .NET Aspire AppHost 通过 Docker 容器自动管理,无需手动安装!
快速开始
使用 Aspire 启动应用程序
-
确保系统上正在运行 Docker
-
导航到 RSChatApp.AppHost 目录:
cd src/RSChatApp.AppHost/RSChatApp.AppHost
- 运行应用程序:
dotnet run
这将按正确顺序启动所有必需的服务:
- Ollama(包含指定的模型)
- Qdrant 向量数据库
- RsMcpServerSDK.Web MCP 服务
- RSChatApp.Web Blazor Web 应用程序
-
打开提供的 URL(通常为 http://localhost:15986)访问 Aspire 仪表板,以监控所有服务
-
访问仪表板中显示的 URL(通常为 http://localhost:5123)以打开聊天 Web 界面
⚙️ 配置
务必在 AI Chatapp 和 RsMcpServer 中设置 Reportserver URL。 需要配置 RSChatApp.Web 中的大模型提供商,或者在想要使用本地大模型时进行相应配置。无论使用本地模型还是提供商的模型,只需提供要使用的模型即可
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 转义)。
启动行为:
- 托管的启动验证器会检查这两个提示词是否存在且非空。
- 如果必需的提示词缺失或为空,应用会记录一条严重消息并立即失败。
重新加载行为:
- 提示词会缓存在内存中。
.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 bearer 令牌的 realm URL;Audience 为可选项
(为空 = 不验证 audience);对于纯 HTTP 的 Keycloak,RequireHttpsMetadata 必须为 false。
旧版 ReportServer 会话(来自 /api/auth/v1/login 的 Bearer GUID 或 cookie)无需 Keycloak 设置。
配置参数说明
Keycloak 设置:
Authority:Keycloak realm URLClientId:Keycloak 中的客户端标识符ClientSecret:客户端密钥(从 Keycloak 管理控制台获取)Realm:Keycloak realm 名称Scopes:要请求的 OpenID Connect 作用域RequireHttpsMetadata:开发环境设为false,生产环境设为trueTokenRefreshThreshold:令牌过期前刷新的时间
ReportServer 设置:
Url:ReportServer 基础 URLSessionTimeout:会话超时时长CookieDomain:会话 cookie 的域EnableSessionBridge:启用 Keycloak 与 ReportServer 之间的会话桥接
Ollama 设置:
Url:Ollama 服务 URL,可进行配置,但使用其自身实例Model:聊天补全模型(例如,“mistral-nemo:12b”、“llama3.2:3b”)EmbeddingModel:文本嵌入模型Enabled:此提供商是否可用
OpenAI 设置:
Url:大模型提供商的 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 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。