MCP server for The Button Heist test automation framework, exposing heist commands and automation tools
ButtonHeist MCP exhibits severe definition quality gaps across all six tools. While tool registration is visible in ToolDefinitions.swift and tool annotations are present, the actual tool descriptions and parameter documentation are critically absent from the evaluable source code. The codebase shows that descriptions are sourced from FenceCommandDescriptor objects (descriptor.description) and schemas from inputJSONSchema, but these descriptor definitions are not included in the provided source. Per the hard rules, tools without visible descriptions score 0 on description, and tools without visible input schema details cannot exceed 30 on schema. Tool naming follows weak conventions: 'perform' is generic and vague; 'run_heist' and 'describe_heist' compound two concerns unnecessarily. Parameter names lack descriptive suffixes (e.g., 'target' should be 'target_name' or 'target_id'). No parameter descriptions are visible in the schema definitions. No output schemas are documented. Error handling is absent from all tool definitions.
Tool descriptions completely absent. All tools lack non-empty descriptions in the evaluable source code.
Parameter descriptions completely absent. No tool parameter has an accompanying description explaining what it controls or how to use it. Schema definitions show only type declarations without clarifying text.
Output schemas are not documented anywhere in the provided source code. LLMs cannot determine what fields to expect in responses, breaking downstream tool composition and planning.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 21 | 2026-07-28+ | v2 |
Generic and vague tool names. 'perform' (generic action verb, does it perform what?) and 'connect' (connect to what?) lack clarity. 'run_heist' and 'describe_heist' compound two concerns. Names should follow verb_noun pattern (e.g., 'validate_heist_plan', 'list_available_heists').
Parameter names lack type suffixes and are ambiguous. 'target' does not indicate whether it expects a name, ID, or address. 'detail' and 'lint' are opaque.
No error handling or recovery guidance defined. Tools provide no actionable error messages, recovery steps, or retryability information. Per pattern: errors must answer 'What to do next?'
Tool definitions inferred from test files (ToolSyncTests.swift). Four tools (perform, run_heist, validate_heist, list_heists, describe_heist) lack explicit implementation signatures in the main source.
No pagination support visible in list_heists tool. Large result sets risk context window exhaustion.
Parameters using generic types (object) without constraints. 'argument' parameter is object type but lacks schema definition for valid properties, allowing arbitrary nesting. Per pattern: constrain inputs to prevent hallucinated values.