mcpField
N
nifi-clickhouse-kafka-mcp

nifi-clickhouse-kafka-mcp

本地服务
github.com/arogan178数据库01 周前更新

关于 nifi-clickhouse-kafka-mcp

nifi-clickhouse-kafka-mcp 是面向数据平台团队的只读 MCP 服务,用于查看 Apache NiFi、ClickHouse 和 Kafka 环境。它结合 OAuth/OIDC、审计、结果脱敏与双层只读限制,并可通过一个服务连接多个环境。

主要功能

  1. 01只读查询 NiFi、ClickHouse 和 Kafka
  2. 02通过 OIDC 与可选群组门禁控制访问
  3. 03记录调用并支持 Prometheus 指标
  4. 04遮蔽凭据及配置的敏感字段
  5. 05分页并限制结果大小
  6. 06单个服务连接多个命名环境

适用场景

  1. 01排查 NiFi 流程队列积压和处理器故障
  2. 02检查 ClickHouse 表结构、健康状况或查询结果
  3. 03查找 Kafka 消息并查看消费者延迟
  4. 04通过审计记录检查团队的数据访问

MCP 相关

该 MCP 服务向客户端提供 NiFi、ClickHouse 和 Kafka 的只读工具,可通过 stdio 或带 OAuth 的 Streamable HTTP 连接。工具只对已配置的系统开放,并由网关和后端只读身份共同限制操作。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"arogan178-nifi-clickhouse-kafka": {
"command": "uvx",
"args": [
"nifi-clickhouse-kafka-mcp"
],
"env": {
"NIFI_CLICKHOUSE_KAFKA_MCP_CONFIG": "<NIFI_CLICKHOUSE_KAFKA_MCP_CONFIG>"
}
}
}
}
启动命令uvx nifi-clickhouse-kafka-mcp
需要配置的环境变量
NIFI_CLICKHOUSE_KAFKA_MCP_CONFIGPath to the config file; see examples/config.example.yaml in the repository

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
pypinifi-clickhouse-kafka-mcp0.1.0

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

nifi-clickhouse-kafka-mcp

一款只读 MCP 服务,让 AI 助手查看 Apache NiFi、 ClickHouse 和 Kafka:一个服务,覆盖所有环境,而且不会造成任何破坏。

向 Claude、Cursor 或任何 MCP 客户端询问这类问题:

  • “生产环境中的订单流为什么积压了?”→ nifi_health 会找出完整队列、已停止的处理器和错误公告,并按严重程度从高到低排列。
  • “显示队列中卡住的 FlowFile,以及它的来源。”→ nifi_queue、nifi_flowfile、nifi_provenance。
  • “账单消费者是否丢失了数据?”→ kafka_consumer_lag 会标记已落后于保留期限的分区。
  • “查找过去一小时内发送的订单 42 消息。”→ 使用 kafka_search 按键、子串或 JSON 字段搜索。
  • “哪些表包含客户数据,数据量有多大?”→ clickhouse_search_columns、clickhouse_describe_table。

这个项目源自一个网关,旨在让数据平台团队能够通过 AI 访问 NiFi 2、ClickHouse 和 Strimzi Kafka 集群,而无需提供凭据或写入权限。

工作原理

flowchart LR
    clients["MCP clients<br/>Claude Code, Claude Desktop,<br/>Cursor, VS Code, ..."]
    idp["OIDC provider<br/>Keycloak, Entra ID, Okta, ..."]
    gw["<b>nifi-clickhouse-kafka-mcp</b><br/>lock 1<br/>───<br/>token + group check<br/>read-only tools<br/>request allowlist<br/>SQL parse check<br/>masking, size caps<br/>audit, metrics"]
    subgraph backends["Lock 2: read-only identities"]
        nifi["NiFi<br/>view-only policies"]
        ch["ClickHouse<br/>readonly user, SELECT grants"]
        kafka["Kafka<br/>Read/Describe ACLs"]
    end
    clients -- "stdio, or HTTP<br/>+ bearer token" --> gw
    clients -. "log in" .-> idp
    gw -. "verify token" .-> idp
    gw --> nifi
    gw --> ch
    gw --> kafka

每个环境(生产、预发布等)都有自己的一组后端;一个服务即可为所有环境提供服务。

为什么选择它

