Eeg Mcp

io.github.AImplifierPublished by GitHub account AImplifierv0.2.0Updated Oct 29, 2026

Real-time EEG: BrainFlow streaming, wall-clock replay, online DSP, recording, and stimulation.

VerifiedSTDIODesktop onlyData & AnalyticsMedia & DesignAI & ML

Overview

AI-generated overview

Real-time EEG server: stream from BrainFlow boards or replay recordings, run online DSP, record, visualize, and dispatch gated stimulation events.

What you can do
  • List and start/stop BrainFlow board streams or wall-clock replays of EDF/BDF/GDF/SET/FIF and BrainFlow CSV files, with session status and channel listing
  • Install stateful online filter chains and read raw or filtered windows, band power, PSD and per-channel signal quality
  • Log, read, clear and epoch around events, and fold in external LSL marker streams
  • Render live browser monitors and standalone HTML plots or full session reports
  • Record the live signal to .fif with events as annotations and list recordings in a local metadata store
  • Attach stimulation backends, arm and disarm them, and send single pulses or capped pulse trains
When to use it
For BCI, neurofeedback or clinical-review work where an assistant should drive a live EEG session: acquiring from a board, rehearsing a pipeline against a recording, watching signal quality, keeping a record, or triggering stimulation under operator-set gates.
Requirements
Local Python install of the eeg-mcp package (Python 3.11 environment recommended) registered with an absolute interpreter path; optional extras for LSL and serial transports. Hardware stimulation requires the server to be started with EEG_MCP_ALLOW_HARDWARE_STIM=1. A synthetic board and file replay need no hardware.
Before you install
Hardware stimulation can cause harm, including seizure, and the software is not a medical device; hardware backends are generic transports driven by command templates you supply and are untested against physical stimulators. Start on the log backend. Sessions write recordings and metadata to disk, and the live monitor serves a local browser view. Filtering is causal, so features lag by the reported group delay.

Installation

In SourceWeft

  1. Open Eeg Mcp in the dashboard and add it to a workspace.
  2. Enable the server for the chats that should use its tools.

Desktop only via STDIO. STDIO servers start a local process, so they need the SourceWeft desktop host.

Other MCP clients

Follow the launch instructions in the repository.

README

⚡🧠 eeg-mcp

Real-time EEG for AI agents — stream, replay, visualize, record, stimulate

[PyPI] [Python] [Docs] [License]

Documentation · Tutorial · Hardware · Safety · Tool Reference

A Model Context Protocol server that gives an AI agent one interface over the live EEG workflow: acquisition from ~66 BrainFlow boards, wall-clock replay of existing recordings, stateful online DSP, a live browser monitor, crash-safe recording, and gated stimulation output.

The offline counterpart is neuro-mcp (MNE processing, source imaging, BIDS/EHR storage). This is the real-time half — everything that has to happen while the signal is still arriving.

Concept

mermaid
flowchart LR    Researcher(["🔬 BCI Researcher"])    Clinician(["🩺 Clinician"])    Agent[["🤖 AI Agent"]]    Server(("eeg-mcp<br/>FastMCP · 47 tools"))
    Clinician -- talks to --> Agent    Researcher -- talks to --> Agent    Agent -- MCP --> Server
    Server --> Acquire["Acquire<br/>66 boards · replay<br/>at true rate"]    Server --> Process["Process<br/>stateful online DSP<br/>custom plugins"]    Server --> Watch["Watch &amp; Record<br/>live monitor · HTML<br/>crash-safe .fif"]    Server --> Stim["Stimulate<br/>LSL · TTL · TMS/tES<br/>3 safety gates"]
    classDef acq fill:#14b8a6,stroke:#0d9488,color:#fff    classDef proc fill:#4f8cff,stroke:#2f5fbf,color:#fff    classDef viz fill:#b06fe0,stroke:#7c3fae,color:#fff    classDef stim fill:#eb5757,stroke:#b93b3b,color:#fff    class Acquire acq    class Process proc    class Watch viz    class Stim stim

Nobody calls a tool by hand — you talk to an agent in plain English and it drives the 47 tools underneath. The tutorial shows what that looks like end to end, with no hardware required.

What it does

📡 Stream

66 BrainFlow board identifiers — OpenBCI, Muse, ANT Neuro, g.tec, Mentalab and more — plus a synthetic board that needs no hardware. Samples land in a ring buffer filled by a background thread, so tool calls read a live view instead of blocking on a device. When BrainFlow itself can't reach a board — e.g. Muse on Windows, blocked by an upstream SimpleBLE bug — board="lsl" attaches to an existing LSL outlet instead.

