程序命令 (Studio.Mcp)
Studio.Mcp 是一个 MCP 服务器,代理可以通过它向正在运行的 StockSharp 程序发出命令:在 Terminal 中提交和撤销订单,管理 Hydra 的数据源,在 Designer 和 Shell 中启动策略测试。服务器不会单击按钮,也不会读取窗口,命令由程序本身执行。
服务器不启动任何程序,也不保存任何内容。只有在程序已打开时,命令才会送达程序;如果程序未运行,服务器会如实报告。
哪些程序会响应
| 程序 | 接受哪些命令 |
|---|---|
| Terminal | 订单列表、提交和撤销订单 |
| Hydra | 数据源类型、数据源列表,以及添加、启用、启动、停止和删除数据源 |
| Designer | 策略列表、启动和停止历史测试 |
| Shell | 模拟区域的策略列表,以及启动和停止这些策略的运行 |
只有这些程序的 Avalonia 版本接受命令,而且使用普通版本即可,不需要单独编译。程序在打开主窗口时打开命令通道,并在窗口关闭时将其关闭。Terminal、Hydra 和 Designer 的 WPF 版本不接受这些命令。
通道是本地命名管道,只有当前操作系统用户的进程可以访问。命令不会通过网络传输。
安装
服务器从 StockSharp 源代码编译:
dotnet build Studio/Studio.Mcp/Studio.Mcp.csproj -c Release
编译结果为 Studio/Studio.Mcp/bin/Release/net10.0/StockSharp.Studio.Mcp.exe。服务器没有自己的设置:不需要任何参数或环境变量。服务器将协议写入标准输出,将日志写入标准错误流;在没有客户端的情况下手动启动时,它只会等待输入。
连接代理
Claude Code — 项目的 .mcp.json 文件:
{
"mcpServers": {
"stocksharp": {
"command": "Studio/Studio.Mcp/bin/Release/net10.0/StockSharp.Studio.Mcp.exe"
}
}
}
在其他 MCP 客户端中(包括 Claude Desktop),连接服务器的方式相同:命令为 StockSharp.Studio.Mcp.exe 的路径,不需要参数和环境变量。
代理可以做什么
数据源、策略和订单的标识符取自列表类工具的响应:先获取列表,再执行操作。
通用
| 工具 | 作用 |
|---|---|
list_products |
哪些程序正在运行,以及每个程序接受哪些命令 |
describe_product |
单个程序的命令;product 为 Terminal、Hydra、Designer 或 Shell |
close_product |
请求程序关闭 |
Hydra
| 工具 | 作用 |
|---|---|
hydra_list_source_types |
Hydra 可以创建的数据源类型及其标识符 |
hydra_list_sources |
Hydra 的数据源:每个数据源是否已启用,以及当前是否正在下载 |
hydra_add_source (typeId) |
添加所选类型的数据源并将其返回;新数据源处于禁用状态 |
hydra_enable_source (sourceId, isEnabled) |
将数据源加入下载或从下载中排除 |
hydra_start_source (sourceId) |
启动数据源的下载;已禁用的数据源不会启动 |
hydra_stop_source (sourceId) |
停止下载 |
hydra_remove_source (sourceId) |
删除数据源及其设置;正在运行的数据源需要先停止 |
要使用新数据源下载数据,需要三次调用:hydra_add_source、hydra_enable_source、hydra_start_source。这些命令不会更改数据源的设置(交易品种、数据类型、连接参数),这些设置需要在 Hydra 窗口中指定(参阅数据源)。
Designer
| 工具 | 作用 |
|---|---|
designer_list_strategies |
Designer 的策略:类型(Backtest、Optimization、Live、Remote、Other)和当前状态 |
designer_start_backtest (strategyId, startTime, stopTime) |
在历史数据上启动 Backtest 或 Optimization 类型的策略;时间段以 ISO 8601 格式的 UTC 时间指定,并替换策略设置中的时间段;未指定时使用设置中的时间段 |
designer_stop_backtest (strategyId) |
停止正在运行的策略 |
Terminal
| 工具 | 作用 |
|---|---|
terminal_list_orders |
Terminal 中的订单及其事务编号 |
terminal_register_order (securityId, portfolioName, side, volume, price, orderType) |
提交订单并返回其事务编号 |
terminal_cancel_order (orderTransactionId) |
按事务编号撤销订单 |
交易品种按 Terminal 已知的形式指定,例如 SBER@TQBR;投资组合按 Terminal 已知的名称指定;side 为 Buy 或 Sell。限价订单需要价格;其他类型的订单不使用传入的价格。订单由 terminal_register_order 或 terminal_list_orders 返回的事务编号标识,而不是由交易所稍后分配的编号标识。
Shell
Shell 的工具由服务器根据程序本身发送的命令描述生成。因此,只有在服务器启动时或最近一次调用 list_products 或 describe_product 时 Shell 正在运行,这些工具才会存在。
| 工具 | 作用 |
|---|---|
shell_list_strategies |
“模拟”区域的策略及其状态 |
shell_start_backtest (StrategyId, StartTime, StopTime) |
在历史数据上启动策略运行 |
shell_stop_backtest (StrategyId) |
停止运行 |
Shell 始终使用策略设置中的时间段测试策略:如果传入 StartTime 或 StopTime,命令会被拒绝,因此请为它们传入 null。
限制和安全
Caution
terminal_register_order 会向 Terminal 所连接的地方提交真实订单。服务器不会再次确认:确认由 MCP 客户端负责,用户可以在调用执行之前在客户端中看到该调用。
- 不会启动进行真实交易的策略。 Designer 只启动
Backtest和Optimization类型的策略;对于其他类型,命令会被拒绝。Shell 只对命令开放“模拟”区域的策略。 - 删除不可撤销。
hydra_remove_source会删除数据源及其设置。 - 关闭。
close_product会关闭程序。 - 程序必须正在运行。 否则命令会返回错误
<程序> is not running.。等待未运行程序的响应大约需要 5 秒,因此在程序关闭时,list_products不会立即响应。正在运行的程序拒绝命令时,代理会收到文本:<程序> refused the command: <原因>。 - 没有密码。 同一用户账户下运行的任何程序都可以使用该通道:不会单独检查命令的发送者。
- 不区分程序副本。 如果运行了多个 Terminal 或 Designer 副本,或者在普通 Hydra 旁边运行着使用测试配置文件的 Hydra,命令会发送到其中一个副本,而且事先无法知道是哪一个。
- 不返回测试结果。 服务器只返回策略的状态,不返回统计信息和成交。可以使用 DesktopDriver 从程序面板中读取这些内容。
会话示例
用户请求:“在 Designer 中启动策略一月份的测试,并检查测试是否正在进行”。
list_products— Designer 正在运行;其他程序返回… is not running.designer_list_strategies— 策略中有所需的策略,类型为Backtest,状态为Stopped。designer_start_backtest,使用第 2 步中的strategyId,startTime=2026-01-01T00:00:00Z,stopTime=2026-02-01T00:00:00Z— 响应为Strategy <标识符> was started.designer_list_strategies— 策略状态已改变。- 如果需要中断测试,使用相同的
strategyId调用designer_stop_backtest。