From 8ec7181152c1333e5c6a1d259d4c529a591110be Mon Sep 17 00:00:00 2001 From: Vlad M Date: Wed, 1 Jul 2026 12:52:24 +0200 Subject: [PATCH 1/2] Scale up ECS replicas and add uvicorn workers to fix gateway timeouts Increase ECS task range from 3-6 to 5-15 and run 4 uvicorn workers per container (configurable via WEB_CONCURRENCY) to better utilize the 2 vCPUs per task. This takes max concurrent request handlers from 6 to 60. Co-authored-by: Cursor --- copilot/mcp-server-api/manifest.yml | 4 ++-- src/server.py | 3 ++- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/copilot/mcp-server-api/manifest.yml b/copilot/mcp-server-api/manifest.yml index bc13a0e..78dac50 100644 --- a/copilot/mcp-server-api/manifest.yml +++ b/copilot/mcp-server-api/manifest.yml @@ -14,8 +14,8 @@ memory: 4096 platform: linux/x86_64 count: range: - min: 3 - max: 6 + min: 5 + max: 15 cpu_percentage: 70 exec: true network: diff --git a/src/server.py b/src/server.py index 4fec55c..4e2df66 100644 --- a/src/server.py +++ b/src/server.py @@ -137,7 +137,8 @@ def main(): host = os.getenv("MCP_HOST", "0.0.0.0") port = int(os.getenv("MCP_PORT", "8000")) - uvicorn.run(starlette_app, host=host, port=port, ws="none") + workers = int(os.getenv("WEB_CONCURRENCY", "4")) + uvicorn.run(starlette_app, host=host, port=port, ws="none", workers=workers) if __name__ == "__main__": From 0560ab1d3fac0b6d13be92fac3c0c21f46f61358 Mon Sep 17 00:00:00 2001 From: Adarsh Divakaran Date: Thu, 2 Jul 2026 00:12:43 +0530 Subject: [PATCH 2/2] add: uvicorn multi-workers support in dockerfile --- Dockerfile | 2 +- src/server.py | 38 +++++++++++++++++--------------------- 2 files changed, 18 insertions(+), 22 deletions(-) diff --git a/Dockerfile b/Dockerfile index e6718cc..7dc242a 100644 --- a/Dockerfile +++ b/Dockerfile @@ -19,4 +19,4 @@ RUN python /app/build-engines.py EXPOSE 8000 -CMD ["python", "src/server.py"] +CMD ["sh", "-c", "exec uvicorn src.server:starlette_app --host ${MCP_HOST:-0.0.0.0} --port ${MCP_PORT:-8000} --workers ${WEB_CONCURRENCY:-4} --ws none"] diff --git a/src/server.py b/src/server.py index 4e2df66..38f1ff0 100644 --- a/src/server.py +++ b/src/server.py @@ -116,30 +116,26 @@ async def healthcheck_handler(request): ) -def main(): - middleware = [ - Middleware(RequestMetricsMiddleware), - Middleware(ApiKeyMiddleware), - Middleware( - CORSMiddleware, - allow_origins=["*"], - allow_credentials=True, - allow_methods=["*"], - allow_headers=["*"], - ), - ] - starlette_app = mcp.http_app( - middleware=middleware, stateless_http=True, json_response=True - ) - - starlette_app.add_route("/healthcheck", healthcheck_handler, methods=["GET"]) +middleware = [ + Middleware(RequestMetricsMiddleware), + Middleware(ApiKeyMiddleware), + Middleware( + CORSMiddleware, + allow_origins=["*"], + allow_credentials=True, + allow_methods=["*"], + allow_headers=["*"], + ), +] +starlette_app = mcp.http_app( + middleware=middleware, stateless_http=True, json_response=True +) + +starlette_app.add_route("/healthcheck", healthcheck_handler, methods=["GET"]) +if __name__ == "__main__": host = os.getenv("MCP_HOST", "0.0.0.0") port = int(os.getenv("MCP_PORT", "8000")) workers = int(os.getenv("WEB_CONCURRENCY", "4")) uvicorn.run(starlette_app, host=host, port=port, ws="none", workers=workers) - - -if __name__ == "__main__": - main()