From e4a8748af5ae4134ac74813103261c9b6f7f6952 Mon Sep 17 00:00:00 2001 From: Claude Date: Sun, 30 Nov 2025 01:25:19 +0000 Subject: [PATCH] Add debug logging middleware for troubleshooting Added RequestLoggingMiddleware to help diagnose 400 Bad Request errors: - Logs all request methods and paths in DEBUG mode - Logs request headers for debugging - Warns on any 4xx/5xx responses with details - Only enabled when LOG_LEVEL=DEBUG to avoid spam This helps troubleshoot MCP protocol issues without modifying the core request handling logic. --- src/geoguessr_mcp/main.py | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/src/geoguessr_mcp/main.py b/src/geoguessr_mcp/main.py index 5bb63bf..034794d 100644 --- a/src/geoguessr_mcp/main.py +++ b/src/geoguessr_mcp/main.py @@ -10,7 +10,9 @@ import sys import uvicorn from mcp.server.fastmcp import FastMCP +from starlette.middleware.base import BaseHTTPMiddleware from starlette.middleware.cors import CORSMiddleware +from starlette.requests import Request from .config import settings from .middleware import AuthenticationMiddleware @@ -25,6 +27,24 @@ logging.basicConfig( logger = logging.getLogger(__name__) +class RequestLoggingMiddleware(BaseHTTPMiddleware): + """Log request details for debugging.""" + + async def dispatch(self, request: Request, call_next): + """Log request and response details.""" + logger.debug(f"Request: {request.method} {request.url.path}") + logger.debug(f"Headers: {dict(request.headers)}") + + response = await call_next(request) + + if response.status_code >= 400: + logger.warning( + f"Error response: {request.method} {request.url.path} -> {response.status_code}" + ) + + return response + + def main(): """Main entry point for the server.""" @@ -71,6 +91,10 @@ def main(): logger.error("Unsupported transport: %s", settings.TRANSPORT) return + # Add request logging middleware for debugging (first, so it logs everything) + if settings.LOG_LEVEL == "DEBUG": + mcp_app.add_middleware(RequestLoggingMiddleware) + # Always add CORS middleware for browser compatibility mcp_app.add_middleware( CORSMiddleware, @@ -110,6 +134,7 @@ def main(): host=settings.HOST, port=settings.PORT, log_level=settings.LOG_LEVEL.lower(), + access_log=True, )