⏪ Replay

Play an EDF/BDF/GDF/SET/FIF or BrainFlow CSV at the rate it was recorded, re-emitting annotations as events at their original timings. Adds speed, seek, pause and looping. A pipeline developed against a file runs unchanged against hardware.

👁 Visualize

A loopback-bound, token-gated live browser view: rolling traces, event markers, band power, per-electrode quality, and transport controls. Plus self-contained HTML reports — no CDN, no external assets, opens on an air-gapped machine.

💾 Record

Write continuously to MNE-native .fif with the event log attached as annotations, plus a metadata row in a store schema-compatible with neuro-mcp. Crash-safe: an interrupted session is recoverable.

🧩 Extend

Plug in your own real-time processor — feature extractor, classifier, artifact gate, or EEG tokenizer for sequence models — and it runs on the same footing as the built-ins, inside the acquisition loop. → Extending

⚡ Stimulate

One send_stim_event contract over pluggable backends: LSL for software, BrainFlow's marker channel for sample-aligned embedding, serial/TTL and templated ASCII for hardware including TMS and tES — behind three safety gates.

[!NOTE] One event log. Board markers, replayed annotations, dispatched stimulations and manual notes all land in the same table on the same clock, with absolute sample indices. A closed-loop run reconstructs afterwards with no clock join.

Install

bash
conda create -n eeg-mcp python=3.11 -y && conda activate eeg-mcppip install eeg-mcp
Optional extras and MCP client registration
bash
pip install "eeg-mcp[lsl]"      # LSL marker outlets (PsychoPy, OpenViBE, ...)pip install "eeg-mcp[serial]"   # serial/TTL trigger delivery to hardware

Register with an MCP client using an absolute path to the env's interpreter:

json
{  "mcpServers": {    "eeg-realtime": {      "command": "/path/to/envs/eeg-mcp/bin/python",      "args": ["-m", "eeg_mcp"]    }  }}

Or with the Claude Code CLI:

bash
claude mcp add eeg-realtime -- /path/to/envs/eeg-mcp/bin/python -m eeg_mcp

→ Full guide: Installation

Quick start

Ask your agent for the outcome; it picks the calls. No hardware required:

python
start_stream(session_id="s1", board="synthetic")check_signal_quality(session_id="s1")          # before trusting anythingset_filters(session_id="s1", bandpass_low=1, bandpass_high=40, notch_freq=50)get_band_power(session_id="s1", seconds=2)start_monitor(session_id="s1")                 # → open the returned URL

Replay a real recording as if it were live, then keep the record:

python
inspect_recording(path="sub-04_rest.edf")start_replay(session_id="r1", path="sub-04_rest.edf", speed=1.0)get_events(session_id="r1", origin="annotation")export_report(session_id="r1", notes="Routine review.")
mermaid
flowchart LR    A["start_stream<br/><i>or</i> start_replay"] --> B[check_signal_quality]    B --> C[set_filters]    C --> D["get_band_power<br/>get_psd"]    C --> E[start_monitor]    C --> P[attach_processor]    A --> R[start_recording]    D --> S[send_stim_event]    P --> S    R --> X[stop_recording]    S --> X    E --> X    X --> Z[stop_stream]
    classDef hot fill:#14b8a6,stroke:#0d9488,color:#fff    class A,X hot

Documentation

Guide
🚀 InstallationEnvironment, client registration, troubleshooting
📘 TutorialEnd to end, no hardware needed
⏪ Replay-Driven DevelopmentBuild against a recording, deploy live
🔁 Closed-Loop NeurofeedbackFeature → trigger, with a measured latency budget
🩺 Live Clinical ReviewVisual review, annotation, reporting
⚡ Stimulation ProtocolsTMS and tES through the safety gates
🧩 ExtendingWrite a custom processor or EEG tokenizer
🔌 Supported HardwareAll 66 boards, formats, stimulation transports
⚠️ SafetyRead before connecting a stimulator
🛠 Tool ReferenceAll 47 tools

The one design decision worth knowing

[!IMPORTANT] Filtering happens in the producer thread, not at query time.

A stateful IIR filter must see every sample exactly once, in order. The common shortcut — filtering each query window independently — restarts the filter at every window boundary and injects a transient each time. It is invisible in a band-power plot and fatal for anything phase-sensitive.

So the producer filters each chunk once as it arrives, carrying sosfilt delay-line state forward, and writes to a second ring buffer. Queries just read.

