mcpField
N
Nimbus BCI

Nimbus BCI

远程服务
github.com/nimbusbci科研与教育35 天前更新
代码仓库

关于 Nimbus BCI

Nimbus BCI 是面向 BCI 和 EEG 工作流的 MCP 服务,供 AI Agent 构建、验证、运行和分析管线,也支持实验、数据上传及实时会话。它可连接本地或托管 Nimbus 后端,并可在明确确认后启动实时流。

主要功能

  1. 01构建、验证和运行 BCI 管线
  2. 02上传 EEG 数据并训练模型
  3. 03运行多配置实验并分析结果
  4. 04查看实时 EEG 会话与遥测
  5. 05导出 BIDS 数据并生成图表

适用场景

  1. 01用公开 MOABB 数据演示完整分析流程
  2. 02上传自有 EEG 数据并训练模型
  3. 03运行多配置实验并查看统计结果
  4. 04连接设备开展实时 EEG 会话

MCP 相关

该 MCP 服务提供 63 个工具,用于操作 Nimbus 的本地后端或托管部署,涵盖管线、实验、实时会话、统计和导出。可通过 stdio 客户端连接,也提供托管 HTTP 网关。

配置

远程服务无需本地安装。选择你使用的客户端,复制配置或使用一键安装。

服务地址https://nimbus-mcp.fly.dev/mcp
一键复制安装命令
Claude CodeTerminal
Cursor.cursor/mcp.json
VS Code.vscode/mcp.json
Claude Desktopclaude_desktop_config.json
Windsurf~/.codeium/windsurf/mcp_config.json

命令在终端中运行;JSON 粘贴到对应客户端的 MCP 配置后重启。需要授权的服务会在首次连接时提示登录。

安装包
pypinimbus-mcp0.14.17

工具

58

此工具无需参数。

详细介绍

nimbus-mcp

smithery badge M8ven Verified

MCP 服务可让 AI Agent(Claude Code、Cursor、Claude Desktop)构建、验证、 运行和分析 Nimbus BCI 工作流 — 上传自己的 EEG 数据,将工作流持久化到工作室项目中, 运行多配置实验活动,监控实时 EEG 会话,以及(经明确确认后)启动实时流式传输 — 可连接本地 Nimbus 后端,或通过一次 nimbus-mcp login 登录托管部署。

为什么选择 nimbus-mcp(2026 年 10 月现状)

BCI-MCP 领域在 2026 年新增了其他四个 MCP 服务。它们都是专注于特定领域的实用工具 — 各自覆盖了 nimbus-mcp 端到端功能的一部分:

能力nimbus-mcpbci-mcpeeg-mcpmne-mcpephys-mcp
构建 + 验证 + 运行 BCI 工作流✅ 63 个工具————
使用真实数据训练(MOABB 数据包、上传数据)✅——仅文件 I/ONWB/DANDI
使用自带的模型代码(python_model)✅ 本地 + 云沙箱————
基准排行榜 + 服务端 LOSO 评分✅————
Agent 可见的图形(PNG 内容块)✅ plots.*——✅✅
人体实时硬件会话✅ 需确认✅✅——
无模型实时频带功率(专注/放松)✅ stream.telemetry✅✅——
引导式受试者校准✅ calibration.*————
神经反馈协议会话✅ protocol.*————
BIDS 导出(sha256 清单)✅ bids.*————
考虑簇结构的组统计✅ stats.grouped———部分支持
传输方式stdio + 托管 HTTP 网关stdio + HTTPstdiostdiostdio
验证依据arXiv:2610.13894 — 一致性研究,3 个数据集 / 6 个工作流 / 2 个协议频带比值启发式方法———

范围说明(有意不覆盖的目标):不提供刺激输出(eeg-mcp 的三重互锁 send_stim_event 确实很新颖;我们不驱动刺激器),不处理尖峰/电生理数据(ephys-mcp 覆盖皮层内记录 — 属于不同的数据平面),不提供源定位 / 完整 MNE 一致性(mne-mcp 是深度离线 MNE 封装;plots.* 则提供 Agent 在 Nimbus 数据上所需的图形)。

安装

pip install nimbus-mcp   # or: uvx nimbus-mcp