nifi-clickhouse-kafka-mcp
双重只读保护只提供读取工具,且只会发送加入允许列表的请求。每个后端身份也都是只读的,因此一个锁出问题时,另一个可以兜底。
远程访问与多用户支持使用来自任意 OIDC 提供商(Keycloak、Entra ID、Okta、Auth0、Dex)的 OAuth 令牌进行 Streamable HTTP 连接,可选用群组门禁,且笔记本电脑上无需存放凭据。也可使用纯 stdio 模式供个人使用。
可审计每次调用都会记录一行 JSON,包含用户、工具、参数、结果和大小。ClickHouse 查询会将用户信息写入 system.query_log。还可选用 Prometheus 指标。
上下文安全所有列表结果都支持分页。ClickHouse 会流式读取,并在达到行数或大小上限时停止,同时说明原因。全局结果上限可防止任何结果淹没模型。
屏蔽机密信息工具结果中的密码、令牌、API 密钥,以及 JSON、YAML、NDJSON、URL 和 key=value 文本中的凭据都会被屏蔽,还可屏蔽你配置的任何字段名(如电子邮件、电话号码)。无法屏蔽的二进制载荷会被隐藏,除非你允许显示。
支持多个集群通过一个连接器连接多个命名环境(生产、预发布等),每个环境都可包含任意组合的 NiFi、ClickHouse 和 Kafka。
不留痕迹Kafka 读取操作会直接分配分区:不会加入消费者组,也不会提交偏移量。NiFi 队列列表和数据溯源查询在使用后会被删除。

请参阅 docs/landscape.md,了解它与其他 NiFi、ClickHouse 和 Kafka MCP 服务的比较,以及它解决了哪些用户反馈的问题。

快速开始

尝试连接本地 NiFi 2、ClickHouse 和 Kafka:

git clone https://github.com/arogan178/nifi-clickhouse-kafka-mcp && cd nifi-clickhouse-kafka-mcp/examples/demo
docker compose up -d          # NiFi takes about a minute
uv run --with requests python seed_nifi.py
claude mcp add data -- uvx nifi-clickhouse-kafka-mcp --config "$PWD/config.yaml"

然后向 Claude Code 提问:“演示 NiFi 流有什么问题?”examples/demo/README.md 提供了完整的演练,包含 Kafka 数据填充步骤。

要连接你自己的系统,请编写配置(参见 examples/config.example.yaml):

