From d42caf744fa015f8e9ea67fddb7d9b35e3754d85 Mon Sep 17 00:00:00 2001 From: Amin Ghadersohi Date: Tue, 10 Mar 2026 09:48:38 +0100 Subject: [PATCH] feat(mcp): register GlobalErrorHandlerMiddleware and LoggingMiddleware (#38523) Co-authored-by: Claude Opus 4.6 (cherry picked from commit 0533ca9941e9d3535a6647613e8832e094b49777) --- superset/mcp_service/server.py | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/superset/mcp_service/server.py b/superset/mcp_service/server.py index f2ee1d69a0d..5435a66e68b 100644 --- a/superset/mcp_service/server.py +++ b/superset/mcp_service/server.py @@ -30,7 +30,11 @@ import uvicorn from superset.mcp_service.app import create_mcp_app, init_fastmcp_server from superset.mcp_service.mcp_config import get_mcp_factory_config, MCP_STORE_CONFIG -from superset.mcp_service.middleware import create_response_size_guard_middleware +from superset.mcp_service.middleware import ( + create_response_size_guard_middleware, + GlobalErrorHandlerMiddleware, + LoggingMiddleware, +) from superset.mcp_service.storage import _create_redis_store logger = logging.getLogger(__name__) @@ -224,16 +228,24 @@ def run_server( auth_provider = _create_auth_provider(flask_app) # Build middleware list + # FastMCP wraps handlers so that the LAST-added middleware is + # outermost. Order here is innermost → outermost. middleware_list = [] + # Add caching middleware (innermost – runs closest to the tool) + caching_middleware = create_response_caching_middleware() + if caching_middleware: + middleware_list.append(caching_middleware) + # Add response size guard (protects LLM clients from huge responses) if size_guard_middleware := create_response_size_guard_middleware(): middleware_list.append(size_guard_middleware) - # Add caching middleware - caching_middleware = create_response_caching_middleware() - if caching_middleware: - middleware_list.append(caching_middleware) + # Add logging middleware (logs all tool calls with duration tracking) + middleware_list.append(LoggingMiddleware()) + + # Add global error handler (outermost – catches all exceptions) + middleware_list.append(GlobalErrorHandlerMiddleware()) mcp_instance = init_fastmcp_server( auth=auth_provider,