mermaid
flowchart LR    BF[Board / Recording] -->|poll| PR{{Producer thread}}    PR -->|raw chunk| RB[(Raw ring buffer)]    PR -->|stateful sosfilt| FB[(Filtered ring buffer)]    PR -->|markers &amp; annotations| EL[(Event log)]    PR -->|append| DISK[(.fif on disk)]    PR -->|streaming| PL[Your processors]    RB & FB & EL --> Q[MCP tools]
    classDef hot fill:#14b8a6,stroke:#0d9488,color:#fff    class PR hot

The test suite asserts chunked filtering matches whole-signal filtering to 1e-9, and asserts as a control that the naive approach does not.

Consequence
Filters are causalNo zero-phase option — that needs future samples. stream_status reports group_delay_sec
Both buffers are keptread_window(filtered=false) always gets raw signal, to check whether a feature is real or an artifact
Indices are sharedAn event's sample_index means the same thing in either buffer

[!TIP] Budget a closed loop as group delay + poll interval + dispatch latency — measured at ~71 ms in the reference configuration. Good for neurofeedback; not adequate for phase-locked stimulation.

Stimulation safety

[!CAUTION] This software is not a medical device and has not been validated for clinical use. TMS and tES can cause harm, including seizure. Use only under a protocol approved by your ethics board, on a rig whose device-level interlocks are intact, with a trained operator present.

Three gates apply to every hardware backend:

#GateEffect
1ConfigHardware backends refuse to open unless the server was started with EEG_MCP_ALLOW_HARDWARE_STIM=1. An agent cannot set this.
2Armingarm_stim permits dispatch for a window that expires, so a stalled agent cannot resume and fire later
3LimitsIntensity, duration and interval are clamped; violations raise rather than silently saturate

None of this replaces the interlocks on the device itself.

[!WARNING] The hardware backends are generic transports driven by command templates you supply from your device's manual — not vendor drivers, and none has been tested against a physical stimulator. A plausible-looking untested driver would be worse than none: it would fail silently while connected to something pointed at a person's head.

Start every protocol on backend="log", which accepts everything and emits nothing.

Verify

bash
python testing/verify.py                    # core correctnesspython testing/verify_recording.py          # recording + metadata storepython testing/verify_processing.py         # plugin processorspython testing/persona_bci_researcher.py    # engineer workflowpython testing/persona_clinician.py         # clinician workflow

All five drive the real server through FastMCP's in-memory client and assert against planted ground truth:

  • a spike planted at an annotation onset lands at t = 0 ± 0 ms in the extracted epoch — proving annotation timing, replay clock, ring-buffer indexing and epoch extraction all agree;
  • a deliberately broken plugin cannot stop acquisition — throughput holds at 1.0;
  • hardware stimulation is refused while the config gate is unset.

→ What is and is not covered — including an honest list of what has never been tested against real hardware.

License

BSD-3-Clause. See LICENSE and NOTICE.


⬆ back to top · Part of the AImplifier neuro toolchain · sibling project neuro-mcp

Source: README.md at commit 4f69a85

Tools

49

list_boards

List Boards

List every board BrainFlow can acquire from, with ids and sampling rates. Start here when you do not know what hardware is available. Two entries need no hardware at all: ``SYNTHETIC_BOARD`` generates a signal for development, and ``PLAYBACK_FILE_BOARD`` replays a BrainFlow CSV.

Takes no parameters.

start_stream

Start Stream

Open a board and begin buffering EEG in the background. Data flows into a ring buffer from a background thread as soon as this returns, so a subsequent read_window will have samples waiting. The session keeps running until stop_stream is called.

Parametersboardparamschannelssession_idrequired

stop_stream

Stop Stream

Stop a stream and release the board, serial ports, and LSL outlets. Always call this when finished. A board left prepared can block the next process from acquiring the device.

Parameterssession_idrequired

list_sessions

List Sessions

List all active stream and replay sessions with a one-line summary each.

Takes no parameters.

stream_status

Stream Status

Health and timing report for a session. The fields that matter for closed-loop work: ``throughput_ratio`` below 1.0 means the producer is not keeping up and samples are being dropped; ``filters.group_delay_sec`` is how far behind real time a filtered feature is; ``last_error`` explains a stopped producer. For an LSL session, ``connection`` reports whether the underlying BLE bridge is currently attached, and how many times it has silently reconnected -- check ``get_events(origin="annotation")`` for the ``source_reconnected`` records, which carry each gap's length.

