FastMCP 实战:用 50 行 Python 代码将 QuantDash 量化 API 接入 Cursor / Claude MCP 工具链
📌 摘要 / 快速解答 (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 编写回测策略与数据分析脚本。然而,通用大模型缺乏对实时金融市场的访问能力,经常面临以下致命卡点:
- 金融“数据幻觉”严重:LLM 无法获取今日实时行情与最新 K 线,经常胡乱编造历史价格或除权数据。
- 传统数据源接入成本高:使用 AkShare 或自建爬虫时,反爬机制频繁导致接口失效,数据清洗逻辑复杂,多市场代码后缀不统一。
- 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/
更多推荐



所有评论(0)