From bba77072e28f95d58d3015a71cf7a70eb6641244 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sun, 5 Apr 2026 03:01:35 +0000 Subject: [PATCH 1/2] Initial plan From d8fbff12c128e4dd8190c616baa505f23e9034cb Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sun, 5 Apr 2026 03:05:26 +0000 Subject: [PATCH 2/2] fix: change default MCP_GATEWAY_SESSION_TIMEOUT from 2h to 6h Agent-Logs-Url: https://github.com/github/gh-aw-mcpg/sessions/96d52d29-42d3-4e67-8fee-e216a40bfe62 Co-authored-by: lpcox <15877973+lpcox@users.noreply.github.com> --- AGENTS.md | 2 +- docs/ENVIRONMENT_VARIABLES.md | 2 +- internal/envutil/envutil_test.go | 8 ++++---- internal/server/transport.go | 2 +- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/AGENTS.md b/AGENTS.md index e743998e..6d17e551 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -376,7 +376,7 @@ DEBUG_COLORS=0 DEBUG=* ./awmg --config config.toml - `MCP_GATEWAY_PAYLOAD_DIR` - Large payload storage directory (sets default for `--payload-dir` flag, default: `/tmp/jq-payloads`) - `MCP_GATEWAY_PAYLOAD_PATH_PREFIX` - Path prefix for remapping payloadPath returned to clients (sets default for `--payload-path-prefix` flag, default: empty) - `MCP_GATEWAY_PAYLOAD_SIZE_THRESHOLD` - Size threshold in bytes for payload storage; payloads larger than this are stored to disk (sets default for `--payload-size-threshold` flag, default: `524288`) -- `MCP_GATEWAY_SESSION_TIMEOUT` - Session timeout for unified mode (`/mcp`) stateful sessions. Accepts Go duration strings (e.g., `30m`, `1h`, `2h30m`). Routed mode is unaffected (hardcoded 30 min). (default: `2h`) +- `MCP_GATEWAY_SESSION_TIMEOUT` - Session timeout for unified mode (`/mcp`) stateful sessions. Accepts Go duration strings (e.g., `30m`, `1h`, `2h30m`). Routed mode is unaffected (hardcoded 30 min). (default: `6h`) - `DOCKER_HOST` - Docker daemon socket path (default: `/var/run/docker.sock`) - `MCP_GATEWAY_GUARDS_SINK_SERVER_IDS` - Comma-separated server IDs whose RPC JSONL logs should include agent secrecy/integrity tag snapshots (sets default for `--guards-sink-server-ids`) - `MCP_GATEWAY_GUARDS_MODE` - Guards enforcement mode: `strict` (deny violations), `filter` (remove denied tools), `propagate` (auto-adjust agent labels) (sets default for `--guards-mode`, default: `strict`) diff --git a/docs/ENVIRONMENT_VARIABLES.md b/docs/ENVIRONMENT_VARIABLES.md index 255a7e1b..9303cc04 100644 --- a/docs/ENVIRONMENT_VARIABLES.md +++ b/docs/ENVIRONMENT_VARIABLES.md @@ -25,7 +25,7 @@ When running locally (`run.sh`), these variables are optional (warnings shown if | `MCP_GATEWAY_PAYLOAD_DIR` | Large payload storage directory (sets default for `--payload-dir` flag) | `/tmp/jq-payloads` | | `MCP_GATEWAY_PAYLOAD_PATH_PREFIX` | Path prefix for remapping payloadPath returned to clients (sets default for `--payload-path-prefix` flag) | (empty - use actual filesystem path) | | `MCP_GATEWAY_PAYLOAD_SIZE_THRESHOLD` | Size threshold in bytes for payload storage (sets default for `--payload-size-threshold` flag) | `524288` | -| `MCP_GATEWAY_SESSION_TIMEOUT` | Session timeout for unified mode (`/mcp`) stateful sessions. Accepts Go duration strings (e.g., `30m`, `1h`). Default is 2 hours to accommodate long-running agentic workflows. Routed mode is unaffected (hardcoded 30 min). | `2h` | +| `MCP_GATEWAY_SESSION_TIMEOUT` | Session timeout for unified mode (`/mcp`) stateful sessions. Accepts Go duration strings (e.g., `30m`, `1h`). Default is 6 hours to match the GitHub Actions default timeout. Routed mode is unaffected (hardcoded 30 min). | `6h` | | `MCP_GATEWAY_WASM_GUARDS_DIR` | Root directory for per-server WASM guards (`//*.wasm`, first match is loaded) | (disabled) | | `MCP_GATEWAY_GUARDS_MODE` | Guards enforcement mode: `strict` (deny violations), `filter` (remove denied tools), `propagate` (auto-adjust agent labels) (sets default for `--guards-mode`) | `strict` | | `MCP_GATEWAY_GUARDS_SINK_SERVER_IDS` | Comma-separated sink server IDs for JSONL guards tag enrichment (sets default for `--guards-sink-server-ids`) | (disabled) | diff --git a/internal/envutil/envutil_test.go b/internal/envutil/envutil_test.go index c1230d58..ed0cbebf 100644 --- a/internal/envutil/envutil_test.go +++ b/internal/envutil/envutil_test.go @@ -112,17 +112,17 @@ func TestGetEnvDurationRealWorldScenarios(t *testing.T) { defer os.Unsetenv("MCP_GATEWAY_SESSION_TIMEOUT") // Default case - result := GetEnvDuration("MCP_GATEWAY_SESSION_TIMEOUT", 2*time.Hour) - assert.Equal(t, 2*time.Hour, result) + result := GetEnvDuration("MCP_GATEWAY_SESSION_TIMEOUT", 6*time.Hour) + assert.Equal(t, 6*time.Hour, result) // Override with shorter timeout os.Setenv("MCP_GATEWAY_SESSION_TIMEOUT", "30m") - result = GetEnvDuration("MCP_GATEWAY_SESSION_TIMEOUT", 2*time.Hour) + result = GetEnvDuration("MCP_GATEWAY_SESSION_TIMEOUT", 6*time.Hour) assert.Equal(t, 30*time.Minute, result) // Override with longer timeout os.Setenv("MCP_GATEWAY_SESSION_TIMEOUT", "4h") - result = GetEnvDuration("MCP_GATEWAY_SESSION_TIMEOUT", 2*time.Hour) + result = GetEnvDuration("MCP_GATEWAY_SESSION_TIMEOUT", 6*time.Hour) assert.Equal(t, 4*time.Hour, result) }) } diff --git a/internal/server/transport.go b/internal/server/transport.go index 478e3fb8..608e6d4c 100644 --- a/internal/server/transport.go +++ b/internal/server/transport.go @@ -38,7 +38,7 @@ func CreateHTTPServerForMCP(addr string, unifiedServer *UnifiedServer, apiKey st }, &sdk.StreamableHTTPOptions{ Stateless: false, // Support stateful sessions Logger: logger.NewSlogLoggerWithHandler(logTransport), // Integrate SDK logging with project logger - SessionTimeout: envutil.GetEnvDuration("MCP_GATEWAY_SESSION_TIMEOUT", 2*time.Hour), // Configurable; 2h default accommodates long-running workflows with idle periods + SessionTimeout: envutil.GetEnvDuration("MCP_GATEWAY_SESSION_TIMEOUT", 6*time.Hour), // Configurable; 6h default matches GitHub Actions default timeout }) // Apply standard middleware stack (SDK logging → shutdown check → auth)