You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
MCP Gateway v0.3.26 fails configuration validation when the safeoutputs MCP server's container field is pinned by digest (@sha256:...). The gateway's stdioServerConfig.container JSON-schema pattern only accepts a :tag suffix, not an @digest suffix, so the gateway aborts at startup and every affected agentic run fails at the Start MCP Gateway step.
This is introduced by PR #39644 ("Include and pin safe-outputs gh-aw-node image in default container predownload and manifest", branch copilot/add-gh-aw-node-to-default-containers). Production main is not affected — the committed lock files pin by tag (ghcr.io/github/gh-aw-node), which passes validation.
Evidence
Runtime value emitted by the PR build (from run 27648258396 gateway config):
Gateway error (identical across representative run §27653712058 and comparator run §27648258396):
Configuration validation error (MCP Gateway version: v0.3.26):
Location: /mcpServers/safeoutputs/container
Error: does not match pattern '^[a-zA-Z0-9][a-zA-Z0-9./_-]*(:([a-zA-Z0-9._-]+|latest))?$'
The pattern allows name(:tag)? only. @ is not in the character class, so any @sha256: digest pin is rejected. The same server config also trips the httpServerConfig branch (mounts/args/container/entrypoint/entrypointArgs not allowed there), confirming stdioServerConfig is the intended branch and the container pattern is the sole blocker.
audit-diff (failed PR build vs main): the only material delta is the container value — main uses the tag form ghcr.io/github/gh-aw-node (HEAD lock, line 1510), which matches the pattern; the PR appends @sha256:..., which does not.
Affected workflows and run IDs
All on branch copilot/add-gh-aw-node-to-default-containers (PR #39644). 19 runs failed at Start MCP Gateway in the last 6h:
Related downstream failures on the same branch (agent job died, then safe_outputs job failed at Process Safe Outputs): §27655298190, §27655260785.
Probable root cause
The PR changed the default-container manifest so the safeoutputs stdio MCP server's container is emitted in pinned image@sha256:digest form. MCP Gateway v0.3.26's config schema (mcp-gateway-config.schema.json, stdioServerConfig.container) only permits name[:tag], so digest-pinned references are rejected before any server starts.
Proposed remediation (pick one)
gh-aw side (preferred, unblocks PR now): for stdio MCP server container fields, emit the tag form (ghcr.io/github/gh-aw-node:<tag>) and carry the digest separately (predownload/manifest only, as is already done for the agent/firewall images via imageTag/digest map). Do not inline @sha256: into the gateway container string.
Gateway side: widen the stdioServerConfig.container pattern to also accept the digest form, e.g. append (@sha256:[a-f0-9]{64})? to the existing pattern, and bump the MCP Gateway pin in gh-aw once released.
Option 1 is lower-risk and keeps gh-aw compatible with the already-pinned gateway v0.3.26.
Success criteria / verification
Re-run the smoke matrix on copilot/add-gh-aw-node-to-default-containers; Start MCP Gateway passes for all engines (Claude, Codex, Gemini, Antigravity, Copilot) and Agent Container Smoke Test.
Gateway log shows no Configuration validation error for /mcpServers/safeoutputs/container.
Problem statement
MCP Gateway v0.3.26 fails configuration validation when the
safeoutputsMCP server'scontainerfield is pinned by digest (@sha256:...). The gateway'sstdioServerConfig.containerJSON-schema pattern only accepts a:tagsuffix, not an@digestsuffix, so the gateway aborts at startup and every affected agentic run fails at the Start MCP Gateway step.This is introduced by PR #39644 ("Include and pin safe-outputs gh-aw-node image in default container predownload and manifest", branch
copilot/add-gh-aw-node-to-default-containers). Productionmainis not affected — the committed lock files pin by tag (ghcr.io/github/gh-aw-node), which passes validation.Evidence
name(:tag)?only.@is not in the character class, so any@sha256:digest pin is rejected. The same server config also trips thehttpServerConfigbranch (mounts/args/container/entrypoint/entrypointArgsnot allowed there), confirmingstdioServerConfigis the intended branch and thecontainerpattern is the sole blocker.main): the only material delta is thecontainervalue —mainuses the tag formghcr.io/github/gh-aw-node(HEAD lock, line 1510), which matches the pattern; the PR appends@sha256:..., which does not.Affected workflows and run IDs
All on branch
copilot/add-gh-aw-node-to-default-containers(PR #39644). 19 runs failed at Start MCP Gateway in the last 6h:Related downstream failures on the same branch (agent job died, then
safe_outputsjob failed at Process Safe Outputs): §27655298190, §27655260785.Probable root cause
The PR changed the default-container manifest so the
safeoutputsstdio MCP server'scontaineris emitted in pinnedimage@sha256:digestform. MCP Gateway v0.3.26's config schema (mcp-gateway-config.schema.json,stdioServerConfig.container) only permitsname[:tag], so digest-pinned references are rejected before any server starts.Proposed remediation (pick one)
containerfields, emit the tag form (ghcr.io/github/gh-aw-node:<tag>) and carry the digest separately (predownload/manifest only, as is already done for the agent/firewall images viaimageTag/digest map). Do not inline@sha256:into the gatewaycontainerstring.stdioServerConfig.containerpattern to also accept the digest form, e.g. append(@sha256:[a-f0-9]{64})?to the existing pattern, and bump the MCP Gateway pin in gh-aw once released.Option 1 is lower-risk and keeps gh-aw compatible with the already-pinned gateway v0.3.26.
Success criteria / verification
copilot/add-gh-aw-node-to-default-containers; Start MCP Gateway passes for all engines (Claude, Codex, Gemini, Antigravity, Copilot) and Agent Container Smoke Test.Configuration validation errorfor/mcpServers/safeoutputs/container.safeoutputsserver still resolves to the digest-pinned image at pull time (digest pinning preserved via predownload/manifest), confirming the security intent of PR Include and pin safe-outputs gh-aw-node image in default container predownload and manifest #39644 is retained.Scope: agentic-workflow failures, last 6h, repo
github/gh-aw. Parent: meta-orchestrator #29109. No existing open issue covers this signature.References: #39644 · §27653712058 · §27648258396 · §27653929599
Related to #29109