Skip to main content
Glama

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
NIMBUS_TOKENNoA hosted API token (nimb_…) minted in Nimbus Studio → Account → API tokens. Used for hosted mode authentication.
NIMBUS_API_URLNoThe URL of the Nimbus backend API. Defaults to http://127.0.0.1:8080, or the store's api_url after a login.http://127.0.0.1:8080
NIMBUS_MCP_KEYNoA local MCP key that must match MCP_LOCAL_KEY on a local backend. Used for local mode authentication.
NIMBUS_EXPORT_DIRNoDirectory for exported artifacts. Defaults to ~/nimbus-exports.~/nimbus-exports
NIMBUS_TOKEN_FILENoPath to a 0600 JSON file {"token": "…"} containing a hosted API token. Keeps the secret out of process env and MCP configs.
NIMBUS_MCP_KEY_FILENoPath to a 0600 JSON file {"key": "…"} containing a local MCP key. Consulted only when NIMBUS_MCP_KEY is unset.

Instructions

Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.

This server publishes no instructions, or was last inspected before Glama recorded them.

Capabilities

Features and capabilities supported by this server

Protocol revision2025-11-25

CapabilityDetails
tools
{
  "listChanged": true
}
logging
{}
prompts
{
  "listChanged": false
}
resources
{
  "subscribe": false,
  "listChanged": false
}

Tools

Functions exposed to the LLM to take actions

NameDescription
whoamiA

Who you are authenticated as: account email, plan (isPro / pioneer), this month's free-run quota, and — with a hosted token — the token name and days until it expires. Call this first when setup guidance appears or to check which credential a session uses.

list_nodesA

List Nimbus pipeline node types (data, preprocessing, features, models...).

Use get_node_schema(node_type) for one node's full config schema and ports.

get_node_schemaB

Full config JSON schema + input/output ports for one node type.

list_templatesA

List built-in starter pipelines (MI/P300/SSVEP...). get_template(id) for the graph.

get_templateB

Full template incl. the 'train' execGraph needed by run_pipeline/validate_pipeline.

list_datasetsC

Curated public EEG datasets (MOABB packs) available to pipelines.

get_leaderboardA

Public benchmark leaderboard: pipeline rankings per dataset.

Rankings are per-dataset under the canonical within_session protocol (see protocol). Within each dataset, rows are sorted desc by meanAccuracyPct (95% CI in ciLoPct/ciHiPct). Use pipelineId as the template id hint for get_template when building a pipeline. updated marks each dataset's most recent run; packFingerprint identifies the exact dataset pack the scores came from.

validate_pipelineA

Validate a pipeline graph before running. ExecGraphSnapshot: {nodes: [{id, type, config}], connections: [{from, to}]}. Build it from get_template(id).train or from scratch using list_nodes().

validate_node_configB

Validate one node's config object against its schema (get_node_schema).

run_pipelineA

Start a pipeline run (NON-BLOCKING). Returns executionId — poll with get_execution() until status is completed/failed, then get_results(). layout is optional canvas positions ({nodes: {id: {x, y}}}); a grid is synthesized when omitted.

cancel_executionC

Cancel a running execution.

get_executionB

Execution status summary (status: running/completed/failed/cancelled).

list_executionsC

Recent executions. Optional status filter (running/completed/failed/cancelled).

get_resultsA

Metrics for a completed run. Trimmed by default (accuracy, kappa, ITR, confusion matrix, per-class); full=True returns the complete result object.

run_experimentA

Run 1-25 pipelines as ONE paced experiment (NON-BLOCKING). Returns an experimentId immediately; a background thread submits at most 2 runs at a time (min(max_concurrent, 2)), retries queue-full up to 3 times per run, and polls each execution to completion. Poll get_experiment() for per-run status and, once finished, aggregated metrics.

get_experimentB

Experiment snapshot: status (running/completed/failed), per-run rows ({name, executionId, status, error?, metrics?}) and, once finished, aggregates {metric: {mean, std, best: {name, value}}} over completed runs only (std = population; None below 2 values).

list_artifactsC

Trained artifacts (models/filters, e.g. *.pkl) saved by an execution.

download_artifactB

Download one artifact file to NIMBUS_EXPORT_DIR/executions// and return its path.

export_pythonC

Export the pipeline as a standalone runnable Python bundle (zip saved locally).

list_devicesA

EEG devices supported by this backend (OpenBCI, Muse, BrainBit, LSL, PiEEG...).

test_deviceA

Test a device connection WITHOUT starting a stream (safe, no confirm needed).

start_streamA

