A Model Context Protocol server for Amazon MSK (Managed Streaming for Apache Kafka) providing tools for managing MSK clusters, custom domains, Route53 DNS records, and MirrorMaker2 connectors
Server has 7 tools with basic verb-noun naming (get_*, create_*, list_*, perform_*). All tools have descriptions (10-100 chars), but most are minimal and lack context on WHEN to use them or WHAT they return. Input schemas are present with type declarations (string, optional string) and parameter descriptions, but output schemas are completely undocumented, LLMs cannot plan downstream calls. The perform_dr_switch tool has NO input schema visible and a one-line description, violating critical schema and description rules. Error handling is minimal: tools return {'error': '...'} dicts but provide no recovery guidance. No tool annotations (readOnlyHint, destructiveHint, idempotentHint) despite clear risk levels (READ_ONLY, WRITE, IRREVERSIBLE). Composition is reasonable, tools are single-purpose, but missing chaining IDs in responses (e.g., create_msk_custom_domain should return zone_id, cluster_arn for follow-up calls). No pagination support despite tools that list resources.
Create a custom domain for an MSK cluster by setting up Route53 records.
Get broker information for an MSK cluster.
Get information about an MSK cluster.
Get information about a Route53 hosted zone.
Get the VPC ID for an MSK cluster.
List all resource record sets in a Route53 hosted zone.
perform_dr_switch has no visible input schema and minimal description ('Perform disaster recovery switch for MSK cluster'). Violates critical schema and description rules. HARD CAP: schema score = 0, description score ≤ 20.
No output schemas documented for any tool. LLMs cannot infer what fields to expect (e.g., does create_msk_custom_domain return zone_id, record_ids, or just success?). Breaks tool chaining and forces discovery detours.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint) despite clear risk levels declared (READ_ONLY, WRITE, IRREVERSIBLE). Agents cannot distinguish safe from dangerous operations.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 51 | 2026-07-28+ | v2 |
Perform disaster recovery switch for MSK cluster
Error handling returns bare {'error': '...'} dicts with no recovery guidance. E.g., 'Cluster not found' does not suggest calling list_clusters() or checking region. Agents cannot self-correct.
list_route53_resource_record_sets has no pagination (limit, offset, next_cursor). Large zones could return thousands of records, exhausting context window.