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
Commit reviewed:9bd6e5b — Update stale features.difc-proxy references in workflow prompts
Summary
Found 3 compliance issues across 2 spec sections during today's review. The most impactful issue is a JSON schema gap that causes keepaliveInterval to be rejected when supplied via the JSON stdin format, even though it is a valid field per the spec and the Go implementation already supports it.
Important Issues (SHOULD / behavioral impact)
1. keepaliveInterval Missing from the Embedded JSON Schema
keepaliveInterval MUST be an integer when present. Any positive integer sets the keepalive interval in seconds.
Current State:
StdinGatewayConfig in internal/config/config_stdin.go:40 correctly has a KeepaliveInterval *int field.
The embedded JSON schema (internal/config/schema/mcp-gateway-config.schema.json) defines gatewayConfig with "additionalProperties": false.
keepaliveInterval is not listed in gatewayConfig.properties in the schema.
The fixSchemaBytes function in internal/config/validation_schema.go does add trustedBots dynamically, but does not add keepaliveInterval.
Gap:
When a user provides keepaliveInterval in a JSON stdin config, the schema validation step (validateJSONSchema in validation_schema.go:344) will reject it as an unknown field (because additionalProperties: false), even though the Go runtime supports it and the spec defines it as valid.
internal/config/validation_schema.go:185-210 — fixSchemaBytes adds trustedBots but not keepaliveInterval
internal/config/validation_schema.go:344-370 — validateJSONSchema enforces the schema
Suggested Fix:
Add keepaliveInterval to the embedded schema (or add it dynamically in fixSchemaBytes, as was done for trustedBots):
// In fixSchemaBytes, after adding trustedBots:props["keepaliveInterval"] =map[string]interface{}{
"type": "integer",
"description": "Keepalive ping interval in seconds for HTTP MCP backends. Use -1 to disable, 0 or unset for gateway default (1500s), or a positive integer for custom interval.",
}
2. payloadSizeThreshold in JSON Schema but Missing from StdinGatewayConfig
A user providing payloadSizeThreshold in JSON stdin config will:
Pass schema validation (field is in schema) — no error
Have the value silently ignored — it's never applied to GatewayConfig.PayloadSizeThreshold
The field is only configurable via TOML (payload_size_threshold), CLI flag (--payload-size-threshold), and environment variable (MCP_GATEWAY_PAYLOAD_SIZE_THRESHOLD). The JSON stdin format does not actually support it despite the spec listing it as a gateway config field.
Severity: Important — Schema claims to accept the field but silently ignores the value.
Threshold MUST be a positive integer representing bytes.
Current State:
GatewayConfig.PayloadSizeThreshold int in config_core.go:112 — typed as int (no sign constraint)
config_payload.go:25-26 only replaces 0 with the default; negative values are not caught
The TOML validation path (config_core.go:330-390) does not call validateGatewayConfig
Gap:
A TOML config with payload_size_threshold = -1 would pass all validation and silently use a nonsensical negative threshold (all payloads would exceed it, triggering disk storage for everything).
Severity: Minor — Edge case, but spec says MUST be positive.
File References:
internal/config/config_payload.go:25-26 — zero-check but no negative-check
internal/config/config_core.go:330-390 — TOML validation path (no PayloadSizeThreshold check)
Suggested Fix:
Add explicit validation in the TOML path:
// In ParseConfig (config_core.go), after applyDefaults:ifcfg.Gateway.PayloadSizeThreshold<0 {
returnnil, fmt.Errorf("gateway.payload_size_threshold must be a positive integer, got %d (spec §4.1.3.3)", cfg.Gateway.PayloadSizeThreshold)
}
MCP Gateway Compliance Review — 2026-04-06
Daily compliance review against the MCP Gateway Specification v1.11.0.
Commit reviewed:
9bd6e5b— Update stale features.difc-proxy references in workflow promptsSummary
Found 3 compliance issues across 2 spec sections during today's review. The most impactful issue is a JSON schema gap that causes
keepaliveIntervalto be rejected when supplied via the JSON stdin format, even though it is a valid field per the spec and the Go implementation already supports it.Important Issues (SHOULD / behavioral impact)
1.
keepaliveIntervalMissing from the Embedded JSON SchemaSpecification Section: §4.1.3.5 — Keepalive Interval Configuration
Deep Link: https://github.com/github/gh-aw/blob/main/docs/src/content/docs/reference/mcp-gateway.md#4135-keepalive-interval-configuration
Requirement:
Current State:
StdinGatewayConfigininternal/config/config_stdin.go:40correctly has aKeepaliveInterval *intfield.internal/config/schema/mcp-gateway-config.schema.json) definesgatewayConfigwith"additionalProperties": false.keepaliveIntervalis not listed ingatewayConfig.propertiesin the schema.fixSchemaBytesfunction ininternal/config/validation_schema.godoes addtrustedBotsdynamically, but does not addkeepaliveInterval.Gap:
When a user provides
keepaliveIntervalin a JSON stdin config, the schema validation step (validateJSONSchemainvalidation_schema.go:344) will reject it as an unknown field (becauseadditionalProperties: false), even though the Go runtime supports it and the spec defines it as valid.{ "gateway": { "port": 8080, "domain": "localhost", "apiKey": "...", "keepaliveInterval": 300 // ← schema validation FAILS here } }Severity: Important — Users cannot use a documented spec feature via JSON stdin.
File References:
internal/config/config_stdin.go:40—KeepaliveInterval *intfield exists in Go structinternal/config/schema/mcp-gateway-config.schema.json— schema missingkeepaliveIntervalinternal/config/validation_schema.go:185-210—fixSchemaBytesaddstrustedBotsbut notkeepaliveIntervalinternal/config/validation_schema.go:344-370—validateJSONSchemaenforces the schemaSuggested Fix:
Add
keepaliveIntervalto the embedded schema (or add it dynamically infixSchemaBytes, as was done fortrustedBots):2.
payloadSizeThresholdin JSON Schema but Missing fromStdinGatewayConfigSpecification Section: §4.1.3.3 — Payload Size Threshold
Deep Link: https://github.com/github/gh-aw/blob/main/docs/src/content/docs/reference/mcp-gateway.md#4133-payload-size-threshold
Requirement:
Current State:
payloadSizeThresholdundergatewayConfig.propertieswith"type": "integer", "minimum": 1.StdinGatewayConfigininternal/config/config_stdin.godoes not have aPayloadSizeThresholdfield.Gap:
A user providing
payloadSizeThresholdin JSON stdin config will:GatewayConfig.PayloadSizeThresholdThe field is only configurable via TOML (
payload_size_threshold), CLI flag (--payload-size-threshold), and environment variable (MCP_GATEWAY_PAYLOAD_SIZE_THRESHOLD). The JSON stdin format does not actually support it despite the spec listing it as a gateway config field.Severity: Important — Schema claims to accept the field but silently ignores the value.
File References:
internal/config/config_stdin.go:33-43—StdinGatewayConfigstruct (missingPayloadSizeThreshold)internal/config/schema/mcp-gateway-config.schema.json— schema definespayloadSizeThresholdinternal/config/config_stdin.go:280-320—StdinGatewayConfigconversion toGatewayConfig(noPayloadSizeThresholdmapping)Suggested Fix:
Add
PayloadSizeThreshold *inttoStdinGatewayConfigand wire it in the conversion:Minor Issues (MAY / best-practice)
3. TOML
payload_size_thresholdNot Validated as Positive IntegerSpecification Section: §4.1.3.3
Deep Link: https://github.com/github/gh-aw/blob/main/docs/src/content/docs/reference/mcp-gateway.md#4133-payload-size-threshold
Requirement:
Current State:
GatewayConfig.PayloadSizeThreshold intinconfig_core.go:112— typed asint(no sign constraint)config_payload.go:25-26only replaces0with the default; negative values are not caughtconfig_core.go:330-390) does not callvalidateGatewayConfigGap:
A TOML config with
payload_size_threshold = -1would pass all validation and silently use a nonsensical negative threshold (all payloads would exceed it, triggering disk storage for everything).Severity: Minor — Edge case, but spec says MUST be positive.
File References:
internal/config/config_payload.go:25-26— zero-check but no negative-checkinternal/config/config_core.go:330-390— TOML validation path (no PayloadSizeThreshold check)Suggested Fix:
Add explicit validation in the TOML path:
Compliance Status
Suggested Remediation Tasks
Task 1: Add
keepaliveIntervalto JSON schemaDescription: Either add
keepaliveIntervalto the embedded schema file, or register it dynamically infixSchemaBytes(the same approach used fortrustedBots).Files:
internal/config/schema/mcp-gateway-config.schema.json,internal/config/validation_schema.goSpecification Reference: https://github.com/github/gh-aw/blob/main/docs/src/content/docs/reference/mcp-gateway.md#4135-keepalive-interval-configuration
Estimated Effort: Small (1–2 hours)
Task 2: Add
PayloadSizeThresholdtoStdinGatewayConfigDescription: Add
PayloadSizeThreshold *inttoStdinGatewayConfigand wire it into theGatewayConfigconversion logic, with positive-integer validation.Files:
internal/config/config_stdin.go,internal/config/validation.goSpecification Reference: https://github.com/github/gh-aw/blob/main/docs/src/content/docs/reference/mcp-gateway.md#4133-payload-size-threshold
Estimated Effort: Small (2–3 hours)
Task 3: Validate
PayloadSizeThresholdin TOML pathDescription: Add a positive-integer check for
payload_size_thresholdin the TOML config validation path.Files:
internal/config/config_core.goorinternal/config/config_payload.goSpecification Reference: https://github.com/github/gh-aw/blob/main/docs/src/content/docs/reference/mcp-gateway.md#4133-payload-size-threshold
Estimated Effort: Trivial (< 1 hour)
References
9bd6e5b— Update stale features.difc-proxy references in workflow promptsNote
🔒 Integrity filter blocked 1 item
The following item were blocked because they don't meet the GitHub integrity level.
get_file_contents: has lower integrity than agent requires. The agent cannot read data with integrity below "unapproved".To allow these resources, lower
min-integrityin your GitHub frontmatter: