# @backtest-kit/mcp 中文文档

规范地址：https://npmcn.com/package/%40backtest-kit/mcp/

版本：23\.7\.0
npm 元数据更新时间：2026-10-29T15:12:24.585Z
中文译文更新时间：2026-11-07T21:02:43.060Z
软件包许可：MIT

本文由上游 README 翻译，可能存在偏差，请结合原文核对 API、命令与配置。版权与许可归原作者所有。

原始 npm 页面：https://www.npmjs.com/package/%40backtest-kit/mcp
原文对照：https://npmcn.com/package/%40backtest-kit/mcp/?lang=original
项目主页：https://backtest-kit.github.io/documents/article_07_ai_news_trading_signals.html
源码仓库：https://github.com/tripolskypetr/backtest-kit

## 关键信息（来自 npm 元数据）

- 包体积（解压后）：122 kB，5 个文件
- 模块格式：ESM + CJS
- TypeScript 类型：包内自带
- 运行依赖：7 个
- peer 依赖：zod ^3\.25\.76，typescript ^5\.0\.0，backtest-kit ^23\.7\.0，@modelcontextprotocol/sdk ^1\.8\.0
- 首次发布：2026-07-29T07:14:29.921Z
- 最新版本发布：2026-10-29T15:12:24.315Z
- 近 30 天下载量：2567（2026-10-08 至 2026-11-06，npm 官方下载统计）
- 已发布版本数：52（近 12 个月 52 个）

## 中文简介

用于 backtest- kit 的模拟上下文协议服务器: 让 LLM 代理观察活交易组合, 并通过守护工具打开或关闭位置

## 安装

```sh
npm install @backtest-kit/mcp
```

也可以使用：`pnpm add @backtest-kit/mcp`、`yarn add @backtest-kit/mcp`、`bun add @backtest-kit/mcp`

## README

![](https://github.com/tripolskypetr/backtest-kit/raw/refs/heads/master/assets/consciousness.svg)

# @ backtest- kit/ mcp 页面存档备份,存于互联网档案馆

> 模拟上下文协议服务器 [反测试- kit](https://www.npmjs.com/package/backtest-kit). 让一个LLM代理(Claude,或任何MCP客户端)观察您的活交易组合,并打开、平均或关闭位置——通过 **5个守卫工具**,而交易引擎则保持其侧面的每个关卡,限制和验证.

[![Ask DeepWiki](https://deepwiki.com/badge.svg)](https://deepwiki.com/tripolskypetr/backtest-kit) [![npm](https://img.shields.io/npm/v/@backtest-kit/mcp.svg?style=flat-square)](https://npmjs.org/package/@backtest-kit/mcp) ![TypeScript](https://img.shields.io/badge/TypeScript-5.0+-blue)

📚 **[文档](https://backtest-kit.github.io/documents/article_07_ai_news_trading_signals.html)** • 妇女 **[参考执行情况](https://github.com/tripolskypetr/backtest-kit/tree/master/example)** • 妇女 **[GitHub 图像](https://github.com/tripolskypetr/backtest-kit)**

```bash
npm install @backtest-kit/mcp backtest-kit @modelcontextprotocol/sdk
```

**在贸易过程中** 登记 MCP 计划并曝光 HTTP 桥:

```typescript
import { addMCPSchema } from 'backtest-kit';
import { serve } from '@backtest-kit/mcp';

addMCPSchema({
  mcpName: 'my-mcp',
  strategyName: 'my-strategy', // the strategy whose live instances the agent sees
});

serve(); // HTTP bridge on 127.0.0.1:60051 (CC_MCP_HOST / CC_MCP_PORT)
```

**在MCP客户端** (例如:. `.mcp.json` claude Code)——运行stdio服务器:

```json
{
  "mcpServers": {
    "trading-signals": {
      "command": "npx",
      "args": ["@backtest-kit/mcp"],
      "env": { "CC_MCP_HOST": "127.0.0.1", "CC_MCP_PORT": "60051" }
    }
  }
}
```

经纪人得到 `get_status`, (中文(简体) ), `open_position` 财务报告和审定财务报表 `close_position`。您的策略代码不会改变 .

* * *

## 为什么

**代理决定 _何时何地_ - 引擎决定 _其他的都一样_。 。 。 .** 一个给定的 LLM 原始交换 API 密钥是一种责任: 一个被幻觉的参数,它以错误的价格买入了错误的大小而不停止. 在这里,代理的全部词汇是五个工具,打开的命令只携带 `symbol`, (中文(简体) ), `position` 和人可读 `description`. 取取利润、停站损失和入站成本通过背试-吻合计算(固定为50%的月球袋TP;硬站断裂后完全低于2.5%的网格) `CC_MAX_STOPLOSS_DISTANCE_PERCENT`;费用来自MCP计划)。 每个命令都通过与任何其他信号源相同的验证链-MCP-战略-风险简介-动作,一个已经持有位置的符号的开口被引擎所拒绝,而不是被即时工程所拒绝.

**为 LLM 消费而构建的文本第一状态.** `get_status` 返回每个交易符号中包含当前价格、投资余额、队列输入顺序、未实现的 PnL 活动位置以及队列关闭顺序的信息。 空插槽被明确表示("Entry 队列:空"),所以模型从来就不用猜测一个字段是否被省略或只是缺失了——说明原因的代理和产生幻觉的代理之间的区别. 习惯 `getMessages` 在 schema 中可以替换或扩展默认的渲染器,包括基数64的图表图像,将1:1映射到 MCP 图像内容块上.

**两个过程,一个合同.** Stdio MCP服务器生活在代理商的世界中,没有交易状态;它将HTTP的每一个呼叫都转发到交易过程. 管家总是回答 `200` ——运输成功不是运营成功——结果囊括: `error` 是一个关于成功和引擎确切消息的空字符串(`MCP Error: symbol BTCUSDT is not enabled for trading`失败时,该工具作为代理人转发给代理人 `isError` 结果它可以读取和反应.

-   🛠️ **5个被看守的工具** —— 说 `get_status`, (中文(简体) ), `open_position`, (中文(简体) ), `close_position`, (中文(简体) ), `average_position`, (中文(简体) ), `notify_user`; 没有其他的暴露,和 `--tools` 连那个都缩小了.
-   🧷 **发动机所属水平** ——月包TP/SL和入站成本由服务器侧计算;代理机无法覆盖.
-   💬 **人可读组合** ——每个同义词有明确空位的文本消息;图像支持.
-   🔌 **进程隔离** —— stdio服务器 QQ HTTP Bridge QQ交易引擎;stdout只搭载了JSON-RPC.
-   ✅ **最多一次语义** 命令再利用 backtest-kit's `commitCreateSignal` 编号 : `commitClosePending` 机制.
-   🧪 **可测试** —— 说 `IMCPCallbacks` (单位:千美元)`onStatus`, (中文(简体) ), `onPositionOpen`, (中文(简体) ), `onPositionClose`在每次接受效果之后,用原始数据进行射击.

* * *

## 配置

明确参数和环境变量

```typescript
import { setConfig } from '@backtest-kit/mcp';
setConfig({
  CC_MCP_HOST: '127.0.0.1',
  CC_MCP_PORT: 60051,
  CC_MCP_NAME: 'my-mcp',
});
```

| 变量 | 默认 | 说明 |
| --- | --- | --- |
| `CC_MCP_HOST` | `127.0.0.1` | HTTP 桥主听 (交易过程) 并连接到 (stdio 过程) |
| `CC_MCP_PORT` | `60051` | HTTP 桥口 |
| `CC_MCP_NAME` | _(空虚)_ | 多个注册时使用的 MCP 方案; 空 = 第一个注册的计划 |

转至的值 `setConfig()` 永远优于地狱之地.

命令行参数( stdio 服务器或 sse)

当软件包运行时 **stdio MCP 服务器** (单位:千美元)`npx @backtest-kit/mcp`,则 `backtest-kit-mcp` 命令,或 `node build/index.mjs`而不是env vars:

```bash
npx -y @backtest-kit/mcp@latest --host 127.0.0.1 --port 60051
```

```json
{
  "mcpServers": {
    "trading-signals": {
      "command": "npx",
      "args": ["@backtest-kit/mcp@latest", "--host", "127.0.0.1", "--port", "60051"]
    }
  }
}
```

或者说

```bash
npx -y @backtest-kit/mcp@latest --sse 8081
```

```bash
claude mcp add --transport sse trading-signals http://localhost:8081/sse
```

| 参数 | 覆盖 | 说明 |
| --- | --- | --- |
| `--host` | `CC_MCP_HOST` | 要连接的 HTTP 桥主机 |
| `--port` | `CC_MCP_PORT` | HTTP 桥口; 忽略非数字值 |
| `--tools` | —— 说 | 逗号分隔的工具名称以曝光; 省略所有五个 |
| `--sse [PORT]` | —— 说 | 服务 MCP 协议于 SSE 而不是 stdio; 默认为端口 `8080` |

主机和端口的解析命令 : **CLI 论点 `setConfig()` 缺省数** (单位:千美元)`127.0.0.1:60051`) (中文(简体) ).

适用 CLI 参数 **仅在二进制模式下** - 入口警卫(`helpers/getEntry.ts`)确保当软件包作为库导入时,主机进程 `argv` 永远不会泄露到配置中.

缩小工具表面 `--tools`

默认情况下 Stdio 服务器会登记所有五个工具 . `--tools` 使用逗号分隔的工具名称和注册列表 **仅限** 因此不需要迅速的工程 来让特工远离他们

```bash
# Read-only agent: it can watch the portfolio but not touch it
npx @backtest-kit/mcp --tools get_status

# Observe and exit, but never open or average
npx @backtest-kit/mcp --tools get_status,close_position,notify_user
```

```json
{
  "mcpServers": {
    "trading-signals": {
      "command": "npx",
      "args": ["@backtest-kit/mcp", "--tools", "get_status,close_position"]
    }
  }
}
```

有效名称正是代理商看到的工具名称: `get_status`, (中文(简体) ), `open_position`, (中文(简体) ), `close_position`, (中文(简体) ), `average_position`, (中文(简体) ), `notify_user`。未知名称 **启动失败** 加上未知和可用的名称列表——一个无声地扔出一个工具的打字会只是后来的奇特代理行为而浮出水面.

这是运输层的收缩 独立于发动机的 `permissions` 字段在 MCP 计划中。 两者作曲: `--tools` 决定提供什么代理, `permissions` 决定引擎接受什么 在这里限制一个工具是方便的,可以运行几个代理商对一个具有不同授权的交易过程;对真实的边界执行属于计划,代理商无法绕过.

在网络上服务 `--sse`

默认情况下服务器会说话 **静态**: 毒剂产出这个过程,然后通过stdin/stdout与它交谈. `--sse` 换那个 **SSE 通过 HTTP**,因此客户端可以附加到整个网络,而不是拥有进程:

```bash
# Default port 8080
npx @backtest-kit/mcp --sse

# Explicit port
npx @backtest-kit/mcp --sse 9000
```

有两个终点被曝光:

| 终点 | 方法 | 目的 |
| --- | --- | --- |
| `/sse` | 获取 | 打开长寿事件流; 与 `sessionId` 将员额派往 |
| `/messages?sessionId=…` | 邮政 | 提供1个客户端-服务器 JSON-RPC 消息 |

SSE是一个双通道运输: `GET` 流为整个会话保持开放,并携带每个服务器 客户端消息,而客户端 `POST`s 自己给第二个终点的信息。 这个 `sessionId` 互相连接,所以 **多个客户端可以同时附加** - 每个人有自己的会议,闭幕会议不会打扰其他会议.

将一个外部 MCP 端点连接到本地 HTTP 的连接器 `http://localhost:8080/sse`。启动行写给 **标准**永远不要脱口而出,所以同样的二进制可以被管道 无论是哪种方式,而不腐败 JSON-RPC流.

`--sse` 由其他一切组成—— `--tools` 仍然缩小地表, `--host` 编号 : `--port` 仍然指向交易桥(说明 _引擎_ 生活,这与 _代理人_ 连接 :

```bash
npx @backtest-kit/mcp --tools get_status --sse 9000
```

**可选值为位置**,所以在国旗被读作"端口"之后立即有一个路径:

```bash
npx @backtest-kit/mcp --sse ./strategy.ts   # ✗ fails: "./strategy.ts" is not a port
npx @backtest-kit/mcp ./strategy.ts --sse   # ✓ path first, then the flag
```

非端口值 **启动失败** 而不是被忽略——默默地将它视为"没有给定的港口"会吞噬战略路径,从没有加载开始.

* * *

## API 参考

| 导出 | 说明 |
| --- | --- |
| `serve(callback?)` | 在交易过程中启动HTTP桥(Singshot;安全可打两次电话). |
| `getRouter()` | 基本请求处理器 — 将其挂入您自己的 HTTP 服务器, 而不是 `serve()`。 。 。 . |
| `setConfig(config)` | 运行时覆盖主机/端口/名. |
| `getConfig()` | 当前合并配置( env + 任何) `setConfig` (原始内容存档于2017-03-25). overse. |
| `setLogger(logger)` | 用您自己的执行替换内部的无记录器 . |
| `lib` | IoC集装箱`mcpCommandService`, (中文(简体) ), `mcpPublicService`, (中文(简体) ), `mcpPrivateService`用于高级接线和测试. |

运行软件包二进制( R)`npx @backtest-kit/mcp`,已安装 `backtest-kit-mcp` 命令,或 `node build/index.mjs`开始 **stdio MCP 服务器** - 那边不需要进口,只要 `CC_MCP_HOST`编号 :`CC_MCP_PORT` 指出交易过程.

* * *

## 5个工具

| 工具 | 参数 | 经纪人得到什么 |
| --- | --- | --- |
| **获取状态( s)** | —— 说 | 每个交易符号一个消息:当期价格,投资余额,队列入列顺序,未实现的PnL(%和$)活动位置,队列关闭顺序. |
| **打开位置** | `symbol`, (中文(简体) ), `position` (单位:千美元)`long` | `short`, (中文(简体) ), `description` | 以由引擎计算出TP/SL/成本的市场价格开放. 如果符号没有活化或已经具有活性位置,则失败. |
| **关闭位置** | `symbol`, (中文(简体) ), `description` | 查询活跃位置的市场关闭情况. 如果没有什么可以关闭. |
| **平均位置** | `symbol` | 以市场价格添加一个 DCA 条目, 并附带配置的条目成本。 如果没有主动位置,则失败. |
| **通知用户** | `symbol`, (中文(简体) ), `description` | 附加对活动位置的描述, 浮出水面 `get_status`。如果没有积极的立场,则失败. |

每个命令都排入队列并在活盘上执行,所以其效果出现在 `get_status` 在大约5分钟之后——工具描述告诉代理人不要同时重新提交. 这个 `description` 参数转换为标记下,因此鼓励在单行线上添加详细的多行写入.

使用 `--tools` (见配置)只暴露其中的一个子集.

每一次失败都以代理身份到达 `isError` 工具结果, 包含引擎的准确错误信息 —— 代理机需要调用 `get_status` 首先对拒绝作出反应,而不是盲目重试.

* * *

## 如何运作

双进程架构

```
agent (Claude / any MCP client)
  └─ stdio JSON-RPC ─ backtest-kit-mcp          (this package, binary)
       tools/*.tool.ts
       └─ MCPCommandService ── HTTP POST ──► serve()   (this package, imported)
                                              routes/mcp.ts
                                              └─ MCPPublicService ─► MCP.* (backtest-kit)
                                                                      └─ Live.commitCreateSignal / commitClosePending
```

Stdio过程从不触及交易状态——它只会说HTTP. 交易过程登记计划,运行 `Live`,并回答 `/api/v1/mcp/*`。两个角色在一个包里: 导入它给你 `serve()`,执行它启动 stdio 服务器(一个入门点的守护使副作用在库模式下导入了禁用).

总是200个信封

HTTP处理器从不通过状态代码信号操作失败. 每一个反应都是 `200` 改为:

```json
{ "data": …, "status": "ok",    "error": "",                          "requestId": "…", "serviceName": "…" }
{            "status": "error", "error": "MCP Error: no active position for BTCUSDT" }
```

`MCPCommandService` 抛出时 `error` 非空; 工具抓取并返回消息为 `isError`. 运输级别的故障(引擎向下,错误的端口)同样通过 `fetchApi`这是例外.

终点

| 终点 | 方法 | 体质 `data` | 地图到 |
| --- | --- | --- | --- |
| `/api/v1/mcp/get_status` | 邮政 | —— 说 | `MCP.getStatus(mcpName)` |
| `/api/v1/mcp/commit_position_open` | 邮政 | `{ symbol, position, note }` | `MCP.commitPositionOpen(dto)` |
| `/api/v1/mcp/commit_position_close` | 邮政 | `{ symbol, note }` | `MCP.commitPositionClose(dto)` |
| `/api/v1/mcp/commit_average_buy` | 邮政 | `{ symbol }` | `MCP.commitAverageBuy(dto)` |
| `/api/v1/mcp/commit_signal_notify` | 邮政 | `{ symbol, note }` | `MCP.commitSignalNotify(dto)` |
| `/api/v1/health/health_check` | 获取 | —— 说 | 升起时间/ 内存/ CPU快照 |

请求信封 : `{ clientId, serviceName, userId, requestId, data }`编辑 `mcpName` 已解析服务器侧 : `CC_MCP_NAME` 如果设置了, 否则第一个注册的计程器—— 代理人从不需要知道它.

* * *

## 建筑

图层文件( F)

**公众表面** —— 说 `functions/serve.function.ts` (单位:千美元)`serve`编号 :`getRouter`, (中文(简体) ), `functions/setup.function.ts` (单位:千美元)`setLogger`, (中文(简体) ), `config/params.ts` (单位:千美元)`setConfig`编号 :`getConfig`, (中文(简体) ), `index.ts` 再出口+ `lib` 集装箱.

**Stdio 服务器** —— 说 `main/entry.ts` (McpServer + StdioServer Transport,通过 `helpers/getEntry.ts`, (中文(简体) ), `--tools` 选择通过 `helpers/getArgs.ts`, (中文(简体) ), `tools/get_status.tool.ts`, (中文(简体) ), `tools/open_position.tool.ts`, (中文(简体) ), `tools/close_position.tool.ts`, (中文(简体) ), `tools/average_position.tool.ts`, (中文(简体) ), `tools/notify_user.tool.ts` (经批判的论据, `isError` 绘制地图).

**HTTP 桥** —— 说 `config/router.ts` (微分+路由器+CORS, `/api/v1/mcp/*` 挂载, `routes/mcp.ts` (5个POST处理器,总是 -200信封), `routes/health.ts`。 。 。 .

**服务层** (单位:千美元)`lib/services/`:

-   `command/MCPCommandService.ts` 工具使用的HTTP客户端(`fetchApi` 反对 `CC_MCP_HOST:CC_MCP_PORT`) (中文(简体) ).
-   `public/MCPPublicService.ts` ——服务器端条目:解析 `mcpName` (单位:千美元)`CC_MCP_NAME` 或第一个计划,验证论点,代表下来.
-   `private/MCPPrivateService.ts` - 薄薄的伐木代理在后台测试设备上 `MCP` 单通.
-   `base/LoggerService.ts` 默认不操作(保持 stdio stdout 干净);通过 `setLogger`。 。 。 .

**DI 配置** —— 说 `lib/core/{di,provide,types}.ts`, (中文(简体) ), `lib/index.ts` (集装箱靴子), `utils/omit.ts` (log有效载荷修剪).

## \* 贡献

叉/ PR 打开 [GitHub 图像](https://github.com/tripolskypetr/backtest-kit)。 。 。 .

## 许可证

麻省理工学院 [特立奥尔斯基平板电脑](https://github.com/tripolskypetr)

## 常见问题

### @backtest-kit/mcp 是什么？

用于 backtest- kit 的模拟上下文协议服务器: 让 LLM 代理观察活交易组合, 并通过守护工具打开或关闭位置

### 如何安装 @backtest-kit/mcp？

在项目目录运行 npm install @backtest-kit/mcp，或使用 pnpm add / yarn add / bun add。它还需要宿主项目提供 peer 依赖：zod（^3\.25\.76）、typescript（^5\.0\.0）、backtest-kit（^23\.7\.0）、@modelcontextprotocol/sdk（^1\.8\.0）。npm 7 及以上与 pnpm 8 及以上默认会自动安装必需的 peer 依赖，Yarn 需要手动安装。它还提供命令行工具 backtest-kit-mcp，可以用 npx backtest-kit-mcp 直接运行。

### @backtest-kit/mcp 支持 TypeScript 吗？

支持。包内自带 TypeScript 类型声明（package\.json 声明了 types 入口），安装后即可获得类型提示，无需再安装 @types 包。

### @backtest-kit/mcp 支持 ESM 还是 CommonJS？

同时提供 ES Module 与 CommonJS 入口，import 和 require\(\) 都可以使用，打包工具会自动选择合适的版本。

### @backtest-kit/mcp 可以商用吗？

@backtest-kit/mcp 使用 MIT 许可。宽松许可：允许商业使用、修改和再分发，通常只需在分发时保留原版权与许可声明。以上为概括，不构成法律意见，请以许可原文为准。

### @backtest-kit/mcp 的下载量有多少？

根据 npm 官方下载统计，@backtest-kit/mcp 在 2026/10/08 – 2026/11/06 这 30 天内被下载 2,567 次，日均约 86 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入，适合横向比较热度，不能直接等同于使用人数。

### @backtest-kit/mcp 还在维护吗？

最新版本 23\.7\.0 发布于 2026/10/29（9 天前）；至今共发布 52 个版本，其中过去 12 个月发布了 52 个；首次发布于 2026/07/29。发布频率只是参考信号：功能稳定的工具可能很少需要更新，建议结合源码仓库的 issue 和提交记录判断。

