Kafka协议服务器

一个开源的MCP服务器,用于Apache Kafka,支持AI助手与Kafka集群和Schema Registry交互,提供主题管理、消息生产/消费、Schema Registry操作等功能。

  • by gAmUssA
  • Java
  • 本地部署
  • 13 星标
  • 更新于
在 GitHub 查看 gAmUssA/mcp-kafka

使用说明

mcp卡夫卡

Apache Kafka的开源MCP(模型上下文协议)服务器,使用Quarkus构建。使Claude、Goose和Gemini等AI助手能够与Kafka集群和Schema Registry进行交互。

设计为可直接替代 @confluentinc/mcp-confluent,针对开源Apache Kafka而不是Confluent Cloud。

特性

  • 22工具 -Kafka主题管理、生成/消费、模式注册表CRUD、Flink SQL网关、主题搜索、集群信息
  • 4资源 -只读集群状态数据(概述、健康检查、未复制分区、消费者延迟)
  • 4个提示 -用于群集运行状况和故障排除的预构建诊断报告模板
  • 模式注册表 -注册、列出、获取、删除模式;使用Avro序列化(汇流线格式)生产/消费
  • 双重运输 -STDIO(子进程)和HTTP/SSE(远程服务器)
  • 插入兼容 -与MCP汇流相同的MCP工具名称和响应格式
  • Quarkus供电 -快速启动,低内存,GraalVM原生映像就绪
  • 可配置的 -环境变量、属性文件、工具允许/阻止列表
  • 测试容器 -使用真实Kafka和Schema Registry进行集成测试

快速开始

先决条件

  • Java 21+
  • Docker(用于Kafka或运行测试)

从源代码构建

git clone https://github.com/gamussa/mcp-kafka.git
cd mcp-kafka
./gradlew quarkusBuild

内置应用程序位于 build/quarkus-app/.

使用Docker Compose运行

使用一个命令启动整个堆栈:

docker compose up

这将开始:

  • 卡夫卡 上 localhost:9092
  • 模式注册表 上 localhost:8081
  • Flink SQL网关 上 localhost:8083
  • MCP服务器 上 localhost:8080 (HTTP/SSE传输)

所有服务都经过健康检查——MCP服务器在启动之前等待Kafka、Schema Registry和Flink SQL Gateway准备就绪。所有22个工具均已启用。

将MCP客户端连接到 http://localhost:8080/mcp/sse 或者使用下面的配置进行STDIO模式。

MCP客户端配置

克劳德桌面(STDIO)

添加到您的 claude_desktop_config.json:

{
  "mcpServers": {
    "kafka": {
      "command": "java",
      "args": ["-Dquarkus.profile=stdio", "-jar", "/path/to/mcp-kafka/build/quarkus-app/quarkus-run.jar"],
      "env": {
        "KAFKA_BOOTSTRAP_SERVERS": "localhost:9092"
      }
    }
  }
}

克劳德代码CLI

添加一个 .mcp.json 将文件保存到项目根目录:

{
  "mcpServers": {
    "kafka": {
      "command": "java",
      "args": ["-Dquarkus.profile=stdio", "-jar", "/path/to/mcp-kafka/build/quarkus-app/quarkus-run.jar"],
      "env": {
        "KAFKA_BOOTSTRAP_SERVERS": "localhost:9092"
      }
    }
  }
}

或者通过Claude Code设置进行全局配置。

使用架构注册表

将架构注册表URL添加到环境中:

{
  "mcpServers": {
    "kafka": {
      "command": "java",
      "args": ["-Dquarkus.profile=stdio", "-jar", "/path/to/mcp-kafka/build/quarkus-app/quarkus-run.jar"],
      "env": {
        "KAFKA_BOOTSTRAP_SERVERS": "localhost:9092",
        "SCHEMA_REGISTRY_URL": "http://localhost:8081"
      }
    }
  }
}

架构注册表工具在以下情况下会自动启用 SCHEMA_REGISTRY_URL 设置,否则禁用。

使用Flink SQL网关

将Flink SQL网关URL添加到环境中:

{
  "mcpServers": {
    "kafka": {
      "command": "java",
      "args": ["-Dquarkus.profile=stdio", "-jar", "/path/to/mcp-kafka/build/quarkus-app/quarkus-run.jar"],
      "env": {
        "KAFKA_BOOTSTRAP_SERVERS": "localhost:9092",
        "FLINK_SQL_GATEWAY_URL": "http://localhost:8083"
      }
    }
  }
}

Flink SQL网关工具在以下情况下会自动启用 FLINK_SQL_GATEWAY_URL 设置,否则禁用。

鹅/其他MCP客户端(STDIO)

