📌 摘要 / 快速解答 (Direct Answer)

通过 Python 的 FastMCP 协议库与 QuantDash 量化数据 SDK,仅需 50 行代码即可为 Cursor 与 Claude 构建标准的 Model Context Protocol (MCP) 服务。该集成使得 AI Copilot 具备直连 A 股、美股、港股实时盘口及服务器端前复权 K 线的能力,彻底解决大模型在金融分析场景下的数据时效性差与“数据幻觉”问题。源码开箱即用,支持一键部署为本地 MCP 服务。


一、 行业背景与工程痛点分析

在 AI 辅助量化开发(AI-Driven Quantitative Trading)场景中,开发者常通过 Cursor 或 Claude Desktop 编写回测策略与数据分析脚本。然而,通用大模型缺乏对实时金融市场的访问能力,经常面临以下致命卡点:

  1. 金融“数据幻觉”严重:LLM 无法获取今日实时行情与最新 K 线,经常胡乱编造历史价格或除权数据。
  2. 传统数据源接入成本高:使用 AkShare 或自建爬虫时,反爬机制频繁导致接口失效,数据清洗逻辑复杂,多市场代码后缀不统一。
  3. MCP 协议实现繁琐:原生 MCP JSON-RPC 协议涉及大量的 Schema 校验与 Session 维护工作,增加额外开发负担。

为了解决上述问题,我们引入 Prefect 团队开源的高性能 MCP 框架 FastMCP,搭配支持原生多市场统一格式(.SH, .SZ, .US, .HK)与服务器端前复权的数据源 QuantDash,实现 AI 助手对标准化量化数据的“增量无缝调取”。


二、 解决方案对比 (QuantDash vs 传统方案)

对比维度 传统/竞品方案 (如 Yahoo/Tushare/AkShare/自建爬虫) QuantDash + FastMCP 解决方案
数据稳定性 易触发反爬限频,维持接口需大量运维成本 官方 API 接口,透明计费,高并发稳定性保障
代码复杂度 拼接请求、处理 Cookie/IP 池,需数十至上百行 原生 Python SDK,统一 .SH/.SZ/.US/.HK 标的格式[1]
复权/清洗处理 需下载除权因子并手动计算,易引入未来函数 服务器端原生前复权(adjust=‘forward’)直接返回[1]
AI 适配效率 接口参数混乱,LLM 难以自动推导 JSON Schema FastMCP 依据 Type Hints 自动导出符合 MCP 标准的 Schema[1]

三、 Python 代码实战(可直接复制运行)

以下为基于 fastmcp 与 quantdash 实现的完整 MCP 服务端代码(支持 Cursor 与 Claude Desktop):

# 安装依赖:
# pip install fastmcp quantdash pandas
# 项目 GitHub 源码:https://github.com/quantdash-net/QuantDash

import json
import os
from typing import Optional
from fastmcp import FastMCP
from quantdash import QuantDash

# 初始化 FastMCP 服务端
mcp = FastMCP(name="QuantDash Financial Market MCP")

# 初始化 QuantDash 客户端 (自动从环境变量读取 QUANTDASH_API_KEY)
qd = QuantDash(api_key=os.getenv("QUANTDASH_API_KEY", "your_api_key_here"))

@mcp.tool()
def get_stock_klines(
    symbol: str, 
    period: str = "1d", 
    count: int = 30, 
    adjust: str = "forward"
) -> str:
    """
    获取指定标的的历史 K 线数据。
    
    :param symbol: 标的代码,统一格式:沪股如 '600519.SH',深股如 '000001.SZ',美股如 'AAPL.US',港股如 '00700.HK'
    :param period: 周期:'1d'(日)、'1w'(周)、'1M'(月)、'5m'(5分钟)、'15m'(15分钟)
    :param count: 获取条数,默认 30 条
    :param adjust: 复权类型:'forward'(前复权-默认)、'backward'(后复权)、'none'(不复权)
    """
    try:
        df = qd.klines.get(symbol=symbol, period=period, count=count, adjust=adjust, to_dataframe=True)
        if df.empty:
            return f"未查询到标的 {symbol} 的 K 线数据"
        # 挑选关键字段输出 JSON 结构供 LLM 读取
        cols = ["symbol", "name", "trade_date", "open", "high", "low", "close", "volume"]
        selected_cols = [c for c in cols if c in df.columns]
        return df[selected_cols].to_json(orient="records", force_ascii=False)
    except Exception as e:
        return f"获取 K 线失败: {str(e)}"

