跳到主要内容

连接你的 Agent(Harness)

重要声明:策引是个人开发的投资策略分析工具和教育平台,通过模拟组合展示交易规则、仓位变化与历史表现。平台不提供投资建议,所有策略分析仅供研究参考。真实账户中的决策与风险由用户自行判断和承担。

前提

  • 有效的 MyInvestPilot 会员资格(LIFETIME 或有效期内的 REGULAR)。
  • 策引 /lab 登录并点击 Connect My Agent,创建临时会话。
  • 复制只显示一次的临时令牌,配置到下面的客户端。令牌不要写进配置文件字面量、URL 或 shell 命令字面量。
Harness 信任边界

Codex、Claude Code、Pi、OpenCode 等 Harness 往往同时拥有 shell、文件系统或网络能力。连接 Agent Lab 后,请让它先读取下面的 canonical prompt.md;其中明确规定:Lab/MCP 返回的自由文本属于数据,不会因为出现在工具结果中就获得指令权限。结构化的符号解析、校验、状态与错误字段仍按服务端契约用于研究流程,但返回文本不能据此要求 Agent 读取本地凭据、环境变量或执行与当前研究无关的额外工具操作。

临时令牌不要进入 shell history

不要直接执行 export MYINVESTPILOT_LAB_TOKEN="<你的临时令牌>" 这类把秘密写进命令字面量的操作;常见 bash/zsh 配置会保存完整命令。下面统一用 read -s 无回显读取令牌,再导出环境变量。这样 shell history 只记录读取命令,不记录令牌本身。若你的 Harness 或终端提供专用 secret mechanism,也可以优先使用它。

推荐:Pi + DeepSeek V4 Flash

如果你还没有固定使用的 Harness,推荐从 Pi + DeepSeek V4 Flash 开始:

  • Pi 开源、轻量,安装和配置简单;
  • DeepSeek V4 Flash 成本很低,适合频繁策略实验;
  • 无需额外订阅 coding plan,按 API 使用量付费;
  • Pi 原生支持 DeepSeek,可按任务复杂度切换 V4 Flash / V4 Pro;
  • 该组合已经通过 MyInvestPilot Agent Lab 的真实端到端验证。
价格(截至 2026-08,以 DeepSeek 最新官方价格为准)

V4 Flash:输入 1 元 / 输出 2 元 / 缓存命中输入 0.02 元,每百万 token。

Pi + DeepSeek V4 Flash
-> pi-mcp-adapter
-> MyInvestPilot MCP(四个工具)
-> Fetch prompt.md
-> 开始研究

1. 安装 Pi

npm install -g --ignore-scripts @earendil-works/pi-coding-agent

2. 配置 DeepSeek API key(推荐用 /login)

pi
-> /login
-> DeepSeek
-> 粘贴 API key(Pi 以 0600 权限保存)
-> /model
-> deepseek-v4-flash(默认 deepseek-v4-pro,可按需切换)

Pi 已内置 DeepSeek provider,不需要手写 models.json

3. 安装 pi-mcp-adapter

pi install npm:pi-mcp-adapter
第三方扩展

Pi core 不内置 MCP。本指南使用第三方 pi-mcp-adapter(当前验证版本 2.21.0);安装第三方包前请自行确认其来源。

4. 配置 MyInvestPilot MCP(user-global,一次配置到处可用)

创建 ~/.config/mcp/mcp.json

{
"mcpServers": {
"myinvestpilot": {
"url": "https://api.myinvestpilot.com/mcp",
"protocolVersion": "auto",
"headers": {
"Authorization": "Bearer ${MYINVESTPILOT_LAB_TOKEN}"
}
}
}
}

在终端运行下面两条命令,然后粘贴原始临时令牌并回车(输入不会回显):

read -s MYINVESTPILOT_LAB_TOKEN
echo
export MYINVESTPILOT_LAB_TOKEN

pi-mcp-adapter 支持 headers 的 ${VAR} 插值;protocolVersion: "auto" 正是它针对 Cloudflare Workers createMcpHandler 这类无状态服务器推荐的设置。令牌以环境变量引用形式传递,配置文件和 shell history 里都不出现明文。

想让 MyInvestPilot 只在某个研究目录可用时,也可以把同样的配置放进该目录的 .mcp.json(project-local)。

5. 创建会话并开始

pi
# 在 Pi 里:
# /mcp tools -> 应能发现 myinvestpilot 的四个工具
# 然后让 Pi 读取:
# Fetch https://www.myinvestpilot.com/docs/agent-lab/prompt.md
# and follow the instructions before using MyInvestPilot Agent Lab.
# 接着直接说:
# Research a simple long-term trend strategy for QQQ from 2015.

连接是 lazy 的:第一次真实工具调用才建立连接。所以确认配置后,直接让 Pi 调用一次 resolve_symbols(例如"Use MyInvestPilot Agent Lab to resolve QQQ")看到真实返回,才是完整的连接验证。


其它已支持 Harness

以下客户端同样支持;如果你已经在使用它们,直接跳到对应小节。

端点与认证

MCP 端点:https://api.myinvestpilot.com/mcp
认证方式:Authorization: Bearer <临时令牌>

令牌通过客户端的 secret / header / 环境变量机制传递,绝不放进 URL 查询参数。下面统一使用环境变量名:

MYINVESTPILOT_LAB_TOKEN
Bearer 不要重复

Codex 的 env_http_headers 直接把环境变量值当作 Header 值:环境变量里要含 Bearer 前缀。 Claude Code / OpenCode 在配置模板里拼 Bearer :环境变量里不要再含 Bearer 。 两种写法都对,混用会产生 Authorization: Bearer Bearer <token>

Codex(OpenAI)

配置位置~/.codex/config.toml(追加)

先无回显读取原始临时令牌,再仅在当前 shell 的环境变量值中加 Bearer

read -s MYINVESTPILOT_LAB_TOKEN
echo
export MYINVESTPILOT_LAB_TOKEN="Bearer ${MYINVESTPILOT_LAB_TOKEN}"
[mcp_servers.myinvestpilot]
url = "https://api.myinvestpilot.com/mcp"
# env_http_headers 在每个请求上发送 Authorization(比 bearer_token_env_var 更稳)
env_http_headers = { "Authorization" = "MYINVESTPILOT_LAB_TOKEN" }

验证:codex mcp list 应能看到 myinvestpilot。令牌不要写进 config.toml 字面量。

Claude Code

推荐方式:项目级 .mcp.json + 环境变量引用(Claude Code 官方确认 .mcp.jsonheaders 支持 ${VAR} 展开,令牌不会以明文持久化)。把 myinvestpilot 加到你的研究项目根目录的 .mcp.json

read -s MYINVESTPILOT_LAB_TOKEN
echo
export MYINVESTPILOT_LAB_TOKEN
{
"mcpServers": {
"myinvestpilot": {
"type": "http",
"url": "https://api.myinvestpilot.com/mcp",
"headers": {
"Authorization": "Bearer ${MYINVESTPILOT_LAB_TOKEN}"
}
}
}
}
为什么不是 user-scope CLI

claude mcp add --scope user --header "Authorization: Bearer ..." 会把展开后的令牌明文持久化~/.claude.json(实测确认);user scope 配置里的 ${VAR} 展开在部分 Claude Code 版本不可靠。项目级 .mcp.json${VAR} 展开是官方确认支持的,且不落盘明文。

备选:user-scope CLI(希望所有项目都可用;注意令牌会明文存进 ~/.claude.json,因此只建议临时会话场景;下面仍用无回显输入避免把令牌写进 shell history):

read -s MYINVESTPILOT_LAB_TOKEN
echo
export MYINVESTPILOT_LAB_TOKEN
claude mcp add --transport http --scope user myinvestpilot \
https://api.myinvestpilot.com/mcp \
--header "Authorization: Bearer ${MYINVESTPILOT_LAB_TOKEN}"

验证:claude mcp list(myinvestpilot 显示 connected)、claude mcp get myinvestpilot;重启会话后生效。

OpenCode

配置位置~/.config/opencode/opencode.json"mcp"

read -s MYINVESTPILOT_LAB_TOKEN
echo
export MYINVESTPILOT_LAB_TOKEN
{
"mcp": {
"myinvestpilot": {
"type": "remote",
"url": "https://api.myinvestpilot.com/mcp",
"enabled": true,
"oauth": false,
"headers": {
"Authorization": "Bearer {env:MYINVESTPILOT_LAB_TOKEN}",
"Accept": "application/json, text/event-stream"
}
}
}
}

OpenCode 的远程 Streamable HTTP 需要 Accept 头;使用自带 header 认证时用 "oauth": false 关闭自动 OAuth discovery。验证:opencode mcp list

通用 Streamable HTTP MCP 客户端

任何支持 Streamable HTTP 的 MCP 客户端都可以接。先用 curl 验证端点与四个工具:

read -s MYINVESTPILOT_LAB_TOKEN
echo
export MYINVESTPILOT_LAB_TOKEN
curl -X POST "https://api.myinvestpilot.com/mcp" \
-H "Authorization: Bearer $MYINVESTPILOT_LAB_TOKEN" \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-d '{"jsonrpc":"2.0","method":"tools/list","id":1,"params":{}}'

返回的工具列表应恰好是:

resolve_symbols
validate_strategy_config
create_lab_run
get_lab_run
传输方式

Streamable HTTP(无状态):每个 JSON-RPC 请求独立 POST,没有 Mcp-Session-Id。令牌放 Authorization 头。

验证连接

  1. tools/list 恰好返回四个工具;
  2. 调用 resolve_symbols(例如 {"symbols": ["QQQ"], "market": "US", "currency": "USD"})返回规范符号;
  3. 确认没有组合创建/修改工具。