(也可以从仓库安装:pip install -e nimbus-studio/mcp。)

零硬件演示:examples/demo.md — 一段可复制粘贴的 Agent 提示词,可在公开 MOABB 数据上运行完整流程(探索 → 检查 → 图形 → 训练 → 混淆图 → 排行榜 → 统计),无需设备。

身份验证

启动时按以下顺序尝试通过三种方式为服务提供凭据:

  1. nimbus-mcp login(推荐——托管 API,无需粘贴令牌)。 通过设备代码登录:命令会打印一个 URL 和一个 8 位代码,打开浏览器后,你在 Nimbus Studio 中批准登录,生成的令牌会存储在 ~/.nimbus/credentials.json(0600)中,并在之后每次启动时自动读取。

    nimbus-mcp login     # options: --api-url URL, --ttl-days 7..90, --name NAME
    nimbus-mcp status    # doctor: credential source, plan, quota, days-to-expiry, live probe
    nimbus-mcp logout    # remove the stored credential
    

登录后,MCP 客户端配置无需任何密钥:

{
  "mcpServers": {
    "nimbus": {
      "command": "uvx",
      "args": ["nimbus-mcp"],
      "env": { "NIMBUS_API_URL": "https://nimbus-studio.fly.dev" }
    }
  }
}
  1. 桌面应用——无需配置。 只需运行 Nimbus Studio 桌面应用:系统会自动发现本地密钥文件(macOS ~/Library/Application Support/Nimbus Studio/mcp-key.json、Linux ~/.config/Nimbus Studio/…、Windows %APPDATA%\Nimbus Studio\…),服务会连接到本地后端 http://127.0.0.1:8080。无需粘贴或配置任何内容。

  2. 环境变量(高级 / CI)。 NIMBUS_TOKEN(在 Nimbus Studio → Account → API tokens 中生成的托管 API 令牌 nimb_…)或 NIMBUS_TOKEN_FILE(内容为 {"token": "…"} 的 0600 JSON 文件——可避免将密钥放在进程环境变量和 MCP 配置中),或本地密钥对 NIMBUS_MCP_KEY / NIMBUS_MCP_KEY_FILE(必须与本地后端上的 MCP_LOCAL_KEY 匹配——见下文)。显式设置的环境变量始终优先于磁盘上的文件。若未设置 NIMBUS_API_URL,NIMBUS_TOKEN / NIMBUS_TOKEN_FILE 令牌会连接到托管 API(https://nimbus-studio.fly.dev);设置 NIMBUS_API_URL 可将其指向其他地址。

完全没有凭据? 这就是 Local Free 层级——它可以正常使用。服务会以匿名方式连接本地后端(桌面应用或运行在 http://127.0.0.1:8080 的开发后端):模板、你自己的数据、本地执行/绘图/统计、BIDS 导出和仅本地存储,完全无需登录 Nimbus Studio。只有在首次需要使用云端功能时才会要求登录——需要身份的工具(提交排行榜、已验证/跨机器实验历史、托管计算、云同步、协作)会返回 {ok: false, loginRequired: true, trigger, reason, howToAuthenticate},明确说明具体原因,而不是一概拦截。托管 Pro 功能(已验证的排行榜提交、foundation.compare、大型活动、团队功能)在免费账户上会返回 {ok: false, tierGate: true, requiredTier: "pro"};任何层级的导出(BIDS 等)都不会受到限制。如果本地调用因本地后端或身份不存在而失败,响应会采用本地模式下的 {ok: false, setupRequired: true, message, options} 形式(启动桌面应用 / 设置开发密钥——仍然无需登录)。如果托管令牌在会话期间被拒绝(过期或撤销),则会返回经典设置提示,其中包括令牌过期了多少天。

查看你的身份
account.whoami() → {userId, email, plan: {isPro, pioneerAccess},
            freeRuns: {monthlyLimit, remaining},
            token: {name, kind, scopes, fullAccess, expiresAt, daysLeft}
                   | {masked, kind, scopes, fullAccess, expiresAt, daysLeft}  # gateway header token
                   | null,
            source}                                      # store | env | token_file | header | …

在 Agent 中调用 account.whoami(),即可查看账户、套餐、本月免费运行配额,以及(令牌模式下)令牌距离过期的天数;nimbus-mcp status 是对应的终端命令,会实时探测后端。

托管令牌的含义
  • 令牌代表的就是你。 请求会以你的账户身份运行:执行记录会显示在你的 Studio 历史记录中,且适用你套餐的配额和限制——不存在单独的 Agent 配额。免费月度配额用尽后,运行错误会附带升级链接 https://studio.nimbusbci.com/pricing?reason=mcp-quota。
  • v0.4 中仅支持 CPU。 通过令牌身份验证的运行不会启用云端 GPU。
  • 轮换。 令牌的有效期最长为 90 天(默认 30 天)。套餐变更会在生成令牌时记录快照——升级后,请重新登录(或撤销并重新创建令牌)以应用新套餐。令牌过期时会显示包含过期天数的设置指引,而不会让你无从处理。
无头 Agent 和 CI(API 密钥)

对于 CI 流水线和无人值守的 Agent,请在 Nimbus Studio → Account → API tokens 中创建 CI 密钥:选择类型 CI / headless,设置 90、180 或 365 天的有效期,并选择其作用域。CI 密钥是 Pro 功能(Pro 套餐或 Pioneer 权限);Free 账户仍可使用个人令牌。

作用域允许的操作
readGET/list/describe,以及仅进行计算的 POST(validate、plots、stats、export)
run启动/取消执行和实验(会消耗你的配额)
write创建/更新/删除项目、流水线、上传内容和设置
leaderboard:submit提交排行榜结果

CI 密钥默认具有 read + run 作用域;选择完全访问权限的 CI 密钥需要显式操作(勾选 Full access,或在 POST /api/me/api-tokens 中设置 "fullAccess": true)。个人令牌保留原有默认行为:未选择作用域 = 完全访问权限;所有在作用域功能推出前创建的令牌仍可照常使用。后端会对每个请求强制执行作用域检查;缺少所需作用域时会返回 403 nimbus.auth.token_scope_insufficient。account.whoami 和 nimbus-mcp status 会显示密钥类型、作用域和剩余天数。

将密钥保存为 CI 密钥,并通过 NIMBUS_TOKEN 传入(无需设置 NIMBUS_API_URL——令牌默认连接托管版 Nimbus)。GitHub Actions 示例:

- name: Nimbus smoke run
  env:
    NIMBUS_TOKEN: ${{ secrets.NIMBUS_CI_KEY }}
  run: |
    pipx install nimbus-mcp
    nimbus-mcp status          # fails fast if the key is expired or revoked

或者,调用托管网关 https://nimbus-mcp.fly.dev/mcp,并附上请求头 Authorization: Bearer $NIMBUS_TOKEN。请在密钥过期前轮换(Account 页面会标记将在 14 天内过期的密钥),若密钥泄露,请立即撤销——撤销会在下一个请求时生效。

API 密钥的套餐和限制:

  • 套餐会实时重新检查:每个使用 API 密钥发出的请求都会查询你当前的 Clerk Billing 套餐(缓存约一分钟),因此取消 Pro 套餐也会移除现有密钥的 Pro 功能,而不仅仅影响新密钥。
  • 如果 CI 密钥的所有者不再拥有 Pro 套餐,每个请求都会被拒绝,并返回 403 nimbus.auth.ci_key_requires_pro。重新订阅后即可恢复使用(无需重新创建密钥);否则,请撤销该密钥并改用个人令牌。
  • 最多可拥有 20 个有效(未撤销、未过期)API 令牌;再创建一个会返回 409 nimbus.me.api_token_limit_reached。通过 MCP OAuth 登录创建的令牌不计入此限制。

隐私与遥测

本地 Free 模式无需账户,默认不会向外发送任何信息。匿名且不包含内容的使用遥测(工具名称、成功/失败状态和错误代码、耗时区间——绝不包含你的数据、文件路径或代码)为选择加入:全新安装后,你会在第一次工具响应中收到一次询问;你也可以随时使用 nimbus-mcp telemetry on|off|status(或 NIMBUS_MCP_TELEMETRY=on|off)控制遥测。关闭遥测后不会产生任何遥测网络请求,所有本地功能仍可正常使用。完整声明见:PRIVACY.md。启动时会静默检查 PyPI 版本(缓存 24 小时;当前版本或离线时不显示提示);如果你的客户端落后于托管网关支持的功能范围,工具响应中会一次性附加 versionNotice。

要求(本地模式)

  • 本地运行的 Nimbus 后端:桌面应用,或开发服务器(cd nimbus-studio/backend-py && python -m nimbus_backend.server.app),并设置 DEBUG=1。
  • 后端启动时设置 MCP_LOCAL_KEY=<some-secret>(请勿在 Fly 上设置此项——在那里会被拒绝)。
  • 桌面应用用户:打开 Settings → MCP & Agents——无需手动设置密钥(应用会创建密钥、将其注入后端,并提供可直接复制的配置)。

无需桌面应用。 数据采集完全在后端进行:无头本地后端 + nimbus-mcp 即可驱动真实硬件(BrainFlow 电路板、通过 BLE 连接的 BrainBit、LSL、PiEEG)和模拟电路板,无需 Electron:

git clone <this repo> && cd NimbusStudio/nimbus-studio/backend-py
pip install -e ".[streaming]"            # brainflow + pyneurosdk2 + pylsl extras
export DESKTOP_LOCAL_BACKEND=true MCP_LOCAL_KEY=<secret> MCP_LOCAL_USER_ID=user_…
python -m nimbus_backend.server.app      # loopback backend with device radios
# another shell: nimbus-mcp against http://127.0.0.1:8080 with NIMBUS_MCP_KEY=<secret>

随后,相同的 stream.start → stream.telemetry 流程无论是否使用训练好的模型都可正常工作(无模型的流会报告实时信号质量以及专注度/放松度指标)。

配置后端

桌面端/开发环境(例如 backend-py/data/.env 或开发 Shell):

MCP_LOCAL_KEY=choose-a-long-random-string
MCP_LOCAL_USER_ID=user_your_clerk_user_id
DEBUG=1   # dev server only; the desktop app qualifies automatically

MCP_LOCAL_USER_ID 用于设置 MCP 密钥所认证的主体。将其设为你自己的 Clerk 用户 ID(user_…),这样 Agent 创建的所有内容——项目、已保存的流水线、执行记录——都会在你的工作室 UI 中显示为你所有。选定一个所有者后请始终保持一致:中途切换 ID 会将 Agent 创建的内容拆分到两个主体名下,两个身份都无法看到完整历史记录。

监视器默认设置:通过 MCP 启动的流式会话在无人查看 15 分钟后会自动停止(每次 stream.status/stream.telemetry 轮询都会重置计时器)。对 stream.start 传入 idle_timeout_sec=0 可为该会话停用此功能。

在连接到不受信任网络的计算机上启用 MCP_LOCAL_KEY 时,也要在后端设置 HOST=127.0.0.1。默认值 0.0.0.0(settings.host)适用于裸开发服务器(python -m nimbus_backend.server.app),否则该密钥也会接受来自局域网的请求;backend-py/scripts/run_server.py 已默认使用 127.0.0.1,桌面应用也会自行固定为回环地址。

运行服务

cd nimbus-studio/mcp
python -m venv .venv && source .venv/bin/activate
pip install -e ".[test]"
NIMBUS_MCP_KEY=choose-a-long-random-string python -m nimbus_mcp

环境变量:NIMBUS_API_URL(设置后始终优先;否则,登录后使用存储中的 api_url,对于 NIMBUS_TOKEN/NIMBUS_TOKEN_FILE 令牌使用 https://nimbus-studio.fly.dev,其他情况使用 http://127.0.0.1:8080)、NIMBUS_TOKEN/NIMBUS_TOKEN_FILE(托管 API 令牌——请参阅 身份验证)、NIMBUS_MCP_KEY(必须与 MCP_LOCAL_KEY 匹配)、NIMBUS_MCP_KEY_FILE(0600 JSON 文件 {"key": "…"} 的路径——桌面应用的一键 MCP 设置会写入此文件;仅在未设置 NIMBUS_MCP_KEY 时读取)、NIMBUS_EXPORT_DIR(默认值为 ~/nimbus-exports)。未设置任何令牌/密钥变量时,会自动查找登录存储,然后查找桌面密钥文件;如果都未找到,服务将以设置模式运行(每个工具都会返回入门指南)。

托管网关(可流式传输的 HTTP)

nimbus-mcp serve 通过可流式传输的 HTTP 而非 stdio 运行相同的 63 个工具,适用于远程 MCP 客户端、注册表(Smithery 会列出基于 URL 的服务)以及浏览器端客户端:

nimbus-mcp serve --port 8080   # env: NIMBUS_MCP_HOST/PORT/PATH

网关默认绑定到 127.0.0.1——公开网关(--host 0.0.0.0)需要明确选择启用;请将其与下文介绍的逐请求令牌结合使用(网关本身不持有可用于控制访问的凭据)。

网关本身不持有任何凭据:每个请求的 Nimbus API 令牌都会通过标头发送,因此一个共享部署可让多个用户各自以自己的身份使用。没有标头的调用会获得设置指南(添加标头,或通过 uvx 在本地安装)。

{
  "mcpServers": {
    "nimbus": {
      "type": "http",
      "url": "https://nimbus-mcp.fly.dev/mcp",
      "headers": { "X-Nimbus-Token": "nimb_…  (Account → API tokens)" }
    }
  }
}

(在环境中设置了 NIMBUS_TOKEN 后启动的网关会将其用作无标头调用的后备令牌——适用于单租户自托管。)

OAuth 登录(可选,NIMBUS_MCP_OAUTH=1)

设置 NIMBUS_MCP_OAUTH=1 后,网关也会成为 OAuth 2.1 授权服务器(MCP 授权规范),因此 Claude 和 Cursor 等客户端只需使用 URL 即可连接,无需粘贴令牌:

  • /.well-known/oauth-protected-resource/mcp 和 /.well-known/oauth-authorization-server 元数据;
  • 动态客户端注册(/register,由后端存储);
  • /authorize(PKCE S256)会将浏览器带到 Studio /mcp/authorize,用户可在此登录并选择允许或拒绝;
  • /token 会将授权码交换为普通的 nimb_ 令牌(有效期 30 天,无 刷新令牌;作用域为 read、run、write、leaderboard:submit,或在请求全部/未指定作用域时授予 完整访问权限)。对同一客户端重新授权会撤销该客户端之前的令牌,且所有 OAuth 令牌都会列在“账户 → API 令牌”下(并可撤销)。

启用此标志后,不带令牌的请求会收到规范规定的 401 响应,其中包含 WWW-Authenticate: Bearer resource_metadata=… 标头(这会启动 客户端的登录流程),因此不再公开不带标头的 tools/list。现有的 X-Nimbus-Token / Authorization: Bearer nimb_… 标头仍可使用。

变量位置含义
NIMBUS_MCP_OAUTHgateway设为 1 可启用 OAuth(默认关闭)
MCP_OAUTH_GATEWAY_SECRETgateway 和 backend用于仅限网关的后端路由以及签署授权请求的共享密钥(≥ 32 个字符)
NIMBUS_MCP_PUBLIC_URLgateway发行方 / 公共基 URL(默认 https://nimbus-mcp.fly.dev;除回环地址外必须使用 HTTPS)
NIMBUS_STUDIO_URLgateway/mcp/authorize 所在的位置(默认 https://studio.nimbusbci.com)
NIMBUS_API_URLgateway后端基 URL

在 Fly 上:对网关应用运行 fly secrets set MCP_OAUTH_GATEWAY_SECRET=… NIMBUS_MCP_OAUTH=1,并在后端设置相同的 MCP_OAUTH_GATEWAY_SECRET。如果未设置密钥,后端会对 OAuth 路由返回 503 nimbus.mcp.oauth_not_configured。

Claude Code

# --env flags go BEFORE the -- separator (everything after it is the literal
# server command, so the after-form would feed --env to python/uvx):
claude mcp add nimbus --env NIMBUS_MCP_KEY=choose-a-long-random-string \
  -- <path-to-mcp-venv>/bin/python -m nimbus_mcp

Cursor / Claude Desktop(stdio)

{
  "mcpServers": {
    "nimbus": {
      "command": "<path-to-mcp-venv>/bin/python",
      "args": ["-m", "nimbus_mcp"],
      "env": { "NIMBUS_MCP_KEY": "choose-a-long-random-string" }
    }
  }
}

工具(63)

身份验证:account.whoami(账户、套餐、配额、令牌过期时间) 发现:catalog.nodes、catalog.node_schema、catalog.templates、catalog.template、catalog.datasets、catalog.leaderboard 数据:data.upload、data.delete_upload(需要 confirm=true) 检查:data.inspect_dataset、data.inspect_file(EDA:通道、类别平衡、频带功率、PSD) 构建:pipeline.validate、pipeline.validate_node 运行:execution.run(非阻塞)、execution.get、execution.list、execution.results、execution.cancel、execution.delete(需要 confirm=true)

运行摘要(execution.get / execution.list)包含两个数据集字段:dataset 是人类可读的显示标签(例如 BCIIV2a),datasetId 是目录 ID(例如 BNCI2014_001),其他工具可接受此 ID(data.inspect_dataset、图中的 public_data.dataset)。title 是 Studio 中显示的运行名称。 实验活动:experiment.run(非阻塞,1-25 次按节奏执行的运行)、experiment.get、experiment.delete(需要 confirm=true) 产物:execution.artifacts、execution.download_artifact、pipeline.export 实时:device.list、device.test、stream.start(需要 confirm=true), stream.status、stream.telemetry、stream.stop 校准:calibration.start(需要 confirm=true)、calibration.status、 calibration.pause、calibration.resume、calibration.train 神经反馈协议:protocol.validate/protocol.save(带版本的规范), protocol.start_assignment(需确认;模拟源免费,实时硬件需 Pro), protocol.session_status/pause/resume/stop、protocol.export_stats (配对的前后测统计 + 图表 + CSV) 项目:project.create、project.list、project.save、project.load、project.rename、project.delete(需要 confirm=true) Python:python.validate(对 BYO 模型代码进行静态契约检查 — 不执行代码) 排行榜:leaderboard.submit(BYO python_model → 服务端 LOSO 评分, 202 + submissionId;track="pretrained_few_trial" = 效率赛道: LOSO 最多 100 次试验,torch 代码必须声明 PARAMS_TRAINED), leaderboard.status(查询单次提交状态,仅限所有者), leaderboard.mine(你的提交,按最新优先排序) BIDS:bids.export_dataset(打包 / 上传 / 录制 → BIDS 布局 zip; 连续数据 → BIDS-raw,分段数据 → BIDS-derivatives)、bids.export_execution (结果包:指标、participants.tsv、协议、pipeline 快照) 图表:plots.confusion、plots.dataset(psd / topomap / bandpower / spectrogram)、plots.erp(按类别绘制蝶形图)、plots.leaderboard(CI 须状条,突出显示 BYO;track=pretrained_few_trial 会并排叠加经典 LOSO 基线)— 助手可查看的 PNG 图表 统计:stats.grouped(跨运行、按受试者汇总且考虑聚类的准确率: t 区间 + 与随机水平比较的 t 检验)

不确定要构建哪种 pipeline?catalog.leaderboard() 会按规范的 within_session 协议,针对每个数据集对经过基准测试的 pipeline 排名(按 meanAccuracyPct 降序,显示 95% CI)—— Agent 会据此选择排名靠前的模板,并通过 catalog.template(pipelineId) 获取最佳模板。

先查看数据(以及结果)

在构建任何工作流之前,Agent 可以先查看数据:通道、采样率、试验/类别分布、各通道的 µV 统计数据、标准频带功率和 PSD 概览——无论是公开数据集还是磁盘上的文件。

“在选择工作流之前,先检查 BNCI2014_001 的受试者 S01。”

data.inspect_dataset(dataset="BNCI2014_001", subject="S01", mode="all")
# → {channels: {count: 22, names: [...], flatlined: []}, samplingRate: 250,
#    trials: {count: 288, classLabels: [...], classCounts: {...}},
#    channelStats: [...], bandPowers: {...}, psd: {...},
#    computedFrom: {nSamples: ..., sampleStrategy: "stratified_sample_seed42_4_of_20"}}

subject 为必填项(例如 "S01";通过 catalog.datasets 获取列表),逗号分隔的列表(如 "S01,S03")会加载一个队列;mode 可设为 training | evaluation | all。

文件也适用相同的方式:data.inspect_file 会根据路径形式选择数据源。绝对路径会从磁盘读取文件(仅限本地后端——桌面应用 / MCP 本地模式:无需上传,数据不会离开设备);相对路径——即 data.upload 返回的路径——则用于描述已上传的文件,适用于任何后端(托管或本地):

“查看 ~/recordings/session-01.edf,告诉我电极布局是否合理。”

data.inspect_file(path="/Users/you/recordings/session-01.edf")  # absolute → local file
data.inspect_file(path="uploads/<user>/session-01.edf")  # data.upload path → upload
data.inspect_file(path="uploads/<user>/eeg.csv", sampling_rate=250.0)  # CSV/TSV/TXT need a rate

CSV/TSV/TXT 不包含采样率,因此必须为其指定 sampling_rate(Hz):如果未指定,工具会立即失败并返回 nimbus.mcp.sampling_rate_required,且不会发出任何请求。

在托管后端上,绝对路径会被拒绝——此时 data.inspect_file 会提供指引(通过 data.upload 上传文件并传入返回的路径,或将服务指向本地后端),而不是让你陷入死路。

为何要先检查:类别分布决定分层方式(类别不平衡会导致准确率偏差),而且通道信号平直意味着电极布局/参考电极可能有问题,应在训练前修复。还需注意单位:加载器默认假设单位为伏特——以 µV 为单位的 CSV 读入后数值会大 1e6 倍;必要时,在工作流的 custom_data 配置中设置 unitsScale(例如 units: "uV" 时设为 1e-6)。

同一份数据——以及你的结果——可以渲染为助手可查看的 PNG 图像,而不只是 JSON:plots.dataset(PSD / 频带功率热图 / 头皮地形图 / 时频图)、plots.erp(各类别诱发电位蝴蝶图——训练前检查类别结构)、plots.confusion(运行后查看哪些类别实际被混淆)、plots.leaderboard(按数据集显示 CI 误差线柱,突出显示 BYO 提交)。设置 save=true 还会将 PNG 写入 NIMBUS_EXPORT_DIR/plots/。

plots.confusion(execution_id="exec_123")  # → image + per-class accuracy
plots.dataset(kind="psd", source="dataset", dataset="BNCI2014_001", subject="S01")
stats.grouped(execution_ids=["exec_123", "exec_124"])  # cluster-aware t-interval + p

上传数据

使用你自己的记录数据,替代或补充公开数据集。

“我有一份位于 ~/recordings/session-01.edf 的 .edf 记录文件——上传它,并围绕它构建工作流。”

Agent 会调用 data.upload(file_path=…),将文件注册到后端并返回存储路径;随后将该路径放入 custom_data 节点的配置中({"filePath": "<path>", "format": "edf", …}),供 pipeline.validate / execution.run / experiment.run 使用。对于不含嵌入元数据的纯 CSV/TSV/TXT,请传入 sampling_rate(Hz)——否则后端会默认使用 250 Hz;format 可覆盖基于扩展名的格式检测。

实验批次

一次 experiment.run 调用即可有节奏地运行 1-25 个工作流(最多同时执行 2 个训练任务),并汇总指标,而不必让 Agent 逐一轮询 25 次 execution.run。

“比较 CSP-LDA 和 EEGNet 在 BNCI2014_001 的受试者 1-3 上的表现。”

Agent 会构建六个训练图,调用 experiment.run(runs=[{name: "csp-lda-s1", train_graph: …}, …]),立即获取 experimentId,然后轮询 experiment.get(experiment_id),直到状态变为 completed——先查看每个运行的状态,最后获取类似 {"kappa": {"mean": 0.61, "std": 0.08, "best": {name, value}}} 的 aggregates(仅对已完成的运行计算平均值/标准差/最佳值)。

使用项目

Agent 构建,人类检查。Agent 保存的流水线会写入真正的工作室项目,因此你可以打开画布,准确查看运行了什么。

“将此流水线保存为名为 ‘motor-imagery-baseline’ 的项目——我会在工作室中检查。”

project.create(name) 会创建容器,project.save(project_id, train_graph, expected_revision=…) 会写入图(布局会自动生成;传入 project.load 返回的 expected_revision,这样并发编辑会发生冲突,而不是静默覆盖),project.load(project_id) 会读取图,以便编辑或重新运行。 设置 MCP_LOCAL_USER_ID 为你的用户 ID 后,项目会显示在你的工作室项目列表中。

监控实时会话

流式会话运行期间,Agent 可以监控其遥测数据,并告诉你它观察到的情况。

“监控我的专注会话,并在信号质量下降时告诉我。”

Agent 会轮询 stream.telemetry(session_id)——获取最新预测、近期窗口、信号质量(meanChannelQuality、snrDb、artifactProbability)以及运行统计数据,并在质量下降时发出警告。每次轮询也会重置空闲监控计时器,因此,处于主动监控中的会话绝不会被自动停止;无人监控的会话会在 15 分钟后关闭。

校准受试者

引导式校准会将佩戴设备的人转化为自己的训练数据:通过提示引导的会话记录带标签的试次,然后 Agent 使用该录制内容训练受试者自己的分类器。

“在我的 BrainBit 上运行每类 10 次试次的 MI 校准,完成后训练我的个人分类器。”

五个工具组成的流程(均为非阻塞):

# 1. Start (confirm-gated): fetches the paradigm's calibration template
#    (mi / p300 / sart / target_hit), patches in device + trial count, and
#    starts the session. The Studio app shows the cues on its calibration
#    dashboard automatically.
calibration.start(paradigm="mi", trials_per_class=10, confirm=true)
# → {started: true, executionId: "…"}

# 2. Poll: phase (baseline → imagery trials → complete), current trial, cue,
#    progress tally, and an ETA estimate from the timing SSOT.
calibration.status(execution_id="…")
# → {phase: "imagery", currentTrial: {index: 7, total: 20, class: "Left Hand",
#    cue: "← LEFT"}, progress: {trialsDone: 6, …}, estimatedRemainingSec: 105.0, …}

# 3./4. Pacing between trials (cues hold; resume anytime).
calibration.pause(execution_id="…")  # calibration.resume(...) to continue

# 5. When phase == "complete" the snapshot carries the recording:
#    calibration: {uploadId, path, filename, format}. Train from it.
calibration.train(execution_id="…")
# → {trainExecutionId: "…", calibrationUploadId: "…"} → poll execution.get,
#    then execution.results for the metrics (kappa, accuracy, …).

mi 使用默认的 mi_headband_csp_lda 模板(CAR → 8-30 Hz 带通 → CSP → LDA)训练;p300 使用 p300_hardware_xdawn_lda(对录制的闪光试次执行 xDAWN → LDA)训练;sart / target_hit 没有默认训练模板——请向 calibration.train 传入显式的 template_id(来自 catalog.templates)或你自己的 train_graph。无论采用哪种方式,第一个数据节点都会重接到录制上传内容上(custom_data 源固定到 uploadId),并保留模板的训练配置。

calibration.start 必须设置 confirm=true 才能运行——与 stream.start 一样,设备会戴到人的头上;请先调用 device.test。

需要 Pro 套餐——校准工作流和自定义数据训练受免费增值限制(免费套餐请求会被节点策略以 403 拒绝)。本地 X-MCP-Key 主体在桌面应用标记已登录的 Pro 会话时可通过(MCP_LOCAL_IS_PRO);否则,它们也受节点策略限制。

校准→训练的交接在所有后端(包括桌面本地后端)上都会解析成功:使用当前版本录制的内容会在桌面存储中包含上传↔执行关联。较早版本录制的内容没有此关联——请重新运行 calibration.start(工具的状态提示也会说明这一点)。

安全

stream.start 必须设置 confirm=true 才能运行——它会连接 EEG 设备,并在人身上启动实时会话。X-MCP-Key 路径仅限机器本地使用(Fly 部署绝不接受此方式);托管模式使用来自 nimbus-mcp login 的个人 Authorization: Bearer 令牌进行身份验证(见上文的身份验证)。通过 MCP 启动的会话在空闲 15 分钟后会自动停止(见上文的监控计时器说明)。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。