You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@superset.apache.org by ar...@apache.org on 2026/03/10 16:48:16 UTC
(superset) branch master updated: fix(mcp): wrap LoggingMiddleware.on_message event_logger in try/except (#38560)
This is an automated email from the ASF dual-hosted git repository.
arivero pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/superset.git
The following commit(s) were added to refs/heads/master by this push:
new 6d7cfac8b2d fix(mcp): wrap LoggingMiddleware.on_message event_logger in try/except (#38560)
6d7cfac8b2d is described below
commit 6d7cfac8b2de43939e66862f40f605e33dbff64b
Author: Amin Ghadersohi <am...@gmail.com>
AuthorDate: Tue Mar 10 17:48:08 2026 +0100
fix(mcp): wrap LoggingMiddleware.on_message event_logger in try/except (#38560)
---
superset/mcp_service/middleware.py | 73 ++++++++++++++++++++------------------
1 file changed, 38 insertions(+), 35 deletions(-)
diff --git a/superset/mcp_service/middleware.py b/superset/mcp_service/middleware.py
index cb30b47e5b8..0fadd648ae8 100644
--- a/superset/mcp_service/middleware.py
+++ b/superset/mcp_service/middleware.py
@@ -22,6 +22,7 @@ from typing import Any, Awaitable, Callable, Dict, Protocol
from fastmcp.exceptions import ToolError
from fastmcp.server.middleware import Middleware, MiddlewareContext
+from flask import has_app_context
from pydantic import ValidationError
from sqlalchemy.exc import OperationalError, TimeoutError
from starlette.exceptions import HTTPException
@@ -171,24 +172,25 @@ class LoggingMiddleware(Middleware):
return result
finally:
duration_ms = int((time.time() - start_time) * 1000)
- event_logger.log(
- user_id=user_id,
- action="mcp_tool_call",
- dashboard_id=dashboard_id,
- duration_ms=duration_ms,
- slice_id=slice_id,
- referrer=None,
- curated_payload={
- "tool": tool_name,
- "agent_id": agent_id,
- "params": _sanitize_params(params),
- "method": context.method,
- "dashboard_id": dashboard_id,
- "slice_id": slice_id,
- "dataset_id": dataset_id,
- "success": success,
- },
- )
+ if has_app_context():
+ event_logger.log(
+ user_id=user_id,
+ action="mcp_tool_call",
+ dashboard_id=dashboard_id,
+ duration_ms=duration_ms,
+ slice_id=slice_id,
+ referrer=None,
+ curated_payload={
+ "tool": tool_name,
+ "agent_id": agent_id,
+ "params": _sanitize_params(params),
+ "method": context.method,
+ "dashboard_id": dashboard_id,
+ "slice_id": slice_id,
+ "dataset_id": dataset_id,
+ "success": success,
+ },
+ )
logger.info(
"MCP tool call: tool=%s, agent_id=%s, user_id=%s, method=%s, "
"dashboard_id=%s, slice_id=%s, dataset_id=%s, duration_ms=%s, "
@@ -213,23 +215,24 @@ class LoggingMiddleware(Middleware):
agent_id, user_id, dashboard_id, slice_id, dataset_id, params = (
self._extract_context_info(context)
)
- event_logger.log(
- user_id=user_id,
- action="mcp_message",
- dashboard_id=dashboard_id,
- duration_ms=None,
- slice_id=slice_id,
- referrer=None,
- curated_payload={
- "tool": getattr(context.message, "name", None),
- "agent_id": agent_id,
- "params": _sanitize_params(params),
- "method": context.method,
- "dashboard_id": dashboard_id,
- "slice_id": slice_id,
- "dataset_id": dataset_id,
- },
- )
+ if has_app_context():
+ event_logger.log(
+ user_id=user_id,
+ action="mcp_message",
+ dashboard_id=dashboard_id,
+ duration_ms=None,
+ slice_id=slice_id,
+ referrer=None,
+ curated_payload={
+ "tool": getattr(context.message, "name", None),
+ "agent_id": agent_id,
+ "params": _sanitize_params(params),
+ "method": context.method,
+ "dashboard_id": dashboard_id,
+ "slice_id": slice_id,
+ "dataset_id": dataset_id,
+ },
+ )
logger.info(
"MCP message: tool=%s, agent_id=%s, user_id=%s, method=%s",
getattr(context.message, "name", None),