masked_fields: [email, phone]
environments:
  prod:
    nifi:
      url: https://nifi.example.com:8443
      auth: {type: mtls, cert: /certs/mcp.pem, key: /certs/mcp.key}
      ca_bundle: /certs/ca.pem
    clickhouse:
      url: https://clickhouse.example.com:8443
      user: mcp_reader
      password: ${CLICKHOUSE_PASSWORD}
    kafka:
      config:
        bootstrap.servers: kafka.example.com:9093
        security.protocol: SASL_SSL
        sasl.mechanism: SCRAM-SHA-512
        sasl.username: mcp-reader
        sasl.password: ${KAFKA_PASSWORD}
      schema_registry: {url: https://registry.example.com}

${VAR} 和 ${VAR:-default} 会读取环境变量,因此机密信息不会写入文件。 nifi-clickhouse-kafka-mcp --config config.yaml --check 会验证配置,并列出它将提供的工具。

连接方式

个人使用,stdio。 服务使用你的配置在本机运行:

claude mcp add data -- uvx nifi-clickhouse-kafka-mcp --config /path/to/config.yaml
{ "mcpServers": { "data": { "command": "uvx", "args": ["nifi-clickhouse-kafka-mcp", "--config", "/path/to/config.yaml"] } } }

团队使用,通过 OAuth 连接 HTTP。 只需运行一次(使用 Docker 或 Kubernetes),每个人都用自己的账户登录:

claude mcp add --transport http --client-id nifi-clickhouse-kafka-mcp --callback-port 47130 data https://mcp.example.com/mcp

没有身份提供商?将服务置于你已有的代理之后(oauth2-proxy、Cloudflare Access、Tailscale 等),并将 trusted_user_header 设置为该代理添加的标头;用户身份仍会显示在审计日志中。

docs/deploying.md 介绍身份提供商、代理模式、只读后端身份、Docker、Kubernetes、审计和指标。

工具

系统工具
全部environments
NiFinifi_health、nifi_status、nifi_flow_tree、nifi_search、nifi_process_group、nifi_component、nifi_processor_state、nifi_controller_services、nifi_bulletins、nifi_parameters、nifi_parameter、nifi_queue、nifi_flowfile、nifi_provenance、nifi_provenance_event
ClickHouseclickhouse_query、clickhouse_databases、clickhouse_tables、clickhouse_describe_table、clickhouse_search_columns、clickhouse_health
Kafkakafka_cluster、kafka_topics、kafka_describe_topic、kafka_consumer_groups、kafka_consumer_lag、kafka_sample、kafka_search

只有为系统配置后,相应工具才会出现。可使用 disabled_tools 关闭任意工具(支持模式匹配,例如 kafka_search 或 nifi_flow*)。

亮点:

  • nifi_health:一次调用即可检查整个流中的背压连接、无效处理器、已停止的控制器服务、错误公告和已停止的处理器,并按严重程度从高到低排列。
  • nifi_flowfile / nifi_provenance_event:查看真实 FlowFile 的属性和内容,JSON 会重新序列化并屏蔽机密,结果按偏移量分页。
  • clickhouse_query:执行一条带绑定 {name:Type} 参数的只读语句,结果以流式传输,并按行数或大小上限截断,同时返回读取行数和耗时。ClickHouse 会先用自己的解析器检查每条语句;只允许执行读取 ClickHouse 自身的表函数(numbers、merge、clusterAllReplicas 等);拒绝 url、s3、file、remote 等其他函数。
  • clickhouse_health:检查存在问题的副本、磁盘使用情况、分区数最多的分区、长时间运行的查询、合并、卡住的变更操作和近期错误。
  • kafka_search:在指定时间范围内扫描所有分区,按键、子字符串或值相等的 JSON 字段查找内容,并受扫描量和时间预算限制;可使用 resume 令牌继续扫描。
  • kafka_sample:从指定偏移量、时间戳或末尾读取消息,解码并屏蔽键、值和标头(支持 JSON、文本、Schema Registry Avro 和 JSON Schema)。

安全模型

网关是第一道锁。它只注册只读工具(每个工具都标注 readOnlyHint)。NiFi 客户端只能发送 GET 请求,以及 NiFi 所需的临时队列列表和数据溯源请求;它会拒绝可能访问其他端点的 ID。每条 ClickHouse 语句运行前都会由 ClickHouse 解析(EXPLAIN AST):只允许 SELECT、WITH、SHOW、DESCRIBE、EXISTS 和 EXPLAIN;表函数无论出现在哪里都必须列入允许列表;少数可访问网络或磁盘的标量函数(hasColumnInTable、file 等)会被拒绝。Kafka 始终只通过 assign() 读取。如果出现写入路径,测试会导致构建失败。

后端是第二道锁:为网关配置一个仅拥有查看权限策略的 NiFi 身份、一个具有 readonly 和 SELECT 授权的 ClickHouse 用户,以及一个具有 Read/Describe ACL 的 Kafka 用户。docs/deploying.md 提供了各项配置的具体步骤。

有两点值得注意:

  • 网关使用自己的身份,而不是用户的身份。 NiFi 2 仅根据最终用户的权限授权代理请求,因此代理用户请求的网关可能会让用户写入其有权访问的任何位置。为审计而保留每个用户的身份信息。
  • 屏蔽是纵深防御措施,而非安全边界。 它会屏蔽结果中的机密和已配置字段,并让搜索(NiFi 和 Kafka)基于屏蔽后的值进行匹配,因此无法借此确认某个隐藏值。不过,它只对可识别的格式有效,而且 ClickHouse 查询可以为列设置别名,因此应通过后端权限确保真正敏感的数据不可访问:NiFi 策略、ClickHouse 列授权和行策略、Kafka 主题 ACL。

请按照 SECURITY.md 中的说明报告漏洞。

开发

uv sync
uv run pytest                                             # unit tests
docker compose -f examples/demo/compose.yaml up -d        # then seed, see examples/demo/README.md
NIFI_CLICKHOUSE_KAFKA_MCP_DEMO=1 uv run pytest tests/integration      # end to end against real NiFi, ClickHouse, Kafka

路线图

  • Kafka 的 Protobuf 解码
  • NiFi 数据溯源链路图
  • Helm chart
  • 根据令牌声明映射每用户 ClickHouse 角色

许可证

Apache 2.0

评论

支持 Markdown

第一次接触 MCP?

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

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