mcpField
M
MCP Server for ReportServer Java Application

MCP Server for ReportServer Java Application

本地服务
github.com/diplinfmarkodrewsAI 与智能体02 周前更新

关于 MCP Server for ReportServer Java Application

面向 ReportServer 部署的实验性 AI 聊天应用与 MCP 服务,结合 Java RPC 后端访问和浏览器自动化,支持通过自然语言执行前端与后端任务。

主要功能

  1. 01通过 GWT RPC 访问 ReportServer
  2. 02支持批量操作与系统管理
  3. 03通过 Playwright 自动化浏览器
  4. 04多模型提供方聊天
  5. 05文档语义搜索与 RAG

适用场景

  1. 01自动化 ReportServer 页面交互
  2. 02通过 RPC 执行后台操作
  3. 03检索已导入的文档
  4. 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 架构

📖 架构说明

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

🌐 基于浏览器的工作区(RSChatApp.Web)

RSChatApp 示例

  • 会话管理:目前在浏览器内存和缓存中维护对话上下文,以实现即时响应
  • 交互式聊天界面:基于 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 启动应用程序
  1. 确保系统上正在运行 Docker

  2. 导航到 RSChatApp.AppHost 目录:

cd src/RSChatApp.AppHost/RSChatApp.AppHost
  1. 运行应用程序:
dotnet run

这将按正确顺序启动所有必需的服务:

  • Ollama(包含指定的模型)
  • Qdrant 向量数据库
  • RsMcpServerSDK.Web MCP 服务
  • RSChatApp.Web Blazor Web 应用程序
  1. 打开提供的 URL(通常为 http://localhost:15986)访问 Aspire 仪表板,以监控所有服务

  2. 访问仪表板中显示的 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 文件发生变化时,提示词会自动重新加载。

自定义说明:

{
  "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 URL
  • ClientId:Keycloak 中的客户端标识符
  • ClientSecret:客户端密钥(从 Keycloak 管理控制台获取)
  • Realm:Keycloak realm 名称
  • Scopes:要请求的 OpenID Connect 作用域
  • RequireHttpsMetadata:开发环境设为 false,生产环境设为 true
  • TokenRefreshThreshold:令牌过期前刷新的时间

ReportServer 设置:

  • Url:ReportServer 基础 URL
  • SessionTimeout:会话超时时长
  • CookieDomain:会话 cookie 的域
  • EnableSessionBridge:启用 Keycloak 与 ReportServer 之间的会话桥接

Ollama 设置:

  • Url:Ollama 服务 URL,可进行配置,但使用其自身实例
  • Model:聊天补全模型(例如,“mistral-nemo:12b”、“llama3.2:3b”)
  • EmbeddingModel:文本嵌入模型
  • Enabled:此提供商是否可用

OpenAI 设置:

  • Url:大模型提供商的 URL
  • ApiKey:保存提供商 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 方法会通过适当的服务发现和运行状况检查自动处理所有这些事项。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。