股票数据MCP服务器

基于FastMCP和akshare的中国股票数据MCP服务器,提供实时行情、历史数据、技术分析、资金流向、龙虎榜、衍生品及全球市场等数据获取与复盘能力,适用于量化分析、投研复盘和智能投顾等场景。

  • by Alucardzh
  • Python
  • 混合部署
  • 1 星标
  • 更新于
在 GitHub 查看 Alucardzh/mcp-stock-server

使用说明

MCP Akshare Stock Server

基于 FastMCP 的中国股票数据分析 MCP 服务器,提供完整的股票数据获取和技术分析功能。

功能特性

  • 🔄 实时股票数据 - 获取 A 股实时价格和交易信息
  • 📊 历史数据 - 查询股票历史价格和技术指标
  • 📈 支撑压力位 - 自动计算支撑位和压力位
  • 🏛️ 市场指数 - 获取主要市场指数数据
  • 🔍 股票基本信息 - 查询股票基本信息和行业分类
  • 📊 ETF 单日数据 - get_etf_daily_tool 默认查询国家队ETF(汇金重仓8只核心宽基, 也可指定单只/多只/全市场),返回涨跌幅/成交额/规模/主力资金/份额变化及合并汇总

快速开始

环境要求

  • uv (推荐)

安装和运行

git clone https://github.com/Alucardzh/mcp-stock-server.git
cd mcp-stock-server
uv sync
uv run server.py

Transport 模式

本服务器使用 HTTP Transport(Streamable HTTP)作为唯一的传输方式,适合生产环境、Docker 部署和远程访问:

# 直接运行(默认监听 0.0.0.0:8000)
uv run server.py

# 或通过环境变量指定 host
MCP_HOST=0.0.0.0 uv run server.py

优点:

  • ✅ 稳定可靠,连接自动管理
  • ✅ 支持负载均衡和反向代理
  • ✅ 适合多客户端并发访问
  • ✅ 易于监控和调试

ℹ️ SSE 与 STDIO 传输方式已弃用,统一使用 HTTP 模式。

配置 CherryStudio

在 CherryStudio 中配置 MCP 服务器(使用 HTTP 模式):

{
  "mcpServers": {
    "mcp-akshare": {
      "isActive": true,
      "name": "mcp-akshare",
      "type": "http",
      "url": "http://localhost:8000/mcp",
      "installSource": "unknown"
    }
  }
}

将 url 替换为实际部署地址,Docker 部署时通常映射到 http://localhost:18881/mcp。

Docker 部署

使用 Docker Compose 部署(HTTP 模式,端口 18881):

docker-compose up -d

服务将在 http://localhost:18881 启动

环境变量

项目通过 .env 文件(参考 env.template)配置运行所需的环境变量。请复制模板并填入真实值:

cp env.template .env
变量名 必填 说明 示例
AKPROXY_TOKEN ✅ akshare-proxy 服务的鉴权 Token,用于通过 akshare-proxy-patch 访问行情数据(akshare/efinance),也是 Yahoo 兜底行情的 akproxy yfinance 付费通道凭据。在 akshare-proxy 获取
MCP_HOST ❌ HTTP 服务监听地址,默认 0.0.0.0
YAHOO_PROXY ❌ 海外行情兜底代理。Yahoo 兜底优先走 akproxy yfinance 通道(复用 AKPROXY_TOKEN),授权失败时回退此代理;两者均不可用=禁用 Yahoo 路径,自动降级国内源 http://192.168.3.10:7890

⚠️ .env 已在 .gitignore 中忽略,请勿提交真实 Token。

工具列表

下述工具名称均带 _tool 后缀(与 server.py 中的注册名一致)。

get_stock_symbol_by_name_tool

通过股票名称获取股票代码

  • name: 股票名称,类似 '中国平安' or '平安'

get_stock_history_tool

获取股票历史数据

  • symbol: 股票代码 (6 位数字,如 "000001") 或中文名称
  • start_date: 开始日期 (YYYY-MM-DD,可选)
  • end_date: 结束日期 (YYYY-MM-DD,可选)
  • period: 数据周期 ("daily", "weekly", "monthly")
  • adjust: 价格调整 ("qfq" 前复权, "hfq" 后复权, "none" 不复权)

get_stock_realtime_tool

