diff --git a/superset/mcp_service/chart/schemas.py b/superset/mcp_service/chart/schemas.py index a42798a6982..63007ef3d25 100644 --- a/superset/mcp_service/chart/schemas.py +++ b/superset/mcp_service/chart/schemas.py @@ -88,11 +88,9 @@ class ChartInfo(BaseModel): viz_type: str | None = Field(None, description="Visualization type") datasource_name: str | None = Field(None, description="Datasource name") datasource_type: str | None = Field(None, description="Datasource type") - url: str | None = Field(None, description="Chart URL") + url: str | None = Field(None, description="Chart explore page URL") description: str | None = Field(None, description="Chart description") cache_timeout: int | None = Field(None, description="Cache timeout") - form_data: Dict[str, Any] | None = Field(None, description="Chart form data") - query_context: Any | None = Field(None, description="Query context") changed_by: str | None = Field(None, description="Last modifier (username)") changed_by_name: str | None = Field( None, description="Last modifier (display name)" @@ -231,8 +229,6 @@ def serialize_chart_object(chart: ChartLike | None) -> ChartInfo | None: url=chart_url, description=getattr(chart, "description", None), cache_timeout=getattr(chart, "cache_timeout", None), - form_data=getattr(chart, "form_data", None), - query_context=getattr(chart, "query_context", None), changed_by=getattr(chart, "changed_by_name", None) or (str(chart.changed_by) if getattr(chart, "changed_by", None) else None), changed_by_name=getattr(chart, "changed_by_name", None), @@ -1039,9 +1035,8 @@ class ChartPreview(BaseModel): # Backward compatibility fields (populated based on content type) format: str | None = Field( - None, description="Format of the preview (url, ascii, table, base64)" + None, description="Format of the preview (ascii, table, vega_lite)" ) - preview_url: str | None = Field(None, description="Image URL for 'url' format") ascii_chart: str | None = Field( None, description="ASCII art chart for 'ascii' format" ) diff --git a/superset/mcp_service/chart/tool/get_chart_info.py b/superset/mcp_service/chart/tool/get_chart_info.py index d25354acd02..c9270d33fff 100644 --- a/superset/mcp_service/chart/tool/get_chart_info.py +++ b/superset/mcp_service/chart/tool/get_chart_info.py @@ -45,8 +45,7 @@ async def get_chart_info( """Get chart metadata by ID or UUID. IMPORTANT FOR LLM CLIENTS: - - ALWAYS display the chart URL when returned - - URL field contains chart's screenshot URL for preview + - URL field links to the chart's explore page in Superset - Use numeric ID or UUID string (NOT chart name) - To find a chart ID, use the list_charts tool first diff --git a/superset/mcp_service/chart/tool/get_chart_preview.py b/superset/mcp_service/chart/tool/get_chart_preview.py index fcce93d99bd..606ee88b023 100644 --- a/superset/mcp_service/chart/tool/get_chart_preview.py +++ b/superset/mcp_service/chart/tool/get_chart_preview.py @@ -1978,12 +1978,7 @@ async def _get_chart_preview_internal( # noqa: C901 ) # Add format-specific fields for backward compatibility - if isinstance(content, URLPreview): - result.format = "url" - result.preview_url = content.preview_url - result.width = content.width - result.height = content.height - elif isinstance(content, ASCIIPreview): + if isinstance(content, ASCIIPreview): result.format = "ascii" result.ascii_chart = content.ascii_content result.width = content.width diff --git a/superset/mcp_service/dashboard/schemas.py b/superset/mcp_service/dashboard/schemas.py index 54c4e724471..3b4f520cfc1 100644 --- a/superset/mcp_service/dashboard/schemas.py +++ b/superset/mcp_service/dashboard/schemas.py @@ -307,7 +307,6 @@ class DashboardInfo(BaseModel): changed_by: str | None = Field(None, description="Last modifier (username)") uuid: str | None = Field(None, description="Dashboard UUID (converted to string)") url: str | None = Field(None, description="Dashboard URL") - thumbnail_url: str | None = Field(None, description="Thumbnail URL") created_on_humanized: str | None = Field( None, description="Humanized creation time" ) @@ -452,7 +451,6 @@ def dashboard_serializer(dashboard: "Dashboard") -> DashboardInfo: else None, uuid=str(dashboard.uuid) if dashboard.uuid else None, url=dashboard.url, - thumbnail_url=dashboard.thumbnail_url, created_on_humanized=dashboard.created_on_humanized, changed_on_humanized=dashboard.changed_on_humanized, chart_count=len(dashboard.slices) if dashboard.slices else 0, @@ -504,7 +502,6 @@ def serialize_dashboard_object(dashboard: Any) -> DashboardInfo: uuid=str(getattr(dashboard, "uuid", "")) if getattr(dashboard, "uuid", None) else None, - thumbnail_url=getattr(dashboard, "thumbnail_url", None), chart_count=len(getattr(dashboard, "slices", [])), owners=getattr(dashboard, "owners", []), tags=getattr(dashboard, "tags", []), diff --git a/tests/unit_tests/mcp_service/chart/tool/test_get_chart_preview.py b/tests/unit_tests/mcp_service/chart/tool/test_get_chart_preview.py index fdd824886d7..7b0a5a61caa 100644 --- a/tests/unit_tests/mcp_service/chart/tool/test_get_chart_preview.py +++ b/tests/unit_tests/mcp_service/chart/tool/test_get_chart_preview.py @@ -258,7 +258,6 @@ class TestGetChartPreview: # Additional fields that may be present for backward compatibility _ = [ "format", - "preview_url", "ascii_chart", "table_data", "width", diff --git a/tests/unit_tests/mcp_service/chart/tool/test_list_charts.py b/tests/unit_tests/mcp_service/chart/tool/test_list_charts.py index 0f30a27868f..a379e5309ee 100644 --- a/tests/unit_tests/mcp_service/chart/tool/test_list_charts.py +++ b/tests/unit_tests/mcp_service/chart/tool/test_list_charts.py @@ -201,12 +201,12 @@ class TestChartDefaultColumnFiltering: def test_explicit_select_columns(self): """Test that explicit select_columns can include non-default columns.""" request = ListChartsRequest( - select_columns=["id", "slice_name", "description", "form_data"] + select_columns=["id", "slice_name", "description", "cache_timeout"] ) # Verify exact columns are present - explicit request should match exactly assert set(request.select_columns) == { "id", "slice_name", "description", - "form_data", + "cache_timeout", }