Fix get_http_headers() returning empty dict in on_initialize middleware (#2370)

This commit is contained in:
Jeremiah Lowin 2025-11-04 08:56:43 -08:00 committed by GitHub
commit a7563a39b0
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -9,9 +9,11 @@ from mcp.server.auth.middleware.auth_context import (
from mcp.server.auth.provider import (
AccessToken as _SDKAccessToken,
)
from mcp.server.lowlevel.server import request_ctx
from starlette.requests import Request
from fastmcp.server.auth import AccessToken
from fastmcp.server.http import _current_http_request
if TYPE_CHECKING:
from fastmcp.server.context import Context
@ -41,12 +43,16 @@ def get_context() -> Context:
def get_http_request() -> Request:
from mcp.server.lowlevel.server import request_ctx
# Try MCP SDK's request_ctx first (set during normal MCP request handling)
request = None
with contextlib.suppress(LookupError):
request = request_ctx.get().request
# Fallback to FastMCP's HTTP context variable
# This is needed during `on_initialize` middleware where request_ctx isn't set yet
if request is None:
request = _current_http_request.get()
if request is None:
raise RuntimeError("No active HTTP request found.")
return request