Models naturally ask for several codes at once, and the upstream fund endpoints do not accept that — so the server intercepts comma-separated lists, issues the requests one at a time, and stitches the results, which turns a whole class of failed calls into working ones. Setup is easy to get wrong in one place: the token is configured either through the setup tool or a .env file, and it is worth confirming which one is actually in effect before debugging an empty result.
A Python MCP server that puts Tushare's Chinese market data behind an MCP client. It is organised by domain — basics and quotes, financial statements, funds and ETFs — and runs either as a local stdio server or over Streamable HTTP.
- Basics and quotes: `get_stock_basic`, `get_trade_cal`, `get_stock_company`, `get_namechange`, `get_stk_managers`, plus `daily`, `weekly` and `monthly` bars
- Daily indicators through `get_daily_basic` — turnover, PE, PB, market cap — and `get_suspend_d` for halts, `get_hsgt_top10` for northbound flows
- Financial statements: `get_income_statement`, `get_balance_sheet`, `get_cash_flow`, `get_forecast`, `get_express`, `get_fina_indicator`, `get_fina_mainbz`, `get_disclosure_date`
- Funds and ETFs: `etf_basic`, `etf_index`, `etf_share_size`, `fund_basic`, `fund_manager`, `fund_daily`, `fund_nav`, `fund_div`, `fund_portfolio` and more
- Comma-separated code lists work even where the upstream API does not support them — the server splits the request, loops, and joins the frames back together
- `setup_tushare_token` configures the credential from inside the conversation, and stores it locally
Python 3.10+ and a Tushare token, either set as `TUSHARE_TOKEN` in a .env file or configured through the setup tool. Data access goes through the tinyshare SDK rather than the official library. Run `server.py` for Streamable HTTP on port 8000, or with the stdio flag for desktop clients. Trial endpoints are published for evaluating it without a token.
One command plus a key — pip install -r requirements.txt, then supply credentials