获取实时股票数据

  • symbol: 股票代码 (6 位数字) 或中文名称

get_stock_basic_tool

获取股票基本信息

  • symbol: 股票代码 (6 位数字) 或中文名称

calculate_support_resistance_tool

计算支撑位和压力位

  • symbol: 股票代码 (6 位数字) 或中文名称
  • n_levels: 支撑/压力位级别数量 (1-10,默认 5)
  • lookback_period: 分析周期天数 (30-365,默认 60)

get_market_index_tool

获取市场指数数据

  • index_code: 指数代码 (默认 "000001" 上证指数)

get_ths_hot_list_tool

获取同花顺热门股票榜单

  • span: 时间跨度 ("hour" 近 1 小时榜, "day" 今日榜,默认 "hour")
  • limit: 返回数量 (1-100,默认 100)

get_akproxy_token_info

查询 akshare-proxy 服务的积分剩余额度(无需参数)。

get_daily_review_tool

一键复盘:当日 A 股全貌(七模块并行聚合,单模块失败不影响整体)

  • date: 查询日期 YYYY-MM-DD,默认今天;历史日期时板块资金流、涨跌家数自动降级

返回七段:indices(五大指数)、breadth(涨跌家数/涨停/跌停/炸板/连板梯队)、 fund_flow(大盘+板块主力资金,东财口径)、national_team(国家队ETF份额变化与估算净申购)、 derivatives(IF/IH/IC/IM 基差含年化、期权 PCR、IF/IO 席位摘要)、margin(两融余额,T-1)、 以及 notes(降级说明)与 errors(模块级错误)。

get_market_breadth_tool

市场涨跌结构(涨跌家数仅当日;涨停/跌停/炸板支持历史日期)

  • date: 查询日期 YYYY-MM-DD,默认今天

get_zt_pool_tool

涨停生态股池明细(金额单位亿元;无数据自动回退最近交易日)

  • pool: 涨停/炸板/跌停/强势/昨涨停,默认"涨停"
  • date: 查询日期 YYYY-MM-DD,默认今天

get_fund_flow_tool

主力资金(东财口径:超大单+大单净额)

  • scope: "全部"(大盘+板块) / "大盘" / "板块",默认"全部"
  • indicator: "今日" / "5日" / "10日"(仅板块口径),默认"今日"
  • date: 查询日期 YYYY-MM-DD,默认今天

get_margin_tool

两融余额(交易所 T-1 披露)

  • market: "沪深"(合计) / "沪" / "深",默认"沪深"
  • days: 最近 N 个交易日序列(1-30),默认 10
  • date: 截止日期 YYYY-MM-DD,默认今天

get_cffex_rank_tool

中金所前 20 会员成交持仓排名(经纪席位口径,直连中金所官网零积分)

  • var: IF/IH/IC/IM(股指期货)或 IO/MO/HO(股指期权),默认 IF
  • date: 查询日期 YYYY-MM-DD,默认今天;非交易日自动回退
  • member: 会员名子串过滤(如 "中信"),默认不过滤

get_index_derivatives_tool

股指衍生品指标:四大期指基差(含年化)+ 期权 PCR(分交易所)

  • date: 查询日期 YYYY-MM-DD,默认今天

get_global_markets_tool

全球市场快照(盘前一键):六组并行聚合,单组失败不影响整体

  • groups: 美股/美债/汇率/亚太/商品/恐慌(逗号分隔),默认"全部"

美股(纳指/标普/道指/费半)、美债(10Y/30Y+bp变动, 日债10Y/20Y/30Y来自日本财务省)、 汇率(美元指数+离岸人民币)、亚太(日经/KOSPI/恒生科技)、商品(布伦特/WTI/COMEX黄金主力)、 恐慌(VIX)。国内直连为主源,Yahoo(经YAHOO_PROXY代理)为备源。

get_stock_global_snapshot_tool

全球个股快照(Yahoo 经 YAHOO_PROXY 代理,美股含盘后/盘前涨跌)

  • symbols: 显式 Yahoo 代码(如 NVDA,000660.KS),优先于 preset
  • preset: ai_chain(算力链8只含台积电) / storage(存储链5只) / etf(SMH/AIQ/BOTZ) / all

get_fed_watch_tool

