MCP Server for Dijkstra's Weakest Precondition (wp) Calculus Skill - implements predicate transformer calculus to propagate postconditions backwards through assignment sequences and conditional branches to synthesize weakest preconditions
Single tool with minimal definition quality. Tool name lacks action verb (should be 'compute_' not bare noun). Description is adequate (156 chars, within 10-1024 range) but parameters lack descriptions entirely, critical violation of pattern:tool-description. Input schema present with types but no parameter descriptions. No output schema documented. No error handling guidance. Tool appears functional but falls far short of production standards.
Computes the weakest precondition for a sequence of assignments given a postcondition. Takes initial value of x and target threshold for y, executes sequence: x := x + 1; y := x * 2, and returns whether the initial state satisfies the weakest precondition for y >= y_target
Tool name does not start with action verb. 'compute_weakest_precondition' is acceptable, but naming convention review suggests verb_noun pattern (e.g., 'calculate_weakest_precondition' or 'compute_wp'). Current name is borderline but could be clearer.
Parameters 'x' and 'y_target' have NO descriptions in the schema. LLMs cannot infer that 'x' is the initial variable value or that 'y_target' is a postcondition threshold. This violates pattern:tool-description (100% of A+ tools have param descriptions).
No output schema documented. Tool returns {'x': int, 'satisfies_wp': bool} but LLMs have no formal specification of return fields. This prevents downstream tool chaining and forces LLMs to infer structure.
No error handling or recovery guidance. If invalid inputs are passed (e.g., non-integer x), the tool silently fails or returns unexpected results. No error messages guide the LLM to retry or correct input.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 37 | 2026-07-28+ | v2 |
Parameter defaults (x=4, y_target=10) are hardcoded in the tool implementation but not declared in the schema. LLMs cannot see that these parameters are optional, forcing them to always provide values.