MCP server for securely operating and monitoring Apache Kafka clusters
The Kafka MCP server presents a well-structured tool collection with 19 tools covering cluster, topic, consumer, producer, and metrics operations. However, significant gaps in parameter descriptions and output schema documentation prevent a higher score. Tool names follow verb_noun conventions well (describe_*, list_*, create_*, delete_*, consume_*, produce_*, reset_*, rewind_*), which is excellent for LLM intent inference. The critical issue is that while input schemas are present with type declarations, most parameter descriptions are minimal (10-30 chars) and lack actionable guidance on constraints, ranges, formats, or when to use each parameter. Output schemas are entirely undocumented, the LLM has no visibility into what fields are returned or how to chain tool calls. Error handling is not visible in the provided code. The server uses fastmcp (Python framework) with STDIO transport only.
Update dynamic configs for a resource. resource_type: "topic", "broker", or "group" configs: Dictionary of config key-value pairs
Consumes messages from a topic. offset_spec: 'earliest', 'latest', or specific integer offset. timeout: seconds to wait for messages.
Increases the number of partitions for a topic. Note: Partition count can only be increased, not decreased.
Creates a new topic.
Deletes a topic.
Returns a list of brokers with their details.
Returns information about the Kafka cluster (brokers, controller).
No output schemas documented for any tool. LLMs cannot determine what fields are returned, preventing proper tool chaining and downstream planning.
Parameter descriptions are minimal (10 - 30 chars) and lack actionable constraints. For example, 'partition' in consume_messages is described as 'Optional specific partition' with no guidance on valid range or format. 'offset_spec' descriptions mention values but lack emphasis on format requirements.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-21 | D | 55 | <=2025-11-25 | v2 |
| 2026-03-09 | F | 47 | - | v1 |
Summarizes Kafka health signals exposed by Prometheus JMX Exporter.
Get dynamic configs for a resource. resource_type: "topic", "broker", or "group" (case insensitive)
Describes a specific consumer group.
Returns detailed information about a specific topic.
Retrieves raw or summarized metrics for brokers from JMX Exporter.
Gets the current committed offsets for a consumer group.
Retrieves raw or summarized metrics for topics from JMX Exporter.
Lists all consumer groups.
Returns a list of all topic names in the cluster.
Produces a message to a topic.
Resets the offset of a consumer group using AdminClient. offset_spec: 'earliest', 'latest', or a specific integer offset string. dry_run: If True, only calculates and returns the proposed offset changes without applying them. force: If True, forces the modification even if the group is active or STABLE.
Resets consumer group offset to the position of a specific timestamp.
delete_topic has a critically vague description ('Deletes a topic.') with no confirmation or dry-run capability. This is a destructive operation that should require explicit confirmation or a dry-run mode to prevent accidental data loss.
No error handling guidance visible in tool definitions or descriptions. Tools do not explain what errors might occur, what they mean, or how to recover. For example, 'delete_topic' provides no guidance on behavior if the topic does not exist or is actively being consumed.
No tool annotations visible (readOnlyHint, destructiveHint, idempotentHint). The Risk column in the summary shows semantics (READ_ONLY, WRITE, DESTRUCTIVE, REVERSIBLE) but these are not exposed in the tool definitions where LLMs can see them.
Pagination not visible in list_topics, list_consumer_groups, or list_*-style tools. No limit/offset parameters or documentation of result limits. If a cluster has thousands of topics or consumer groups, the response could exhaust context windows.
Long tool name 'rewind_consumer_group_offset_by_timestamp' (44 chars vs baseline p90=27). While not ambiguous, it is verbose and could be shortened to 'reset_consumer_group_offset_by_time' without losing clarity.
Enum constraints not formally declared for constrained parameters. 'resource_type' in describe_configs accepts 'topic', 'broker', or 'group' (case insensitive), but no enum field in schema. 'offset_spec' accepts 'earliest', 'latest', or integer, also not enumerated.
No documentation of Kafka connection credentials or security model. Environment variables are used (visible in config.py) but no tool-level guidance on authentication or required Kafka permissions.