get_loan_rate_data
Retrieve benchmark loan rate data within a specified date range using this tool. Returns results as a markdown table for easy analysis of financial trends.
Instructions
Fetches benchmark loan rates (贷款利率) within a date range.
Args:
start_date: Optional. Start date in 'YYYY-MM-DD' format.
end_date: Optional. End date in 'YYYY-MM-DD' format.
Returns:
Markdown table with loan rate data or an error message.
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| end_date | No | ||
| start_date | No |
Implementation Reference
- src/tools/macroeconomic.py:44-62 (handler)The main MCP tool handler for 'get_loan_rate_data'. Decorated with @app.tool(), it processes inputs, delegates to call_macro_data_tool for data retrieval and formatting from the active data source.@app.tool() def get_loan_rate_data(start_date: Optional[str] = None, end_date: Optional[str] = None, limit: int = 250, format: str = "markdown") -> str: """ Fetches benchmark loan rates (贷款利率) within a date range. Args: start_date: Optional. Start date in 'YYYY-MM-DD' format. end_date: Optional. End date in 'YYYY-MM-DD' format. Returns: Markdown table with loan rate data or an error message. """ return call_macro_data_tool( "get_loan_rate_data", active_data_source.get_loan_rate_data, "Loan Rate", start_date, end_date, limit=limit, format=format )
- src/data_source_interface.py:103-105 (schema)Abstract method in FinancialDataSource interface defining the signature and return type for get_loan_rate_data, serving as the type schema for implementations.@abstractmethod def get_loan_rate_data(self, start_date: Optional[str] = None, end_date: Optional[str] = None) -> pd.DataFrame: """Fetches benchmark loan rates."""
- mcp_server.py:51-58 (registration)Registration block in main server file that invokes register_macroeconomic_tools(app, active_data_source), which defines and registers the get_loan_rate_data tool.register_stock_market_tools(app, active_data_source) register_financial_report_tools(app, active_data_source) register_index_tools(app, active_data_source) register_market_overview_tools(app, active_data_source) register_macroeconomic_tools(app, active_data_source) register_date_utils_tools(app, active_data_source) register_analysis_tools(app, active_data_source) register_helpers_tools(app)
- src/baostock_data_source.py:668-670 (helper)Baostock-specific implementation of get_loan_rate_data, wrapping Baostock's query_loan_rate_data via internal _fetch_macro_data helper.def get_loan_rate_data(self, start_date: Optional[str] = None, end_date: Optional[str] = None) -> pd.DataFrame: """Fetches benchmark loan rates using Baostock.""" return _fetch_macro_data(bs.query_loan_rate_data, "Loan Rate", start_date, end_date)
- src/tools/base.py:76-124 (helper)Shared helper utility used by the macroeconomic tool handlers to invoke data source methods, handle exceptions, and format output as markdown tables.def call_macro_data_tool( tool_name: str, data_source_method: Callable, data_type_name: str, start_date: Optional[str] = None, end_date: Optional[str] = None, *, limit: int = 250, format: str = "markdown", **kwargs # For extra params like year_type ) -> str: """ Helper function for macroeconomic data tools Args: tool_name: Name of the tool for logging data_source_method: Method to call on the data source data_type_name: Type of data (for logging) start_date: Optional start date end_date: Optional end date **kwargs: Additional keyword arguments to pass to data_source_method Returns: Markdown formatted string with results or error message """ date_range_log = f"from {start_date or 'default'} to {end_date or 'default'}" kwargs_log = f", extra_args={kwargs}" if kwargs else "" logger.info(f"Tool '{tool_name}' called {date_range_log}{kwargs_log}") try: # Call the appropriate method on the active_data_source df = data_source_method(start_date=start_date, end_date=end_date, **kwargs) logger.info(f"Successfully retrieved {data_type_name} data.") meta = {"dataset": data_type_name, "start_date": start_date, "end_date": end_date} | ({"extra": kwargs} if kwargs else {}) return format_table_output(df, format=format, max_rows=limit, meta=meta) except NoDataFoundError as e: logger.warning(f"NoDataFoundError: {e}") return f"Error: {e}" except LoginError as e: logger.error(f"LoginError: {e}") return f"Error: Could not connect to data source. {e}" except DataSourceError as e: logger.error(f"DataSourceError: {e}") return f"Error: An error occurred while fetching data. {e}" except ValueError as e: logger.warning(f"ValueError: {e}") return f"Error: Invalid input parameter. {e}" except Exception as e: logger.exception(f"Unexpected Exception processing {tool_name}: {e}") return f"Error: An unexpected error occurred: {e}"