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(