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.
This commit is contained in:
Claude 2025-11-30 01:25:19 +00:00
parent fe71704bf8
commit e4a8748af5
No known key found for this signature in database

View file

@ -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,
)