YQ

yywx55/qmt-trade-mcp

开发工具
7 stars 5 forks 质量 61 趋势 15MIT

对话即交易 · AI量化投研引擎,基于QMT接口与大语言模型MCP协议构建的新一代A股智能投研平台。将自然语言对话深度融入量化交易全流程 ——从行情发现、技术分析到自动化执行,用自然语言即可驱动A股交易。

概览

基于 FastMCP 框架构建的 MCP(Model Context Protocol)服务,封装迅投 xtquant 行情数据接口和交易接口,通过 SSE 传输协议提供行情查询和交易能力。 - Python >= 3.12 - uv 包管理器 - 已安装并配置 QMT/xtquant 运行环境(需自行安装迅投 QMT 终端,并保持 QMT 客户端登录运行) 访问 http://127.0.0.1:8000/sse 建立 SSE 连接后,即可通过 MCP 协议调用各工具。 测试使用 FastMCP Client HTTP/SSE 传输连接运行中的 MCP 服务(http://127.0.0.1:8000/sse),每个测试调用真实 xtquant 接口验证功能正常。 本服务通过 SSE(Server-Sent Events)传输协议提供 MCP 接口,适用于兼容 SSE 的 MCP 客户端(如 Claude Desktop、Dify 等)。 SSE 端点:GET /sse(建立 SSE 连接) 消息端点:POST /messages/?session_id= (调用工具) 本服务以 SSE 传输模式运行,Claude Code 可通过 HTTP URL 方式接入。 在 ~/.claude.json(全局)或项目根目录 .mcp.json(项目级)中添加:

README

qmt-trade-mcp

基于 FastMCP 框架构建的 MCP(Model Context Protocol)服务,封装迅投 xtquant 行情数据接口和交易接口,通过 SSE 传输协议提供行情查询和交易能力。

免责声明:AI 可能会犯错,用户需自行承担交易带来的损失。本服务仅提供接口封装,不对交易结果负责。

联系方式(微信): gold98986868、Az184114

环境要求

  • Python >= 3.12
  • uv 包管理器
  • 已安装并配置 QMT/xtquant 运行环境(需自行安装迅投 QMT 终端,并保持 QMT 客户端登录运行)

快速开始

克隆项目

git clone https://github.com/novaair026-dev/qmt-trade-mcp.git
cd qmt-trade-mcp

安装依赖

uv sync

启动服务

uv run python main.py

服务默认监听 127.0.0.1:8000,可通过环境变量自定义:

MCP_HOST=0.0.0.0 MCP_PORT=9000 uv run python main.py

验证服务

访问 http://127.0.0.1:8000/sse 建立 SSE 连接后,即可通过 MCP 协议调用各工具。

项目结构

qmt-trade-mcp/
├── main.py                     # 服务入口,uvicorn 加载合并后的 MCP 应用
├── pyproject.toml              # 项目配置及依赖
├── src/
│   ├── xtdata_mcp/             # 行情数据模块
│   │   ├── __init__.py
│   │   ├── __main__.py
│   │   └── server.py            # 21 个行情数据 tools
│   └── xttrade_mcp/            # 交易模块
│       ├── __init__.py
│       ├── __main__.py
│       └── server.py            # 37 个交易 tools
└── tests/
    ├── __init__.py
    ├── conftest.py            # pytest fixtures(HTTP/SSE 传输测试客户端)
    ├── test_server.py         # 行情 tool 功能测试
    └── test_trader.py         # 交易 tool 功能测试

提供的 MCP Tools(共 58 个)

所有工具均支持通过 MCP 客户端调用,返回统一 JSON 格式。

行情数据

Tool 说明
get_full_tick 获取当前全推市场快照数据
get_market_data 从缓存获取行情数据(核心接口)
get_local_data 从本地数据文件直接读取行情数据
get_full_kline 获取最新交易日 K 线全推数据

历史数据下载

Tool 说明
download_history_data 下载单个标的历史行情数据
download_history_data2 批量下载多个标的历史行情数据

除权除息

Tool 说明
get_divid_factors 获取除权除息因子(分红/送股/配股等)

交易日历

Tool 说明
get_period_list 获取当前连接可用的行情周期列表
get_holidays 获取当前年度所有节假日日期
get_trading_calendar 获取指定市场的交易日历
get_trading_dates 获取交易日列表(时间戳格式)

合约与板块

Tool 说明
get_instrument_detail 获取合约详细基础信息
get_instrument_type 判断合约类型(股票/指数/基金/ETF)
get_sector_list 获取所有可用板块列表
get_stock_list_in_sector 获取指定板块的成分股列表
get_index_weight 获取指数成分股及其权重
download_index_weight 下载指数成分权重数据

财务数据

Tool 说明
get_financial_data 获取财务数据(资产负债表/利润表等)

可转债

Tool 说明
get_cb_info 获取可转债基础信息

新股 / ETF

Tool 说明
get_ipo_info 获取新股申购信息
get_etf_info 获取 ETF 申赎清单信息

交易模块 MCP Tools(37 个)

注意:交易工具需要先调用 init_trader 初始化连接,并保持 QMT 客户端登录运行。

系统设置

