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 import uvicorn
from mcp.server.fastmcp import FastMCP from mcp.server.fastmcp import FastMCP
from starlette.middleware.base import BaseHTTPMiddleware
from starlette.middleware.cors import CORSMiddleware from starlette.middleware.cors import CORSMiddleware
from starlette.requests import Request
from .config import settings from .config import settings
from .middleware import AuthenticationMiddleware from .middleware import AuthenticationMiddleware
@ -25,6 +27,24 @@ logging.basicConfig(
logger = logging.getLogger(__name__) 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(): def main():
"""Main entry point for the server.""" """Main entry point for the server."""
@ -71,6 +91,10 @@ def main():
logger.error("Unsupported transport: %s", settings.TRANSPORT) logger.error("Unsupported transport: %s", settings.TRANSPORT)
return 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 # Always add CORS middleware for browser compatibility
mcp_app.add_middleware( mcp_app.add_middleware(
CORSMiddleware, CORSMiddleware,
@ -110,6 +134,7 @@ def main():
host=settings.HOST, host=settings.HOST,
port=settings.PORT, port=settings.PORT,
log_level=settings.LOG_LEVEL.lower(), log_level=settings.LOG_LEVEL.lower(),
access_log=True,
) )