akshare-one-mcp
An MCP server for China stock market data, offering historical/realtime quotes, news, financial statements, insider trades, financial metrics, and time/trading-day info, with multi-source fallback.
get_hist_data– Historical OHLCV data for A/B/H shares with configurable interval (minute→year), multiplier, date range, adjustment (none/qfq/hfq), ~34 technical indicators (SMA, EMA, RSI, MACD, BOLL, etc.), andrecent_nlimit.get_realtime_data– Real-time quotes, optionally for a single symbol or the whole market.get_news_data– Stock-related news, newest first, withrecent_nlimit.get_balance_sheet/get_income_statement/get_cash_flow– The three major financial statements, most recentrecent_nperiods.get_financial_metrics– Key metrics derived from the three statements.get_inner_trade_data– Company insider trading activity.get_time_info– Current time (ISO + timestamp) and the last trading day.Source resilience – Every data tool accepts
sourceand afallbackflag (default on) that tries the other providers in a fixed order (e.g. eastmoney → eastmoney_direct → sina → ths) when a source errors or returns empty, logging the source actually used.
Provides integration with the Astral package system through uv, used for dependency management and running the MCP server
Connects to the GitHub repository for akshare-one, providing access to Chinese stock market data through various tools for retrieving financial information including historical stock data, real-time data, news, and financial statements
AKShare One MCP Server
Overview
An MCP server based on akshare-one, providing comprehensive interfaces for China stock market data. It offers a set of powerful tools for retrieving financial information including historical stock data, real-time data, news data, and financial statements.
Related MCP server: A股实时行情MCP服务器
Available Tools
Automatic source fallback
Except for get_inner_trade_data, whose upstream exposes a single source, every data tool takes a source parameter for the preferred data source and a fallback parameter (on by default) that decides whether the other sources of the same domain are tried when that source raises or returns an empty frame:
Domain | Order tried |
Historical |
|
Real-time |
|
News |
|
Financial statements |
|
The requested source is always tried first; the order only governs the fallback. Because akshare-one projects every source onto its domain's declared columns, falling back cannot change the field names or their order. When every source fails, the error lists each one and why it failed; when every source succeeds but has no data, an empty result is returned. Set fallback to false to pin a single source — a failure then surfaces directly, which is useful when you need to know exactly where the numbers came from.
The source that actually served a call is logged under the akshare_one_mcp.providers logger.
Market Data Tools
get_hist_data
Get historical stock market data with support for multiple time periods and adjustment methods.
symbol(string, required): Stock code (e.g. '000001')interval(string, optional): Time interval ('minute','hour','day','week','month','year') (default: 'day')interval_multiplier(number, optional): Interval multiplier (default: 1)start_date(string, optional): Start date in YYYY-MM-DD format (default: '1970-01-01')end_date(string, optional): End date in YYYY-MM-DD format (default: '2030-12-31')adjust(string, optional): Adjustment type ('none', 'qfq', 'hfq') (default: 'none')source(string, optional): Data source ('eastmoney', 'eastmoney_direct', 'sina', 'ths') (default: 'eastmoney')fallback(boolean, optional): Try 'eastmoney', 'eastmoney_direct', 'sina' and 'ths' in order when the chosen source fails or has no data (default: true)indicators_list(list, optional): Technical indicators to addrecent_n(number, optional): Number of most recent records to return (default: 100)
get_realtime_data
Get real-time stock market data.
symbol(string, optional): Stock codesource(string, optional): Data source ('eastmoney_direct', 'eastmoney', 'xueqiu', 'ths') (default: 'eastmoney_direct')fallback(boolean, optional): Try 'eastmoney_direct', 'eastmoney', 'xueqiu' and 'ths' in order when the chosen source fails or has no data (default: true; 'xueqiu' and 'ths' are skipped when no symbol is given, as they quote one symbol at a time)
News & Information Tools
get_news_data
Get stock-related news data.
symbol(string, required): Stock codesource(string, optional): Data source ('eastmoney', 'ths') (default: 'eastmoney')fallback(boolean, optional): Try 'eastmoney' and 'ths' in order when the chosen source fails or has no data (default: true)recent_n(number, optional): Number of most recent records to return, newest first (default: 10)
Financial Statement Tools
get_balance_sheet
Get company balance sheet data.
symbol(string, required): Stock codesource(string, optional): Data source ('sina', 'eastmoney_direct') (default: 'sina')fallback(boolean, optional): Try the other source when the chosen one fails or has no data (default: true)recent_n(number, optional): Number of most recent records to return (default: 10)
get_income_statement
Get company income statement data.
symbol(string, required): Stock codesource(string, optional): Data source ('sina', 'eastmoney_direct') (default: 'sina')fallback(boolean, optional): Try the other source when the chosen one fails or has no data (default: true)recent_n(number, optional): Number of most recent records to return (default: 10)
get_cash_flow
Get company cash flow statement data.
symbol(string, required): Stock codesource(string, optional): Data source ('sina', 'eastmoney_direct') (default: 'sina')fallback(boolean, optional): Try the other source when the chosen one fails or has no data (default: true)recent_n(number, optional): Number of most recent records to return (default: 10)
Analysis & Metrics Tools
get_inner_trade_data
Get company insider trading data.
symbol(string, required): Stock code
get_financial_metrics
Get key financial metrics from the three major financial statements.
symbol(string, required): Stock codesource(string, optional): Data source ('sina', 'eastmoney_direct') (default: 'eastmoney_direct')fallback(boolean, optional): Try the other source when the chosen one fails or has no data (default: true)recent_n(number, optional): Number of most recent records to return (default: 10)
get_time_info
Get current time with ISO format, timestamp, and the last trading day.
Installation & Setup
Running Modes
The server supports two modes: stdio and streamable-http
Command Line Arguments:
--streamable-http: Enable HTTP mode (default: stdio mode)--host: Host to bind to in HTTP mode (default: 0.0.0.0)--port: Port to listen on in HTTP mode (default: 8081)
Note: When using streamable-http mode, the MCP server will be available at
http://{host}:{port}/mcp. For the default configuration, this would behttp://0.0.0.0:8081/mcp.
Installation Options
Option 1: Via Smithery
To install akshare-one-mcp for Claude Desktop automatically via Smithery:
npx -y @smithery/cli install @zwldarren/akshare-one-mcp --client claudeOption 2: Via uv
Install uv if you haven't already.
uvx installs the package from PyPI and runs it on Python 3.12 or newer.
Add the following configuration to your MCP Client settings:
{
"mcpServers": {
"akshare-one-mcp": {
"command": "uvx",
"args": ["akshare-one-mcp"]
}
}
}Option 3: Local Development Setup
Clone this repository:
git clone https://github.com/zwldarren/akshare-one-mcp.git cd akshare-one-mcpInstall dependencies:
uv syncAdd the following configuration to your MCP Client settings:
{ "mcpServers": { "akshare-one-mcp": { "command": "uv", "args": [ "--directory", "/path/to/akshare-one-mcp", "run", "akshare-one-mcp" ] } } }
Technical Indicators Reference
The get_hist_data tool supports the following technical indicators:
Trend Indicators
Moving Averages: SMA (Simple Moving Average), EMA (Exponential Moving Average)
Trend Tracking: MACD (Moving Average Convergence Divergence), APO (Absolute Price Oscillator), PPO (Percentage Price Oscillator)
Rate of Change: ROC (Rate of Change), ROCP (Rate of Change Percentage), ROCR (Rate of Change Ratio), ROCR100
Other: TRIX (Triple Exponential Moving Average), ULTOSC (Ultimate Oscillator)
Momentum Indicators
Relative Strength: RSI (Relative Strength Index), CCI (Commodity Channel Index)
Trend Strength: ADX (Average Directional Index), DX (Directional Index)
Money Flow: MFI (Money Flow Index), MOM (Momentum), CMO (Chande Momentum Oscillator), WILLR (Williams %R)
Volatility Indicators
Bollinger Bands: BOLL (Bollinger Bands)
Average True Range: ATR (Average True Range)
Parabolic SAR: SAR (Parabolic Stop and Reverse)
Volume Indicators
Volume: OBV (On-Balance Volume), AD (Accumulation/Distribution Line), ADOSC (Accumulation/Distribution Oscillator)
Other Indicators
Stochastic: STOCH (Stochastic Oscillator)
Aroon: AROON (Aroon Indicator), AROONOSC (Aroon Oscillator)
Balance of Power: BOP (Balance of Power)
Directional Indicators: MINUS_DI, MINUS_DM, PLUS_DI, PLUS_DM
Time Series Forecast: TSF (Time Series Forecast)
Available Tools
9 toolsget_balance_sheetGet Balance SheetAInspect
Get company balance sheet data.
With fallback on, the sources are tried as 'sina' and 'eastmoney_direct', starting with the requested one.
| Name | Required | Description | Default |
|---|---|---|---|
| source | No | Data source | sina |
| symbol | Yes | Stock symbol/ticker (e.g. '000001') | |
| fallback | No | Try the domain's other data sources when this one fails or has no data | |
| recent_n | No | Number of most recent records to return |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations, so the description carries the behavioral disclosure burden. It does add a meaningful non-obvious behavior: when fallback is enabled, sources are tried as 'sina' and 'eastmoney_direct', starting with the requested one. However, it does not describe failure behavior when fallback is disabled, potential output variations between sources, or explicit read-only/safety characteristics beyond the word 'Get'.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two concise sentences with no filler or repetition. The core purpose is front-loaded in the first sentence, and the fallback behavior is efficiently explained in the second. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema and fully described parameters, the description is mostly sufficient for an agent to call the tool correctly. It covers the main non-obvious behavior (fallback ordering), though it could add explicit sibling-selection guidance and failure behavior. These gaps are minor given the schema richness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds value by clarifying the interaction between `source` and `fallback`: it specifies the exact fallback order and that the requested source is tried first. This goes slightly beyond the schema's generic 'try the domain's other data sources' wording.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb and resource: 'Get company balance sheet data.' This distinguishes it from sibling tools like get_income_statement and get_cash_flow, which target different financial statements. The purpose is immediately recognizable and unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not explicitly state when to use this tool versus alternatives such as get_income_statement or get_cash_flow. The intended usage is implied by the phrase 'balance sheet data,' but no direct when-to-use or when-not-to-use guidance is provided. The fallback sentence explains source selection behavior, not usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_cash_flowGet Cash FlowAInspect
Get company cash flow statement data.
With fallback on, the sources are tried as 'sina' and 'eastmoney_direct', starting with the requested one.
| Name | Required | Description | Default |
|---|---|---|---|
| source | No | Data source | sina |
| symbol | Yes | Stock symbol/ticker (e.g. '000001') | |
| fallback | No | Try the domain's other data sources when this one fails or has no data | |
| recent_n | No | Number of most recent records to return |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry behavioral disclosure. It does add useful fallback ordering behavior ('sina' then 'eastmoney_direct'), but it omits other behavioral details such as error handling, data availability, or whether returned data is normalized. The read-only nature is implicit from 'get' rather than explicit.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise: one purpose sentence and one behavioral sentence. It front-loads the main purpose and devotes a short paragraph to the fallback behavior. Every sentence earns its place without padding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simple read-only nature, full schema documentation, and presence of an output schema, the description is largely sufficient. It explains the most non-obvious behavior (fallback ordering) but lacks any hint about when to prefer this tool over its financial-statement siblings.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds meaningful detail beyond the schema by explicitly naming the fallback source order and clarifying that the requested source is tried first. This helps agents understand how the 'source' and 'fallback' parameters interact.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Get company cash flow statement data'. This clearly distinguishes it from sibling tools like get_balance_sheet and get_income_statement, making its purpose immediately recognizable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus sibling financial statement tools. It only explains fallback behavior, not selection criteria or exclusions. An agent must infer that cash flow data is requested when cash flow statements are needed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_financial_metricsGet Financial MetricsAInspect
Get key financial metrics from the three major financial statements.
With fallback on, the sources are tried as 'sina' and 'eastmoney_direct', starting with the requested one.
| Name | Required | Description | Default |
|---|---|---|---|
| source | No | Data source | eastmoney_direct |
| symbol | Yes | Stock symbol/ticker (e.g. '000001') | |
| fallback | No | Try the domain's other data sources when this one fails or has no data | |
| recent_n | No | Number of most recent records to return |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry the full burden of behavioral disclosure. It adds value by explaining the fallback logic: when fallback is on, sources are tried in a specific order ('sina' then 'eastmoney_direct'), which is not stated in the schema. However, it does not disclose error handling, return format expectations, or whether the operation is read-only, though a 'get' implies safety. The fallback detail is useful but limited.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no filler. The first sentence states the core purpose, and the second provides a key behavioral detail. It is front-loaded with the primary function and avoids redundancy with the schema. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that an output schema exists, the description does not need to explain return values. It covers the tool's purpose, the consolidation of three statements, and the critical fallback behavior. It could mention what specific metrics are included, but that is likely covered by the output schema. Overall, it provides sufficient context for an agent to call the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so parameters are already documented. The description adds meaning to the interaction between 'source' and 'fallback' by clarifying the ordering of source attempts, which is not evident from the schema alone. This deepens the understanding of behavior, exceeding the baseline of 3 for full schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves 'key financial metrics from the three major financial statements,' a specific verb and resource. It distinguishes itself from siblings like get_balance_sheet, get_income_statement, and get_cash_flow by explicitly referencing all three statements at once. There is no ambiguity or tautology.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies this tool is for consolidated financial metrics across statements, which differentiates it from the individual statement tools, but it does not explicitly state when to choose this over siblings. There is no mention of alternatives or conditions for use, leaving the selection to inference. The fallback explanation provides some context for sourcing but not for tool choice.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_hist_dataGet Hist DataAInspect
Get historical stock market data. 'eastmoney_direct' support all A,B,H shares
With fallback on, the sources are tried as 'eastmoney', 'eastmoney_direct', 'sina' and 'ths', starting with the requested one.
| Name | Required | Description | Default |
|---|---|---|---|
| adjust | No | Adjustment type | none |
| source | No | Data source | eastmoney |
| symbol | Yes | Stock symbol/ticker (e.g. '000001') | |
| end_date | No | End date in YYYY-MM-DD format | 2030-12-31 |
| fallback | No | Try the domain's other data sources when this one fails or has no data | |
| interval | No | Time interval | day |
| recent_n | No | Number of most recent records to return | |
| start_date | No | Start date in YYYY-MM-DD format | 1970-01-01 |
| indicators_list | No | Technical indicators to add | |
| interval_multiplier | No | Interval multiplier |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, and it does disclose one genuinely useful behavior: the fallback source ordering ('eastmoney', 'eastmoney_direct', 'sina', 'ths' starting with the requested one). It does not state read-only status, what happens when all sources fail, or return characteristics.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with purpose, followed by the source-coverage caveat and the fallback ordering. The second sentence is slightly awkwardly phrased but every clause carries information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 10-parameter read tool with a full output schema and 100% schema coverage, the description covers the main hidden behavior (source fallback ordering and coverage). Remaining gaps—read-only confirmation and failure behavior—are minor given the output schema and rich parameter documentation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3; the description adds real value by explaining the semantic difference between source values ('eastmoney_direct' supports all A,B,H shares) and the precise order in which sources are tried for `fallback`, which the schema only describes generically.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Get historical stock market data'), which clearly distinguishes it from the realtime sibling get_realtime_data. It does not name any sibling explicitly, so it stops short of full sibling differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied rather than stated: 'historical' hints at when to pick this over get_realtime_data, and the note that 'eastmoney_direct' supports all A,B,H shares is a partial hint about source selection. There is no explicit when/when-not guidance or named alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_income_statementGet Income StatementAInspect
Get company income statement data.
With fallback on, the sources are tried as 'sina' and 'eastmoney_direct', starting with the requested one.
| Name | Required | Description | Default |
|---|---|---|---|
| source | No | Data source | sina |
| symbol | Yes | Stock symbol/ticker (e.g. '000001') | |
| fallback | No | Try the domain's other data sources when this one fails or has no data | |
| recent_n | No | Number of most recent records to return |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the behavioral disclosure burden. It clearly explains the non-obvious fallback behavior: with fallback on, sources are tried as 'sina' and 'eastmoney_direct', starting with the requested one. This adds meaningful insight beyond the schema and helps the agent anticipate multi-source selection behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded with the core purpose in the first sentence. The second sentence adds genuinely useful behavioral detail without redundancy or fluff. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema exists, return-value documentation is unnecessary. The description covers the main behavioral nuance (fallback source ordering) and the schema covers parameter semantics. Minor gaps remain around when to prefer each source and what happens when both sources fail, but these are not blocking for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all four parameters. The description adds some value by clarifying how the fallback parameter interacts with source ordering, but it does not elaborate on symbol or recent_n semantics beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Get') and a specific resource ('company income statement data'), making the tool's purpose immediately clear. It also distinguishes itself naturally from sibling tools like get_balance_sheet and get_cash_flow, which target different financial statements.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage: use this when you need income statement data. However, it does not explicitly explain when to choose this over the sibling financial tools, nor does it provide exclusions or alternative recommendations. The fallback explanation is about behavior, not usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_inner_trade_dataGet Inner Trade DataBInspect
Get company insider trading data.
| Name | Required | Description | Default |
|---|---|---|---|
| symbol | Yes | Stock symbol/ticker (e.g. '000001') |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It implies a read operation through 'Get' but does not mention authentication needs, rate limits, data coverage, or any caveats about insider trading data.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence with no filler, front-loading the action and resource. For a one-parameter tool, this is appropriately sized.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter getter with an output schema, the description is mostly sufficient for basic invocation, but it lacks usage guidance and behavioral context because no annotations exist. The output schema covers return values, so this is not a complete failure.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already documents the symbol parameter with an example, so coverage is 100%. The description adds the context that the data is company-level insider trading but does not provide any additional parameter semantics beyond what the schema already states.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource: 'Get company insider trading data.' It clearly states what the tool does and the domain is distinct from sibling tools like get_news_data or get_balance_sheet, though it does not explicitly differentiate itself.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus the available sibling tools. There are no prerequisites, no exclusion cases, and no mention of alternatives, leaving the agent to infer usage solely from the tool name and description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_news_dataGet News DataAInspect
Get stock-related news data.
With fallback on, the sources are tried as 'eastmoney' and 'ths', starting with the requested one.
| Name | Required | Description | Default |
|---|---|---|---|
| source | No | Data source | eastmoney |
| symbol | Yes | Stock symbol/ticker (e.g. '000001') | |
| fallback | No | Try the domain's other data sources when this one fails or has no data | |
| recent_n | No | Number of most recent records to return |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It usefully discloses fallback ordering—trying the requested source first, then the other source—but it does not describe permissions, rate limits, failure behavior beyond fallback, or other operational details.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with no waste. The core purpose is front-loaded, followed by the key fallback behavior.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has a full input schema, an output schema, and clear parameter documentation. The description supplies the important fallback sequencing, and return values need not be explained because an output schema exists, though additional usage context would make it stronger.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is already 100%, so the baseline is 3. The description adds meaning to the fallback parameter by specifying that sources are tried as 'eastmoney' and 'ths' starting with the requested one, which clarifies behavior beyond the schema's generic fallback text.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Get stock-related news data.' This clearly separates it from sibling tools that handle financial statements, historical data, or realtime data, though it does not explicitly name those alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by 'stock-related news data,' so an agent can infer it should call this for news rather than financial metrics or price history. However, there is no explicit guidance on when not to use it or how it compares with any alternative news-related tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_realtime_dataGet Realtime DataAInspect
Get real-time stock market data. 'eastmoney_direct' support all A,B,H shares
With fallback on, the sources are tried as 'eastmoney_direct', 'eastmoney', 'xueqiu' and 'ths', starting with the requested one.
| Name | Required | Description | Default |
|---|---|---|---|
| source | No | Data source | eastmoney_direct |
| symbol | No | Stock symbol/ticker (e.g. '000001') | |
| fallback | No | Try the domain's other data sources when this one fails or has no data |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It usefully discloses the fallback source ordering and that 'eastmoney_direct' supports all A/B/H shares, but it does not mention read-only nature, rate limits, data latency, or behavior when no data exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short and front-loads the core purpose. However, the second sentence is grammatically awkward ('support all' and an incomplete clause), slightly reducing clarity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The output schema covers return values and the schema covers parameters, but the description does not explain what happens when symbol is null, nor which sources support which market types beyond a note about 'eastmoney_direct'. For a tool with three optional parameters and multiple sources, this leaves some ambiguity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds value beyond the schema by explaining that 'eastmoney_direct' supports all A, B, and H shares and by specifying the exact fallback ordering among sources.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific verb and resource: getting real-time stock market data. The 'real-time' qualifier implicitly distinguishes it from sibling get_hist_data, but it does not explicitly name or contrast with that sibling.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by 'real-time stock market data', but there is no explicit guidance on when to choose this tool over get_hist_data or other siblings. The fallback behavior is described, but not the decision criteria for using this tool versus alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_time_infoGet Time InfoBInspect
Get current time with ISO format, timestamp, and the last trading day.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the burden of behavioral transparency. It mentions what it returns (ISO format, timestamp, last trading day) but provides no detail on what the ISO format means, how 'last trading day' is calculated, whether it's market-specific, or any timezone assumptions. The agent lacks critical context about the behavior of this tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, a single sentence that lists the key outputs. It is efficient and front-loaded with the purpose. Could be considered slightly terse, but for a no-parameter tool, it is appropriate. No fluff or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has no parameters and an output schema exists (per context signals), so the description does not need to detail return values in depth. However, since there are no annotations, the description could add more context about timezone handling, the definition of 'last trading day', and whether it reflects market-specific calendar. The description is minimally complete but leaves some behavioral gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so there are no parameters to document. The description explains the return values (ISO time, timestamp, last trading day), which adds meaning about what the tool provides. Since there are no parameters, the baseline of 4 is appropriate because the description effectively explains what the tool gives.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description states a clear purpose: get current time with ISO format, timestamp, and last trading day. The verb 'get' and resource 'time info' are specific. It distinguishes from siblings because no other sibling tool deals with time/calendar info, though it doesn't explicitly mention that it's the only one providing time information. Overall, it's clear enough.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use it: when you need current time in ISO format, timestamp, or last trading day. It doesn't explicitly state when not to use it or mention alternatives. Given that siblings are all market data tools, a simple need for time info would route here. No explicit exclusions, but not fully explicit about when not to use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
3 tool updates
v0.5.0- Changed
get_hist_data1 field changed- changed
Input schema / properties / source / enumPrevious value: -[ - "eastmoney", - "eastmoney_direct", - "sina" -]New value: +[ + "eastmoney", + "eastmoney_direct", + "sina", + "ths" +]
- Changed
get_news_data2 fields changed- added
Input schema / properties / fallbackAdded value: +{ + "default": true, + "description": "Try the domain's other data sources when this one fails or has no data", + "type": "boolean" +} - added
Input schema / properties / sourceAdded value: +{ + "default": "eastmoney", + "description": "Data source", + "enum": [ + "eastmoney", + "ths" + ], + "type": "string" +}
- Changed
get_realtime_data1 field changed- changed
Input schema / properties / source / enumPrevious value: -[ - "eastmoney_direct", - "eastmoney", - "xueqiu" -]New value: +[ + "eastmoney_direct", + "eastmoney", + "xueqiu", + "ths" +]
6 tool updates
v0.4.0- Changed
get_balance_sheet2 fields changed- added
Input schema / properties / fallbackAdded value: +{ + "default": true, + "description": "Try the domain's other data sources when this one fails or has no data", + "type": "boolean" +} - added
Input schema / properties / sourceAdded value: +{ + "default": "sina", + "description": "Data source", + "enum": [ + "sina", + "eastmoney_direct" + ], + "type": "string" +}
- Changed
get_cash_flow3 fields changed- added
Input schema / properties / fallbackAdded value: +{ + "default": true, + "description": "Try the domain's other data sources when this one fails or has no data", + "type": "boolean" +} - removed
Input schema / properties / source / constRemoved value: -"sina" - added
Input schema / properties / source / enumAdded value: +[ + "sina", + "eastmoney_direct" +]
- Changed
get_financial_metrics2 fields changed- added
Input schema / properties / fallbackAdded value: +{ + "default": true, + "description": "Try the domain's other data sources when this one fails or has no data", + "type": "boolean" +} - added
Input schema / properties / sourceAdded value: +{ + "default": "eastmoney_direct", + "description": "Data source", + "enum": [ + "sina", + "eastmoney_direct" + ], + "type": "string" +}
- Changed
get_hist_data1 field changed- added
Input schema / properties / fallbackAdded value: +{ + "default": true, + "description": "Try the domain's other data sources when this one fails or has no data", + "type": "boolean" +}
- Changed
get_income_statement2 fields changed- added
Input schema / properties / fallbackAdded value: +{ + "default": true, + "description": "Try the domain's other data sources when this one fails or has no data", + "type": "boolean" +} - added
Input schema / properties / sourceAdded value: +{ + "default": "sina", + "description": "Data source", + "enum": [ + "sina", + "eastmoney_direct" + ], + "type": "string" +}
- Changed
get_realtime_data2 fields changed- added
Input schema / properties / fallbackAdded value: +{ + "default": true, + "description": "Try the domain's other data sources when this one fails or has no data", + "type": "boolean" +} - changed
Input schema / properties / source / enumPrevious value: -[ - "xueqiu", - "eastmoney", - "eastmoney_direct" -]New value: +[ + "eastmoney_direct", + "eastmoney", + "xueqiu" +]
TDQS
Scored across 9 tools
Each tool retrieves a distinct data category: news, balance sheet, cash flow, financial metrics, income statement, time, insider trades, historical prices, and realtime prices. The four financial-statement tools are related but clearly separated by resource, and get_financial_metrics is explicitly described as derived metrics rather than raw statement data.
All nine tools follow a consistent snake_case get_<resource> pattern. The resource names are readable and predictable, with no mixed conventions.
Nine tools is well within the appropriate range for a focused stock-data server. Each tool covers a separate data category, so none feels redundant or unnecessary.
The surface covers core price data, news, insider trades, and the three financial statements plus derived metrics. However, it lacks stock search/ticker lookup or basic company profile tools, which are notable gaps for an agent that needs to discover or identify securities.
Maintenance
Related MCP Connectors
MCP server giving AI agents one-connection access to China A-share market intelligence: financials,
China A-share market data for research, backtesting and AI agents via MCP.
China A-share market data over MCP: 22 tools for quotes, K-line, financials, money flow, top-trader boards, sectors, macro, convertible bonds and factor screening. Five tools need no API key, so you can connect and try it immediately.
MCP server for stocksense-ai documentation, generated by doc2mcp.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceMCP server that wraps SFC financial data API into 32 tools for comprehensive A-share market data, including real-time quotes, rankings, limit-up statistics, news, themes, financials, charts, research reports, and watchlists.-
- AlicenseNot gradedqualityCmaintenance基于Model Context Protocol (MCP) 的A股实时行情查询服务器,支持查询A股实时价格、历史K线数据、财务信息及市场概况。28 PyPI8MIT
- FlicenseNot gradedqualityDmaintenance提供股票数据查询的MCP服务器,支持股票信息、K线历史、财务指标等市场数据获取。1-
- AlicenseAqualityDmaintenanceAn MCP server that gives AI assistants direct, structured access to China A-share market data.3Apache 2.0