Tool 说明
init_trader 初始化交易通道并连接到 MiniQMT
start_trader 启动交易线程
connect_trader 连接 MiniQMT
stop_trader 停止交易通道
subscribe_account 订阅账户信息
unsubscribe_account 取消订阅账户
set_relaxed_response_order_enabled 设置是否启用专用线程处理订单响应
register_trader_callback 注册交易回调处理器

下单 / 撤单

Tool 说明
order_stock 同步下单(返回 order_id)
order_stock_async 异步下单(返回 seq)
cancel_order_stock 同步撤单(按 order_id)
cancel_order_stock_async 异步撤单(按 order_id)
cancel_order_stock_sysid 同步撤单(按 sysid)
cancel_order_stock_sysid_async 异步撤单(按 sysid)
fund_transfer 资金划转(普通/快速资金互转)

查询 - 股票账户

Tool 说明
query_stock_asset 查询账户资产
query_stock_orders 查询今日订单
query_stock_trades 查询今日成交
query_stock_positions 查询持仓
query_position_statistics 查询期货持仓统计

查询 - 信用账户

Tool 说明
query_credit_detail 查询信用账户明细
query_stk_compacts 查询融资融券合约
query_credit_subjects 查询融资标的
query_credit_slo_code 查询可融券源
query_credit_assure 查询担保品

查询 - 其他

Tool 说明
query_new_purchase_limit 查询新股申购额度
query_ipo_data 查询今日新股信息
query_account_infos 查询所有账户信息
query_account_status 查询账户状态
query_com_fund 查询场外基金
query_com_position 查询场外基金持仓
export_data 导出数据到文件
query_data 查询并读取数据

券源借券

Tool 说明
smt_query_quoter 查询券源报价
smt_negotiate_order_async 协商借券异步订单
smt_query_compact 查询借券合约

响应格式

所有 tool 均返回统一 JSON 格式:

// 成功
{ "ok": true, "data":  }

// 失败(如 xtquant 未配置)
{ "ok": false, "error": "" }

测试

# 运行行情 tool 功能测试(需先启动 MCP 服务)
uv run pytest tests/test_server.py -v

# 运行交易 tool 功能测试(需先启动 MCP 服务)
uv run pytest tests/test_trader.py -v

# 运行所有测试
uv run pytest tests/ -v

测试使用 FastMCP Client HTTP/SSE 传输连接运行中的 MCP 服务(http://127.0.0.1:8000/sse),每个测试调用真实 xtquant 接口验证功能正常。

部署说明

本服务通过 SSE(Server-Sent Events)传输协议提供 MCP 接口,适用于兼容 SSE 的 MCP 客户端(如 Claude Desktop、Dify 等)。

推荐通过反向代理(如 Nginx)将服务暴露到指定路径或域名:

location /mcp {
    proxy_pass http://127.0.0.1:8000;
    proxy_http_version 1.1;
    proxy_set_header Connection '';
    proxy_buffering off;
    proxy_cache off;
}

SSE 端点:GET /sse(建立 SSE 连接) 消息端点:POST /messages/?session_id=(调用工具)

Claude Code 配置

本服务以 SSE 传输模式运行,Claude Code 可通过 HTTP URL 方式接入。

方式一:命令行添加(推荐)

先在后台启动服务,再将 SSE URL 注册到 Claude Code:

# 1. 启动服务(后台运行)
uv run python main.py &
sleep 3

# 2. 添加到 Claude Code(全局)
claude mcp add xtdata-mcp --url http://127.0.0.1:8000/sse

# 3. 验证是否添加成功
claude mcp list

方式二:手动编辑配置文件

在 ~/.claude.json(全局)或项目根目录 .mcp.json(项目级)中添加:

{
  "mcpServers": {
    "xtquant-mcp": {
      "url": "http://127.0.0.1:8000/sse",
      "description": "迅投 xtquant 行情数据 + 交易接口"
    }
  }
}

方式三:直接启动 MCP 服务器

如果 Claude Code 支持 stdio 模式,也可以用 uvicorn 作为载体:

# 启动合并后的服务(行情+交易)
uvicorn main:app --host 127.0.0.1 --port 8000 --log-level warning

验证

添加成功后,在 Claude Code 中确认连接正常:

claude mcp list
# 应该看到 xtdata-mcp 显示 Connected

之后即可在对话中直接调用工具,例如:

帮我查询 600000.SH 的最新日线行情
获取银行板块的所有成分股
查看上证指数的最新成分股权重

帮我初始化交易通道
查询我的账户资产
买入 600000.SH 100股,价格 10.0元

注意事项

  • 使用交易功能前需确保 QMT 客户端已登录运行,且登录时需勾选"独立交易"选项,否则交易工具返回 ok: false
  • 首次使用需先调用 download_* 系列工具下载本地数据
  • 部分工具(如 download_history_data2、download_index_weight)数据量较大,调用时可能耗时较长
  • 交易为高风险操作,下单前请确认账户、股票代码、价格、数量等参数正确无误
  • 市价单仅在实盘交易有效,模拟交易不支持市价单
在 GitHub 查看完整 README

安装

This server does not publish a one-line install command.

Open the repository installation guide 新手?先看 mcpskill.org 教程 →

配置

{ "mcpServers": { "xtquant-mcp": { "url": "http://127.0.0.1:8000/sse", "description": "迅投 xtquant 行情数据 + 交易接口" } } }