内容
# a-stock-mcp
中国大陆A股市场数据MCP服务器,适用于AI编程代理。独立运行,无框架依赖。
## 功能特点
- **23种MCP工具** — 从K线数据到支撑/阻力水平,涵盖市场数据、基本面、新闻、资金流向等
- **多源自动切换** — mootdx TCP(主要数据源),新浪/腾讯/东方财富/同花顺/百度/财联社/Cninfo作为备份
- **内置防封机制** — 东方财富 & Cninfo 请求限速,支持可配置的最小间隔 + 随机抖动
- **智能股票代码解析** — 支持中文股票名称(如 "贵州茅台")、带前缀的代码(如 SH600519)或后缀(如 600519.SH)
- **本地缓存** — 每只股票的OHLCV数据缓存;北向资金通过每日快照自行构建历史数据
## 快速开始
### 前置条件
- Python >= 3.10
- [uv](https://docs.astral.sh/uv/) 包管理器
### 安装
```bash
git clone https://github.com/Alucardzh/TradingAgentsAstockMcp.git && cd TradingAgentsAstockMcp
uv sync
```
### 运行
```bash
uv run python -m a_stock_mcp.server
```
或使用已注册的入口点:
```bash
uv run a-stock-mcp
```
## 与AI代理注册
### Claude 代码
```bash
claude mcp add a-stock-data -- uv run --project /path/to/TradingAgentsAstockMcp python -m a_stock_mcp.server
```
> **Windows 用户:** 如果上述命令在 CMD/PowerShell 中失败,请在 Git Bash 中运行或直接编辑 `~/.claude.json`。
### OpenClaw / Hermes
向代理发送以下提示:
```
请 git clone https://github.com/Alucardzh/TradingAgentsAstockMcp 到合适的位置,然后添加此项目的 MCP 服务。
```
## 工具参考(23种)
### 市场数据
| 工具 | 描述 |
|------|-------------|
| `resolve_ticker` | 将中文股票名称或各种代码格式解析为标准化的6位代码 |
| `get_stock_data` | OHLCV 日线 K 线数据(最多 800 根) |
| `get_indicators` | 技术指标:SMA、EMA、MACD、RSI、布林线、ATR、VWMA、MFI 等(共 14 种) |
| `calculate_support_resistance` | 根据价格分布直方图 + 聚类计算支撑/阻力水平 |
| `get_market_index` | 实时市场指数快照(沪深 300、上证指数、创业板指等) |
| `get_stock_realtime` | 实时个股价格快照(价格、涨跌幅、成交量、成交额) |
### 基本面与财务数据
| 工具 | 描述 |
|------|-------------|
| `get_fundamentals` | 市盈率、市净率、市值、收入、每股收益 + 一致性预期 EPS + 远期市盈率/市盈率增长 |
| `get_balance_sheet` | 资产负债表(季度或年度) |
| `get_cashflow` | 现金流量表(季度或年度) |
| `get_income_statement` | 利润表(季度或年度) |
| `get_profit_forecast` | 分析师一致性 EPS、远期市盈率、市盈率增长、PE 消化 |
| `get_insider_transactions` | 前 10 名股东、持股数量趋势、董监高持股变动 |
### 新闻与情绪
| 工具 | 描述 |
|------|-------------|
| `get_news` | 个股新闻文章 |
| `get_global_news` | 中国/全球财经新闻(财联社 + 东方财富 7x24) |
| `get_hot_stocks` | 涨停股票,附带精选原因标签 + 主题频率 |
| `get_company_announcements` | 来自 cninfo.com.cn 的公司公告(年报、季报、重大事件等) |
| `get_ths_hot_list` | 同花顺热度榜,附带 AI 生成的原因标签 |
### 资金流向
| 工具 | 描述 |
|------|-------------|
| `get_northbound_flow` | 北向资金(沪深股通),分钟级实时数据 + 20 日历史数据 |
| `get_fund_flow` | 分钟级主力/大/中/小/超大订单净流入 |
| `get_dragon_tiger_board` | 龙虎榜,附带 top 买入/卖出席位 |
### 行业与日程
| 工具 | 描述 |
|------|-------------|
| `get_concept_blocks` | 行业(申万)/ 概念主题 / 区域板块,附带日变化 |
| `get_industry_comparison` | 所有约 90 个同花顺行业排名 |
| `get_lockup_expiry` | 限售解禁日程,附带即将到来的日历 |
## 数据源
| 数据源 | 协议 | 用途 |
|--------|----------|-------|
| mootdx (通达信) | TCP | K 线数据、名称-代码映射、F10 内幕数据 |
| 新浪财经 | HTTP | K 线备用数据、财务报表 |
| 腾讯财经 | HTTP | 市盈率、市净率、市值 |
| 东方财富 | HTTP | 新闻搜索、资金流向、龙虎榜、限售解禁、行业排名、董监高持股变动、一致性 EPS |
| 同花顺 | HTTP | 热门股票、北向资金 |
| 财联社 | HTTP | 实时财经新闻 |
| 百度 PAE | HTTP | 概念/行业板块成员 |
| Cninfo (巨潮资讯网) | HTTP | 公司公告 |
## 项目结构
```
src/a_stock_mcp/
├── _core.py 共享基础设施:股票代码解析、mootdx 客户端、HTTP 辅助函数
├── server.py FastMCP 实例 + register_tools() 调用 + 入口点
├── data.py 向后兼容性封装(从 _core 和工具中重新导出)
└── tools/
├── __init__.py register_tools() + _coerce_str_params + 重新导出
├── market.py get_stock_data, get_indicators, calculate_support_resistance, get_market_index, get_stock_realtime
├── fundamentals.py get_fundamentals, balance_sheet, cashflow, income_statement, profit_forecast
├── news.py get_news, get_global_news
├── capital.py get_fund_flow, get_northbound_flow, get_dragon_tiger_board
├── shareholder.py get_insider_transactions, get_lockup_expiry
└── screening.py get_hot_stocks, get_concept_blocks, get_company_announcements, get_industry_comparison, get_ths_hot_list
```
## 配置
### 环境变量
| 变量 | 默认值 | 描述 |
|----------|---------|-------------|
| `ASTOCK_CACHE_DIR` | `~/.astock-mcp/cache` | OHLCV CSV 缓存、北向资金日缓存、cninfo 组织 ID 映射的目录 |
| `EM_MIN_INTERVAL` | `1.0`(秒) | 东方财富 API 请求之间的最小间隔。多代理批量场景下建议增加到 1.5–2.0。 |
| `CNINFO_MIN_INTERVAL` | `1.0`(秒) | Cninfo(巨潮资讯网)API 请求之间的最小间隔 |
| `AKPROXY_TOKEN` | *(空)* | 可选。设置后,当直接连接东方财富失败(IP 封禁)时,自动切换到具有浏览器指纹伪造的代理。需要 `uv sync --extra proxy` |
| `MCP_IDLE_TIMEOUT` | `360`(秒) | 如果在此期间没有工具调用,则自动退出。以防止当 MCP 客户端停止响应且不关闭 stdin 时的僵尸进程。设为 `0` 以禁用 |
### 可选:东方财富代理(防封)
在运行多代理批量分析时,东方财富可能会暂时封禁您的 IP(症状:所有 `push2.eastmoney.com` 端点的 `RemoteDisconnected`)。要设置自动代理备用:
1. 安装可选的代理依赖:
```bash
uv sync --extra proxy
```
2. 复制环境变量模板并填写您的 token:
```bash
cp env.template .env
# 编辑 .env: AKPROXY_TOKEN=your-token
```
从 [ak.cheapproxy.net/dashboard/akshare](https://ak.cheapproxy.net/dashboard/akshare) 获取您的 token。
工作原理:东方财富请求**始终优先尝试直接连接**。仅当直接连接失败(RemoteDisconnected / IP 封禁)时,才会切换到代理(curl_cffi 浏览器指纹 + 旋转代理 IP + cookie)。其他数据源(腾讯、新浪、同花顺等)不受影响。
## 开发
```bash
# 安装开发依赖
uv sync --dev
# 校验与格式化
uv run ruff check .
uv run ruff format .
# 类型检查
uv run mypy src/
# 运行测试
uv run pytest
```
## 致谢
项目理念和部分代码源自 [TradingAgents-astock](https://github.com/simonlin1212/TradingAgents-astock)。如果您觉得这个项目有帮助,请给原仓库一个星星。
## 许可证
[Apache License 2.0](LICENSE)
## 中文文档
[README_CN.md](README_CN.md)