A Chinese financial quantitative analysis MCP server providing tools for stock data retrieval, financial analysis, news reporting, and backtesting using A-share market data.
FinQ4Cn has 13 tools with mixed quality. Tool naming follows verb_noun convention (get_*, backtest_*) which is good. However, descriptions vary significantly, some are detailed (e.g., get_historical_stockprice_data), others are generic (e.g., get_today_date). Input schemas are present and mostly well-typed, but several parameters lack clear constraints (e.g., period, adjust, freq in get_stock_margin_detail use free-form strings instead of enums). Two tools (python_repl_run, data_visualization) expose code execution as parameters, which is a security concern. Output schemas are documented in docstrings but lack formal JSON Schema definitions for clarity. Error handling is minimal, most tools appear to assume success or fail silently. The server spans 13 tools covering China A-share stock data, news, quantitative analysis, and backtesting; coverage is broad but implementation quality is uneven.
Perform backtesting on historical stock data using a specified trading strategy to evaluate its performance.
Executes the provided Python code to generate a plot, saves the plot as a PNG image, encodes it in Base64 format, and returns it as a data URL.
Retrieve all available backtesting strategy names.
Fetch the latest financial news and market trends within a specified date range.
Retrieve historical price data of companies listed on China's A-share market.
Retrieve the main business structure of Chinese A-share listed companies for analyzing the company's core business, products, services, and revenue distribution.
Retrieve the stock codes of companies listed on China's A-share market.
Two tools (python_repl_run, data_visualization) accept arbitrary Python code as string parameters, creating severe code injection and execution risks. No input validation, sandboxing, or permission gates documented.
Enum parameters are documented as free-form strings in descriptions (e.g., period in get_stock_margin_detail: 'Optional values include: D, W, MS, ME, Q, Y') but not declared as JSON Schema enums. LLMs will hallucinate invalid values instead of selecting from the documented list.
Output schemas are documented only in docstring text (e.g., 'Returns: List[Dict[str, Any]]') without formal JSON Schema definitions. LLMs cannot reliably parse unstructured docstring descriptions to understand the field structure, types, and whether pagination is supported.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | C | 64 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 22 | - | v1 |
Retrieve the financial report summary data of companies listed on China's A-share market.
Retrieve the margin trading and short selling details of companies listed on China's A-share market.
Fetch the latest news articles and information related to a specific stock within a specified date range.
Fetch the moving average and RSI data for a stock, along with their buy/sell signals, to analyse the stock's strength and weakness.
Retrieve the current date.
Execute Python code in a REPL (Read-Eval-Print Loop) environment.
Many tools return potentially large lists (historical price data, news, business structure) without documented pagination (limit, offset, cursor, page_size parameters) or result caps. Large result sets will bloat the context window and degrade LLM reasoning.
Error handling is absent or implicit. No tools document what errors they can return, how to recover from failures, or whether operations are retryable. get_stock_code with a nonexistent name will likely fail silently or throw an exception without guidance.
Parameter descriptions sometimes use example values (e.g., 'Stock code, e.g., "000001"') which LLMs tend to reuse literally in real calls instead of adapting to user context. Use formal constraints (pattern, enum) instead.
Tool descriptions lack context on WHEN to use each tool versus similar alternatives. For example, get_stock_news vs get_financial_news are not distinguished in descriptions. LLMs may select the wrong tool.
Tool get_today_date returns different date formats based on a parameter (YYYYMMDD vs YYYY-MM-DD) but parameter constraints are documented inconsistently. Other tools use date strings without specifying exact format (e.g., get_stock_news accepts 'YYYY-MM-DD' but get_stock_margin_detail accepts 'YYYYMMDD'). Date format inconsistency will cause agent errors.