Connect an EEG device and START a live streaming session on the user's head. Requires confirm=True; call test_device first. Track with stream_status(). Idle watchdog: if no stream_status()/get_live_session() poll happens for idle_timeout_sec (default 900), the session is stopped and the device disconnected automatically — an abandoned stream never keeps running on the user's head. Any poll resets the timer; idle_timeout_sec=0 disables the watchdog.

stream_statusA

Live snapshot of a streaming session (running, deviceConnected). Polling this also feeds the idle watchdog: each call resets the session's idle timer (see start_stream's idle_timeout_sec).

stop_streamA

Stop a streaming session and disconnect the device (always safe to call). Also removes the session from the idle watchdog so it cannot fire after an explicit stop.

get_live_sessionA

Live snapshot of a streaming session: latest prediction + recent window, signal quality (meanChannelQuality, snrDb, artifactProbability), indicators, running stats. Poll this while a session runs. Live telemetry requires a DEPLOYED model session (hub deploy / playback with a classifier); modelless hardware streams have no telemetry — use stream_status for those. Expect low confidence during filter/ASR warm-up (first seconds); quality < 0.5 or high artifactProbability means the signal is poor. 404 => session not active in this backend. Each poll also feeds the idle watchdog (see start_stream's idle_timeout_sec), keeping an actively watched session alive.

upload_dataA

Upload an EEG file (.edf/.bdf/.mat/.csv/.txt/.tsv/.h5/.hdf5, <=500MB) to the backend and get the registered path for a custom_data node.

sampling_rate (Hz, e.g. 250.0) is REQUIRED for plain CSV/TSV/TXT files without embedded metadata — the backend silently assumes 250 Hz otherwise, which mis-times epochs, filters and spectral features. format overrides extension-based detection (auto, mat, csv, tsv, txt, edf, bdf, h5, hdf5).

inspect_datasetA

Exploratory summary of a public EEG dataset (MOABB pack): channels, sampling rate, trial/class balance, per-channel µV stats, band powers and a PSD overview.

Look at the data BEFORE building pipelines: class balance drives stratification choices (imbalanced classes skew accuracy), and flatlined channels mean a montage/reference problem worth fixing first. subject is REQUIRED (the backend 400s without it) — get the subject list via list_datasets, e.g. "S01"; a comma-list like "S01,S03" loads a cohort. mode: training | evaluation | all. Units note: values are ASSUMED volts by the loader — a µV-native file reads 1e6x too large; set unitsScale in a pipeline's custom_data config when needed.

inspect_fileA

Exploratory summary of an EEG file (.edf/.bdf/.mat/.csv/.tsv/.txt/.h5): channels, sampling rate, trial/class balance, per-channel µV stats, band powers and a PSD overview.

The path shape picks the source: ABSOLUTE path → read the file from disk (only on a LOCAL backend: desktop app / MCP local mode — no upload needed); RELATIVE path (the one upload_data returns) → describe the uploaded file, which works on ANY backend (hosted or local).

Look at the data BEFORE building pipelines: class balance drives stratification choices, and flatlined channels mean a montage/reference problem worth fixing first. Units note: values are ASSUMED volts by the loader — a µV-native CSV reads 1e6x too large; set unitsScale in a pipeline's custom_data config when needed. On a hosted backend absolute paths are refused and this returns guidance (upload the file first or switch to a local backend).

create_projectB

Create a project (container for one pipeline document). Returns projectId.

list_projectsB

List projects owned by the current principal (agent work included).

save_pipelineB

Save a pipeline graph into a project (visible on the studio canvas). Handles revision conflicts automatically (one retry).

load_pipelineB

Load a project's saved pipeline (train graph + meta) for editing/re-running.

Prompts

Interactive templates invoked by user choice

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription

No resources

TDQS

B3.2/5.0

Scored across 32 tools

Disambiguation4/5

Most tools target distinct actions/resources, but a few pairs overlap: stream_status vs get_live_session both poll a live session, and inspect_dataset vs inspect_file give near-identical exploratory summaries for different sources. Descriptions help disambiguate, but an agent may still hesitate between them.

Naming Consistency4/5

Names are predominantly consistent snake_case verb_noun (list_nodes, get_template, run_pipeline). Minor deviations like whoami and stream_status break the exact verb_noun pattern but remain readable and conventional.

Tool Count2/5

32 tools is heavy for a single MCP server; several subdomains (streaming, pipelines, datasets, projects, artifacts) could be consolidated. While each tool has a purpose, the set exceeds the 25-tool threshold where navigation becomes cumbersome.

Completeness4/5

The surface covers major workflows: device streaming, pipeline building/validation/execution, experiments, datasets, projects, and artifacts. Minor gaps exist (no delete/update for projects, pipelines, or artifacts), but agents can work around them.