Parameterssession_idrequired

read_window

Read Window

Read the most recent samples from the buffer. Returns filtered signal when a filter chain is set (see set_filters), otherwise raw. Long windows are decimated to ``max_samples`` per channel so the response stays readable -- for numeric work prefer get_band_power or get_psd, which compute on the full-resolution data.

Parameterssecondschannelsfilteredsession_idrequiredmax_samplesinclude_data

get_channels

Get Channels

List the channels a session is producing, with their buffer index.

Parameterssession_idrequired

inspect_recording

Inspect Recording

Open a recording and describe it without starting playback. Use this before start_replay to see how long the file is, what channels it has, and which annotations will be re-emitted as events during replay.

Parameterspathrequiredboardmax_events

start_replay

Start Replay

Replay a recording against a wall clock, re-emitting its events. This is the safe way to build a real-time pipeline: the session behaves exactly like a live stream -- same buffering, same chunked delivery, same tools -- so code developed here runs unchanged against hardware. The recording's annotations arrive in the event log at their original timings.

Parameterslooppathrequiredboardpicksspeedstart_secsession_idrequireduse_stim_channel

replay_control

Replay Control

Pause, resume, seek, or change the speed of a replay session.

Parametersspeedactionrequiredsession_idrequiredposition_sec

list_recording_events

List Recording Events

List all events present in a replay session's source file. Distinct from get_events: this is the *complete* event list from the file, including events that have not been reached yet. get_events returns only what has actually been emitted so far.

Parametersmax_eventssession_idrequired

set_filters

Set Filters

Install a stateful online filter chain on a running stream. The chain filters continuously in the background as samples arrive, carrying filter state across chunk boundaries. This matters: filtering each query window independently would inject a transient at every boundary and corrupt any phase-sensitive measure. Filtered output goes to a second buffer, so raw signal remains available via read_window(filtered=False). These are causal filters -- there is no zero-phase option, because that needs future samples. Check ``group_delay_sec`` in the response to know how far behind real time your filtered features are.

Parametersorderfiltersnotch_freqsession_idrequiredbandpass_lowbandpass_high

clear_filters

Clear Filters

Remove the filter chain; reads return raw signal again.

Parameterssession_idrequired

get_band_power

Get Band Power

Band power over the most recent window, per channel and averaged. The workhorse feature for neurofeedback and closed-loop triggering. Prefer the ``_rel`` (relative) values for thresholds: they are largely immune to impedance drift, so a threshold set at the start of a session still means the same thing an hour later.

Parametersbandssecondschannelsfilteredrelativesession_idrequired

get_psd

Get Psd

Power spectral density over the most recent window. Use when band power is too coarse -- to find a peak alpha frequency, confirm a stimulation artifact, or check whether a notch actually removed the mains.

Parametersfmaxsecondschannelsfilteredmax_binssession_idrequired

check_signal_quality

Check Signal Quality

Per-channel health check: amplitude, flat/railed detection, line noise. Call this before trusting any real-time feature, and definitely before driving stimulation from one. A flat or railed electrode poisons an average reference and a band-power threshold without changing anything you would notice in the feature value itself.

Parameterssecondsline_freqsession_idrequired

log_event

Log Event

Record an event against the stream's clock. For anything the server did not generate itself: a task onset, a subject report, an experimenter note. Stimulation commands are logged automatically by send_stim_event, so do not log those by hand.

Parameterslabelrequiredvaluepayloaddurationsession_idrequiredmark_in_stream

get_events

Get Events

Read the session's event log. Everything lands here on one clock: board markers, annotations re-emitted by a replay, stimulation commands we dispatched, and manual notes. That is what makes a closed-loop run reconstructible afterwards without joining clocks.

Parameterslabellimitoriginsession_idrequiredlast_seconds

get_epoch_around_event

Get Epoch Around Event

Extract the signal window around an event that already occurred. Online epoching: use it to inspect the response to the most recent stimulus, or to verify that a stimulation artifact lands where you expect. The event must still be inside the ring buffer -- for a default 60 s buffer, that means within the last minute.

Parameterstmaxtminlabelfilteredoccurrencesession_idrequiredmax_samples

clear_events

Clear Events

Empty the session's event log without stopping the stream. Useful between blocks of an experiment. The signal buffer is untouched.

Parameterssession_idrequired

attach_marker_stream

Attach Marker Stream

