akshare-one-mcp
An MCP server for retrieving China stock market data via akshare, covering historical, real-time, news, financial statements, insider trades, and metrics.
Market data:
get_hist_datafor historical OHLCV data with intervals (minute/hour/day/week/month/year), adjustment (none/qfq/hfq), technical indicators, andrecent_nrecords;get_realtime_datafor live quotes from multiple sources.News:
get_news_datafor stock-related news by symbol.Financial statements:
get_balance_sheet,get_income_statement, andget_cash_flowfor the three major statements.Insider trading:
get_inner_trade_datafor company insider trading activity.Financial metrics:
get_financial_metricsfor key metrics derived from the three statements.Time utility:
get_time_infofor current time, ISO timestamp, and the last trading day.Source flexibility: Most tools support
sourceselection and automaticfallbackto alternative providers when a source fails or returns no data.
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_news_data and get_inner_trade_data, whose upstream exposes a single source, every 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 |
|
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') (default: 'eastmoney')fallback(boolean, optional): Try 'eastmoney', 'eastmoney_direct' and 'sina' 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') (default: 'eastmoney_direct')fallback(boolean, optional): Try 'eastmoney_direct', 'eastmoney' and 'xueqiu' in order when the chosen source fails or has no data (default: true; 'xueqiu' is skipped when no symbol is given, as it quotes one symbol at a time)
News & Information Tools
get_news_data
Get stock-related news data.
symbol(string, required): Stock coderecent_n(number, optional): Number of most recent records to return (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' and 'sina', 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 behavioral burden and does disclose a key non-obvious behavior: fallback order is 'eastmoney', 'eastmoney_direct', then 'sina', starting with the requested source. It also notes the coverage difference for A/B/H shares. It does not discuss errors or rate limits, but the output schema covers return expectations.
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, front-loaded with purpose, and every sentence conveys useful information about fallback and source coverage. A minor grammar issue ('support' instead of 'supports') and the slightly fragmented second sentence prevent a perfect score.
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 tool with a fully described input schema and an output schema, the description covers the non-obvious parts: fallback ordering and share-class source coverage. It does not explicitly explain interactions like recent_n versus date ranges, but those are left to the parameter descriptions and do not need restating here.
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 real value by explaining the source hierarchy and that 'eastmoney_direct' has broader share-class coverage. This helps the agent choose the `source` parameter and understand `fallback` behavior without repeating the schema's own field descriptions.
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?
Opens with a specific verb and object — 'Get historical stock market data' — which clearly distinguishes it from get_realtime_data, news, and financial-statement siblings. The additional note about 'eastmoney_direct' supporting A/B/H shares further clarifies the data scope.
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 word 'historical' gives clear context for when this tool applies, and the fallback sentence explains how source selection works in practice. It does not explicitly name alternatives like get_realtime_data or state when not to use this tool, so it stops short of full routing guidance.
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 DataCInspect
Get stock-related news data.
| Name | Required | Description | Default |
|---|---|---|---|
| symbol | Yes | Stock symbol/ticker (e.g. '000001') | |
| 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 is the sole source of behavioral context. It only says 'get', implying a read-only operation, but provides no details on ordering, date filtering, pagination, or data freshness. It also doesn't warn about any rate limits or access requirements.
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 definition is a single short sentence with no filler, which is efficient for such a simple tool. It is appropriately concise, though the available brevity could have been used to add a bit more usage context.
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 presence of an output schema and fully documented parameters covers the mechanics of calling the tool. The description is thin on when to use it and what 'news-related' means in practice, but for a simple parameterized GET, it is minimally adequate.
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 input schema fully documents both parameters—'symbol' with an example and 'recent_n' with a default and explanation—so the description adds no additional parameter meaning. Baseline 3 applies because schema coverage is 100%.
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 specific verb ('Get') and resource ('stock-related news data'), and this clearly differentiates it from sibling tools like 'get_hist_data' or 'get_realtime_data'. It is not maximally specific about what kind of news data is returned, but it is enough to distinguish the tool's function.
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 about when to prefer this tool over the nine siblings, nor any exclusions or alternative conditions. An agent must infer that it is for news-related queries, but the description never explicitly states this context.
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' and 'xueqiu', 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 provided, the description carries the full burden of behavioral disclosure. It does add useful behavior: the fallback source chain and that 'eastmoney_direct' supports A/B/H shares. However, it does not describe data freshness, error behavior, or what happens when fallback is disabled.
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. The second sentence efficiently explains the fallback mechanism. Minor grammar issues ('support all A,B,H shares') detract slightly, but no wasted words are present.
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 3-parameter read-oriented tool with full schema coverage and an output schema, the description is largely sufficient. It covers the main behavioral nuance (fallback order) and source scope. Missing only explicit 'when to use' guidance and source-specific limitations.
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 three parameters. The description adds a bit of context about source fallback and share-class support, but it does not materially expand on parameter semantics beyond what the schema 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 clearly states the tool's purpose: 'Get real-time stock market data.' It identifies the resource (stock market data) and the timing (realtime), which distinguishes it from sibling tools like get_hist_data or get_news_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?
The description implies the tool is for real-time stock data and explains the fallback source order, which gives some usage context. However, it does not explicitly state when to use this tool over the siblings, nor does it provide exclusions or guidance on choosing between the three sources.
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.
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
Most tools map cleanly to distinct resources (time, news, historical prices, realtime prices, financial statements, insider trades). The only potential overlap is get_financial_metrics, which summarizes data from the three statements but is still distinguishable as a derived-metrics tool.
All tools follow the same get_<data_type> snake_case convention, making the API surface predictable and easy to navigate. There are no mixed naming styles or vague verbs.
With 9 tools, the server is well-scoped for a financial data retrieval MCP. Each tool covers a meaningful data category without unnecessary duplication.
The server covers the core stock data lifecycle: time context, news, historical and realtime prices, financial statements, insider trades, and derived metrics. Missing auxiliary data like company profiles or dividend info, but no critical dead ends for typical use.
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线数据、财务信息及市场概况。8MIT
- FlicenseNot gradedqualityDmaintenance提供股票数据查询的MCP服务器,支持股票信息、K线历史、财务指标等市场数据获取。1-
- AlicenseAqualityDmaintenanceAn MCP server that gives AI assistants direct, structured access to China A-share market data.3Apache 2.0