diff --git a/README.md b/README.md index e5d768a..49d844f 100644 --- a/README.md +++ b/README.md @@ -161,6 +161,7 @@ services: # - ADMIN_EMAIL=admin@trek.local # Initial admin e-mail — only used on first boot when no users exist # - ADMIN_PASSWORD=changeme # Initial admin password — only used on first boot when no users exist # - MCP_RATE_LIMIT=60 # Max MCP API requests per user per minute (default: 60) + # - MCP_MAX_SESSION_PER_USER=5 # Max concurrent MCP sessions per user (default: 5) volumes: - ./data:/app/data - ./uploads:/app/uploads @@ -303,6 +304,7 @@ trek.yourdomain.com { | **Other** | | | | `DEMO_MODE` | Enable demo mode (hourly data resets) | `false` | | `MCP_RATE_LIMIT` | Max MCP API requests per user per minute | `60` | +| `MCP_MAX_SESSION_PER_USER` | Max concurrent MCP sessions per user | `5` | ## Optional API Keys diff --git a/chart/values.yaml b/chart/values.yaml index 52dfccf..47a941c 100644 --- a/chart/values.yaml +++ b/chart/values.yaml @@ -53,6 +53,8 @@ env: # Enable demo mode (hourly data resets). # MCP_RATE_LIMIT: "60" # Max MCP API requests per user per minute. Defaults to 60. + # MCP_MAX_SESSION_PER_USER: "5" + # Max concurrent MCP sessions per user. Defaults to 5. # Secret environment variables stored in a Kubernetes Secret. diff --git a/docker-compose.yml b/docker-compose.yml index d6af6b6..39a82c6 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -39,6 +39,7 @@ services: # - ADMIN_EMAIL=admin@trek.local # Initial admin e-mail — only used on first boot when no users exist # - ADMIN_PASSWORD=changeme # Initial admin password — only used on first boot when no users exist # - MCP_RATE_LIMIT=60 # Max MCP API requests per user per minute (default: 60) +# - MCP_MAX_SESSION_PER_USER=5 # Max concurrent MCP sessions per user (default: 5) volumes: - ./data:/app/data - ./uploads:/app/uploads diff --git a/server/.env.example b/server/.env.example index 9c70b49..5e8c677 100644 --- a/server/.env.example +++ b/server/.env.example @@ -29,6 +29,7 @@ OIDC_SCOPE=openid email profile # Fully overrides the default. Add extra scopes DEMO_MODE=false # Demo mode - resets data hourly # MCP_RATE_LIMIT=60 # Max MCP API requests per user per minute (default: 60) +# MCP_MAX_SESSION_PER_USER=5 # Max concurrent MCP sessions per user (default: 5) # Initial admin account — only used on first boot when no users exist yet. # If both are set the admin account is created with these credentials. diff --git a/server/src/mcp/index.ts b/server/src/mcp/index.ts index 130aaa0..86714a0 100644 --- a/server/src/mcp/index.ts +++ b/server/src/mcp/index.ts @@ -18,7 +18,8 @@ interface McpSession { const sessions = new Map(); const SESSION_TTL_MS = 60 * 60 * 1000; // 1 hour -const MAX_SESSIONS_PER_USER = 5; +const sessionParsed = Number.parseInt(process.env.MCP_MAX_SESSION_PER_USER ?? ""); +const MAX_SESSIONS_PER_USER = Number.isFinite(sessionParsed) && sessionParsed > 0 ? sessionParsed : 5; const RATE_LIMIT_WINDOW_MS = 60 * 1000; // 1 minute const parsed = Number.parseInt(process.env.MCP_RATE_LIMIT ?? ""); const RATE_LIMIT_MAX = Number.isFinite(parsed) && parsed > 0 ? parsed : 60; // requests per minute per user diff --git a/unraid-template.xml b/unraid-template.xml index 5d2759d..74fe88a 100644 --- a/unraid-template.xml +++ b/unraid-template.xml @@ -58,4 +58,5 @@ false 60 + 5