任何支持STDIO传输的MCP客户端都可以使用:

command: java -Dquarkus.profile=stdio -jar /path/to/mcp-kafka/build/quarkus-app/quarkus-run.jar
env:
  KAFKA_BOOTSTRAP_SERVERS: localhost:9092

HTTP/SSE传输(远程服务器)

对于远程部署,直接运行服务器(HTTP是默认传输):

java -Dquarkus.http.host=0.0.0.0 \
     -jar build/quarkus-app/quarkus-run.jar

这暴露了:

  • 流式HTTP 在 http://host:8080/mcp
  • 传统SSE 在 http://host:8080/mcp/sse

配置MCP客户端以连接到远程URL:

{
  "mcpServers": {
    "kafka": {
      "url": "http://your-server:8080/mcp/sse"
    }
  }
}

注: HTTP/SSE模式还不包括身份验证。绑定到 127.0.0.1 (默认)或使用反向代理进行远程访问。

配置参考

Kafka连接

属性 环境变量 默认值 描述
kafka.bootstrap-servers KAFKA_BOOTSTRAP_SERVERS localhost:9092 Kafka代理地址
kafka.security-protocol KAFKA_SECURITY_PROTOCOL PLAINTEXT PLAINTEXT, SASL_PLAINTEXT, SSL, SASL_SSL
kafka.sasl-mechanism KAFKA_SASL_MECHANISM (无) PLAIN, SCRAM-SHA-256, SCRAM-SHA-512
kafka.sasl-username KAFKA_SASL_USERNAME (无) SASL用户名
kafka.sasl-password KAFKA_SASL_PASSWORD (无) SASL密码
kafka.ssl-truststore-location KAFKA_SSL_TRUSTSTORE_LOCATION (无) 通往信任库的路径
kafka.ssl-truststore-password KAFKA_SSL_TRUSTSTORE_PASSWORD (无) 信任库密码
kafka.ssl-keystore-location KAFKA_SSL_KEYSTORE_LOCATION (无) 密钥库路径(mTLS)
kafka.ssl-keystore-password KAFKA_SSL_KEYSTORE_PASSWORD (无) 密钥库密码
kafka.properties-file KAFKA_PROPERTIES_FILE (无) 额外Kafka属性的路径

模式注册表

属性 环境变量 默认值 描述
schema-registry.url SCHEMA_REGISTRY_URL (无) 架构注册表URL(启用SR工具)
schema-registry.auth.username SCHEMA_REGISTRY_AUTH_USERNAME (无) 基本身份验证用户名
schema-registry.auth.password SCHEMA_REGISTRY_AUTH_PASSWORD (无) 基本身份验证密码

Flink SQL网关

属性 环境变量 默认值 描述
flink-sql-gateway.url FLINK_SQL_GATEWAY_URL (无) Flink SQL网关URL(启用Flink工具)
flink-sql-gateway.default-catalog FLINK_SQL_GATEWAY_DEFAULT_CATALOG (无) 新会话的默认目录
flink-sql-gateway.default-database FLINK_SQL_GATEWAY_DEFAULT_DATABASE (无) 新会话的默认数据库
flink-sql-gateway.statement-timeout FLINK_SQL_GATEWAY_STATEMENT_TIMEOUT 30000 语句完成的最大等待时间(ms)
flink-sql-gateway.max-rows FLINK_SQL_GATEWAY_MAX_ROWS 100 每条语句的默认最大结果行数

运输

属性 环境变量 默认值 描述
quarkus.profile QUARKUS_PROFILE (无) 设置为 stdio 用于STDIO传输(MCP客户端)
quarkus.http.host QUARKUS_HTTP_HOST 127.0.0.1 HTTP绑定地址(使用 0.0.0.0 远程)
quarkus.http.port QUARKUS_HTTP_PORT 8080 HTTP服务器端口

工具筛选

属性 环境变量 默认值 描述
mcp.tools-allow MCP_TOOLS_ALLOW (无) 逗号分隔的工具允许列表
mcp.tools-block MCP_TOOLS_BLOCK (无) 逗号分隔的工具块列表
mcp.tools-allow-file MCP_TOOLS_ALLOW_FILE (无) 带有允许列表的文件(每行一个)
mcp.tools-block-file MCP_TOOLS_BLOCK_FILE (无) 带阻止列表的文件(每行一个)

可用工具

Kafka工具

工具 说明
list-topics 列出Kafka集群中的所有主题
create-topics 创建一个或多个Kafka主题
delete-topics 删除一个或多个Kafka主题
produce-message 生成消息(原始或模式注册表序列化)
consume-messages 消费消息(原始或架构注册表反序列化)
get-topic-config 获取Kafka主题的配置
alter-topic-config 更改Kafka主题的配置
search-topics-by-name 使用正则表达式或子字符串按名称搜索主题
describe-cluster 获取Kafka集群元数据