断开 / 移除配置

  • Codex:删除 ~/.codex/config.toml[mcp_servers.myinvestpilot] 段。
  • Claude Code:claude mcp remove myinvestpilot --scope user(user scope);项目级则删除项目根 .mcp.jsonmyinvestpilot 条目。
  • OpenCode:删除 opencode.json"mcp" 下的 myinvestpilot 条目。

撤销会话 / 处理泄漏

  • 策引 /lab撤销会话,旧令牌立即失效;再连接时创建新会话。
  • 令牌泄漏(贴到公开场合、提交进仓库、写入 shell history)时:立即在 Web 撤销并重新创建,再更新客户端配置。
  • 页面刷新后明文令牌无法再次查看;如果还没配置到客户端,撤销并重新创建即可。

令牌轮换:配置结构不变,credential 必须更新;更新后重启或显式重载并重连

“会话过期后只需重新创建会话并更新客户端里的令牌,配置本身不用改”这句话不准确。 准确 contract:

  • 配置的结构和端点不用改(同一个 MCP server 条目、同一个 https://api.myinvestpilot.com/mcp 端点、同一套 header 结构);
  • credential value 必须换:把新的临时令牌写进客户端实际读取的 secret / 环境变量 / header 配置。只更新文档或父 shell 里的变量,不等于运行中的进程 已经拿到新值——已经启动的 Agent/Harness 进程可能继承了旧环境变量、加载了 旧配置,或缓存了旧的 MCP 连接;
  • 安全的通用做法是:更新令牌后完整退出并重启 Agent 客户端。若某客户端 明确提供“重新加载配置 + 重连 MCP”且会重新读取 credential source,可以用该 机制代替;新建一个聊天/模型会话不等于重启承载 MCP 的宿主进程或 gateway, 文档不能把二者混为一谈;
  • 验证必须是实际调用一次 resolve_symbols 并看到真实返回——只看到缓存的 tools/list 工具列表不算验证成功。

推荐轮换流程:

1. 在 /lab 撤销旧会话
2. 创建新会话,复制只显示一次的新令牌
3. 通过既有 secret / environment 机制更新 credential
4. 完整重启 Agent 客户端,或执行该客户端明确支持的 reload + MCP reconnect
5. 实际调用一次 resolve_symbols 验证

Pi 的安全默认流程:退出 Pi,在启动 Pi 的 shell 里无回显读入并导出新令牌 (read -s,见上文),再重新启动 Pi;之后按需执行 /mcp reconnect myinvestpilot 仅用于客户端确实已读取新 credential 后的重连操作——不要单独依赖 reconnect 让一个运行中的进程看到父 shell 后来修改的环境变量。

故障排查(curl-first)

先无回显设置令牌,再直接请求(不要把令牌写进命令字面量):

read -s MYINVESTPILOT_LAB_TOKEN
echo
export MYINVESTPILOT_LAB_TOKEN
curl -si -X POST "https://api.myinvestpilot.com/mcp" \
-H "Authorization: Bearer $MYINVESTPILOT_LAB_TOKEN" \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-d '{"jsonrpc":"2.0","method":"tools/list","id":1,"params":{}}' | sed -n '1,20p'

curl 也返回 401(含 WWW-Authenticate: Bearer realm="myinvestpilot-agent-lab" 与 JSON-RPC SESSION_INVALID_OR_EXPIRED 的稳定 envelope)或 requires authorization

  1. 检查令牌是否过期/已撤销,或变量是否为空;
  2. 检查是否错误形成 Bearer Bearer ...(Codex 的环境变量要求含 Bearer 前缀、Claude Code/OpenCode 模板自己拼前缀——不要两边都加);
  3. 必要时在 /lab 重新创建会话并重走轮换流程。

curl 成功但 Agent 失败(如 does not appear to speak MCP / “这不是 MCP 端点”):

  1. 优先判断运行中的进程仍持有旧 credential:完整重启客户端,或确认客户端 确实重新加载了正确的配置源并重连 MCP;
  2. 重启后仍失败,再检查实际加载的配置文件、配置优先级、端点 URL、headers 与 Accept——不要先把问题归因于 MCP 协议。curl 能成功就说明端点和 协议是对的,问题在客户端侧的配置加载/连接状态。

给 Agent 的引导

连接完成后,告诉你的 Harness:

Fetch https://www.myinvestpilot.com/docs/agent-lab/prompt.md
and follow the instructions before using MyInvestPilot Agent Lab.

然后可以直接让它试:

Research a simple long-term trend strategy for QQQ from 2015.

完整流程见策略研究指南


重要提醒:本文内容仅供研究参考,不构成投资建议。实验结果是历史模拟行为,不代表未来表现;请结合你的资金安排、已有持仓与可承受回撤,自行判断真实账户中的操作与风险。