Releases: github/gh-aw-mcpg
v0.2.20
π Release Highlights
This release focuses on reliability, security, and observability β introducing a rate-limit circuit breaker for backend resilience, expanded guard coverage for MCP tool mutations, and improved OpenTelemetry tracing.
β¨ What's New
-
π Rate-Limit Circuit Breaker (#3799) β MCP Gateway now automatically trips a circuit breaker when GitHub MCP backend tool calls encounter rate limits. This prevents cascading failures and ensures smoother degradation under load, with automatic recovery when the upstream rate limit resets.
-
π‘ Enhanced OpenTelemetry Tracing (#3857) β OTel spans now include richer resource attributes, standardized HTTP semconv attributes (method, path, status code), and cached tracer lookups β giving you better observability into request flows with less overhead.
-
π‘οΈ Expanded Guard Coverage (#3860) β 21 granular GitHub MCP server mutation tools are now classified with precise DIFC labels, improving security posture for deployments using tool-level access controls. Deprecated tool aliases and
enable_toolsetDIFC rules are also now properly enforced (#3762). -
π Collaborator Permission Fallback (#3831) β Response-level integrity functions now fall back to collaborator permissions when direct permission data is unavailable, ensuring more accurate integrity labeling across a broader range of repository access patterns.
π Bug Fixes & Improvements
-
HTTP backend connect timeout increased to 30s (#3782) β The default connect timeout for HTTP backends has been raised from 5s to 30s and is now configurable, reducing spurious timeouts for slow-starting backend servers.
-
ValidatorClient pagination & LRU cache fix (#3789) β Fixed pagination handling in ValidatorClient and corrected LRU eviction behavior in
filteredServerCache, preventing stale tool-list entries from affecting guard evaluation. -
WASM guard shutdown leak fixed (#3790) β Resolved a resource leak in wazero guard shutdown, fixed logging namespace alignment, and improved typed trap detection for more reliable guard lifecycle management.
π Documentation
GITHUB_MCP_SERVER_TOKENdocumented with correct priority order (#3761) β The token resolution order (GITHUB_MCP_SERVER_TOKENβGITHUB_TOKENβGITHUB_PERSONAL_ACCESS_TOKENβGH_TOKEN) is now accurately documented. See the Environment Variables guide for details.
π³ Docker Image
The Docker image for this release is available at:
docker pull ghcr.io/github/gh-aw-mcpg:v0.2.20
# or
docker pull ghcr.io/github/gh-aw-mcpg:latestSupported platforms: linux/amd64, linux/arm64
For complete details, see the full release notes.
Generated by Release Β· β 161.4K
What's Changed
- [log] Add debug logging to config_env.go gateway env functions by @github-actions[bot] in #3630
- [test-improver] Improve tests for strutil.RandomHex by @github-actions[bot] in #3636
- [test] Add tests for config.validateGatewayConfig and validateTrustedBots by @github-actions[bot] in #3637
- [log] Add debug logging to GitHub token/URL resolution in envutil by @github-actions[bot] in #3684
- [test-improver] Improve tests for httputil package by @github-actions[bot] in #3693
- [test] Add tests for cmd.registerAllFlags, registerFlagCompletions, and OTLP flag defaults by @github-actions[bot] in #3694
- [log] Add debug logging to guard policy JSON unmarshaling by @github-actions[bot] in #3733
- [test-improver] Improve tests for logger startup package by @github-actions[bot] in #3742
- [Repo Assist] refactor: replace inline truncation with strutil/sanitize utilities by @github-actions[bot] in #3750
- docs: document GITHUB_MCP_SERVER_TOKEN and fix token priority order by @lpcox in #3761
- fix(guard): cover deprecated tool aliases, enable_toolset DIFC rule, and pre-emptive CLI entries by @lpcox in #3762
- refactor(config): extract shared validateServerAuth to deduplicate auth validation by @lpcox in #3764
- refactor: deduplicate logger mutex and withLock via lockable embedding by @lpcox in #3766
- logger: address CloseAllLoggers review comments β doc fix + tests by @Copilot in #3770
- Add stdin-path test coverage for stdio server auth validation by @Copilot in #3769
- fix(guard): add enable_toolset DIFC unit test + backport coverage changes from #3762 by @Copilot in #3768
- fix: update auth validation test assertions to match new error format by @lpcox in #3778
- fix: increase HTTP backend connect timeout from 5s to 30s and make configurable by @lpcox in #3782
- rust-guard: deduplicate search-query-fallback blocks and merge blocked-tool match arms by @Copilot in #3791
- fix: ValidatorClient pagination, logger, and filteredServerCache LRU eviction by @Copilot in #3789
- wazero: fix guard shutdown leak, logging namespace, and typed trap detection by @Copilot in #3790
- Rate-limit circuit breaker for GitHub MCP backend tool calls by @Copilot in #3799
- chore: upgrade gh-aw to v0.68.2 by @lpcox in #3811
- π chore: update schema URL to v0.68.3 by @github-actions[bot] in #3842
- [Repo Assist] refactor(mcp): extract logInboundRPCResponse helper in connection.go by @github-actions[bot] in #3847
- fix: remove restrictive bash allowlist from go-logger workflow by @lpcox in #3864
- docs: fix 4 documentation discrepancies from nightly reconciliation by @Copilot in #3859
- feat(tracing): OTel resource enrichment, semconv HTTP attributes, cached tracers by @Copilot in #3857
- rust-guard: merge duplicate search_issues/search_pull_requests arms; narrow labels pub use by @Copilot in #3858
- fix: add github/gh-aw to log analyzer allowed-repos by @lpcox in #3866
- Guard coverage: classify 21 granular github-mcp-server mutation tools by @Copilot in #3860
- Add collaborator permission fallback to response-level integrity functions by @dsyme in #3831
- [test] Add tests for cmd.newProxyCmd and cmd.detectGuardWasm by @github-actions[bot] in #3839
- [test-improver] Improve tests for server/circuit_breaker by @github-actions[bot] in #3837
- [log] log(envutil): add debug logging to env var parse fallbacks by @github-actions[bot] in #3825
- fix: remove restrictive bash allowlist from test-improver workflow by @lpcox in #3887
- refactor: extract logOutboundRPCRequest helper; complete flags.go env-var table by @Copilot in #3888
- Enable cli-proxy in Copilot agent workflows to stop gh CLI bypassing MCP Gateway by @Copilot in #3893
- refactor: eliminate three near-duplicate/outlier functions flagged by semantic analysis by @Copilot in #3897
- refactor(cmd): inline trivial getDefault* env-wrapper functions by @Copilot in #3894
New Contributors
Full Changelog: v0.2.19...v0.2.20
v0.2.19
π Release Highlights
This release delivers a critical stability fix for the WASM security guard alongside internal code quality improvements that keep the codebase lean and efficient.
π Bug Fixes & Improvements
- Critical: WASM guard session poisoning on multi-byte UTF-8 content (#3713) β The WASM guard could panic when a tool response preview contained multi-byte UTF-8 characters (CJK text, emoji, accented characters). A byte-index slice across a character boundary triggered a Rust panic that became a WASM trap, permanently poisoning the guard instance and causing all subsequent MCP calls to fail with "WASM guard is unavailable after a previous trap". Fixed by using
str::floor_char_boundary()for safe UTF-8-aware truncation at all three preview sites. Discovered in a real-world workflow processing Chinese-language content.
π§ Internal Improvements
- Reduced redundant WASM allocations (#3710) β Eliminated a duplicate
extract_repo_infoJSON parse in theget_file_contentsarm of the Rust guard, matching the pattern used by every other arm and reducing unnecessary allocations in the WASM runtime. - Dead code removal (#3701) β Removed an unreachable match arm in
collaborator_permission_floorand an unusedMEDIUM_BUFFER_SIZEre-export, eliminating a lint suppression in the process.
π³ Docker Image
The Docker image for this release is available at:
docker pull ghcr.io/github/gh-aw-mcpg:v0.2.19
# or
docker pull ghcr.io/github/gh-aw-mcpg:latestSupported platforms: linux/amd64, linux/arm64
For complete details, see the full release notes.
Generated by Release Β· β 156.6K
What's Changed
- [Repo Assist] fix(rust-guard): remove redundant match arm and unused MEDIUM_BUFFER_SIZE re-export by @github-actions[bot] in #3701
- rust-guard: make LogLevel private and deduplicate extract_repo_info call by @Copilot in #3710
- fix(guard): use UTF-8 safe string truncation in output preview logging by @lpcox in #3713
Full Changelog: v0.2.18...v0.2.19
v0.2.18
π Release Highlights
This release focuses on security hardening, improved observability, and code quality improvements β with a notable new DIFC integrity feature, more flexible tool filtering, and tighter spec compliance across the gateway.
β¨ What's New
-
Maintainer reaction endorsement for integrity promotion/demotion (#3666): Maintainers can now explicitly endorse or demote content integrity via reactions, giving fine-grained control over DIFC labeling decisions. See the Guard Response Labeling docs for details.
-
Wildcard
["*"]support in allowed-tools filtering (#3445): Configureallowed-tools: ["*"]to permit all tools from a server without enumerating them individually β simplifying configs for permissive backends. -
OIDC fail-fast validation for TOML configs (#3538): OIDC misconfiguration is now caught at startup for TOML-configured servers, preventing silent failures at request time.
-
DIFC labeling for
create_pull_request_with_copilot(#3651): The Copilot PR creation tool now receives correct DIFC integrity labels, ensuring policy enforcement applies consistently. -
Expanded guard coverage for CLI write operations (#3609): Three previously uncovered CLI write operations are now pre-emptively included in
WRITE_OPERATIONS, closing potential gaps in write-op integrity classification.
π Bug Fixes & Improvements
-
Gateway timeout defaults aligned with spec Β§4.1.3 (#3592): Startup and tool timeout defaults now match spec-mandated values; example config and docs corrected to match (#3652).
-
HTTP connection errors now visible to operators (#3514): HTTP-level connection errors are logged to stderr, making network issues easier to diagnose in production.
-
WriteJSONResponsetrailing newline eliminated (#3466): JSON responses now usejson.Marshalinstead of the encoder, removing an extraneous trailing newline that could affect downstream parsers. -
gojq module security & compatibility fixes (#3451): Permissions, import collision, and module naming issues in the gojq dependency resolved, plus version upgrade.
-
go-sdk upgraded to v1.5.0 (#3610): Brings latest MCP SDK improvements and addresses items from go-fan review.
π Documentation
keepalive_intervalandopentelemetryconfig fields documented (#3457): Both fields are now covered in the Configuration docs with correct defaults and usage guidance.
π³ Docker Image
The Docker image for this release is available at:
docker pull ghcr.io/github/gh-aw-mcpg:v0.2.18
# or
docker pull ghcr.io/github/gh-aw-mcpg:latestSupported platforms: linux/amd64, linux/arm64
For complete details, see the full release notes.
Generated by Release Β· β 161.5K
What's Changed
- π chore: update schema URL to v0.67.3 by @github-actions[bot] in #3430
- [Repo Assist] refactor(proxy): use httputil.WriteJSONResponse for filtered/empty JSON writes by @github-actions[bot] in #3437
- [Repo Assist] refactor(logger): add InitGatewayLoggers and InitProxyLoggers helpers by @github-actions[bot] in #3438
- ci: add Rust guard unit tests to CI pipeline by @Copilot in #3396
- chore: increase daily-compliance-checker timeout to 45 minutes by @lpcox in #3453
- chore: increase nightly-docs-reconciler timeout to 45 minutes by @lpcox in #3456
- docs: document keepalive_interval and opentelemetry config fields by @lpcox in #3457
- Support wildcard
["*"]in allowed-tools filtering by @Copilot in #3445 - Deduplicate auth scheme parsing and random hex generation by @Copilot in #3450
- fix: gojq module review β permissions, collision, rename, upgrade by @Copilot in #3451
- fix: use json.Marshal in WriteJSONResponse to avoid trailing newline by @lpcox in #3466
- fix: restore method-style log prefix in listMCPItems by @Copilot in #3471
- refactor: extract generic listMCPItems helper for list* MCP operations by @lpcox in #3470
- chore: upgrade all workflows from v0.67.0 to v0.68.0 by @lpcox in #3504
- Deduplicate error CallToolResult construction, GitHub token and API URL lookups by @Copilot in #3507
- Fix: log HTTP connection errors to stderr for operator visibility by @Copilot in #3514
- Consolidate dual logging in server package to internal logger by @Copilot in #3510
- Fix integration tests broken by logging consolidation by @lpcox in #3516
- Deduplicate startup logging in cmd/root.go via logger helpers by @Copilot in #3515
- Consolidate duplicate container detection into sys.DetectContainerID by @Copilot in #3522
- Deduplicate OIDC missing env-var error message into shared helper by @Copilot in #3526
- go-sdk review: schema bypass canary test, ServerInfo logging, doc comments by @Copilot in #3531
- Fix rust-guard-test: remove unused is_update_operation and is_create_operation by @Copilot in #3536
- Reduce duplication in write-op integrity classification and MinIntegrity conversion by @Copilot in #3534
- Add OIDC fail-fast validation to TOML config path by @Copilot in #3538
- π Update schema URL to v0.68.1 by @github-actions[bot] in #3570
- Disable threat-detection in all workflows by @lpcox in #3583
- [Repo Assist] refactor: add strutil.TruncateRunes and remove lookupEnrichmentToken alias by @github-actions[bot] in #3574
- Fix lint: update test for removed lookupEnrichmentToken by @lpcox in #3586
- Rename TestLookupEnrichmentToken β TestLookupGitHubToken and wire to envutil by @Copilot in #3587
- fix: align gateway timeout defaults with spec Β§4.1.3 by @Copilot in #3592
- [log] config: migrate logConfig from legacy log.New to project debug logger by @github-actions[bot] in #3372
- [test-improver] Improve tests for config/validation_schema package by @github-actions[bot] in #3380
- [test] Add tests for logger.SlogHandler.Handle and related functions by @github-actions[bot] in #3381
- [log] Add debug logging to unified server utility functions by @github-actions[bot] in #3418
- [test] Add tests for logger.ToolsLogger.writeToFile and LogToolsForServer by @github-actions[bot] in #3427
- [test] Add tests for config.isDynamicTOMLPath and proxy.truncateForLog by @github-actions[bot] in #3500
- [test-improver] Improve tests for envutil package by @github-actions[bot] in #3566
- [test] Add tests for HTTPKeepaliveInterval, EnsureGatewayDefaults, SetDebug, and logger init functions by @github-actions[bot] in #3567
- Add pre-emptive guard entries for 3 CLI write operations missing from WRITE_OPERATIONS by @Copilot in #3609
- chore: upgrade go-sdk to v1.5.0 and address go-fan review items by @Copilot in #3610
- [Repo Assist] fix: remove redundant log.Printf calls from connection.go by @github-actions[bot] in #3640
- Fix incorrect default values in docs and example config for startup/tool timeouts and domain by @Copilot in #3652
- fix(rust-guard): remove redundant match arm in
author_association_floor_from_strby @Copilot in #3654 - Add DIFC labeling rule for
create_pull_request_with_copilotby @Copilot in #3651 - refactor: deduplicate reconnect telemetry and SSE deprecation logging in connection.go by @Copilot in...
v0.2.17
π Release Highlights
This release brings container image flexibility, improved configuration validation, and several reliability fixes β making MCP Gateway more robust for production deployments.
β¨ What's New
-
SHA-256 digest support in container image references (#3352) β Container images can now be pinned by digest (e.g.,
image@sha256:β¦), enabling immutable, verifiable deployments. This is especially valuable in security-sensitive environments where image tags alone are insufficient. -
Fail-fast OIDC environment variable validation (#3367) β Invalid or missing OIDC configuration is now detected at startup rather than at runtime, surfacing misconfigurations immediately and preventing hard-to-diagnose failures later. See the Configuration Guide for details.
-
OTLP headers now accept string format per spec v1.13.0 (#3338) β OpenTelemetry header configuration is now fully compliant with OTLP spec v1.13.0, improving interoperability with observability backends.
π Bug Fixes & Improvements
-
GraphQL
authorAssociationinjection fix (#3413) β Resolved incorrect field injection intoUser-type nodes in GraphQL responses, preventing malformed responses. Also adds proper 503 logging when policy is missing. -
Rust guard case-insensitive comparison fix (#3325) β Replaced
to_lowercase()witheq_ignore_ascii_case()in the Rust guard for more correct and efficient string comparisons. -
Proxy handler lint fixes (#3415) β Non-constant format strings in the proxy handler have been corrected, improving code correctness and eliminating potential formatting issues.
π³ Docker Image
The Docker image for this release is available at:
docker pull ghcr.io/github/gh-aw-mcpg:v0.2.17
# or
docker pull ghcr.io/github/gh-aw-mcpg:latestSupported platforms: linux/amd64, linux/arm64
For complete details, see the full release notes.
Generated by Release Β· β 107.4K
What's Changed
- Update OTLP headers to accept string format (spec v1.13.0) by @Copilot in #3338
- [Repo Assist] fix(rust-guard): replace to_lowercase() with eq_ignore_ascii_case, remove stale dead_code by @github-actions[bot] in #3325
- [test] Add tests for server.peekRequestBody and config.isTransientHTTPError by @github-actions[bot] in #3317
- [log] Add debug logging to GraphQL owner/repo and search query extraction by @github-actions[bot] in #3308
- [test-improver] Improve tests for mcp/connection package by @github-actions[bot] in #3316
- Allow SHA-256 digests in container image references by @Copilot in #3352
- Fail-fast OIDC env var validation at config load time by @Copilot in #3367
- π Update schema URL to v0.67.2 by @github-actions[bot] in #3384
- Fix non-constant format string lint errors in proxy handler by @Copilot in #3415
- Fix GraphQL authorAssociation injection into User-type nodes; log 503 on missing policy by @Copilot in #3413
Full Changelog: v0.2.16...v0.2.17
v0.2.16
π Release Highlights
This release closes a security gap in allowed-tools enforcement and updates the schema validation baseline to gh-aw v0.67.1.
π Security Fix: Server-Side Allowed-Tools Enforcement
Previously, the tools allow-list in your server config was parsed but never enforced at runtime β a client with raw HTTP access could bypass it by sending tools/call requests directly for tools that should be restricted.
What changed:
tools/callenforcement: Blocked tools are now rejected with a descriptive error (IsError: true) before any backend request is made. A 403 OTEL span status is set and aWARNlog is emitted.tools/listdefense-in-depth: Non-allowed tools are filtered out during backend registration β they never appear intools/listresponses and are never registered with the SDK server.- O(1) lookup: Allowed-tool sets are pre-computed at startup (
buildAllowedToolSets), adding no per-request overhead.
No config changes required. When tools is absent or empty, all tools remain accessible β existing configurations are unaffected.
Example allow-list config:
{
"mcpServers": {
"github": {
"type": "stdio",
"container": "ghcr.io/github/github-mcp-server:latest",
"tools": ["search_code", "get_file_contents", "list_issues"]
}
}
}See the Configuration Guide for full server config options.
π§ Maintenance
- Updated MCP Gateway JSON schema validation URL to gh-aw v0.67.1 for reproducible, deterministic configuration validation.
π³ Docker Image
The Docker image for this release is available at:
docker pull ghcr.io/github/gh-aw-mcpg:v0.2.16
# or
docker pull ghcr.io/github/gh-aw-mcpg:latestSupported platforms: linux/amd64, linux/arm64
For complete details, see the full release notes.
Generated by Release Β· β 150.6K
What's Changed
- Gateway: enforce allowed-tools filtering server-side on tools/list and tools/call by @Copilot in #3334
- Gateway: enforce allowed-tools filtering server-side on tools/list and tools/call by @Copilot in #3333
- π chore: update schema URL to gh-aw v0.67.1 by @github-actions[bot] in #3318
Full Changelog: v0.2.15...v0.2.16
v0.2.15
π Release Highlights
This release focuses on reliability and correctness β fixing critical build and configuration bugs, hardening the Go SDK layer, and improving documentation coverage for OpenTelemetry tracing.
π Bug Fixes & Improvements
- Docker build fix (#3294): Resolved a "no space left on device" error that could cause Docker image builds to fail intermittently.
- Search query encoding (#3235): Fixed URL encoding of query parameters in
search_repositoriescalls, ensuring searches with special characters return correct results. - Config wiring fix (#3281):
payloadSizeThresholdis now correctly applied when using JSON stdin configuration. ThekeepaliveIntervalfield was also added to the config schema.
β‘ Reliability
- Bounded tool cache (#3231): The
filteredServerCachenow has a size cap to prevent unbounded memory growth during long-running sessions.ParseToolArgumentswas standardized across the SDK and theAddToolbypass path was deduplicated. - Pagination guard (#3289): Added a page-limit guard to
paginateAllto prevent runaway pagination from consuming excessive resources. - rust-guard performance (#3290): Removed dead code and eliminated unnecessary
format!allocations in the security guard'scheck_file_secrecypath.
π Documentation
- OpenTelemetry environment variables (#3232): The
test-raceMake target and all OpenTelemetry-related environment variables are now documented. Seedocs/ENVIRONMENT_VARIABLES.mdfor the full reference. - Tracing architecture (#3288):
CONTRIBUTING.mdnow covers theinternal/tracing/package and OpenTelemetry integration patterns.
π³ Docker Image
The Docker image for this release is available at:
docker pull ghcr.io/github/gh-aw-mcpg:v0.2.15
# or
docker pull ghcr.io/github/gh-aw-mcpg:latestSupported platforms: linux/amd64, linux/arm64
For complete details, see the full release notes.
Generated by Release Β· β 147.2K
What's Changed
- π chore: update schema URL to v0.67.0 by @github-actions[bot] in #3214
- [Repo Assist] refactor(envutil): move ExpandEnvArgs from config to envutil by @github-actions[bot] in #3217
- [test] Add tests for proxy.restBackendCaller.CallTool by @github-actions[bot] in #3213
- [test-improver] Improve tests for server http_helpers package by @github-actions[bot] in #3212
- [log] Add debug logging to tracing/http.go WrapHTTPHandler by @github-actions[bot] in #3206
- [test] Add tests for logger.ServerFileLogger.Close by @github-actions[bot] in #3159
- [test-improver] Improve tests for guard Registry.HasNonNoopGuard by @github-actions[bot] in #3158
- [log] debug: add intermediate logging to GenerateSelfSignedTLS in proxy/tls.go by @github-actions[bot] in #3154
- [test] Add tests for proxy.MatchRoute uncovered route patterns by @github-actions[bot] in #3115
- [test-improver] Improve tests for logger common package by @github-actions[bot] in #3114
- Fix search_repositories query parameter URL encoding by @lpcox in #3235
- go-sdk: deduplicate AddTool bypass, standardize ParseToolArguments, cap filteredServerCache size by @Copilot in #3231
- refactor: eliminate 3 duplicate code patterns across launcher and server packages by @Copilot in #3234
- Document test-race Make target and OpenTelemetry env vars by @Copilot in #3232
- Add PRIVATE_BASE constant and deduplicate GraphQL traversal in rust-guard by @Copilot in #3233
- Upgrade workflows from gh-aw v0.65.3 to v0.67.0 by @lpcox in #3257
- Update stale features.difc-proxy references in workflow prompts by @lpcox in #3260
- [Repo Assist] fix(config): wire payloadSizeThreshold in JSON stdin + add keepaliveInterval to schema by @github-actions[bot] in #3281
- [test] Add tests for proxy.deriveAPIFromServerURL and proxy.DeriveGitHubAPIURL by @github-actions[bot] in #3274
- [test-improver] Improve tests for server hasServerGuardPolicies by @github-actions[bot] in #3273
- [log] log: add debug logging to health monitor by @github-actions[bot] in #3265
- docs: add internal/tracing/ and OpenTelemetry to CONTRIBUTING.md by @Copilot in #3288
- go-sdk review: paginateAll page-limit guard, test server logger, handler convention docs by @Copilot in #3289
- [rust-guard] Remove dead
is_bot+ eliminateformat!allocation incheck_file_secrecyby @Copilot in #3290 - fix: Docker build fails with no space left on device by @lpcox in #3294
Full Changelog: v0.2.14...v0.2.15
v0.2.14
π Release Highlights
This release brings observability improvements with spec-compliant OpenTelemetry tracing and a longer default session timeout for better user experience in long-running agentic workflows.
β¨ What's New
-
OpenTelemetry OTLP Tracing (#3188)
MCP Gateway now supports OpenTelemetry OTLP tracing as defined in spec Β§4.1.3.6 (v1.11.0). Configure a tracing endpoint via theopentelemetryTOML key to export distributed traces from MCP tool calls β ideal for monitoring agent workflows and diagnosing latency issues. See the Configuration Guide for setup details. -
Extended Default Session Timeout (#3201)
The defaultMCP_GATEWAY_SESSION_TIMEOUTfor unified/mcpsessions has been raised from 2 hours to 6 hours, reducing unexpected session expiration in long-running agentic workflows without requiring manual configuration. See the Environment Variables reference to customize this value.
π³ Docker Image
The Docker image for this release is available at:
docker pull ghcr.io/github/gh-aw-mcpg:v0.2.14
# or
docker pull ghcr.io/github/gh-aw-mcpg:latestSupported platforms: linux/amd64, linux/arm64
For complete details, see the full release notes.
Generated by Release
What's Changed
- feat: Support spec v1.11.0 β OpenTelemetry OTLP tracing configuration (Β§4.1.3.6) by @Copilot in #3188
- feat: raise default MCP_GATEWAY_SESSION_TIMEOUT from 2h to 6h by @Copilot in #3201
Full Changelog: v0.2.13...v0.2.14
v0.2.13
π Release Highlights
This release brings observability, configurable session management, and meaningful compliance and security improvements to MCP Gateway.
β¨ What's New
OpenTelemetry Tracing (#3178)
MCP Gateway now exports traces via OpenTelemetry OTLP, giving operators end-to-end visibility into request flows through the proxy and backend MCP servers. This makes it significantly easier to diagnose latency and pinpoint failures in production environments.
Configurable Session Timeout (#3068, #3153)
The MCP_GATEWAY_SESSION_TIMEOUT environment variable now controls the session timeout for unified mode (/mcp) stateful sessions (default: 2h). Previously this was hardcoded. See the documentation for configuration details.
π Security & Compliance
- Stricter auth validation (#3097): Malformed
Authorizationheaders now correctly return HTTP 400. Unknown fields in TOML configuration are rejected at startup, and API keys are now randomly generated β closing several compliance gaps. - Direct API bypass detection (#3134): The integrity audit now detects when agents attempt to call GitHub APIs directly, bypassing the gateway's routing constraint. A reusable MCP routing constraint has been added to enforce correct traffic flow.
- Expanded guard coverage (#3095, #3139): Five workflow run cancel/rerun operations are now guarded pre-emptively, and
create_agent_taskis correctly classified as a read-write blocked operation.
π Bug Fixes
- Resolved duplicate test declarations in the server package that caused build failures (#3098).
π Documentation
MCP_GATEWAY_SESSION_TIMEOUTis now fully documented, including supported duration formats and behavioral differences between routed and unified modes (#3153).
π³ Docker Image
The Docker image for this release is available at:
docker pull ghcr.io/github/gh-aw-mcpg:v0.2.13
# or
docker pull ghcr.io/github/gh-aw-mcpg:latestSupported platforms: linux/amd64, linux/arm64
For complete details, see the full release notes.
Generated by Release
What's Changed
- [Repo Assist] feat(envutil): add GetEnvDuration + configurable MCP_GATEWAY_SESSION_TIMEOUT by @github-actions[bot] in #3068
- [Repo Assist] refactor(proxy): extract writeDIFCForbidden helper by @github-actions[bot] in #3067
- [log] refactor(difc): consolidate agent.go logging to use internal debug logger by @github-actions[bot] in #2982
- [test-improver] Improve tests for server session package by @github-actions[bot] in #2989
- [test-improver] Improve tests for logger/markdown_logger package by @github-actions[bot] in #3058
- [test] Add tests for proxy.handleWithDIFC uncovered branches by @github-actions[bot] in #3059
- Add pre-emptive guard coverage for 5 workflow run cancel/rerun operations by @Copilot in #3095
- fix: resolve duplicate test declarations in server package by @lpcox in #3098
- [log] Add debug logging to internal/difc/resource.go by @github-actions[bot] in #3099
- [rust-guard] Move test-only function out of production code; add missing field_names constants by @Copilot in #3096
- fix: compliance gaps β HTTP 400 for malformed auth headers, reject unknown TOML fields, random API key generation by @Copilot in #3097
- π chore: update schema URL to v0.65.6 by @github-actions[bot] in #3118
- [Repo Assist] refactor(server): move logRuntimeError from auth.go to http_helpers.go by @github-actions[bot] in #3119
- W-1: Detect direct API bypass in integrity audit + add reusable MCP routing constraint by @Copilot in #3134
- Guard coverage: classify
create_agent_taskas read-write and blocked by @Copilot in #3139 - π chore: update schema URL to v0.66.1 by @github-actions[bot] in #3162
- feat: OpenTelemetry OTLP trace export from MCP Gateway and proxy by @Copilot in #3178
- [Repo Assist] refactor(auth): move generateRandomAPIKey to internal/auth package by @github-actions[bot] in #3163
- [Repo Assist] build: add test-race Makefile target for race condition detection by @github-actions[bot] in #3164
- docs: document MCP_GATEWAY_SESSION_TIMEOUT environment variable by @Copilot in #3153
Full Changelog: v0.2.12...v0.2.13
v0.2.12
π Release Highlights
This release focuses on reliability and observability β introducing automated health monitoring for backend MCP servers, improved documentation, and several quality-of-life fixes.
β¨ What's New
- Periodic Health Monitoring & Auto-Restart (#3022): MCP Gateway now continuously monitors backend MCP servers and automatically restarts them if they become unhealthy (per spec Β§8). This means fewer manual interventions when a backend server crashes or hangs β the gateway recovers on its own.
π Bug Fixes & Improvements
- Session Expiry During Long-Running Tasks (#3079): Fixed an issue where
safeoutputssessions could expire during extended agent task executions, causing failures near the end of long operations. - Firewall/API-Proxy Image Alignment (#3012): Corrected a version mismatch where firewall agent and API-proxy container images were pinned to an outdated version (
0.25.6), ensuring consistent behavior across all gateway components. - jq Middleware Improvements (#3026): Internal improvements to the jq payload processing middleware following a module review β improves correctness and maintainability of large payload handling.
π Documentation
- OIDC Auth & Advanced CLI Flags (#3017): New documentation covering OIDC authentication for HTTP backend servers and advanced CLI flag usage. See the Configuration Guide and Environment Variables Reference.
π³ Docker Image
The Docker image for this release is available at:
docker pull ghcr.io/github/gh-aw-mcpg:v0.2.12
# or
docker pull ghcr.io/github/gh-aw-mcpg:latestSupported platforms: linux/amd64, linux/arm64
For complete details, see the full release notes.
Generated by Release
What's Changed
- chore: Upgrade agentic workflows to gh-aw v0.65.3 by @lpcox in #3007
- fix: align firewall agent/api-proxy images to 0.25.6 by @lpcox in #3012
- π chore: update schema URL to v0.65.2 by @github-actions[bot] in #2991
- [Repo Assist] refactor(server): remove writeJSONResponse passthrough wrapper by @github-actions[bot] in #3001
- docs: document OIDC auth for HTTP servers and advanced CLI flags by @lpcox in #3017
- refactor: deduplicate search scope and author integrity in tool_rules.rs by @lpcox in #3019
- feat: periodic health monitoring and auto-restart for backend servers (spec Β§8) by @lpcox in #3022
- refactor: jq middleware improvements from gojq module review by @lpcox in #3026
- refactor: remove redundant config default fallbacks in server and launcher by @lpcox in #3032
- fix: prevent safeoutputs session expiry during long-running agent tasks by @Copilot in #3079
- π chore: update schema URL to v0.65.5 by @github-actions[bot] in #3060
Full Changelog: v0.2.11...v0.2.12
v0.2.11
π Release Highlights
This release focuses on reliability and performance improvements, including accurate health monitoring, faster WASM guard startup, and a self-contained config schema β plus an expanded test suite and numerous internal code quality improvements.
β¨ What's New
-
Embedded config schema (#2933): The MCP Gateway config JSON schema is now bundled directly into the binary via
go:embed, eliminating the dependency on the external schema URL. No internet access needed to validate your configuration. -
Debug logging for HTTP transport (#2906): Added a debug logger to the MCP HTTP transport layer, making it easier to trace request/response flows when troubleshooting backend connectivity issues.
π Bug Fixes & Improvements
- Accurate health endpoint (#2938): The
/healthendpoint now reports real server status and uptime rather than stale or approximate values β health checks and monitoring tools will reflect the true state of backend MCP servers.
β‘ Performance
- WASM guard startup time reduced (#2956): Added a wazero compilation cache for WASM security guards. Subsequent guard loads reuse compiled artifacts, significantly reducing startup overhead for deployments using WASM-based guards.
π Documentation
- Updated CONTRIBUTING.md (#2957): Added missing internal packages (
proxy,difc,syncutil) and documented proxy mode to help contributors navigate the codebase.
π³ Docker Image
The Docker image for this release is available at:
docker pull ghcr.io/github/gh-aw-mcpg:v0.2.11
# or
docker pull ghcr.io/github/gh-aw-mcpg:latestSupported platforms: linux/amd64, linux/arm64
For complete details, see the full release notes.
Generated by Release
What's Changed
- π chore: update schema URL to v0.65.0 by @github-actions[bot] in #2919
- Bundle MCP gateway config schema in binary via go:embed by @Copilot in #2933
- [Repo Assist] test(server): add direct unit tests for SessionIDFromContext and NewSession by @github-actions[bot] in #2893
- [log] mcp: add debug logger to http_transport.go by @github-actions[bot] in #2906
- [test-improver] Improve tests for logger/jsonl_logger package by @github-actions[bot] in #2915
- [test] Add tests for proxy.ServeHTTP, handleWithDIFC, passthrough, and forwardAndReadBody by @github-actions[bot] in #2916
- [Repo Assist] refactor(logger): eliminate withLock duplication across 4 logger types by @github-actions[bot] in #2920
- fix: track real server status and uptime in health endpoint by @Copilot in #2938
- refactor: deduplicate withLock() across logger types by @Copilot in #2939
- refactor: eliminate duplicate code patterns (logger + server) by @lpcox in #2950
- perf: add wazero compilation cache and wasm guard improvements by @lpcox in #2956
- docs: add missing packages and proxy mode to CONTRIBUTING.md by @lpcox in #2957
- refactor: Deduplicate integrity label builders in Rust guard by @lpcox in #2963
- refactor: Go SDK usage improvements from module review by @lpcox in #2967
Full Changelog: v0.2.10...v0.2.11