@zltquant/zlt-mcp 0.4.0 → 0.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/config.json CHANGED
@@ -507,7 +507,7 @@
507
507
  },
508
508
  {
509
509
  "name": "mcp-create-and-run-backtest",
510
- "description": "创建并启动回测。strategyId 必须来自 mcp-create-strategy 返回的策略ID;runType 固定为 2;普通日线回测只传 strategyId,其余参数 MCP 补齐。未指定周期时 end 取自然日 T-1、start 从 end 往前推半年;ZLTAF 按实际交易日执行,非交易日不产生行情或策略调用。run/create 失败直接报错,不要去复用策略里自动生成的 debug runId(建策略时已回显为 debugRunId,跑它等于跑创建那一刻的模板快照)。run/create 生成快照后,MCP 会在真正启动前拒绝 get_current_data().get(...) 这种当前对象不支持的访问。\n\n**返回 runId 后立即调用 mcp-wait(kind=backtest,id=runId)阻塞等待回测结束,不要用 mcp-get-backtest-state 轮询。**\n\n日线类频率只可见到 context.previous_date:要用交易日 T 的收盘,end 必须设成 T 的下一个交易日;end 落在未来不报错但结果为空。展开见返回的 dailyVisibilityNote / endWarning。\n\n返回 Data 回显 resolvedStart/resolvedEnd/resolvedCapital——向用户汇报区间和初始资金时一律以这些字段为准,不要自行推算或臆测。evidence 给出 backtestId、实际 runDir、完整 effectiveRunParams 和代码快照 sourceSha256,后续结果必须与它对账。**基准不在此列**:回显的 requestedBenchmark 只是请求值,策略 initialize 里的 set_benchmark() 会覆盖它,收益产物里的「基准收益」按策略实际用的基准算。说基准是什么之前先读策略代码里的 set_benchmark,否则会把一只个股的涨跌报成指数的。\n\n**期货回测要同时改三处,少一处引擎就按股票跑**:runParams.marketIds 加上对应期货交易所(zj 中金所、zs 郑商所、ds 大商所、sq 上期所、gq 广期所),account_list 的 account_type 改成 2(实测用 6 直接废单),费率用 ratio_tpl_obj.future。合约代码形如 zjIM2605。基准保持默认 sz399300 即可,它对期货策略只是业绩比较基准。数据前置见 mcp-download-data:除行情外还必须有市场规则 mr。",
510
+ "description": "创建并启动回测。strategyId 必须来自 mcp-create-strategy 返回的策略ID;runType 固定为 2;普通日线回测只传 strategyId,其余参数 MCP 补齐。未指定周期时 end 取自然日 T-1、start 从 end 往前推半年;ZLTAF 按实际交易日执行,非交易日不产生行情或策略调用。run/create 失败直接报错,不要去复用策略里自动生成的 debug runId(建策略时已回显为 debugRunId,跑它等于跑创建那一刻的模板快照)。run/create 生成快照后,MCP 会在真正启动前拒绝 get_current_data().get(...) 这种当前对象不支持的访问。\n\n**返回 runId、codePath 和 attemptFence 后立即调用 mcp-wait(kind=backtest,id=runId)阻塞等待回测结束,不要用 mcp-get-backtest-state 轮询。CLI 创建命令启动的隐藏 guardian 会自行携带 attemptFence;任何后续显式 CLI call 或 MCP 重启后的调用,都必须把 codePath 和 attemptFence 一起传回 mcp-wait,避免把上一轮残留的 result.json 当成本轮错误;同一 MCP 会话内可省略。**\n\n日线类频率只可见到 context.previous_date:要用交易日 T 的收盘,end 必须设成 T 的下一个交易日;end 落在未来不报错但结果为空。展开见返回的 dailyVisibilityNote / endWarning。\n\n返回 Data 回显 resolvedStart/resolvedEnd/resolvedCapital——向用户汇报区间和初始资金时一律以这些字段为准,不要自行推算或臆测。evidence 给出 backtestId、实际 runDir、完整 effectiveRunParams 和代码快照 sourceSha256,后续结果必须与它对账。**基准不在此列**:回显的 requestedBenchmark 只是请求值,策略 initialize 里的 set_benchmark() 会覆盖它,收益产物里的「基准收益」按策略实际用的基准算。说基准是什么之前先读策略代码里的 set_benchmark,否则会把一只个股的涨跌报成指数的。\n\n**期货回测要同时改三处,少一处引擎就按股票跑**:runParams.marketIds 加上对应期货交易所(zj 中金所、zs 郑商所、ds 大商所、sq 上期所、gq 广期所),account_list 的 account_type 改成 2(实测用 6 直接废单),费率用 ratio_tpl_obj.future。合约代码形如 zjIM2605。基准保持默认 sz399300 即可,它对期货策略只是业绩比较基准。数据前置见 mcp-download-data:除行情外还必须有市场规则 mr。",
511
511
  "inputSchema": {
512
512
  "type": "object",
513
513
  "properties": {
@@ -607,6 +607,7 @@
607
607
  },
608
608
  "kcount": {
609
609
  "type": "integer",
610
+ "minimum": 1,
610
611
  "default": 400,
611
612
  "description": "预加载 K 线条数,默认 400。"
612
613
  },
@@ -741,7 +742,7 @@
741
742
  },
742
743
  {
743
744
  "name": "mcp-re-backtest",
744
- "description": "重新运行会话中最新的回测:用同一个 runId 重跑**该次回测已生成的代码快照**(策略工程 backtest/ 目录下那份副本)。\n\n**它不会把你在策略源工程里刚改过的 main.py 拷进去**——刚编辑过源代码就必须改用 mcp-create-and-run-backtest 生成新的代码快照,否则会重复运行修改前的旧代码,表现为「源码已修复却仍报同样的错误」。所以本工具只适合调整 runParams(回测区间、资金等)后重跑。\n\nstrategyId、strategyName、runId、runType、runParams 从当前会话最近一次 mcp-create-and-run-backtest 的成功结果里取得并传入本工具,不需要用户手动输入;会话中没有运行结果就提示无回测,无法重新回测。runParams 默认沿用最近一次创建回测的条件,允许用户修改部分回测参数;MCP 重启后这份上下文会丢失,届时必须传完整 runParams。返回的 resolved* 是本次实际生效的区间、资金与基准,向用户报告时以它为准。\n\n重跑启动后同样立即调用 mcp-wait(kind=backtest,id=runId)阻塞等待结束,不要轮询状态。",
745
+ "description": "重新运行会话中最新的回测:用同一个 runId 重跑**该次回测已生成的代码快照**(策略工程 backtest/ 目录下那份副本)。\n\n**它不会把你在策略源工程里刚改过的 main.py 拷进去**——刚编辑过源代码就必须改用 mcp-create-and-run-backtest 生成新的代码快照,否则会重复运行修改前的旧代码,表现为「源码已修复却仍报同样的错误」。所以本工具只适合调整 runParams(回测区间、资金等)后重跑。\n\nstrategyId、strategyName、runId、runType、runParams 从当前会话最近一次 mcp-create-and-run-backtest 的成功结果里取得并传入本工具,不需要用户手动输入;会话中没有运行结果就提示无回测,无法重新回测。runParams 默认沿用最近一次创建回测的条件,允许用户修改部分回测参数;MCP 重启后这份上下文会丢失,届时必须传完整 runParams。返回的 resolved* 是本次实际生效的区间、资金与基准,向用户报告时以它为准。\n\n重跑启动后同样立即调用 mcp-wait(kind=backtest,id=runId)阻塞等待结束,不要轮询状态;隐藏 guardian 会自行携带 attemptFence;任何后续显式 CLI call 或 MCP 重启后的调用,还要复用最初创建结果的 codePath,并传回本次重跑响应里的 attemptFence。",
745
746
  "inputSchema": {
746
747
  "type": "object",
747
748
  "properties": {
@@ -757,6 +758,10 @@
757
758
  "type": "string",
758
759
  "description": "回测运行ID。"
759
760
  },
761
+ "codePath": {
762
+ "type": "string",
763
+ "description": "可选的回测运行目录。CLI 独立命令或 MCP 重启后必须传最初创建回测返回的绝对 codePath;仅用于 result.json 新旧轮次对账,不发送给 IPC。"
764
+ },
760
765
  "runType": {
761
766
  "type": "integer",
762
767
  "enum": [
@@ -889,7 +894,7 @@
889
894
  },
890
895
  {
891
896
  "name": "mcp-get-backtest-state",
892
- "description": "查询回测运行状态与进度,是手动/兜底查询入口:适用于用户主动询问进度,或 mcp-wait 异常中断后复查。**等回测结束请用 mcp-wait(kind=backtest,id=runId),不要用本工具循环轮询。** 立即返回:只做一次查询,不会阻塞等待状态变化。status:0 准备中/1 运行中/2 失败/3 取消/4 终止/5 完成;status=5 前不要调用收益查询。\n\n兜底查询时未进终态的返回一定带 nextPollAfterMs,那是 wait 不可用时的节奏参考;终态不带该字段。数据准备阶段的进度取自磁盘 result.json,只要 download_update_time 仍在推进就视为有进展;durationSeconds 变化不算进展。若实际工作状态连续无变化但数据准备刚更新,返回 dataPrepInProgress=true;若数据准备也已停滞,返回 pollingStopped=true、stopAutoPolling=true 和 manualRecheckAfterMs,此时停止查询、约 1 分钟后手动再查一次。若磁盘 result.json 已确认数据准备或策略引擎启动失败,即使 IPC 仍报 status=1,也会返回 ErrNo 10043 让你停止。",
897
+ "description": "查询回测运行状态与进度,是手动/兜底查询入口:适用于用户主动询问进度,或 mcp-wait 异常中断后复查。**等回测结束请用 mcp-wait(kind=backtest,id=runId),不要用本工具循环轮询。** 立即返回:只做一次查询,不会阻塞等待状态变化。status:0 准备中/1 运行中/2 失败/3 取消/4 终止/5 完成;status=5 前不要调用收益查询。显式 CLI call 或 MCP 重启后复查时,必须同时传启动/重跑响应返回的 codePath 和 attemptFence;它们只用于本地 result.json 对账,不会发给 IPC。\n\n兜底查询时未进终态的返回一定带 nextPollAfterMs,那是 wait 不可用时的节奏参考;终态不带该字段。数据准备阶段的进度取自磁盘 result.json,只要 download_update_time 仍在推进就视为有进展;durationSeconds 变化不算进展。若实际工作状态连续无变化但数据准备刚更新,返回 dataPrepInProgress=true;若数据准备也已停滞,返回 pollingStopped=true、stopAutoPolling=true 和 manualRecheckAfterMs,此时停止查询、约 1 分钟后手动再查一次。若磁盘 result.json 已确认属于当前 attemptFence 且数据准备或策略引擎启动失败,即使 IPC 仍报 status=1 或 status=4,也会返回 ErrNo 10043 和 resultJson 真实错误让你停止。",
893
898
  "inputSchema": {
894
899
  "type": "object",
895
900
  "properties": {
@@ -900,6 +905,45 @@
900
905
  "timeout": {
901
906
  "type": "number",
902
907
  "description": "单次 IPC 调用超时毫秒(默认取连接超时)。这是底层调用超时,不是长轮询等待时长——本工具不会挂起等待状态变化,超时到了就返回当前状态。"
908
+ },
909
+ "codePath": {
910
+ "type": "string",
911
+ "description": "回测副本目录绝对路径。仅在 MCP 重启导致上下文丢失时补传,取 mcp-create-and-run-backtest 返回的 codePath;只用于本地 result.json 对账,不发送给 IPC。"
912
+ },
913
+ "attemptFence": {
914
+ "type": "object",
915
+ "description": "MCP 重启后可传启动/重跑响应原样返回的 attemptFence,用于证明 result.json 属于当前尝试;不发送给 IPC。",
916
+ "properties": {
917
+ "attemptStartedAtMs": {
918
+ "type": "number"
919
+ },
920
+ "resultBaseline": {
921
+ "type": "object",
922
+ "properties": {
923
+ "sha256": {
924
+ "type": "string",
925
+ "pattern": "^[0-9a-fA-F]{64}$"
926
+ },
927
+ "mtimeMs": {
928
+ "type": "number"
929
+ },
930
+ "size": {
931
+ "type": "integer",
932
+ "minimum": 0
933
+ }
934
+ },
935
+ "required": [
936
+ "sha256",
937
+ "mtimeMs",
938
+ "size"
939
+ ],
940
+ "additionalProperties": false
941
+ }
942
+ },
943
+ "required": [
944
+ "attemptStartedAtMs"
945
+ ],
946
+ "additionalProperties": false
903
947
  }
904
948
  },
905
949
  "required": [
@@ -1113,6 +1157,45 @@
1113
1157
  "id": {
1114
1158
  "type": "string",
1115
1159
  "description": "任务标识:kind=backtest 传 runId;kind=download 传 uuid(\"0\" 表示本机当前最新下载任务)。"
1160
+ },
1161
+ "codePath": {
1162
+ "type": "string",
1163
+ "description": "仅 kind=backtest:mcp-create-and-run-backtest 返回的绝对 codePath。CLI 或 MCP 重启后的跨进程等待必须传;同一 MCP 会话内可省略。"
1164
+ },
1165
+ "attemptFence": {
1166
+ "type": "object",
1167
+ "description": "仅 kind=backtest:启动/重跑响应原样返回的 attemptFence。隐藏 guardian 自动携带;显式 CLI call 或其他客户端在 MCP 重启后与 codePath 一起传,防止读取上一轮残留错误。",
1168
+ "properties": {
1169
+ "attemptStartedAtMs": {
1170
+ "type": "number"
1171
+ },
1172
+ "resultBaseline": {
1173
+ "type": "object",
1174
+ "properties": {
1175
+ "sha256": {
1176
+ "type": "string",
1177
+ "pattern": "^[0-9a-fA-F]{64}$"
1178
+ },
1179
+ "mtimeMs": {
1180
+ "type": "number"
1181
+ },
1182
+ "size": {
1183
+ "type": "integer",
1184
+ "minimum": 0
1185
+ }
1186
+ },
1187
+ "required": [
1188
+ "sha256",
1189
+ "mtimeMs",
1190
+ "size"
1191
+ ],
1192
+ "additionalProperties": false
1193
+ }
1194
+ },
1195
+ "required": [
1196
+ "attemptStartedAtMs"
1197
+ ],
1198
+ "additionalProperties": false
1116
1199
  }
1117
1200
  },
1118
1201
  "required": [
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zltquant/zlt-mcp",
3
- "version": "0.4.0",
3
+ "version": "0.4.1",
4
4
  "description": "智量通 ZLT Quant MCP server(Windows x64;量化策略创建与本地回测)",
5
5
  "bin": {
6
6
  "zlt-mcp": "./zlt-mcp-proxy.bundle.cjs"