Production-grade governed MCP server for Apache Flink
Server has 14 tools with basic schemas and descriptions. All tools have names starting with action verbs (get_, list_, trigger_, rescale_) and descriptions present. However, descriptions are terse (10-50 chars for most tools), parameter descriptions are minimal or absent, and output schemas are not documented. Two write-operation tools (trigger_savepoint, rescale_job) include approval tokens for governance, which is good practice. No tool annotations (readOnlyHint/destructiveHint) visible in code. Schemas show basic type info but lack depth, most parameters have only type and description, no constraints, enums, or ranges. Error handling and recovery guidance not evident in tool definitions.
Cluster overview (slots, TMs, jobs)
JobManager /config
Get Flink job details
Get Flink job configuration
Get Flink job exceptions
Get Flink job metrics
Get Flink job status
Tool descriptions are too brief (10-50 chars). LLMs cannot determine when to select a tool vs. similar alternatives without richer context. E.g., 'List Flink jobs' does not explain what fields are returned, whether pagination is supported, or when to call this vs. get_job.
Output schemas are not documented. Tool definitions show input schemas but no return type documentation. LLMs cannot plan downstream calls or extract required fields (e.g., jobId for chaining) without knowing what each tool returns.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 54 | <=2025-11-25 | v2 |
List Flink job checkpoints
List uploaded jars
List Flink jobs
List TaskManagers and resources
Rescale a Flink job
Execute read-only SQL via Flink SQL Gateway
Trigger a savepoint
No tool annotations (readOnlyHint, destructiveHint, idempotentHint) visible in code. The two write tools (trigger_savepoint, rescale_job) should be explicitly marked as destructive/mutating to guide agent planning and prevent accidental misuse.
List tools lack pagination parameters. list_jobs, list_taskmanagers, list_checkpoints, list_jars have no limit, offset, or cursor parameters. Large result sets will blow context windows and degrade LLM reasoning.
Parameter descriptions are minimal or absent. jobId parameters say 'The Flink job ID' but do not explain format (UUID? numeric?), how to obtain one (call list_jobs first?), or whether partial matches are accepted. This forces LLMs to guess.