From 659f185a3ce5d5fcf435e394917eef2d624a6338 Mon Sep 17 00:00:00 2001 From: Roshan Piyush Date: Tue, 24 Feb 2026 22:10:49 +0530 Subject: [PATCH 1/8] Fix workflow --- .github/workflows/pr-build.yml | 3 ++- services/workshop/requirements.txt | 1 + 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/pr-build.yml b/.github/workflows/pr-build.yml index aa968591..6e56a408 100644 --- a/.github/workflows/pr-build.yml +++ b/.github/workflows/pr-build.yml @@ -252,7 +252,8 @@ jobs: pip3 install virtualenv virtualenv venv source venv/bin/activate - pip install --upgrade pip setuptools + pip install --upgrade pip + pip install setuptools>=70.0.0 pip install -r requirements.txt pip install -r dev-requirements.txt mkdir -p test-results diff --git a/services/workshop/requirements.txt b/services/workshop/requirements.txt index c10137dd..eb177c56 100644 --- a/services/workshop/requirements.txt +++ b/services/workshop/requirements.txt @@ -1,3 +1,4 @@ +setuptools>=70.0.0 bcrypt==4.1.2 Django~=4.1.13 cryptography==40.0.2 From 0879a14f328f1eb02872077977cd69441cad3d7d Mon Sep 17 00:00:00 2001 From: Hardik Vardaan Date: Sat, 28 Feb 2026 02:51:54 +0530 Subject: [PATCH 2/8] pin setuptools due to newer version not having pkg_resources --- services/workshop/Dockerfile | 2 +- services/workshop/requirements.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/services/workshop/Dockerfile b/services/workshop/Dockerfile index e5ab87fd..d47210bd 100644 --- a/services/workshop/Dockerfile +++ b/services/workshop/Dockerfile @@ -39,7 +39,7 @@ FROM python:3.11-alpine COPY --from=build /app /app WORKDIR /app RUN apk update && apk add --no-cache postgresql-libs curl cairo -RUN pip install setuptools +RUN pip install "setuptools>=70.0.0,<82" RUN pip install --no-index --find-links=/app/wheels -r requirements.txt COPY ./certs /app/certs COPY health.sh /app/health.sh diff --git a/services/workshop/requirements.txt b/services/workshop/requirements.txt index eb177c56..598a49dd 100644 --- a/services/workshop/requirements.txt +++ b/services/workshop/requirements.txt @@ -1,4 +1,4 @@ -setuptools>=70.0.0 +setuptools>=70.0.0,<82 bcrypt==4.1.2 Django~=4.1.13 cryptography==40.0.2 From da97879dd173a8235361bb58e4cfe05d7b676f02 Mon Sep 17 00:00:00 2001 From: Hardik Vardaan Date: Sat, 28 Feb 2026 03:11:16 +0530 Subject: [PATCH 3/8] added version for server header --- services/chatbot/src/mcpserver/server.py | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/services/chatbot/src/mcpserver/server.py b/services/chatbot/src/mcpserver/server.py index 1199cd4f..1e0e9f7b 100644 --- a/services/chatbot/src/mcpserver/server.py +++ b/services/chatbot/src/mcpserver/server.py @@ -4,6 +4,7 @@ import time import httpx +import uvicorn from fastmcp import FastMCP from starlette.middleware import Middleware @@ -143,12 +144,31 @@ async def debug_web_service(path: str = "") -> dict: if __name__ == "__main__": mcp_server_port = int(os.environ.get("MCP_SERVER_PORT", 5500)) + # Middleware to add Server header with uvicorn version + class ServerHeaderMiddleware: + def __init__(self, app): + self.app = app + self.server_header = f"uvicorn/{uvicorn.__version__}" + + async def __call__(self, scope, receive, send): + if scope["type"] == "http": + async def send_with_header(message): + if message["type"] == "http.response.start": + headers = list(message.get("headers", [])) + headers.append((b"server", self.server_header.encode())) + message["headers"] = headers + await send(message) + await self.app(scope, receive, send_with_header) + else: + await self.app(scope, receive, send) + # Auth middleware to validate requests against identity service middleware = [ + Middleware(ServerHeaderMiddleware), Middleware( MCPAuthMiddleware, identity_service_url=BASE_IDENTITY_URL, - ) + ), ] mcp.run( From 3049612535e25ab52fd03d7c2ee7eaedf8f9c1d4 Mon Sep 17 00:00:00 2001 From: Hardik Vardaan Date: Sat, 28 Feb 2026 03:21:47 +0530 Subject: [PATCH 4/8] fix server header added twice --- services/chatbot/src/mcpserver/server.py | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/services/chatbot/src/mcpserver/server.py b/services/chatbot/src/mcpserver/server.py index 1e0e9f7b..879ed75f 100644 --- a/services/chatbot/src/mcpserver/server.py +++ b/services/chatbot/src/mcpserver/server.py @@ -3,8 +3,9 @@ import os import time +from importlib.metadata import version + import httpx -import uvicorn from fastmcp import FastMCP from starlette.middleware import Middleware @@ -144,18 +145,21 @@ async def debug_web_service(path: str = "") -> dict: if __name__ == "__main__": mcp_server_port = int(os.environ.get("MCP_SERVER_PORT", 5500)) - # Middleware to add Server header with uvicorn version + # Middleware to set Server header with uvicorn version class ServerHeaderMiddleware: def __init__(self, app): self.app = app - self.server_header = f"uvicorn/{uvicorn.__version__}" + self.server_header = f"uvicorn/{version('uvicorn')}".encode() async def __call__(self, scope, receive, send): if scope["type"] == "http": async def send_with_header(message): if message["type"] == "http.response.start": - headers = list(message.get("headers", [])) - headers.append((b"server", self.server_header.encode())) + headers = [ + (k, v) for k, v in message.get("headers", []) + if k != b"server" + ] + headers.append((b"server", self.server_header)) message["headers"] = headers await send(message) await self.app(scope, receive, send_with_header) From c0475ff3f5ee5693142af4fcf8b428f6e5d0d8f3 Mon Sep 17 00:00:00 2001 From: Hardik Vardaan Date: Sat, 28 Feb 2026 03:26:38 +0530 Subject: [PATCH 5/8] fix server header, removed from protocol layer --- services/chatbot/src/mcpserver/server.py | 1 + 1 file changed, 1 insertion(+) diff --git a/services/chatbot/src/mcpserver/server.py b/services/chatbot/src/mcpserver/server.py index 879ed75f..2a56938a 100644 --- a/services/chatbot/src/mcpserver/server.py +++ b/services/chatbot/src/mcpserver/server.py @@ -180,4 +180,5 @@ async def send_with_header(message): host="0.0.0.0", port=mcp_server_port, middleware=middleware, + server_header=False, ) From 940e9ad3c9335bade4f148dd91804966e325bdc8 Mon Sep 17 00:00:00 2001 From: Hardik Vardaan Date: Sat, 28 Feb 2026 03:40:58 +0530 Subject: [PATCH 6/8] fix: server header added twice --- services/chatbot/src/mcpserver/server.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/services/chatbot/src/mcpserver/server.py b/services/chatbot/src/mcpserver/server.py index 2a56938a..783c9ae5 100644 --- a/services/chatbot/src/mcpserver/server.py +++ b/services/chatbot/src/mcpserver/server.py @@ -6,6 +6,7 @@ from importlib.metadata import version import httpx +import uvicorn from fastmcp import FastMCP from starlette.middleware import Middleware @@ -175,10 +176,10 @@ async def send_with_header(message): ), ] - mcp.run( - transport="streamable-http", + app = mcp.streamable_http_app(middleware=middleware) + uvicorn.run( + app, host="0.0.0.0", port=mcp_server_port, - middleware=middleware, server_header=False, ) From cc6368079d22531c36e6175e06f7e1c1ac7f2f02 Mon Sep 17 00:00:00 2001 From: Roshan Piyush Date: Sat, 28 Feb 2026 17:44:57 +0530 Subject: [PATCH 7/8] Update services/chatbot/src/mcpserver/server.py --- services/chatbot/src/mcpserver/server.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/services/chatbot/src/mcpserver/server.py b/services/chatbot/src/mcpserver/server.py index 783c9ae5..c74f5f22 100644 --- a/services/chatbot/src/mcpserver/server.py +++ b/services/chatbot/src/mcpserver/server.py @@ -146,7 +146,7 @@ async def debug_web_service(path: str = "") -> dict: if __name__ == "__main__": mcp_server_port = int(os.environ.get("MCP_SERVER_PORT", 5500)) - # Middleware to set Server header with uvicorn version + class ServerHeaderMiddleware: def __init__(self, app): self.app = app From 9e51b99360e204aeb523c68dda80f04f5b1270af Mon Sep 17 00:00:00 2001 From: Hardik Vardaan Date: Mon, 2 Mar 2026 12:09:43 +0530 Subject: [PATCH 8/8] server header update --- services/chatbot/src/mcpserver/server.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/services/chatbot/src/mcpserver/server.py b/services/chatbot/src/mcpserver/server.py index c74f5f22..3c0fd114 100644 --- a/services/chatbot/src/mcpserver/server.py +++ b/services/chatbot/src/mcpserver/server.py @@ -150,7 +150,7 @@ async def debug_web_service(path: str = "") -> dict: class ServerHeaderMiddleware: def __init__(self, app): self.app = app - self.server_header = f"uvicorn/{version('uvicorn')}".encode() + self.server_header = f"FastMCP/{version('FastMCP')}".encode() async def __call__(self, scope, receive, send): if scope["type"] == "http":