Skip to main content
Glama

get_series_info

Retrieve metadata for Bureau of Labor Statistics data series, including title, description, category, and availability details.

Instructions

Get detailed metadata information about a specific BLS series. Returns series title, description, category, and data availability.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
series_idYesBLS series ID (e.g., 'CUUR0000SA0')

Implementation Reference

  • GetSeriesInfoTool class: implements the core logic for the get_series_info tool, including name, description, input_schema properties, and the async execute method that handles input validation and delegates to data provider.
    class GetSeriesInfoTool(BaseTool):
        """Tool for getting BLS series metadata."""
    
        def __init__(self, data_provider: MockDataProvider) -> None:
            """Initialize tool with data provider."""
            self.data_provider = data_provider
    
        @property
        def name(self) -> str:
            return "get_series_info"
    
        @property
        def description(self) -> str:
            return (
                "Get detailed metadata information about a specific BLS series. "
                "Returns series title, description, category, and data availability."
            )
    
        @property
        def input_schema(self) -> type[BaseModel]:
            return GetSeriesInfoInput
    
        async def execute(self, arguments: Dict[str, Any]) -> Dict[str, Any]:
            """Execute get_series_info tool."""
            logger.info(f"Executing get_series_info with arguments: {arguments}")
    
            # Validate input
            try:
                input_data = GetSeriesInfoInput(**arguments)
            except Exception as e:
                logger.error(f"Input validation failed: {e}")
                return {"error": f"Invalid input: {str(e)}"}
    
            # Validate series ID format
            if not validate_series_id(input_data.series_id):
                return {"error": f"Invalid series ID format: {input_data.series_id}"}
    
            # Get series info
            try:
                info = await self.data_provider.get_series_info(
                    series_id=input_data.series_id
                )
                logger.info(f"Successfully retrieved info for {input_data.series_id}")
                return info
            except ValueError as e:
                logger.warning(f"Series not found: {e}")
                return {"error": str(e)}
            except Exception as e:
                logger.error(f"Error getting series info: {e}")
                return {"error": f"Failed to get series info: {str(e)}"}
  • Pydantic BaseModel defining the input schema: requires a 'series_id' string field.
    class GetSeriesInfoInput(BaseModel):
        """Input schema for get_series_info tool."""
    
        series_id: str = Field(description="BLS series ID (e.g., 'CUUR0000SA0')")
  • Tool registration: GetSeriesInfoTool instance added to the server's tools dictionary under the key 'get_series_info'.
    self.tools = {
        "get_series": GetSeriesTool(self.data_provider),
        "list_series": ListSeriesTool(self.data_provider),
        "get_series_info": GetSeriesInfoTool(self.data_provider),
        "plot_series": PlotSeriesTool(self.data_provider),
    }
  • MockDataProvider.get_series_info: supporting method that loads series metadata from JSON fixtures and augments with data availability info.
    async def get_series_info(self, series_id: str) -> dict[str, Any]:
        """
        Get metadata information about a specific series.
    
        Args:
            series_id: BLS series ID
    
        Returns:
            Dictionary with series metadata
    
        Raises:
            ValueError: If series not found
        """
        catalog = self._load_series_catalog()
    
        for series in catalog["series"]:
            if series["series_id"] == series_id:
                # Get data point count
                historical = self._load_historical_data()
                data_count = 0
                if series_id in historical:
                    data_count = len(historical[series_id]["data"])
    
                return {
                    **series,
                    "data_point_count": data_count,
                    "available_data": series_id in historical,
                }
    
        raise ValueError(f"Series '{series_id}' not found")

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/kovashikawa/bls_mcp'

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