Skip to content

Commit 4c646e9

Browse files
feat(mcp): add sql to search columns for query/saved-query list tools; add test
1 parent 3466aca commit 4c646e9

4 files changed

Lines changed: 23 additions & 2 deletions

File tree

superset/mcp_service/app.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -144,6 +144,10 @@ def get_default_instructions(
144144
- execute_sql: Execute SQL queries and get results (requires database_id)
145145
- save_sql_query: Save a SQL query to Saved Queries list
146146
- open_sql_lab_with_context: Generate SQL Lab URL with pre-filled sql
147+
- list_saved_queries: List saved SQL queries with filtering and search (1-based pagination)
148+
- get_saved_query_info: Get saved query details by ID or UUID
149+
- list_queries: List SQL query history with filtering and search (most recent first)
150+
- get_query_info: Get SQL query history details by ID
147151
148152
Schema Discovery:
149153
- get_schema: Get schema metadata for chart/dataset/dashboard (columns, filters)

superset/mcp_service/query/tool/list_queries.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,7 @@ def _serialize_query(obj: object, cols: list[str] | None) -> QueryInfo | None:
104104
item_serializer=_serialize_query,
105105
filter_type=QueryFilter,
106106
default_columns=DEFAULT_QUERY_COLUMNS,
107-
search_columns=["tab_name"],
107+
search_columns=["tab_name", "sql"],
108108
list_field_name="queries",
109109
output_list_schema=QueryList,
110110
all_columns=ALL_QUERY_COLUMNS,

superset/mcp_service/saved_query/tool/list_saved_queries.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,7 @@ def _serialize_saved_query(
105105
item_serializer=_serialize_saved_query,
106106
filter_type=SavedQueryFilter,
107107
default_columns=DEFAULT_SAVED_QUERY_COLUMNS,
108-
search_columns=["label", "description"],
108+
search_columns=["label", "description", "sql"],
109109
list_field_name="saved_queries",
110110
output_list_schema=SavedQueryList,
111111
all_columns=ALL_SAVED_QUERY_COLUMNS,

tests/unit_tests/mcp_service/saved_query/tool/test_saved_query_tools.py

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -236,6 +236,23 @@ async def test_list_saved_queries_empty(mock_list, mcp_server):
236236
assert data["total_count"] == 0
237237

238238

239+
@patch("superset.daos.query.SavedQueryDAO.find_by_id")
240+
@pytest.mark.asyncio
241+
async def test_get_saved_query_info_by_uuid(mock_find, mcp_server):
242+
"""Test get saved query info by UUID string."""
243+
saved_query = create_mock_saved_query(uuid="a1b2c3d4-5678-90ab-cdef-1234567890ab")
244+
mock_find.return_value = saved_query
245+
async with Client(mcp_server) as client:
246+
result = await client.call_tool(
247+
"get_saved_query_info",
248+
{"request": {"identifier": "a1b2c3d4-5678-90ab-cdef-1234567890ab"}},
249+
)
250+
assert result.content is not None
251+
data = json.loads(result.content[0].text)
252+
assert data["id"] == 1
253+
assert data["uuid"] == "a1b2c3d4-5678-90ab-cdef-1234567890ab"
254+
255+
239256
@patch("superset.daos.query.SavedQueryDAO.list")
240257
@pytest.mark.asyncio
241258
async def test_list_saved_queries_pagination_info(mock_list, mcp_server):

0 commit comments

Comments
 (0)