卡夫卡mcp sbai
使用Spring Boot和Spring AI构建的Kafka MCP(模型上下文协议)服务器。通过SSE传输,将Kafka集群操作作为AI客户端可通过MCP协议使用的工具公开。
技术栈
组件
版本
Java
25
弹簧靴
4.0.2
春季AI
2.0.0-M2
Apache Kafka spring-boot-starter-kafka
构建
Maven(包括包装脚本)
先决条件
Java 25+
Docker(用于本地Kafka代理)
快速开始
复制 # Build
mvnw.cmd clean package -DskipTests # Windows
./mvnw clean package -DskipTests # Unix
# Run
mvnw.cmd spring-boot:run # Windows
./mvnw spring-boot:run # Unix
Spring Boot的Docker Compose集成会自动启动Kafka代理、模式注册表和中定义的Kafka UI compose.yaml 当应用程序启动时。无手册 docker compose up 需要。
MCP服务器启动于 端口9085 .
本地基础设施(组成.yaml)
服务
端口
描述
Kafka(KRaft)
9092
单节点代理,自动创建主题
架构注册表
8081
冲突架构注册表
Kafka UI
8080
用于集群管理的Provectus Kafka UI
暴露的MCP工具
话题管理
工具
说明
listTopics
列出集群中的所有主题
describeTopic
返回主题的分区布局、副本、ISR和非默认配置
createTopic
创建具有指定分区计数和复制因子的主题
deleteTopic
永久删除主题及其所有消息
消息传递
工具
参数
说明
produceMessage
主题、信息、关键?头?
发布消息;返回分区和偏移量
consumeMessages
主题,maxMessages?从一开始?,超时秒?
通过短期消费者组读取消息
peekMessages
主题、分区、偏移、计数?
从特定分区/偏移量读取而不提交
消费者群体
工具
说明
listConsumerGroups
列出所有消费者组ID
describeConsumerGroup
返回组状态、协调器、成员和分区分配
簇
工具
说明
describeCluster
返回集群ID、控制器和所有代理详细信息
建筑
复制 AI Client ──SSE──> MCP Server (port 9085)
│
┌─────▼──────┐
│ToolProvider │ @Tool-annotated methods, auto-registered
└─────┬──────┘ by Spring AI's MethodToolCallbackProvider
│
┌─────▼──────┐
│KafkaService │ Wraps AdminClient, KafkaTemplate,
└─────┬──────┘ and ad-hoc KafkaConsumer instances
│
┌─────▼──────┐
│ Kafka │ Local broker via Docker Compose
└────────────┘
没有REST层。 MCP over SSE是唯一的运输方式。
McpMessageStatusFilter 补丁 /mcp/message POST响应来自 200 OK 到 202 Accepted 以满足克劳德对苏格兰和南方能源公司的期望。
消费者运营(consumeMessages, peekMessages)旋转短暂 KafkaConsumer 具有唯一组ID的实例,这样它们就不会干扰应用程序消费者。
配置
关键属性 application.properties:
复制 server.port=9085
spring.ai.mcp.server.transport=sse
spring.ai.mcp.server.sse-endpoint=/sse
spring.ai.mcp.server.sse-message-endpoint=/mcp/message
spring.kafka.bootstrap-servers=localhost:9092
测试
复制 # Full test suite
mvnw.cmd test
# Single test class
mvnw.cmd test -Dtest=com.elzakaria.kafkamcpsbai.SomeTestClass
# Single test method
mvnw.cmd test -Dtest="com.elzakaria.kafkamcpsbai.SomeTestClass#methodName"