MCP server for Nimbus BCI — AI agents build, train, and analyze EEG/BCI pipelines (datasets, models, experiment campaigns, live sessions)
- ✓Actively maintained (<30d)
- ✓Clear description
- ✓Topics declared
- ✓Documented (README)
- !Licence file present but not machine-readable
claude mcp add nimbus-mcp -- uvx nimbus-mcp{
"mcpServers": {
"nimbus-mcp": {
"command": "uvx",
"args": ["nimbus-mcp"],
"env": {
"MCP_LOCAL_KEY": "<mcp_local_key>",
"NIMBUS_MCP_KEY": "<nimbus_mcp_key>"
}
}
}
}MCP_LOCAL_KEYNIMBUS_MCP_KEYResumen de MCP Servers
# nimbus-mcp
<!-- mcp-name: io.github.nimbusbci/nimbus-mcp -->
[](https://smithery.ai/servers/nimbusbci/nimbus-mcp)
MCP server that lets AI agents (Claude Code, Cursor, Claude Desktop) build, validate,
run, and analyze Nimbus BCI pipelines — upload their own EEG data, persist pipelines
into studio projects, run multi-configuration experiment campaigns, watch live EEG
sessions, and (explicitly confirmed) start live streaming — through your **local**
Nimbus backend **or the hosted deployment, with one `nimbus-mcp login`**.
## Install
```bash
pip install nimbus-mcp # or: uvx nimbus-mcp
```
(Also installable from the repo: `pip install -e nimbus-studio/mcp`.)
## Authentication
Three ways to give the server a credential — tried in this order at startup:
1. **`nimbus-mcp login` (recommended — hosted API, no token pasting).** A
device-code login: the command prints a URL and an 8-character code, opens
your browser, you approve in Nimbus Studio, and the minted token is stored
at `~/.nimbus/credentials.json` (0600) and picked up automatically on every
future start.
```bash
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
```
After a login, MCP client configs need no secret at all:
```json
{
"mcpServers": {
"nimbus": {
"command": "uvx",
"args": ["nimbus-mcp"],
"env": { "NIMBUS_API_URL": "https://nimbus-studio.fly.dev" }
}
}
}
```
2. **Desktop app — zero config.** Just have the Nimbus Studio desktop app
running: its local key file is auto-discovered (macOS `~/Library/Application
Support/Nimbus Studio/mcp-key.json`, Linux `~/.config/Nimbus Studio/…`,
Windows `%APPDATA%\Nimbus Studio\…`) and the server talks to the local
backend at `http://127.0.0.1:8080`. Nothing to paste or configure.
3. **Environment variables (advanced / CI).** `NIMBUS_TOKEN` (a hosted API
token `nimb_…` minted in Nimbus Studio → Account → API tokens) or
`NIMBUS_TOKEN_FILE` (a 0600 JSON file `{"token": "…"}` — keeps the secret
out of process env and MCP configs), or the local pair
`NIMBUS_MCP_KEY` / `NIMBUS_MCP_KEY_FILE` (must match `MCP_LOCAL_KEY` on a
local backend — see below). Explicit env always beats files on disk.
**No credential anywhere?** The server still starts — in **setup mode**. Every
tool call returns `{ok: false, setupRequired: true, message, options}` with the
three paths above, so your agent walks you through onboarding instead of the
server crashing. A hosted token rejected mid-session (expired or revoked)
returns the same shape, including how many days ago it expired and a
`nimbus-mcp login` first option.
### Checking who you are
```
account.whoami() → {userId, email, plan: {isPro, pioneerAccess},
freeRuns: {monthlyLimit, remaining},
token: {name, expiresAt, daysLeft} | null, # hosted-token mode only
source} # store | env | token_file | …
```
Call `account.whoami()` from the agent to see the account, plan, this month's free-run
quota, and (in token mode) the token's days-to-expiry; `nimbus-mcp status` is
the terminal equivalent with a live backend probe.
### What a hosted token means
- **The token IS you.** Requests run under your account: executions appear in your
studio history and **your plan's quotas and limits apply** — there is no separate
agent allowance. When the free monthly quota is exhausted, run errors carry the
upgrade link `https://studio.nimbusbci.com/pricing?reason=mcp-quota`.
- **CPU-only in v0.4.** Token-authenticated runs do not hydrate cloud GPUs.
- **Rotation.** Tokens live at most 90 days (30 by default). Plan changes are
snapshotted at mint time — after an upgrade, re-login (or revoke and re-create
the token) to pick up the new plan. An expired token surfaces as setup
guidance with the day count, not a dead end.
## Requirements (local mode)
- A Nimbus backend running locally: the **desktop app**, or the dev server
(`cd nimbus-studio/backend-py && python -m nimbus_backend.server.app`) with `DEBUG=1`.
- The backend started with `MCP_LOCAL_KEY=<some-secret>` (never set this on Fly — it is
refused there).
- Desktop app users: open **Settings → MCP & Agents** — no manual key setup (the app
creates the key, injects it into its backend, and hands you copy-ready configs).
## Configure the backend
Desktop/dev env (e.g. `backend-py/data/.env` or the dev shell):
```bash
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` sets the principal the MCP key authenticates as. Set it to your
own Clerk user id (`user_…`) so everything the agent creates — projects, saved
pipelines, executions — appears in your studio UI as yours. Pick one owner and stick
with it: switching the id mid-life splits ownership of agent-created work across two
principals, and neither identity then sees the whole history.
Watchdog default: streaming sessions started through MCP are auto-stopped after
15 minutes with no one watching (every `stream.status` / `stream.telemetry` poll
resets the timer). Pass `idle_timeout_sec=0` to `stream.start` to disable it for a
session.
When enabling `MCP_LOCAL_KEY` on a machine connected to an untrusted network, also set
`HOST=127.0.0.1` on the backend. The `0.0.0.0` default (`settings.host`) applies to the
bare dev server (`python -m nimbus_backend.server.app`), so with it the key would
otherwise be accepted from the LAN; `backend-py/scripts/run_server.py` already defaults
to `127.0.0.1`, and the desktop app pins loopback itself.
## Run the server
```bash
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
```
Env vars: `NIMBUS_API_URL` (default `http://127.0.0.1:8080`, or the store's
`api_url` after a login), `NIMBUS_TOKEN` / `NIMBUS_TOKEN_FILE` (hosted API
token — see **Authentication**), `NIMBUS_MCP_KEY` (must match `MCP_LOCAL_KEY`),
`NIMBUS_MCP_KEY_FILE` (path to a 0600 JSON file `{"key": "…"}` — the desktop
app's one-click MCP setup writes it; consulted only when `NIMBUS_MCP_KEY` is
unset), `NIMBUS_EXPORT_DIR` (default `~/nimbus-exports`). With none of the
token/key vars set, the login store and then the desktop key file are
auto-discovered; with nothing found, the server runs in setup mode (every tool
returns onboarding guidance).
## Hosted gateway (streamable HTTP)
`nimbus-mcp serve` runs the same 32 tools over streamable HTTP instead of
stdio — for remote MCP clients, registries (Smithery lists URL-based
servers), and browser-side clients:
```bash
nimbus-mcp serve --host 0.0.0.0 --port 8080 # env: NIMBUS_MCP_HOST/PORT/PATH
```
The gateway holds **no** credential itself: each request's Nimbus API token
arrives as a header, so one shared deployment serves many users as
themselves. Calls without a header get setup guidance (add the header, or
install locally via `uvx`).
```json
{
"mcpServers": {
"nimbus": {
"type": "http",
"url": "https://nimbus-mcp.fly.dev/mcp",
"headers": { "X-Nimbus-Token": "nimb_… (Account → API tokens)" }
}
}
}
```
(A gateway started with `NIMBUS_TOKEN` in the environment uses it as the
fallback for headerless calls — single-tenant self-hosting.)
## Claude Code
```bash
# --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)
```json
{
"mcpServers": {
"nimbus": {
"command": "<path-to-mcp-venv>/bin/python",
"args": ["-m", "nimbus_mcp"],
"env": { "NIMBUS_MCP_KEY": "choose-a-long-random-string" }
}
}
}
```
## Tools (32)
Auth: `account.whoami` (account, plan, quota, token expiry)
Discovery: `catalog.nodes`, `catalog.node_schema`, `catalog.templates`, `catalog.template`, `catalog.datasets`, `catalog.leaderboard`
Data: `data.upload`
Inspect: `data.inspect_dataset`, `data.inspect_file` (EDA: channels, class balance, band powers, PSD)
Build: `pipeline.validate`, `pipeline.validate_node`
Run: `execution.run` (non-blocking), `execution.get`, `execution.list`, `execution.results`, `execution.cancel`
Campaigns: `experiment.run` (non-blocking, 1-25 paced runs), `experiment.get`
Artifacts: `execution.artifacts`, `execution.download_artifact`, `pipeline.export`
Live: `device.list`, `device.test`, `stream.start` (needs `confirm=true`),
`stream.status`, `stream.telemetry`, `stream.stop`
Projects: `project.create`, `project.list`, `project.save`, `project.load`
Not sure which pipeline to build? `catalog.leaderboard()` ranks benchmarked pipelines
per dataset (`meanAccuracyPct` desc, 95% CI) under the canonical `within_session`
protocol — agents pick templates by ranking there and pull the winner with
`catalog.template(pipelineId)`.
## Look at your data first
Before building any pipeline, agents can *see* the data: channels, sampling
rate, trial/class balance, per-channel µV stats, canonical band powers, and a
PSD overview — for a public dataset or a file on disk.
> "Inspect BNCI2014_001 subject S01 before we pick a pipeline."
```python
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"}Lo que la gente pregunta sobre nimbus-mcp
¿Qué es nimbusbci/nimbus-mcp?
+
nimbusbci/nimbus-mcp es mcp servers para el ecosistema de Claude AI. MCP server for Nimbus BCI — AI agents build, train, and analyze EEG/BCI pipelines (datasets, models, experiment campaigns, live sessions) Tiene 2 estrellas en GitHub y su última actualización registrada es del 2026-10-05.
¿Cómo se instala nimbus-mcp?
+
Puedes instalar nimbus-mcp clonando el repositorio (https://github.com/nimbusbci/nimbus-mcp) o siguiendo las instrucciones del README en GitHub. ClaudeWave también te ofrece bloques de instalación rápida en esta misma página.
¿Es seguro usar nimbusbci/nimbus-mcp?
+
Nuestro agente de seguridad ha analizado nimbusbci/nimbus-mcp y le ha asignado un Trust Score de 80/100 (tier: Trusted). Revisa el desglose completo de comprobaciones superadas y flags en esta página.
¿Quién mantiene nimbusbci/nimbus-mcp?
+
nimbusbci/nimbus-mcp es mantenido por nimbusbci. La última actividad registrada en GitHub es del 2026-10-05, con 1 issues abiertos.
¿Hay alternativas a nimbus-mcp?
+
Sí. En ClaudeWave puedes explorar mcp servers similares en /categories/mcp, ordenados por popularidad o actividad reciente.
Despliega nimbus-mcp en tu cloud
Lleva este repo a producción en minutos. Cada plataforma genera su propio entorno con variables de entorno editables.
¿Mantienes este repo? Añade un badge a tu README
Pega el badge en tu README de GitHub para mostrar que está auditado por ClaudeWave. Cada badge enlaza de vuelta a esta página y muestra el Trust Score actual.
[](https://claudewave.com/repo/nimbusbci-nimbus-mcp)<a href="https://claudewave.com/repo/nimbusbci-nimbus-mcp"><img src="https://claudewave.com/api/badge/nimbusbci-nimbus-mcp" alt="Featured on ClaudeWave: nimbusbci/nimbus-mcp" width="320" height="64" /></a>Más MCP Servers
Fair-code workflow automation platform with native AI capabilities. Combine visual building with custom code, self-host or cloud, 400+ integrations.
User-friendly AI Interface (Supports Ollama, OpenAI API, ...)
An open-source AI agent that brings the power of Gemini directly into your terminal.
Real-time global intelligence dashboard. AI-powered news aggregation, geopolitical monitoring, and infrastructure tracking in a unified situational awareness interface
🕷️ An adaptive Web Scraping framework that handles everything from a single request to a full-scale crawl! Don't be shy, join here: https://discord.gg/EMgGbDceNQ and follow here for daily tips and tricks: https://x.com/Scrapling_dev
The fastest path to AI-powered full stack observability, even for lean teams.