Druid MCP Server 是一款全面的 Apache Druid 模型上下文协议(MCP)服务器,它提供了丰富的工具、资源和提示,用于管理和分析 Druid 集群。
由 iunera 开发 - 高级人工智能与数据分析解决方案提供商
# 构建应用程序
mvn clean package -DskipTests
# 运行应用程序
java -jar target/druid-mcp-server-1.0.0.jar
服务器默认将在 8080 端口启动。
如需详细的构建说明、测试指南、Docker 设置和开发指引,请参阅 development.md。
连接到 MCP 客户端后,您可以通过 MCP 检查器界面检查可用的工具、资源和提示:
工具界面展示了所有可用的 Druid 管理功能,这些功能按功能区域组织,包括数据管理、摄取管理以及监控与健康检查。
资源界面显示了所有可通过 MCP 协议访问的 Druid 数据源和元数据。
提示界面展示了所有适用于各种 Druid 管理任务和数据分析工作流的 AI 辅助指导模板。
如果您希望使用预构建的 JAR 文件而不进行源码构建,可以直接从 Maven Central 下载并运行。
# 为应用程序创建一个目录
mkdir druid-mcp-server && cd druid-mcp-server
# 从 Maven Central 下载 JAR 文件
curl -L -o druid-mcp-server-1.0.0.jar \
"https://repo.maven.apache.org/maven2/com/iunera/druid-mcp-server/1.0.0/druid-mcp-server-1.0.0.jar"
# 使用 SSE 传输运行(基于 HTTP,默认方式)
java -jar druid-mcp-server-1.0.0.jar
# 或者使用 STDIO 传输运行(推荐用于 LLM 客户端)
java -Dspring.ai.mcp.server.stdio=true \
-Dspring.main.web-application-type=none \
-Dlogging.pattern.console= \
-jar druid-mcp-server-1.0.0.jar
如果您倾向于使用 Docker,可以直接从 Docker Hub 运行预构建的 Docker 镜像,而无需在本地安装 Java。
# 拉取最新的 Docker 镜像
docker pull iunera/druid-mcp-server:latest
# 使用 SSE 传输运行(基于 HTTP,默认方式)
docker run -p 8080:8080 \
-e DRUID_BROKER_URL=http://your-druid-broker:8082 \
-e DRUID_COORDINATOR_URL=http://your-druid-coordinator:8081 \
iunera/druid-mcp-server:latest
# 或者使用 STDIO 传输运行(推荐用于 LLM 客户端)
docker run --rm -i \
-e SPRING_AI_MCP_SERVER_STDIO=true \
-e SPRING_MAIN_WEB_APPLICATION_TYPE=none \
-e LOGGING_PATTERN_CONSOLE= \
-e DRUID_BROKER_URL=http://your-druid-broker:8082 \
-e DRUID_COORDINATOR_URL=http://your-druid-coordinator:8081 \
iunera/druid-mcp-server:latest
请将 your-druid-broker
和 your-druid-coordinator
替换为您实际的 Druid 集群端点。
# 构建应用程序
mvn clean package -DskipTests
# 运行应用程序
java -jar target/druid-mcp-server-1.0.0.jar
# 使用 STDIO 传输运行(推荐用于 LLM 客户端)
java -Dspring.ai.mcp.server.stdio=true \
-Dspring.main.web-application-type=none \
-Dlogging.pattern.console= \
-jar target/druid-mcp-server-1.0.0.jar
功能 | 工具 | 描述 | 参数 |
---|---|---|---|
数据源 | listDatasources |
列出所有可用的 Druid 数据源名称 | 无 |
数据源 | showDatasourceDetails |
显示特定数据源的详细信息,包括列信息 | datasourceName (字符串) |
数据源 | killDatasource |
永久删除数据源,移除所有数据和元数据 | datasourceName (字符串),interval (字符串) |
查找表 | listLookups |
从协调器列出所有可用的 Druid 查找表 | 无 |
查找表 | getLookupConfig |
获取特定查找表的配置 | tier (字符串),lookupName (字符串) |
查找表 | updateLookupConfig |
更新特定查找表的配置 | tier (字符串),lookupName (字符串),config (字符串) |
段 | listAllSegments |
列出所有数据源中的所有段 | 无 |
段 | getSegmentMetadata |
获取特定段的元数据 | datasourceName (字符串),segmentId (字符串) |
段 | getSegmentsForDatasource |
获取特定数据源的所有段 | datasourceName (字符串) |
查询 | queryDruidSql |
对 Druid 数据源执行 SQL 查询 | sqlQuery (字符串) |
保留策略 | viewRetentionRules |
查看所有数据源或特定数据源的保留规则 | datasourceName (字符串,可选) |
保留策略 | updateRetentionRules |
更新数据源的保留规则 | datasourceName (字符串),rules (字符串) |
压缩 | viewAllCompactionConfigs |
查看所有数据源的压缩配置 | 无 |
压缩 | viewCompactionConfigForDatasource |
查看特定数据源的压缩配置 | datasourceName (字符串) |
压缩 | editCompactionConfigForDatasource |
编辑数据源的压缩配置 | datasourceName (字符串),config (字符串) |
压缩 | deleteCompactionConfigForDatasource |
删除数据源的压缩配置 | datasourceName (字符串) |
压缩 | viewCompactionStatus |
查看所有数据源的压缩状态 | 无 |
压缩 | viewCompactionStatusForDatasource |
查看特定数据源的压缩状态 | datasourceName (字符串) |
功能 | 工具 | 描述 | 参数 |
---|---|---|---|
摄取规范 | createBatchIngestionTemplate |
创建批量摄取模板 | datasourceName (字符串),inputSource (字符串),timestampColumn (字符串) |
摄取规范 | createIngestionSpec |
创建并提交摄取规范 | specJson (字符串) |
监控器 | listSupervisors |
列出所有流式摄取监控器 | 无 |
监控器 | getSupervisorStatus |
获取特定监控器的状态 | supervisorId (字符串) |
监控器 | suspendSupervisor |
暂停流式监控器 | supervisorId (字符串) |
监控器 | startSupervisor |
启动或恢复流式监控器 | supervisorId (字符串) |
监控器 | terminateSupervisor |
终止流式监控器 | supervisorId (字符串) |
任务 | listTasks |
列出所有摄取任务 | 无 |
任务 | getTaskStatus |
获取特定任务的状态 | taskId (字符串) |
任务 | shutdownTask |
关闭正在运行的任务 | taskId (字符串) |
功能 | 工具 | 描述 | 参数 |
---|---|---|---|
基本健康 | checkClusterHealth |
检查集群的整体健康状态 | 无 |
基本健康 | getServiceStatus |
获取特定 Druid 服务的状态 | serviceType (字符串) |
基本健康 | getClusterConfiguration |
获取集群配置信息 | 无 |
诊断 | runDruidDoctor |
运行全面的集群诊断 | 无 |
诊断 | analyzePerformanceIssues |
分析集群性能问题 | 无 |
诊断 | generateHealthReport |
生成详细的健康报告 | 无 |
功能测试 | testQueryFunctionality |
测试跨服务的查询功能 | 无 |
功能测试 | testIngestionFunctionality |
测试摄取功能 | 无 |
功能测试 | validateClusterConnectivity |
验证集群组件之间的连接性 | 无 |
功能 | 资源 URI 模式 | 描述 | 参数 |
---|---|---|---|
数据源 | druid://datasource/{datasourceName} |
访问数据源信息和元数据 | datasourceName (字符串) |
数据源 | druid://datasource/{datasourceName}/details |
访问包括模式在内的详细数据源信息 | datasourceName (字符串) |
查找表 | druid://lookup/{tier}/{lookupName} |
访问查找表配置和数据 | tier (字符串),lookupName (字符串) |
段 | druid://segment/{segmentId} |
访问段的元数据和信息 | segmentId (字符串) |
功能 | 提示名称 | 描述 | 参数 |
---|---|---|---|
数据分析 | data-exploration |
探索 Druid 数据源中数据的指南 | datasource (字符串,可选) |
数据分析 | query-optimization |
帮助优化 Druid SQL 查询以提高性能 | query (字符串) |
集群管理 | health-check |
全面的集群健康评估指南 | 无 |
集群管理 | cluster-overview |
集群状态的概述和分析 | 无 |
摄取管理 | ingestion-troubleshooting |
解决摄取问题 | issue (字符串,可选) |
摄取管理 | ingestion-setup |
设置新摄取管道的指南 | dataSource (字符串,可选) |
保留管理 | retention-management |
管理数据保留策略 | datasource (字符串,可选) |
压缩 | compaction-suggestions |
优化段压缩配置 | datasource (字符串,可选),currentConfig (字符串,可选),performanceMetrics (字符串,可选) |
压缩 | compaction-troubleshooting |
解决压缩问题 | issue (字符串),datasource (字符串,可选) |
操作 | emergency-response |
应急响应程序和指南 | 无 |
操作 | maintenance-mode |
集群维护程序 | 无 |
在 src/main/resources/application.properties
中配置您的 Druid 连接:
# Spring AI MCP Server 配置
spring.ai.mcp.server.name=druid-mcp-server
spring.ai.mcp.server.version=1.0.0
# Druid 配置
druid.router.url=http://localhost:8888
# 服务器配置
server.port=8080
# 注意:对于 STDIO 传输,必须禁用横幅和控制台日志记录
spring.main.banner-mode=off
对于像用户名和密码这样的敏感凭证,您可以使用环境变量而不是将它们硬编码在属性文件中。
DRUID_AUTH_USERNAME
:Druid 认证用户名DRUID_AUTH_PASSWORD
:Druid 认证密码DRUID_ROUTER_URL
:覆盖默认的 Druid 路由器 URLDRUID_SSL_ENABLED
:启用 SSL/TLS 支持(true/false)DRUID_SSL_SKIP_VERIFICATION
:跳过 SSL 证书验证(true/false)本节提供了连接到使用用户名和密码认证的 SSL 加密 Druid 集群的全面指南。
在启动 MCP 服务器之前设置以下环境变量:
# 带有 HTTPS 的 Druid 集群 URL
export DRUID_ROUTER_URL="https://your-druid-cluster.example.com:8888"
# 认证凭证
export DRUID_AUTH_USERNAME="your-username"
export DRUID_AUTH_PASSWORD="your-password"
# SSL 配置
export DRUID_SSL_ENABLED="true"
export DRUID_SSL_SKIP_VERIFICATION="false" # 仅在测试时使用 "true"
# 启动 MCP 服务器
java -jar target/druid-mcp-server-1.0.0.jar
更新 src/main/resources/application.properties
:
# Druid 集群配置
druid.router.url=https://your-druid-cluster.example.com:8888
# 认证
druid.auth.username=your-username
druid.auth.password=your-password
# SSL 配置
druid.ssl.enabled=true
druid.ssl.skip-verification=false
将配置作为 JVM 系统属性传递:
java -Ddruid.router.url="https://your-druid-cluster.example.com:8888" \
-Ddruid.auth.username="your-username" \
-Ddruid.auth.password="your-password" \
-Ddruid.ssl.enabled=true \
-Ddruid.ssl.skip-verification=false \
-jar target/druid-mcp-server-1.0.0.jar
对于使用有效 SSL 证书的生产环境:
export DRUID_ROUTER_URL="https://druid-prod.company.com:8888"
export DRUID_SSL_ENABLED="true"
export DRUID_SSL_SKIP_VERIFICATION="false"
服务器将使用系统的默认信任库来验证 SSL 证书。
对于使用自签名证书的开发或测试环境:
export DRUID_ROUTER_URL="https://druid-dev.local:8888"
export DRUID_SSL_ENABLED="true"
export DRUID_SSL_SKIP_VERIFICATION="true" # 警告:仅用于测试!
⚠️ 重要提示
切勿在生产环境中使用
DRUID_SSL_SKIP_VERIFICATION=true
,因为这会禁用 SSL 证书验证。
MCP 服务器支持使用用户名和密码的 HTTP 基本认证:
DRUID_AUTH_USERNAME
或 druid.auth.username
设置DRUID_AUTH_PASSWORD
或 druid.auth.password
设置凭证将使用 Base64 自动编码,并在每个请求中使用 Authorization: Basic
头发送。
#!/bin/bash
# 生产环境配置脚本
# Druid 集群设置
export DRUID_ROUTER_URL="https://druid.production.company.com:8888"
# 认证
export DRUID_AUTH_USERNAME="druid-mcp-user"
export DRUID_AUTH_PASSWORD="secure-password-123"
# SSL 设置(生产环境)
export DRUID_SSL_ENABLED="true"
export DRUID_SSL_SKIP_VERIFICATION="false"
# 启动 MCP 服务器
java -jar target/druid-mcp-server-1.0.0.jar
#!/bin/bash
# 开发环境配置脚本
# 带有自签名证书的本地 Druid 集群
export DRUID_ROUTER_URL="https://localhost:8888"
# 测试凭证
export DRUID_AUTH_USERNAME="admin"
export DRUID_AUTH_PASSWORD="admin123"
# SSL 设置(开发环境 - 跳过验证)
export DRUID_SSL_ENABLED="true"
export DRUID_SSL_SKIP_VERIFICATION="true"
# 启动 MCP 服务器
java -jar target/druid-mcp-server-1.0.0.jar
更新您的 mcp-servers-config.json
以包含环境变量:
{
"mcpServers": {
"druid-mcp-server": {
"command": "java",
"args": [
"-Dspring.ai.mcp.server.stdio=true",
"-Dspring.main.web-application-type=none",
"-Dlogging.pattern.console=",
"-jar",
"target/druid-mcp-server-1.0.0.jar"
],
"env": {
"DRUID_ROUTER_URL": "https://your-druid-cluster.example.com:8888",
"DRUID_AUTH_USERNAME": "your-username",
"DRUID_AUTH_PASSWORD": "your-password",
"DRUID_SSL_ENABLED": "true",
"DRUID_SSL_SKIP_VERIFICATION": "false"
}
}
}
}
服务器通过位于 src/main/resources/
中的 prompts.properties
文件提供了丰富的提示定制功能。
prompts.properties
文件包含:
您可以使用 -D
标志的 Java 系统属性覆盖任何提示模板:
java -Dprompts.druid-data-exploration.template="Your custom template here" \
-jar target/druid-mcp-server-1.0.0.jar
custom-prompts.properties
):# 自定义提示模板
prompts.druid-data-exploration.template=My custom data exploration prompt:\n\
1. Custom step one\n\
2. Custom step two\n\
{datasource_section}\n\
Environment: {environment}
java -Dspring.config.additional-location=classpath:custom-prompts.properties \
-jar target/druid-mcp-server-1.0.0.jar
所有提示模板都支持以下变量:
变量 | 描述 | 示例 |
---|---|---|
{environment} |
当前环境名称 | production ,staging ,dev |
{organizationName} |
组织名称 | Your Organization |
{contactInfo} |
联系信息 | your-team@company.com |
{watermark} |
生成的水印 | Generated by Druid MCP Server v1.0.0 |
{datasource} |
数据源名称(特定于上下文) | sales_data |
{query} |
SQL 查询(特定于上下文) | SELECT * FROM sales_data |
prompts.druid-data-exploration.template=Welcome to {organizationName} Druid Analysis!\n\n\
Please help me explore our data:\n\
{datasource_section}\n\
Environment: {environment}\n\
Contact: {contactInfo}\n\n\
{watermark}
prompts.druid-query-optimization.template=Query Performance Analysis for {organizationName}\n\n\
Query to optimize: {query}\n\n\
Please provide:\n\
1. Performance bottleneck analysis\n\
2. Optimization recommendations\n\
3. Best practices for our {environment} environment\n\n\
{watermark}
您可以通过将单个提示的启用标志设置为 false 来禁用它们:
mcp.prompts.data-exploration.enabled=false
mcp.prompts.query-optimization.enabled=false
或者全局禁用所有提示:
mcp.prompts.enabled=false
此服务器使用 Spring AI 的 MCP Server 框架,支持 STDIO 和 SSE 两种传输方式。工具、资源和提示将通过 MCP 协议自动注册并公开。
java -Dspring.ai.mcp.server.stdio=true \
-Dspring.main.web-application-type=none \
-Dlogging.pattern.console= \
-jar target/druid-mcp-server-1.0.0.jar
java -jar target/druid-mcp-server-1.0.0.jar
# 服务器可通过 http://localhost:8080 访问
mcp-servers-config.json
中提供了一个现成的 MCP 配置文件,可用于 LLM 客户端连接到此 Druid MCP 服务器。
该配置包括两种传输选项:
更多详情请参阅 examples/stdio/README.md。
{
"mcpServers": {
"druid-mcp-server": {
"command": "java",
"args": [
"-Dspring.ai.mcp.server.stdio=true",
"-Dspring.main.web-application-type=none",
"-Dlogging.pattern.console=",
"-jar",
"target/druid-mcp-server-1.0.0.jar"
]
}
}
}
更多详情请参阅 examples/sse/README.md。
{
"mcpServers": {
"druid-mcp-server-sse": {
"url": "http://localhost:8080"
}
}
}
本仓库包含了丰富的示例,帮助您开始不同的部署场景和传输模式:
完整的 Docker Compose 配置,用于在本地运行完整的 Apache Druid 集群。非常适合开发、测试以及了解 Druid 集群架构。
特性:
STDIO(标准输入/输出)传输模式的配置示例 - 这是与 Claude Desktop 等 LLM 客户端集成的推荐方法。
特性:
使用 Docker 和 STDIO 传输模式运行 Druid MCP 服务器的配置示例。这种方法结合了 Docker 部署的便利性和 STDIO 传输以实现与 LLM 客户端的集成。
特性:
SSE(服务器发送事件)传输模式的配置示例,提供基于 HTTP 的通信,适用于 Web 应用程序和 REST API 集成。
特性:
此 Druid MCP 服务器是 iunera 开发的 Apache Druid 工具和扩展综合生态系统的一部分。这些互补项目增强了 Druid 集群管理和数据摄取的不同方面:
Apache Druid 集群的高级配置管理和部署工具。该项目提供:
与 Druid MCP 服务器的集成:该项目提供的集群配置与 Druid MCP 服务器的监控和管理功能无缝协作,实现全面的集群生命周期管理。
一个专门用于摄取和分析与代码相关的数据和指标的 Apache Druid 扩展。该扩展支持:
与 Druid MCP 服务器的集成:该扩展扩展了可通过 MCP 服务器的摄取管理工具进行管理的摄取功能,为代码分析用例提供了专门的支持。
此 Druid MCP 服务器由 iunera 开发和维护,iunera 是一家领先的高级人工智能和数据分析解决方案提供商。
iunera 专注于:
作为 Apache Druid 的专家,iunera 在生产级企业场景中部署和维护了大量基于 Apache Druid 的解决方案。
如需了解我们的服务和解决方案的更多信息,请访问 www.iunera.com。
需要帮助?请通过以下方式联系我们:
© 2024 iunera。根据 Apache 许可证 2.0 授权。