架构注册表工具

在以下情况下自动启用 schema-registry.url 已配置。

工具 说明
list-schemas 列出所有具有可选前缀过滤器的架构
register-schema 注册新模式(Avro、JSON模式、Protobuf)
get-schema 按主题和可选版本获取架构
delete-schema 软/硬删除主题或特定版本
get-schema-compatibility 获取主题或全局的兼容级别
set-schema-compatibility 设置兼容级别(后退、前进、完全等)

Flink SQL网关工具

在以下情况下自动启用 flink-sql-gateway.url 已配置。

工具 说明
execute-flink-sql 执行任意Flink SQL并返回结果
list-flink-catalogs 列出所有可用的Flink目录
list-flink-databases 在Flink目录中列出数据库
list-flink-tables 列出Flink数据库中的表
describe-flink-table 描述Flink表的模式
get-flink-job-status 获取Flink SQL操作的状态
cancel-flink-job 取消正在运行的Flink SQL操作

可用资源

MCP资源将只读Kafka集群状态作为结构化JSON数据公开。配置Kafka时,资源会自动启用。

资源URI 描述
kafka-mcp://overview 群集运行状况摘要:代理计数、控制器ID、主题/分区计数、运行状况
kafka-mcp://health-check 详细的健康评估:代理、控制器、分区和消费者组状态
kafka-mcp://under-replicated-partitions 分析ISR<复制因子的分区,并提出故障排除建议
kafka-mcp://consumer-lag-report 消费者群体滞后指标,包括群体摘要、高滞后细节和建议

可用提示

MCP提示提供预构建的诊断报告模板,可生成人类可读的标记。配置Kafka时会自动启用提示。

提示 参数 描述
kafka-cluster-overview (无) 人类可读的集群摘要,包括代理计数、主题、分区和运行状况
kafka-health-check (无) 包含每个子系统状态指示器的综合健康检查报告
kafka-under-replicated-partitions (无) 在包含受影响分区表、原因和建议的复制报告下
kafka-consumer-lag-report threshold (可选,默认值: 1000) 消费者滞后分析,包括组汇总表、高滞后细节和建议

架构注册表序列化

这 produce-message 和 consume-messages 工具支持可选的架构注册表集成:

produce-message with useSchemaRegistry=true, schemaType=AVRO, schema=<avro-json>

消息使用Confluent有线格式(魔术字节+4字节模式ID+有效载荷)进行序列化/反序列化,与任何Confluent生态系统消费者/生产者兼容。

发展

构建

./gradlew quarkusBuild

在开发模式下运行

./gradlew quarkusDev

开发模式功能:

  • 源代码更改时的热重新加载
  • 开发用户界面 http://localhost:8080/q/dev-ui
  • 详细的工具和MCP框架日志记录

运行测试

测试使用Testcontainers apache/kafka-native 和 cp-schema-registry 图像。Docker必须正在运行。

./gradlew test

项目结构

src/main/java/com/github/imcf/mcp/kafka/
  config/          # KafkaConfig, SchemaRegistryConfig, ToolFilter, StartupLogger
  client/          # KafkaClientManager, SchemaRegistryClient
  model/           # ClusterOverview, ConsumerLagReport, UnderReplicatedPartitionReport, HealthReport
  serde/           # SchemaRegistrySerializer, SchemaRegistryDeserializer
  tools/
    BaseToolHandler.java
    kafka/         # Topic tools, produce/consume, search, topic config
    cluster/       # Cluster tools (describe-cluster)
    schema/        # Schema Registry tools (list, register, get, delete, compatibility)
    flink/         # Flink SQL Gateway tools (execute-sql, catalogs, databases, tables)
  resources/
    BaseResourceHandler.java
    kafka/         # MCP resources (overview, health-check, under-replicated, consumer-lag)
  prompts/
    BasePromptHandler.java
    kafka/         # MCP prompts (cluster-overview, health-check, under-replicated, consumer-lag)

路线图

阶段 范围 状态
第一阶段 核心Kafka工具,STDIO+HTTP/SSE传输,Docker 完成
第2阶段 架构注册表工具、SR序列化、主题搜索 完成
第三期 Flink SQL网关工具 完成
阶段4 MCP资源和集群可观测性提示 完成
阶段5 Kafka Connect工具 计划中
第6阶段 消费者群体、API密钥授权、GraalVM本机构建 计划

许可证

看 许可证 了解详情。