MCP server for kafbat UI (Kafka UI) that signs in with your existing kafbat login; read-only by default
kafbat-mcp provides 6 read-only Kafka tools with complete input schemas and descriptions. Naming follows verb_noun convention (list_*, describe_*, consume_*). All tools have descriptions (avg 150 chars, within 10-1024 baseline). Schemas are well-typed with enums (consume_messages mode param). However, output schemas are not documented, LLMs cannot predict response structure. Error handling is minimal; no recovery guidance. Parameter descriptions lack format constraints (e.g., cluster/topic names accept any string; no validation hints). The consume_messages tool is complex with 12 params but lacks dependency documentation (e.g., offset/timestamp_ms only apply to specific modes). No tool annotations visible in code despite feature flag claiming toolAnnotations=true.
Read messages from a topic without committing offsets. LATEST = newest `limit` messages, EARLIEST = oldest. FROM_/TO_OFFSET need `offset`, FROM_/TO_TIMESTAMP need `timestamp_ms` (epoch millis). Pass `cursor` from a previous `nextCursor` to get the next page (other params are then ignored). Long keys/values are truncated. Two filters, both applied by kafbat before sending anything back: `string_filter` keeps messages whose key/value/headers contain the string. `smart_filter` is a CEL boolean expression over a single binding, `record` — e.g. `record.value.orderId == 42`, `record.key == "k2"`. A JSON payload is addressed field by field through `record.value`; `record.keyAsText` and `record.valueAsText` give the raw strings. It is far more precise than `string_filter` and costs nothing extra in context.
Consumer group details: per-partition current offset, end offset, lag and assigned consumer.
Topic details: partitions with leader and min/max offsets, configs that differ from defaults, and the consumer groups reading this topic.
List Kafka clusters configured in kafbat with status, versions and enabled features.
Output schemas not documented. LLMs cannot predict response structure (fields, types, nesting). consume_messages returns parsed message events; list_* return paginated results, but no schema is visible in code or descriptions.
consume_messages has 12 parameters with undocumented dependencies. offset/timestamp_ms only apply to FROM_OFFSET/TO_OFFSET/FROM_TIMESTAMP/TO_TIMESTAMP modes; cursor overrides other params. LLMs will pass invalid combinations.
No error handling guidance. Tools return ToolError on failure but do not guide LLM recovery (e.g., 'cluster not found, call list_clusters to see available clusters'). Agents cannot self-correct.
Inferred effective spec: 2025-06-18+.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 61 | 2025-06-18+ | v2 |
List consumer groups of a cluster (paged) with state, member count and total lag.
List topics of a cluster (paged). `search` is a substring match on topic name.
Parameter descriptions lack format constraints. cluster/topic/group_id accept any string; no validation hints (e.g., 'alphanumeric, 1-255 chars'). LLMs may pass invalid identifiers.
Tool annotations declared in feature flags (toolAnnotations=true) but not visible in code. ToolAnnotations object created in build_server() but not confirmed applied to all tools via @mcp.tool() decorator.