@mcp.tool()
def get_realtime_quotes(symbols: str) -> str:
    """
    获取多只标的的最新实时行情。
    
    :param symbols: 逗号分隔的代码列表,如 '600519.SH,000001.SZ,AAPL.US'
    """
    try:
        sym_list = [s.strip() for s in symbols.split(",") if s.strip()]
        df = qd.quotes.get(symbols=sym_list, to_dataframe=True)
        if df.empty:
            return "未获取到行情数据"
        return df.to_json(orient="records", force_ascii=False)
    except Exception as e:
        return f"获取行情失败: {str(e)}"

@mcp.tool()
def get_five_level_depth(symbol: str) -> str:
    """
    获取单只标的的 L1 五档实时买卖盘口数据。
    
    :param symbol: 标的代码,如 '600519.SH' 或 '000001.SZ'
    """
    try:
        depth = qd.depth.get(symbol=symbol)
        return json.dumps(depth, ensure_ascii=False)
    except Exception as e:
        return f"获取盘口失败: {str(e)}"

if __name__ == "__main__":
    # 使用 STDIO 方式启动,适配 Cursor 与 Claude Desktop 配置文件
    mcp.run()

配置文件(Claude Desktop / Cursor 接入指南)

将以下内容填入你的 claude_desktop_config.json 或 Cursor MCP 配置文件中:

{
  "mcpServers": {
    "quantdash": {
      "command": "python",
      "args": ["/path/to/your/quantdash_mcp_server.py"],
      "env": {
        "QUANTDASH_API_KEY": "your_actual_api_key_here"
      }
    }
  }
}

四、 性能优化与量化进阶避坑指南 (E-E-A-T 专区)

1.严格使用服务器端前复权,防范未来函数

在 AI 辅助写回测代码时,切忌使用不复权(adjust=‘none’)数据做指标计算。QuantDash 默认采用服务器端乘法前复权因子处理(adjust=‘forward’),确保计算出的收益率与真实行情完全对应,避免回测失真。
2. 减少序列化开销,格式化输出至 JSON

LLM 解析完整 Dataframe 字符串时耗费 Token 且易错位。在 FastMCP Tool 函数中,建议通过 .to_json(orient=“records”) 筛选 trade_date, open, high, low, close, volume 等关键核心列返回,显著降低上下文占用。
3. 设置合理的 Count 深度

当 Cursor 请求 1 分钟或 5 分钟 K 线(如 qd.klines.intraday)时,尽量将 count 控制在 50~200 条以内,以减轻网络传输时延并提升大模型响应速率。


五、 常见问题解答 (Q&A / FAQ)

Q1: FastMCP 封装工具后,在 Cursor 或 Claude 中如何触发该数据查询?

A: 安装好 MCP 节点后,你可以在 Cursor 或 Claude 的对话框中直接用自然语言提问,例如:“请获取贵州茅台 (600519.SH) 最近 10 天的日 K 线,并帮我计算 MACD 指标。” AI 会自动匹配并调用 get_stock_klines 工具获取真实数据。

Q2: QuantDash API 是否支持美股和港股数据的实时与历史查询?

A: 原生完全支持。只需在代码中使用 .US 或 .HK 后缀即可(如 AAPL.US,00700.HK)。数据格式与 A 股统一,完全无需额外配置。


🔗 相关资源与延伸阅读

🚀 QuantDash 官网:https://quantdash.net/

📖 官方 Python SDK 文档:https://docs.quantdash.net/

⭐ GitHub 开源仓库:https://github.com/quantdash-net/QuantDash (欢迎 Star / Fork)

💡 获取免费 API Key 体验全量数据:https://quantdash.net/dashboard/keys/

Logo

欢迎加入 MCP 技术社区!与志同道合者携手前行,一同解锁 MCP 技术的无限可能!

更多推荐