Fold an external LSL marker stream into this session's event log. The reverse of attach_stim_backend(backend="lsl"): that publishes markers for other software to consume; this consumes markers *from* other software -- PsychoPy is the common case, but anything that timestamps its own events over LSL works the same way. Each marker lands with origin='marker' at the sample index nearest its own LSL timestamp in the raw buffer, the same "one event log, one clock" treatment a board's own marker channel gets. Only one marker stream can be attached per session; attaching again replaces the previous one.

Parametersnamesession_idrequiredstream_typeresolve_timeout

detach_marker_stream

Detach Marker Stream

Stop listening for external markers on this session.

Parameterssession_idrequired

list_stim_backends

List Stim Backends

List stimulation targets, their options, and which ones drive hardware. Software backends ('log', 'lsl', 'brainflow_marker') are always available. Hardware backends ('serial_ttl', 'tms', 'tes', 'template_serial') require the server to have been started with EEG_MCP_ALLOW_HARDWARE_STIM=1, and must be armed before each session of use.

Takes no parameters.

attach_stim_backend

Attach Stim Backend

Bind a stimulation target to a session and open its transport. Start with backend='log' to rehearse a protocol with no output at all, then switch once the timing looks right.

Parametersbackendoptionssession_idrequiredmake_default

detach_stim_backend

Detach Stim Backend

Close and remove a stimulation backend from a session.

Parametersbackendrequiredsession_idrequired

arm_stim

Arm Stim

Permit hardware stimulation for a bounded window. Arming expires deliberately: an agent that stalls mid-protocol should not be able to resume and fire a stimulator minutes later without a fresh, explicit decision. Re-arm as needed, or disarm the moment a block ends.

Parametersbackendttl_secsession_idrequired

disarm_stim

Disarm Stim

Revoke permission to stimulate. Takes effect immediately.

Parametersbackendsession_idrequired

send_stim_event

Send Stim Event

Deliver one stimulation command, and log it against the EEG clock. The event is written to the session log whether the transport succeeds or fails -- a failed stimulation attempt matters just as much to the record. When the acquisition source supports markers, the same event is also punched into the stream itself so the recording is self-describing.

Parameterskindunitlabelrequiredvalueparamstargetbackendintensitysession_idrequiredduration_msalso_mark_source

send_stim_train

Send Stim Train

Deliver a regular train of pulses, blocking until it completes. For rTMS bursts and repeated cues. The call holds until the train finishes, so it is capped at 1000 pulses and 60 seconds total; build longer protocols from several calls so there are decision points in between. Every pulse is logged individually, so the event log reconstructs the exact delivered timing rather than the intended timing.

Parameterslabelrequiredvaluebackendn_pulsesrequiredintensitysession_idrequiredduration_msinterval_msrequired

stim_status

Stim Status

Report attached stimulation backends, arming state, and dispatch counts.

Parameterssession_idrequired

start_monitor

Start Monitor

Open a live browser view of a running session and return its URL. Serves a rolling traces view with event markers, band power and per-channel quality, refreshing continuously. This is the tool for "let me watch the recording" -- a static plot cannot answer whether the signal is good *now*. With ``allow_control`` (the default) the page also carries transport buttons: play/pause, restart, skip, speed, stop, mark an event, and save a report. Pass ``allow_control=false`` for a strictly read-only view, e.g. when showing the screen to someone who should not be able to alter the run. The page is bound to 127.0.0.1 only and requires a random per-monitor token, so it is not reachable from the network. It is still unencrypted: do not expose it through a tunnel or reverse proxy.

Parametersportrefresh_mssession_idrequiredwindow_secallow_control

stop_monitor

Stop Monitor

Close a session's live monitor and free its port.

Parameterssession_idrequired

list_monitors

List Monitors

List live monitors currently serving, with their URLs.

Takes no parameters.

plot_stream

Plot Stream

Render the recent signal as a standalone HTML file and return its path. A frozen snapshot, unlike start_monitor -- use it to keep a record, attach to a note, or share. The file inlines everything and needs no internet.

Parameterssecondschannelsfilteredsession_idrequiredshow_events

plot_spectrum

Plot Spectrum

Render the power spectrum and band composition as a standalone HTML file.

Parametersfmaxsecondschannelsfilteredsession_idrequired

export_report

Export Report

Write a full review page: traces, spectrum, quality, and the event log. The one artefact to keep from a session. Everything is inlined, so it opens on any machine, needs no internet, and still renders years from now.

Parametersnotessecondssession_idrequiredinclude_spectrum

start_recording

Start Recording

