Skip to main content
Glama
aptro

Superset MCP Integration

by aptro

superset_tag_objects

Retrieve tagged objects from Apache Superset by making API requests to fetch all items with assigned tags, grouped by tag for organized access.

Instructions

Get objects associated with tags

Makes a request to the /api/v1/tag/get_objects/ endpoint to retrieve all objects that have tags assigned to them.

Returns: A dictionary with tagged objects grouped by tag

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault

No arguments

Implementation Reference

  • The handler function implementing the superset_tag_objects tool. It retrieves objects associated with tags by making a GET request to the Superset API endpoint /api/v1/tag/get_objects/ using the make_api_request helper.
    async def superset_tag_objects(ctx: Context) -> Dict[str, Any]: """ Get objects associated with tags Makes a request to the /api/v1/tag/get_objects/ endpoint to retrieve all objects that have tags assigned to them. Returns: A dictionary with tagged objects grouped by tag """ return await make_api_request(ctx, "get", "/api/v1/tag/get_objects/")
  • main.py:1559-1559 (registration)
    The @mcp.tool() decorator registers the superset_tag_objects function as an MCP tool.
    @mcp.tool()
  • The make_api_request helper function used by the tool to perform authenticated API calls to Superset, handling token refresh, CSRF, and error management.
    async def make_api_request( ctx: Context, method: str, endpoint: str, data: Dict[str, Any] = None, params: Dict[str, Any] = None, auto_refresh: bool = True, ) -> Dict[str, Any]: """ Helper function to make API requests to Superset Args: ctx: MCP context method: HTTP method (get, post, put, delete) endpoint: API endpoint (without base URL) data: Optional JSON payload for POST/PUT requests params: Optional query parameters auto_refresh: Whether to auto-refresh token on 401 """ superset_ctx: SupersetContext = ctx.request_context.lifespan_context client = superset_ctx.client # For non-GET requests, make sure we have a CSRF token if method.lower() != "get" and not superset_ctx.csrf_token: await get_csrf_token(ctx) async def make_request() -> httpx.Response: headers = {} # Add CSRF token for non-GET requests if method.lower() != "get" and superset_ctx.csrf_token: headers["X-CSRFToken"] = superset_ctx.csrf_token if method.lower() == "get": return await client.get(endpoint, params=params) elif method.lower() == "post": return await client.post( endpoint, json=data, params=params, headers=headers ) elif method.lower() == "put": return await client.put(endpoint, json=data, headers=headers) elif method.lower() == "delete": return await client.delete(endpoint, headers=headers) else: raise ValueError(f"Unsupported HTTP method: {method}") # Use auto_refresh if requested response = ( await with_auto_refresh(ctx, make_request) if auto_refresh else await make_request() ) if response.status_code not in [200, 201]: return { "error": f"API request failed: {response.status_code} - {response.text}" } return response.json()
  • The requires_auth decorator applied to the tool, ensuring authentication before execution.
    def requires_auth( func: Callable[..., Awaitable[Dict[str, Any]]], ) -> Callable[..., Awaitable[Dict[str, Any]]]: """Decorator to check authentication before executing a function""" @wraps(func) async def wrapper(ctx: Context, *args, **kwargs) -> Dict[str, Any]: superset_ctx: SupersetContext = ctx.request_context.lifespan_context if not superset_ctx.access_token: return {"error": "Not authenticated. Please authenticate first."} return await func(ctx, *args, **kwargs) return wrapper
  • The handle_api_errors decorator applied to the tool for consistent error handling.
    def handle_api_errors( func: Callable[..., Awaitable[Dict[str, Any]]], ) -> Callable[..., Awaitable[Dict[str, Any]]]: """Decorator to handle API errors in a consistent way""" @wraps(func) async def wrapper(ctx: Context, *args, **kwargs) -> Dict[str, Any]: try: return await func(ctx, *args, **kwargs) except Exception as e: # Extract function name for better error context function_name = func.__name__ return {"error": f"Error in {function_name}: {str(e)}"} return wrapper
Install Server

Other Tools

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/aptro/superset-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server