fix(mcp): restore select_columns filtering in list tools (#37213)

Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
Amin Ghadersohi
2026-01-16 20:35:34 -05:00
committed by GitHub
parent 4b1d92e575
commit 896947c787
3 changed files with 42 additions and 33 deletions

View File

@@ -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

View File

@@ -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")

View File

@@ -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(