This is an automated email from the ASF dual-hosted git repository.

rusackas 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 896947c787 fix(mcp): restore select_columns filtering in list tools 
(#37213)
896947c787 is described below

commit 896947c787473fc108fd8c1e8fbebd86f2fa9882
Author: Amin Ghadersohi <[email protected]>
AuthorDate: Fri Jan 16 20:35:34 2026 -0500

    fix(mcp): restore select_columns filtering in list tools (#37213)
    
    Co-authored-by: Claude Opus 4.5 <[email protected]>
---
 superset/mcp_service/chart/tool/list_charts.py     | 25 ++++++++++++----------
 .../mcp_service/dashboard/tool/list_dashboards.py  | 25 ++++++++++++----------
 superset/mcp_service/dataset/tool/list_datasets.py | 25 ++++++++++++----------
 3 files changed, 42 insertions(+), 33 deletions(-)

diff --git a/superset/mcp_service/chart/tool/list_charts.py 
b/superset/mcp_service/chart/tool/list_charts.py
index 9d218a6591..9831a8d4ba 100644
--- a/superset/mcp_service/chart/tool/list_charts.py
+++ b/superset/mcp_service/chart/tool/list_charts.py
@@ -137,17 +137,20 @@ async def list_charts(request: ListChartsRequest, ctx: 
Context) -> ChartList:
             % (count, total_pages)
         )
 
-        # Apply field filtering via serialization context
-        # Use columns_requested from result (already resolved by ModelListCore)
-        columns_to_filter = result.columns_requested
-        await ctx.debug(
-            "Applying field filtering via serialization context: 
select_columns=%s"
-            % (columns_to_filter,)
-        )
-        filtered = result.model_dump(
-            mode="json", context={"select_columns": columns_to_filter}
-        )
-        return ChartList.model_validate(filtered)
+        # Apply field filtering via serialization context if select_columns 
specified
+        # This triggers ChartInfo._filter_fields_by_context for each chart
+        if request.select_columns:
+            await ctx.debug(
+                "Applying field filtering via serialization context: 
select_columns=%s"
+                % (request.select_columns,)
+            )
+            # Return dict with context - FastMCP handles serialization
+            return result.model_dump(
+                mode="json", context={"select_columns": request.select_columns}
+            )
+
+        # No filtering - return full result as dict
+        return result.model_dump(mode="json")
     except Exception as e:
         await ctx.error("Failed to list charts: %s" % (str(e),))
         raise
diff --git a/superset/mcp_service/dashboard/tool/list_dashboards.py 
b/superset/mcp_service/dashboard/tool/list_dashboards.py
index 4a1d052885..ecb3433cef 100644
--- a/superset/mcp_service/dashboard/tool/list_dashboards.py
+++ b/superset/mcp_service/dashboard/tool/list_dashboards.py
@@ -139,14 +139,17 @@ async def list_dashboards(
         % (count, total_pages)
     )
 
-    # Apply field filtering via serialization context
-    # Use columns_requested from result (already resolved by ModelListCore)
-    columns_to_filter = result.columns_requested
-    await ctx.debug(
-        "Applying field filtering via serialization context: select_columns=%s"
-        % (columns_to_filter,)
-    )
-    filtered = result.model_dump(
-        mode="json", context={"select_columns": columns_to_filter}
-    )
-    return DashboardList.model_validate(filtered)
+    # Apply field filtering via serialization context if select_columns 
specified
+    # This triggers DashboardInfo._filter_fields_by_context for each dashboard
+    if request.select_columns:
+        await ctx.debug(
+            "Applying field filtering via serialization context: 
select_columns=%s"
+            % (request.select_columns,)
+        )
+        # Return dict with context - FastMCP handles serialization
+        return result.model_dump(
+            mode="json", context={"select_columns": request.select_columns}
+        )
+
+    # No filtering - return full result as dict
+    return result.model_dump(mode="json")
diff --git a/superset/mcp_service/dataset/tool/list_datasets.py 
b/superset/mcp_service/dataset/tool/list_datasets.py
index f2536cc0e5..897d7f613d 100644
--- a/superset/mcp_service/dataset/tool/list_datasets.py
+++ b/superset/mcp_service/dataset/tool/list_datasets.py
@@ -148,17 +148,20 @@ async def list_datasets(request: ListDatasetsRequest, 
ctx: Context) -> DatasetLi
             )
         )
 
-        # Apply field filtering via serialization context
-        # Use columns_requested from result (already resolved by ModelListCore)
-        columns_to_filter = result.columns_requested
-        await ctx.debug(
-            "Applying field filtering via serialization context: 
select_columns=%s"
-            % (columns_to_filter,)
-        )
-        filtered = result.model_dump(
-            mode="json", context={"select_columns": columns_to_filter}
-        )
-        return DatasetList.model_validate(filtered)
+        # Apply field filtering via serialization context if select_columns 
specified
+        # This triggers DatasetInfo._filter_fields_by_context for each dataset
+        if request.select_columns:
+            await ctx.debug(
+                "Applying field filtering via serialization context: 
select_columns=%s"
+                % (request.select_columns,)
+            )
+            # Return dict with context - FastMCP handles serialization
+            return result.model_dump(
+                mode="json", context={"select_columns": request.select_columns}
+            )
+
+        # No filtering - return full result as dict
+        return result.model_dump(mode="json")
 
     except Exception as e:
         await ctx.error(

Reply via email to