The plugin tracked :latest, so nothing recorded which version served the MCP
endpoint. The pin is the version read out of the running container's
MANIFEST.MF, and a redeploy read it back unchanged.
Only mcp-server is pinned. The other twenty plugins and the jenkins/jenkins:lts
image keep this role's existing convention; changing that is a separate concern.
The README also gains the Authorization subject section that belongs with the
earlier auth_subject commit. It was missed there and cannot be split off a file
without an interactive stage.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Pin the MCP Server plugin and let a boot hook mint the API token MCP
clients present, then take that token over into sys-token-store and
verify it against the controller before the deploy continues.
Wait for the controller to answer before probing. A JCasC change restarts
Jenkins, and the probe carries no retries of its own, so a single 5xx
during startup failed the deploy with a credential that was valid all
along.
Authenticate with HTTP Basic. The plugin offers no bearer, which is why
basic_auth entered the service contract instead of the role working
around it.
Assert the guarded surface, not the handshake: the plugin answers
initialize anonymously because that call is capability negotiation and
carries no data, while an unauthenticated tools/list is refused and
leaks no tool inventory.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>