AgentLadle MCP AKShare
Provides 46 financial data tools for AI assistants covering A-share, HK, US markets, macroeconomics, funds, and derivatives, powered by AKShare.
README
AgentLadle MCP AKShare
English | ไธญๆ
๐จ๐ณ China A-Share Market โ Cloud-hosted MCP for annual financial reports (2023-2025). Read more | Get API Key
A MCP (Model Context Protocol) server that provides 46 financial data tools for AI assistants, covering A-share, HK, US markets, macroeconomics, funds, and derivatives โ powered by AKShare.
It enables AI assistants (Claude, Cursor, etc.) to access financial market data through 46 semantic tools โ from candlestick history to macro indicators, with unified symbol format, normalized output, and built-in caching/rate-limiting.
Features
- 46 MCP tools across 11 scopes: market, quote, flow, fundamentals, shareholders, content, sector, sentiment, IPO, macro, derivatives
- Unified symbol format:
<code>.<market>(e.g.000001.SZ,00700.HK,AAPL.US) โ automatically converted to each AKShare function's required format - Normalized output: Chinese column names โ English snake_case with unit conversion (ไธๅ โๅ , ไบฟ่กโ่ก)
- Built-in infrastructure: TTL cache (history 24h / realtime 10s), token-bucket rate limiter (10 QPS global), retry with fallback sources,
asyncio.to_threadasync wrapping - outputSchema: Each tool returns a typed
ToolResponsedataclass with structured output schema - Tool annotations:
readOnlyHint,idempotentHint,openWorldHinton all tools - Scope-based loading: Load a subset of tools via
AKSHARE_MCP_SCOPESenv var (e.g.market,quote) - AI workflow hints: Each response includes a
hintfield guiding the next logical step - Chinese keyword handling: AKShare's Chinese enum parameters (e.g.
ๅๅ่ต้) mapped to English (direction=north) - Zero-config install โ one line to add to your MCP client, no clone or manual setup needed
- Pure Python, cross-platform (Windows / macOS / Linux)
Prerequisites
- Python 3.10+ โ Download Python
- uv โ Install uv
Note: After installing uv, restart your terminal and MCP client (e.g. Claude Desktop, Cursor) to ensure the
uvcommand is recognized.
Quick Start
Add to your MCP client configuration (Claude Desktop, Cursor, etc.):
{
"mcpServers": {
"mcp-akshare": {
"command": "uvx",
"args": ["agentladle-mcp-akshare"]
}
}
}
That's it. uvx will automatically download the package and its dependencies from PyPI โ no clone, no manual install, no path configuration.
Optional: Scope filtering
To load only specific scopes (useful for clients with tool count limits):
{
"mcpServers": {
"mcp-akshare": {
"command": "uvx",
"args": ["agentladle-mcp-akshare"],
"env": {
"AKSHARE_MCP_SCOPES": "market,quote,fundamentals"
}
}
}
}
Alternative: pip install
If you prefer managing the environment yourself:
pip install agentladle-mcp-akshare
Then configure:
{
"mcpServers": {
"mcp-akshare": {
"command": "agentladle-mcp-akshare"
}
}
}
Alternative: Run from source (local development)
Clone the repository and run directly:
git clone https://github.com/agentladle/mcp-akshare.git
Then configure your MCP client:
{
"mcpServers": {
"mcp-akshare": {
"command": "uv",
"args": ["run", "--directory", "/path/to/mcp-akshare", "agentladle-mcp-akshare"]
}
}
}
Replace /path/to/mcp-akshare with the actual path to the cloned repository.
Data Flow
AKShare Library (1.18.40) MCP AKShare Server
โโโโโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
stock_zh_a_hist() โโโ get_candlesticks()
stock_zh_a_spot_em() โโโ get_quote()
stock_financial_*() โโโ get_financial_statement/metrics()
stock_hsgt_hist_em() โโโ get_northbound_flow()
stock_zt_pool_em() โโโ get_limit_up_pool()
macro_china_gdp() โโโ get_macro_data()
fund_etf_hist_em() โโโ get_fund_nav_history()
โ
โโโ Symbol Normalizer (<code>.<market> โ func-specific format)
โโโ Param Normalizer (period/adjust/date/keyword enums)
โโโ Field Mapper (ไธญๆๅๅ โ English snake_case + unit conversion)
โโโ TTL Cache (history 24h / realtime 10s / fundamental 1h)
โโโ Rate Limiter (10 QPS global, 2 QPS per-interface)
โโโ Retry + Fallback (primary โ backup source)
โ
โผ
ToolResponse { status, data, hint, cached, source, updated_at }
Tools
46 tools across 11 scopes. All tools are read-only with readOnlyHint=true.
Scope: market (4 tools)
Tool 1: get_trading_days
Get trading days for a market between dates.
| Parameter | Type | Required | Description |
|---|---|---|---|
market |
string | โ | CN / HK / US |
start |
string | โ | Start date YYYY-MM-DD |
end |
string | โ | End date YYYY-MM-DD |
Tool 2: get_market_status
Get current trading status for all markets (CN/HK/US). No parameters.
Tool 3: get_security_list
List securities for a market.
| Parameter | Type | Required | Description |
|---|---|---|---|
market |
string | โ | CN / HK / US |
board |
string | โ | A-share board: main/chinext/star/bse (default: all) |
count |
int | โ | Max results (default 100, max 1000) |
offset |
int | โ | Pagination offset (default 0) |
Tool 4: get_exchange_rate
Get major currency exchange rates.
| Parameter | Type | Required | Description |
|---|---|---|---|
base |
string | โ | Base currency (default CNY) |
Scope: quote (5 tools)
Tool 5: get_candlesticks
Get candlestick (OHLCV) data for any asset class โ routes to the correct AKShare function based on asset_class ร period.
| Parameter | Type | Required | Description |
|---|---|---|---|
symbol |
string | โ | Security symbol (e.g. 000001.SZ, AAPL.US, 000300.INDEX) |
asset_class |
string | โ | stock/index/fund/futures (inferred from suffix if omitted) |
period |
string | โ | 1m/5m/15m/30m/60m/day/week/month (default day) |
start |
string | โ | Start date YYYY-MM-DD |
end |
string | โ | End date YYYY-MM-DD |
adjust |
string | โ | none/qfq/hfq (default none) |
count |
int | โ | Recent N bars (default 100, max 1000) |
Tool 6: get_quote
Get latest quote snapshot for one or more symbols.
| Parameter | Type | Required | Description |
|---|---|---|---|
symbols |
string[] | โ | List of security symbols |
Tool 7: get_intraday
Get intraday time-share data.
| Parameter | Type | Required | Description |
|---|---|---|---|
symbol |
string | โ | Security symbol |
date |
string | โ | Date YYYY-MM-DD (default: today) |
Tool 8: get_depth
Get order book (bid/ask depth).
| Parameter | Type | Required | Description |
|---|---|---|---|
symbol |
string | โ | Security symbol |
Tool 9: get_trades
Get recent trade ticks.
| Parameter | Type | Required | Description |
|---|---|---|---|
symbol |
string | โ | Security symbol |
count |
int | โ | Number of trades (default 100, max 1000) |
Scope: flow (4 tools)
Tool 10: get_capital_flow
Get capital flow time series for a stock.
| Parameter | Type | Required | Description |
|---|---|---|---|
symbol |
string | โ | Stock symbol |
period |
string | โ | 1d/3d/5d/10d (default 1d) |
Tool 11: get_northbound_flow
Get northbound/southbound capital flow (Stock Connect).
| Parameter | Type | Required | Description |
|---|---|---|---|
direction |
string | โ | north/south (default north) |
scope |
string | โ | market/stock (default market) |
symbol |
string | โ | Individual stock (when scope=stock) |
start |
string | โ | Start date YYYY-MM-DD |
end |
string | โ | End date YYYY-MM-DD |
Tool 12: get_margin_trading
Get margin trading data (financing + short selling).
| Parameter | Type | Required | Description |
|---|---|---|---|
symbol |
string | โ | Stock symbol (empty = market aggregate) |
start |
string | โ | Start date YYYY-MM-DD |
end |
string | โ | End date YYYY-MM-DD |
Tool 13: get_block_trade
Get block trade (ๅคงๅฎไบคๆ) records.
| Parameter | Type | Required | Description |
|---|---|---|---|
symbol |
string | โ | Stock symbol (empty = all market) |
start |
string | โ | Start date YYYY-MM-DD |
end |
string | โ | End date YYYY-MM-DD |
Scope: fundamentals (8 tools)
| # | Tool | Key Parameters |
|---|---|---|
| 14 | get_company |
symbol |
| 15 | get_financial_statement |
symbol, kind (IS/BS/CF/ALL), report, count |
| 16 | get_financial_report_latest |
symbol |
| 17 | get_financial_metrics |
symbol, count |
| 18 | get_valuation |
symbol |
| 19 | get_valuation_history |
symbol, metric (pe/pb/ps), start, end |
| 20 | get_dividend |
symbol |
| 21 | get_business_segments |
symbol, by (product/region) |
Scope: shareholders (5 tools)
| # | Tool | Key Parameters |
|---|---|---|
| 22 | get_shareholder_top |
symbol, holder_type, count |
| 23 | get_shareholder_count |
symbol |
| 24 | get_institutional_holding |
symbol, report_date |
| 25 | get_insider_trading |
symbol |
| 26 | get_restricted_release |
symbol, start, end |
Scope: content (4 tools)
| # | Tool | Key Parameters |
|---|---|---|
| 27 | get_news |
symbol, count |
| 28 | get_news_search |
keyword, count |
| 29 | get_filings |
symbol, count |
| 30 | get_research_report |
symbol, count |
Scope: sector (4 tools)
| # | Tool | Key Parameters |
|---|---|---|
| 31 | get_index_constituent |
symbol (e.g. 000300.INDEX) |
| 32 | get_sector_quote |
sector_type (industry/concept), sector_name |
| 33 | get_sector_constituent |
sector_type, sector_name (Chinese) |
| 34 | get_industry_rank |
sector_type, count |
Scope: sentiment (6 tools)
| # | Tool | Key Parameters |
|---|---|---|
| 35 | get_limit_up_pool |
date |
| 36 | get_limit_down_pool |
date |
| 37 | get_dragon_tiger_list |
start, end, symbol |
| 38 | get_hot_rank |
market, rank_type, count |
| 39 | get_market_anomaly |
anomaly_type (rocket/dive/large_buy/large_sell), count |
| 40 | get_market_summary |
market |
Scope: ipo (2 tools)
| # | Tool | Key Parameters |
|---|---|---|
| 41 | get_ipo_calendar |
market (CN/HK) |
| 42 | get_ipo_detail |
symbol |
Scope: macro (4 tools)
| # | Tool | Key Parameters |
|---|---|---|
| 43 | list_macro_indicators |
keyword, country, count |
| 44 | get_macro_data |
indicator_code, start, end |
| 45 | get_interest_rate |
rate_type (lpr/shibor/libor), start, end |
| 46 | get_bond_yield_curve |
country (CN/US), date |
Scope: derivatives (8 tools)
| # | Tool | Key Parameters |
|---|---|---|
| 47* | get_fund_quote |
symbols, fund_type (etf/open) |
| 48* | get_fund_nav_history |
symbol, start, end, count |
| 49* | get_fund_holding |
symbol, report_date |
| 50 | get_futures_quote |
exchange (SHFE/DCE/CZCE/CFFEX/INE) |
| 51 | get_option_quote |
exchange (SSE/SZSE) |
| 52 | get_convertible_bond_value |
symbol |
| 53 | get_forex_quote |
pairs |
| 54 | get_reits_quote |
symbol |
*Tools 47-49 cover fund data within the derivatives scope.
Configuration
On first run, a default config file is created at ~/.agentladle/mcp-akshare/config.yaml:
# MCP AKShare Server Configuration
cache:
ttl_history: 86400 # 24h โ historical daily data
ttl_realtime: 10 # 10s โ real-time quotes
ttl_fundamental: 3600 # 1h โ financial statements
ttl_calendar: 604800 # 7d โ trading calendar
ttl_company: 86400 # 1d โ company basic info
ttl_news: 300 # 5m โ news
max_size: 200 # max cached entries
ratelimit:
global_qps: 10 # global 10 QPS
per_interface_qps: 2 # per-interface 2 QPS
retry:
max_retries: 1
timeout: 30.0
retry_delay: 1.0
# Comma-separated scope list (empty = all scopes)
# Available: market,quote,flow,fundamentals,shareholders,content,sector,sentiment,ipo,macro,derivatives
scopes: []
Environment Variables
Configuration can be overridden via environment variables (highest priority):
| Variable | Description | Default |
|---|---|---|
AKSHARE_MCP_SCOPES |
Comma-separated scopes to load (empty = all) | "" (all) |
AKSHARE_MCP_GLOBAL_QPS |
Global QPS limit | 10 |
AKSHARE_MCP_PER_IF_QPS |
Per-interface QPS limit | 2 |
AKSHARE_MCP_TIMEOUT |
Request timeout (seconds) | 30 |
AKSHARE_MCP_MAX_RETRIES |
Max retry attempts | 1 |
AKSHARE_MCP_TTL_HISTORY |
Cache TTL for historical data (seconds) | 86400 |
AKSHARE_MCP_TTL_REALTIME |
Cache TTL for real-time data (seconds) | 10 |
Data Directory Structure
~/.agentladle/mcp-akshare/
โโโ config.yaml # Configuration (auto-created)
โโโ data/ # Data directory
Example Usage
The tools are designed with an EAFP (Easier to Ask for Forgiveness than Permission) approach. AI assistants should directly invoke data retrieval tools and rely on the hint field for workflow guidance.
Scenario A: Get stock price history
User: "What's Apple's stock price trend over the last 30 days?"
1. get_candlesticks(symbol="AAPL.US", period="day", count=30)
โ Returns 30 daily OHLCV bars.
โ hint: "Use get_quote for real-time price, or get_financial_metrics for fundamentals."
Scenario B: Fundamental analysis workflow
User: "Analyze Ping An Bank's fundamentals"
1. get_company(symbol="000001.SZ")
โ Returns company overview (industry, listing date, shares).
2. get_financial_metrics(symbol="000001.SZ", count=8)
โ Returns ROE, ROA, margins, debt ratio for 8 periods.
3. get_valuation(symbol="000001.SZ")
โ Returns current PE, PB, PS, dividend yield.
โ hint: "Use get_valuation_history for PE/PB trend."
Scenario C: Discover valid symbols
User: "What stocks are in the CSI 300 index?"
1. get_index_constituent(symbol="000300.INDEX")
โ Returns 300 constituent stocks with weights.
2. get_candlesticks(symbol="600519.SH", count=10)
โ Get candlestick data for a specific constituent.
Scenario D: Market sentiment
User: "How's the A-share market doing today?"
1. get_market_summary(market="CN")
โ Returns up/down/flat counts, limit-up/down counts, total turnover.
2. get_limit_up_pool()
โ Returns today's limit-up stocks with reasons.
โ hint: "Check consecutive_days for multi-day limit-ups."
Tech Stack
| Component | Choice | Purpose |
|---|---|---|
| MCP Framework | mcp[cli] (FastMCP) |
MCP server with stdio/streamable-http transport |
| Data Source | akshare>=1.18.40 |
1086+ financial data interfaces (A-share, HK, US, macro, funds) |
| Config | pyyaml |
YAML configuration file |
| Async | asyncio.to_thread |
Wrap sync akshare calls in async MCP handlers |
| Cache | Built-in TTLCache | TTL + LRU eviction, per-category TTL |
| Rate Limit | Built-in TokenBucket | Token bucket algorithm, global + per-interface |
| Output Types | dataclasses |
Structured outputSchema (no pydantic dependency) |
| Build | hatchling |
PEP 621 standard build backend |
| Package Manager | uv |
Fast dependency resolution + uv.lock |
Project Structure
src/akshare_mcp/
โโโ __init__.py # Package version
โโโ __main__.py # python -m entry point
โโโ server.py # FastMCP init + tool registration + logging (stderr)
โโโ config.py # Config loading (~/.agentladle/mcp-akshare/config.yaml, singleton)
โโโ instances.py # Service singletons (lazy-loaded)
โโโ models.py # Internal data models (dataclass)
โโโ response.py # Response builders (success/error/skipped + hint)
โโโ scopes.py # 11 scope definitions + tool mapping
โโโ tools/ # Tool layer (thin: parameter validation + response wrapping)
โ โโโ market.py # scope: market (4 tools)
โ โโโ quote.py # scope: quote (5 tools)
โ โโโ flow.py # scope: flow (4 tools)
โ โโโ fundamental.py # scope: fundamentals (8 tools)
โ โโโ shareholder.py # scope: shareholders (5 tools)
โ โโโ news.py # scope: content (4 tools)
โ โโโ sector.py # scope: sector (4 tools)
โ โโโ sentiment.py # scope: sentiment (6 tools)
โ โโโ ipo.py # scope: ipo (2 tools)
โ โโโ macro.py # scope: macro (4 tools)
โ โโโ derivative.py # scope: derivatives (8 tools)
โโโ services/ # Business layer (thick: core logic)
โ โโโ base_service.py # Base class with config/retry accessors
โ โโโ market_service.py # Trading days, candlesticks, quotes, depth
โ โโโ fundamental_service.py # Financials, valuation, shareholders, IPO
โ โโโ flow_service.py # Capital flow, northbound, margin, block trade
โ โโโ news_service.py # News, filings, research reports
โ โโโ sentiment_service.py # Limit pools, dragon tiger, anomaly, summary
โ โโโ macro_service.py # Macro indicators, interest rates, bond yields
โ โโโ sector_service.py # Index constituents, sector quotes/rank
โ โโโ fund_service.py # Fund quote, NAV, holdings
โ โโโ derivative_service.py # Futures, options, bonds, forex, REITs
โ โโโ symbol_normalizer.py # Unified <code>.<market> โ function-specific format
โ โโโ param_normalizer.py # Period/adjust/date/keyword enum mapping
โ โโโ field_mapper.py # Chinese column โ English snake_case + unit conversion
โโโ output/ # OutputSchema types (Longbridge-style)
โ โโโ common.py # ToolResponse wrapper
โ โโโ market.py # TradingDayItem, SecurityItem, ...
โ โโโ quote.py # CandlestickItem, QuoteItem, DepthOutput, ...
โ โโโ flow.py # CapitalFlowItem, NorthboundFlowItem, ...
โ โโโ fundamental.py # CompanyInfo, FinancialMetricItem, ValuationData, ...
โ โโโ shareholder.py # ShareholderItem, InsiderTradeItem, ...
โ โโโ content.py # NewsItem, FilingItem, ResearchReportItem
โ โโโ sector.py # IndexConstituentItem, SectorQuoteItem, ...
โ โโโ sentiment.py # LimitPoolItem, DragonTigerItem, MarketSummary, ...
โ โโโ ipo.py # IPOCalendarItem, IPODetail
โ โโโ macro.py # MacroIndicatorItem, InterestRateItem, ...
โ โโโ derivatives.py # FundQuoteItem, FuturesQuoteItem, OptionQuoteItem, ...
โโโ infra/ # Infrastructure
โโโ cache.py # TTL cache with LRU eviction
โโโ ratelimit.py # Token bucket (global + per-interface)
โโโ retry.py # Retry with exponential backoff
โโโ async_wrap.py # asyncio.to_thread wrapper for sync calls
License
MIT
Recommended Servers
playwright-mcp
A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.
Magic Component Platform (MCP)
An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.
Audiense Insights MCP Server
Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.
VeyraX MCP
Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.
graphlit-mcp-server
The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.
Kagi MCP Server
An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.
E2B
Using MCP to run code via e2b.
Neon Database
MCP server for interacting with Neon Management API and databases
Exa Search
A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.
Qdrant Server
This repository is an example of how to create a MCP server for Qdrant, a vector search engine.