Skip to main content
Glama
24mlight

A Share MCP

get_stock_basic_info

Retrieve basic Chinese A-share stock details including code, name, industry, and listing date using Baostock format codes.

Instructions

    Fetches basic information for a given Chinese A-share stock.

    Args:
        code: The stock code in Baostock format (e.g., 'sh.600000', 'sz.000001').
        fields: Optional list to select specific columns from the available basic info
                (e.g., ['code', 'code_name', 'industry', 'listingDate']).
                If None or empty, returns all available basic info columns from Baostock.

    Returns:
        Basic stock information in the requested format.
    

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
codeYes
fieldsNo
formatNomarkdown

Implementation Reference

  • MCP tool handler for 'get_stock_basic_info': decorated with @app.tool(), logs invocation, wraps use case execution with standardized error handling.
    @app.tool()
    def get_stock_basic_info(code: str, fields: Optional[List[str]] = None, format: str = "markdown") -> str:
        """
        Fetches basic information for a given Chinese A-share stock.
    
        Args:
            code: The stock code in Baostock format (e.g., 'sh.600000', 'sz.000001').
            fields: Optional list to select specific columns from the available basic info
                    (e.g., ['code', 'code_name', 'industry', 'listingDate']).
                    If None or empty, returns all available basic info columns from Baostock.
    
        Returns:
            Basic stock information in the requested format.
        """
        logger.info(f"Tool 'get_stock_basic_info' called for {code} (fields={fields})")
        return run_tool_with_handling(
            lambda: fetch_stock_basic_info(
                active_data_source, code=code, fields=fields, format=format
            ),
            context=f"get_stock_basic_info:{code}",
        )
  • mcp_server.py:51-51 (registration)
    Invocation of register_stock_market_tools which defines and registers the stock market tools including 'get_stock_basic_info' to the FastMCP app.
    register_stock_market_tools(app, active_data_source)
  • Helper use case function: validates format, fetches raw data from FinancialDataSource, formats output as markdown/JSON/CSV table.
    def fetch_stock_basic_info(
        data_source: FinancialDataSource,
        *,
        code: str,
        fields: Optional[List[str]] = None,
        format: str = "markdown",
    ) -> str:
        validate_output_format(format)
        df = data_source.get_stock_basic_info(code=code, fields=fields)
        meta = {"code": code}
        return format_table_output(df, format=format, max_rows=df.shape[0] if df is not None else 0, meta=meta)
  • BaostockDataSource implementation: performs the actual Baostock query_stock_basic API call, handles errors, supports field selection, returns DataFrame.
    def get_stock_basic_info(self, code: str, fields: Optional[List[str]] = None) -> pd.DataFrame:
        """Fetches basic stock information using Baostock."""
        logger.info(f"Fetching basic info for {code}")
        try:
            # Note: query_stock_basic doesn't seem to have a fields parameter in docs,
            # but we keep the signature consistent. It returns a fixed set.
            # We will use the `fields` argument post-query to select columns if needed.
            logger.debug(
                f"Requesting basic info for {code}. Optional fields requested: {fields}")
    
            with baostock_login_context():
                # Example: Fetch basic info; adjust API call if needed based on baostock docs
                # rs = bs.query_stock_basic(code=code, code_name=code_name) # If supporting name lookup
                rs = bs.query_stock_basic(code=code)
    
                if rs.error_code != '0':
                    logger.error(
                        f"Baostock API error (Basic Info) for {code}: {rs.error_msg} (code: {rs.error_code})")
                    if "no record found" in rs.error_msg.lower() or rs.error_code == '10002':
                        raise NoDataFoundError(
                            f"No basic info found for {code}. Baostock msg: {rs.error_msg}")
                    else:
                        raise DataSourceError(
                            f"Baostock API error fetching basic info: {rs.error_msg} (code: {rs.error_code})")
    
                data_list = []
                while rs.next():
                    data_list.append(rs.get_row_data())
    
                if not data_list:
                    logger.warning(
                        f"No basic info found for {code} (empty result set from Baostock).")
                    raise NoDataFoundError(
                        f"No basic info found for {code} (empty result set).")
    
                # Crucial: Use rs.fields for column names
                result_df = pd.DataFrame(data_list, columns=rs.fields)
                logger.info(
                    f"Retrieved basic info for {code}. Columns: {result_df.columns.tolist()}")
    
                # Optional: Select subset of columns if `fields` argument was provided
                if fields:
                    available_cols = [
                        col for col in fields if col in result_df.columns]
                    if not available_cols:
                        raise ValueError(
                            f"None of the requested fields {fields} are available in the basic info result.")
                    logger.debug(
                        f"Selecting columns: {available_cols} from basic info for {code}")
                    result_df = result_df[available_cols]
    
                return result_df
    
        except (LoginError, NoDataFoundError, DataSourceError, ValueError) as e:
            logger.warning(
                f"Caught known error fetching basic info for {code}: {type(e).__name__}")
            raise e
        except Exception as e:
            logger.exception(
                f"Unexpected error fetching basic info for {code}: {e}")
            raise DataSourceError(
                f"Unexpected error fetching basic info for {code}: {e}")
  • Abstract base class method defining the interface contract for stock basic info retrieval across data sources.
    @abstractmethod
    def get_stock_basic_info(self, code: str) -> pd.DataFrame:
        """
        Fetches basic information for a given stock code.
    
        Args:
            code: The stock code (e.g., 'sh.600000', 'sz.000001').
    
        Returns:
            A pandas DataFrame containing the basic stock information.
            The structure and columns depend on the underlying data source.
            Typically contains info like name, industry, listing date, etc.
    
        Raises:
            LoginError: If login to the data source fails.
            NoDataFoundError: If no data is found for the query.
            DataSourceError: For other data source related errors.
            ValueError: If the input code is invalid.
        """
        pass

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/24mlight/a_share_mcp_is_just_I_need'

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