search_datasets
Search Hong Kong open data datasets by querying titles, descriptions, and metadata across the government portal. Supports pagination and language options.
Instructions
Search for datasets by query term using the package_search API.
This function searches across dataset titles, descriptions, and other metadata to find datasets matching the query term.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| query | No | The solr query string (e.g., "transport", "weather", "*:*" for all) | *:* |
| limit | No | Maximum number of datasets to return (default: 10, max: 1000) | |
| offset | No | Offset for pagination | |
| language | No | Language code (en, tc, sc) | en |
Output Schema
| Name | Required | Description | Default |
|---|---|---|---|
No arguments | |||
Implementation Reference
- src/mcp_open_data_hk/server.py:177-217 (handler)The actual handler/implementation of the 'search_datasets' tool. It is decorated with @mcp.tool and uses the data.gov.hk package_search API to search for datasets by query term. Returns count, results, and has_more flag.
async def search_datasets( query: str = "*:*", limit: int = 10, offset: int = 0, language: str = "en" ) -> Dict[str, Any]: """ Search for datasets by query term using the package_search API. This function searches across dataset titles, descriptions, and other metadata to find datasets matching the query term. Args: query: The solr query string (e.g., "transport", "weather", "*:*" for all) limit: Maximum number of datasets to return (default: 10, max: 1000) offset: Offset for pagination language: Language code (en, tc, sc) Returns: A dictionary containing: - count: Total number of matching datasets - results: List of matching datasets (up to limit) - has_more: Boolean indicating if there are more results available """ # Using package_search API for search functionality base_url = BASE_URLS.get(language, BASE_URLS["en"]) url = f"{base_url}/package_search" # Limit the maximum number of results rows = min(limit, 1000) params = {"q": query, "rows": rows, "start": offset} result = await make_api_request(url, params) if result.get("success"): search_result = result["result"] return { "count": search_result.get("count", 0), "results": search_result.get("results", []), "has_more": search_result.get("count", 0) > (offset + rows), } else: raise Exception(f"API Error: {result.get('error', 'Unknown error')}") - src/mcp_open_data_hk/server.py:19-29 (helper)The make_api_request helper function used by search_datasets to make HTTP requests to the data.gov.hk API.
async def make_api_request( url: str, params: Optional[Dict[str, Any]] = None ) -> Dict[str, Any]: """Make an API request to data.gov.hk""" async with httpx.AsyncClient() as client: # Print the request for debugging print(f"Making request to {url} with params {params}") response = await client.get(url, params=params) print(f"Response status: {response.status_code}") response.raise_for_status() return response.json() - src/mcp_open_data_hk/server.py:176-177 (registration)The @mcp.tool decorator that registers search_datasets as a tool with the FastMCP server. The mcp instance is created on line 6.
@mcp.tool async def search_datasets( - Input schema: query (str, default '*:*'), limit (int, default 10), offset (int, default 0), language (str, default 'en'). Output schema: Dict[str, Any] with keys 'count', 'results', 'has_more'.
query: str = "*:*", limit: int = 10, offset: int = 0, language: str = "en" ) -> Dict[str, Any]: """ Search for datasets by query term using the package_search API. This function searches across dataset titles, descriptions, and other metadata to find datasets matching the query term. Args: query: The solr query string (e.g., "transport", "weather", "*:*" for all) limit: Maximum number of datasets to return (default: 10, max: 1000) offset: Offset for pagination language: Language code (en, tc, sc) Returns: A dictionary containing: - count: Total number of matching datasets - results: List of matching datasets (up to limit) - has_more: Boolean indicating if there are more results available