WPPilot 1.5.1 — The tool surface a strict client sees
Three defects, one theme: WPPilot was unusable from any AI client that checks its calls against the schemas the server hands it. Claude is one of those. A more forgiving client saw none of this, which is how it survived a release.
The tool list was rejected outright
json_encode() renders an empty PHP array as [], and JSON Schema requires {}. WPPILOT_NO_INPUT_SCHEMA — which every no-input ability declares — is exactly that empty array, so the schema went out malformed:
tools.43.custom.input_schema.properties: Input should be an object
The API names only an index and rejects the whole payload, so one ability broke every tool on the connection rather than its own. The keyword maps are now coerced recursively, since a nested object property can declare an empty properties of its own, and the same correction is applied to responses leaving the bundled MCP adapter — a pinned composer package, where patching the source would be undone by the next update.
Abilities that take no input refused every call
Ability "wppilot/system-status" has invalid input. Reason: input is not of type object.
1.5.0 fixed the client sending {}. This fixes the server sending nothing at all. Passing null is right only for an ability declaring no schema; one declaring WPPILOT_NO_INPUT_SCHEMA validates with rest_is_object(), and rest_is_object(null) is false. Whichever single answer the transport picked, half the no-argument tools broke. It now asks the ability, reusing the decision the REST shim already makes so the two paths cannot drift apart.
Destructive tools demanded a confirmation they never advertised
Ability "wppilot/elementor-build-page" is destructive or critical.
Obtain explicit user approval, then retry with confirm=true.
confirm is a control field of the transport, not ability input, so it appeared in no schema — and abilities declare additionalProperties: false, so a validating client dropped the field before sending. The refusal then repeated identically however many times the model retried, with no way to comply. It is now declared, and required, on the 44 tools that are gated. The ability's own schema is untouched: the transport still strips confirm before execution by asking that schema, not the advertised one.
Upgrading
No new abilities and no permission changes. Existing connections keep working and do not need re-authorising.
Install wppilot-1.5.1.zip — GitHub's auto-generated "Source code (zip)" unpacks to wppilot-1.5.1/ and is not installable, because Pro's Requires Plugins: wppilot header resolves against the directory name.