Begin writing the live signal to disk, continuously. Call this as soon as the session starts if you intend to keep the data. The ring buffer only holds the last minute or so, so anything not recorded is gone -- a session streamed for an hour without recording leaves nothing but whatever reports you exported. The raw, unfiltered signal is written. Filter settings are stored alongside it so a filtered view is reproducible; the amplifier's actual output is not reconstructible from anything else.

Parametersrunnametasknotesdatasetsubjectsession_idrequiredsession_label

stop_recording

Stop Recording

Finish the recording, write the ``.fif``, and register it for analysis. The event log becomes annotations inside the file, and -- unless you pass ``register=false`` -- a row is inserted into the metadata store with the subject, task, run and provenance, so neuro-mcp can find and open it.

Parametersregistersession_idrequiredkeep_sidecar

recording_status

Recording Status

Report whether a session is recording, and how much has been written.

Parameterssession_idrequired

list_recordings

List Recordings

List recordings in eeg-mcp's own metadata store, newest first. This store belongs to eeg-mcp alone. Analysis tools read from it -- the schema is compatible with neuro-mcp's, so it can open this database and understand every row -- but nothing else writes to it.

Parameterslimitsubject

recover_recording

Recover Recording

Finish a recording whose process died before it could be closed. Samples are appended to disk as they arrive and the header is written up front, precisely so an interrupted session is not lost. Point this at the orphaned ``.eegmcp.json`` header to convert what was captured into a ``.fif``. Events are not recoverable -- they lived in memory -- so the resulting file carries signal without annotations.

Parametersheader_pathrequiredkeep_sidecar

list_processors

List Processors

List real-time processors available to attach, and where they came from. Built-ins are always present. Your own appear here once the **server** environment points at them -- via the ``eeg_mcp.processors`` entry point, ``EEG_MCP_PLUGINS``, or ``EEG_MCP_PLUGIN_DIR``. They cannot be loaded from a tool call, because importing a module executes it and that would make arbitrary code execution reachable from a model.

Takes no parameters.

attach_processor

Attach Processor

Attach a processor to a session. A ``streaming`` processor runs inside the acquisition loop on every chunk, so it reacts within one poll interval without an agent round-trip -- that is how closed-loop logic gets fast. The cost is that slow code stalls acquisition; ``processor_status`` reports each one's mean and worst-case time so you can see whether yours is affordable. Non-streaming processors do nothing until you call ``run_processor``.

Parametersparamsprocessorrequiredsession_idrequired

detach_processor

Detach Processor

Remove a processor from a session and release its state.

Parametersprocessorrequiredsession_idrequired

processor_status

Processor Status

Report attached processors, their health, and their cost. ``mean_ms`` and ``max_ms`` are the numbers to watch for a streaming processor: if ``max_ms`` approaches the poll interval (50 ms by default) it is starving acquisition, which shows up as ``throughput_ratio`` below 1.0 in stream_status. A processor that raises 10 times is disabled automatically rather than being retried forever inside the producer loop.

Parameterssession_idrequired

get_processor_output

Get Processor Output

Read a streaming processor's recent outputs.

Parameterslimitprocessorrequiredsession_idrequired

run_processor

Run Processor

Run a processor once on the most recent window, on demand. Works for both modes: for a non-streaming processor this is the only way to execute it, and for a streaming one it is a way to get an answer right now rather than waiting for its next scheduled output.

Parameterssecondsfilteredprocessorrequiredsession_idrequired

reset_processors

Reset Processors

Clear accumulated processor state and outputs, without detaching them. Useful between experimental blocks, and after a replay seek, so a rolling window does not straddle the discontinuity.

Parameterssession_idrequired

get_tokens

Get Tokens

Read discrete tokens from a tokenizing processor. For feeding EEG into sequence models. Returns both the grouped tokens (one group per window) and a flat sequence, plus the vocabulary size and the channel/band layout each position corresponds to. Works with any attached processor exposing ``token_history`` -- the built-in ``band_tokenizer`` is a starting point, and your own tokenizer plugs in the same way.

Parameterslimitprocessorsession_idrequired

Version history

2
  1. v0.2.0LatestOct 26, 2026
  2. v0.1.0Sep 16, 2026

Score

90% of the applicable checks met

How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.

  • Reached in the last 30 days25 pts
  • Auth declared10 pts

    Declare the credential headers in the registry entry, or keep the endpoint answering the probe so its auth can be classified.

  • Tools listedRequired15 pts
  • DescriptionRequired15 pts
  • Logo10 pts
  • Documentation15 pts
  • License10 pts