InvestingTest / App /mcp /auth.py
Mbonea's picture
Fix HF Docker deps and expose remote MCP at /mcp.
178a66c
Raw
History Blame Contribute Delete
1.4 kB
from __future__ import annotations
import os
from typing import Callable, Optional
from starlette.middleware.base import BaseHTTPMiddleware
from starlette.requests import Request
from starlette.responses import JSONResponse
from starlette.types import ASGIApp
def get_mcp_api_key() -> Optional[str]:
value = os.getenv("UWEKEZAJI_MCP_API_KEY", "").strip()
return value or None
def _extract_bearer_token(request: Request) -> Optional[str]:
auth_header = request.headers.get("authorization", "")
if auth_header.lower().startswith("bearer "):
return auth_header[7:].strip()
return request.headers.get("x-api-key")
class McpApiKeyMiddleware(BaseHTTPMiddleware):
"""Optional API-key gate for remotely hosted MCP endpoints."""
def __init__(self, app: ASGIApp, api_key: str):
super().__init__(app)
self.api_key = api_key
async def dispatch(self, request: Request, call_next: Callable):
if request.url.path in {"/health", "/healthz"}:
return await call_next(request)
provided = _extract_bearer_token(request)
if provided != self.api_key:
return JSONResponse(
status_code=401,
content={
"error": "unauthorized",
"message": "Valid MCP API key required.",
},
)
return await call_next(request)