美联储预期简版:美债 2Y + 10Y-2Y 利差 + 2Y 周变动(bp)

get_global_linkage_review_tool

共振复盘:隔夜全球(纳指/费半涨跌、美债/日债 bp 变动)vs 当日 A 股(指数/涨跌家数/电子通信板块资金流)对照

  • date: A股交易日 YYYY-MM-DD,默认今天(板块资金流仅当日口径可得)

get_stock_intraday_tool

查询个股分钟分时(1分钟仅当日,5分钟可回溯历史)。mode=summary 返回竞价撮合价、开盘/尾盘30分钟统计、全天高低点时间、涨停触碰时间线;mode=full 返回全量分钟bar。

get_stock_auction_tool

查询个股集合竞价分时(9:15-9:25 虚拟撮合过程,仅当日可拉取)。当日首次查询即落盘 CSV 归档(data/auction/{code}/{date}.csv),历史日期读归档。mode=summary 返回 9:15/9:20/9:25 三段轨迹、撮合价量、高开幅度;mode=detail 返回逐笔快照。

get_stock_boards_tool

查询个股完整行业名与概念板块列表(efinance 所属板块 + 概念名单过滤)。用于复盘模块⑦题材聚类的完整口径,替代涨停池 4 字截断行业。

get_lhb_tool

查询龙虎榜榜单(efinance 主 / akshare 备)。按股聚合净买/卖(亿元)、上榜原因、东财解读,附净买 TOP10 / 净卖 TOP5 摘要。

get_lhb_seats_tool

查询个股龙虎榜席位明细(akshare 东财数据源,买/卖前 5 席位,金额万元,带机构/外资/游资分类)。当日数据建议 18:00 后查询。

使用示例

# 通过 MCP 客户端调用(HTTP 模式)
result = await client.call_tool("get_stock_realtime_tool", {
    "symbol": "000001"
})

开发

项目结构

mcp-stock-server/
├── server.py          # 入口(实例运行;工具不在本文件注册)
├── mcp_app.py         # FastMCP 实例 + instructions(LLM 可见的分类导航)
├── mcp_tools/         # 工具注册层(按领域分类,导入即注册)
│   ├── meta.py           # 服务器元工具(list_tools / akproxy额度)
│   ├── stock.py          # 个股(行情/基础/分钟分时/竞价/板块/支撑阻力/热度榜)
│   ├── review.py         # 复盘(一键复盘/涨跌结构/涨停生态/指数)
│   ├── lhb.py            # 龙虎榜(榜单/席位)
│   ├── funds.py          # 资金面(主力资金/两融/ETF)
│   ├── derivatives.py    # 衍生品(中金所席位/基差PCR/美债利差)
│   ├── global_markets.py # 全球(六组快照/隔夜共振/海外个股链)
│   └── prompts.py        # 分析师 prompts
├── utils/             # 数据获取与分析模块(真实逻辑所在,注册层只做透传)
├── scripts/           # 冒烟脚本
├── pyproject.toml     # 项目配置
├── env.template       # 环境变量模板
├── docker-compose.yml # Docker Compose 配置
├── Dockerfile         # 容器构建文件
└── README.md          # 项目文档

新增/修改工具

  1. 业务逻辑写在 utils/(数据通道选型遵循 efinance 优先:efinance 有封装的走 utils/ef.py,akshare 独有的模块级导入便于测试 monkeypatch)。
  2. 在 mcp_tools/ 对应分类模块加一个 @mcp.tool() 薄透传函数(命名 *_tool 后缀,docstring 中文)。
  3. 新分类才需要:建文件 + 在 mcp_tools/__init__.py 加一行导入;并同步 mcp_app.py 的 SERVER_INSTRUCTIONS 导航。
  4. 若新增顶层文件/目录,记得 Dockerfile 加对应 COPY 行。

依赖

  • fastmcp: MCP 服务器框架
  • akshare: 股票数据源
  • efinance (>=0.5.9): 东财行情并行通道(个股K线、全市场快照;akproxy 推荐,更快且更省积分)
  • akshare-proxy-patch (>=0.5.0): akshare/efinance 数据代理补丁,需配合 AKPROXY_TOKEN 使用
  • pandas: 数据处理
  • numpy: 数值计算

许可证

MIT License