Eeg Mcp

io.github.AImplifier由 GitHub 帳號 AImplifier 發布v0.2.0更新於 Oct 29, 2026

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

概覽

AI 產生的概覽

即時腦電 MCP 伺服器:從 BrainFlow 裝置串流或回放錄製,進行線上濾波與分析、錄製、視覺化,並送出受多重安全閘門控管的刺激事件。

可以做什麼
  • 列出並啟停 BrainFlow 裝置串流,或以真實速率回放 EDF/BDF/GDF/SET/FIF 與 BrainFlow CSV,查看工作階段狀態與通道
  • 安裝具狀態的線上濾波鏈,讀取原始或濾波視窗、頻帶功率、功率頻譜密度與各通道訊號品質
  • 記錄、讀取、清空事件並依事件擷取訊號片段,也可接入外部 LSL 標記串流
  • 產生即時瀏覽器監看頁面,以及獨立的 HTML 波形圖或完整工作階段報告
  • 將即時訊號錄製為 .fif 並把事件寫成標註,在本地中繼資料存放區列出錄製檔
  • 掛載刺激後端、布防與撤防,並送出單次脈衝或有時長上限的脈衝串
適用情境
適合腦機介面、神經回饋或臨床複核情境:讓助理驅動一次即時腦電工作階段,從裝置擷取、用錄製檔排練流程、檢查訊號品質、留存紀錄,或在操作者設定的閘門下觸發刺激。
執行需求
需在本機安裝 Python 版 eeg-mcp 套件(建議 Python 3.11 環境),並以解譯器絕對路徑註冊到 MCP 用戶端;LSL 與序列埠傳輸為選用附加元件。硬體刺激要求伺服器以 EEG_MCP_ALLOW_HARDWARE_STIM=1 啟動。合成裝置與檔案回放不需任何硬體。
安裝前請注意
硬體刺激可能造成傷害,包括癲癇發作,本軟體並非醫療器材;硬體後端只是由你提供的命令範本驅動的通用傳輸層,未在實體刺激器上驗證,請先以 log 後端排練。工作階段會將錄製檔與中繼資料寫入磁碟,即時監看頁面會在本機提供瀏覽器存取。濾波為因果濾波,特徵會落後於所回報的群延遲。

安裝

在 SourceWeft 中

  1. 開啟 儀表板中的 Eeg Mcp,將其新增到工作區。
  2. 為需要使用其工具的對話啟用該服務。

Desktop only,透過 STDIO。 STDIO 服務會啟動本機處理程序,因此需要 SourceWeft 桌面主機。

其他 MCP 客戶端

參照 儲存庫 中的啟動說明。

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

來源:README.md,提交 4f69a85

工具

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.

無需輸入參數。

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.

輸入參數boardparamschannelssession_id必填

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.

輸入參數session_id必填

list_sessions

List Sessions

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

無需輸入參數。

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.

輸入參數session_id必填

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.

輸入參數secondschannelsfilteredsession_id必填max_samplesinclude_data

get_channels

Get Channels

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

輸入參數session_id必填

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.

輸入參數path必填boardmax_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.

輸入參數looppath必填boardpicksspeedstart_secsession_id必填use_stim_channel

replay_control

Replay Control

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

輸入參數speedaction必填session_id必填position_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.

輸入參數max_eventssession_id必填

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.

輸入參數orderfiltersnotch_freqsession_id必填bandpass_lowbandpass_high

clear_filters

Clear Filters

Remove the filter chain; reads return raw signal again.

輸入參數session_id必填

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.

輸入參數bandssecondschannelsfilteredrelativesession_id必填

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.

輸入參數fmaxsecondschannelsfilteredmax_binssession_id必填

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.

輸入參數secondsline_freqsession_id必填

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.

輸入參數label必填valuepayloaddurationsession_id必填mark_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.

輸入參數labellimitoriginsession_id必填last_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.

輸入參數tmaxtminlabelfilteredoccurrencesession_id必填max_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.

輸入參數session_id必填

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.

輸入參數namesession_id必填stream_typeresolve_timeout

detach_marker_stream

Detach Marker Stream

Stop listening for external markers on this session.

輸入參數session_id必填

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.

無需輸入參數。

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.

輸入參數backendoptionssession_id必填make_default

detach_stim_backend

Detach Stim Backend

Close and remove a stimulation backend from a session.

輸入參數backend必填session_id必填

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.

輸入參數backendttl_secsession_id必填

disarm_stim

Disarm Stim

Revoke permission to stimulate. Takes effect immediately.

輸入參數backendsession_id必填

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.

輸入參數kindunitlabel必填valueparamstargetbackendintensitysession_id必填duration_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.

輸入參數label必填valuebackendn_pulses必填intensitysession_id必填duration_msinterval_ms必填

stim_status

Stim Status

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

輸入參數session_id必填

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.

輸入參數portrefresh_mssession_id必填window_secallow_control

stop_monitor

Stop Monitor

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

輸入參數session_id必填

list_monitors

List Monitors

List live monitors currently serving, with their URLs.

無需輸入參數。

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.

輸入參數secondschannelsfilteredsession_id必填show_events

plot_spectrum

Plot Spectrum

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

輸入參數fmaxsecondschannelsfilteredsession_id必填

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.

輸入參數notessecondssession_id必填include_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.

輸入參數runnametasknotesdatasetsubjectsession_id必填session_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.

輸入參數registersession_id必填keep_sidecar

recording_status

Recording Status

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

輸入參數session_id必填

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.

輸入參數limitsubject

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.

輸入參數header_path必填keep_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.

無需輸入參數。

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``.

輸入參數paramsprocessor必填session_id必填

detach_processor

Detach Processor

Remove a processor from a session and release its state.

輸入參數processor必填session_id必填

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.

輸入參數session_id必填

get_processor_output

Get Processor Output

Read a streaming processor's recent outputs.

輸入參數limitprocessor必填session_id必填

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.

輸入參數secondsfilteredprocessor必填session_id必填

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.

輸入參數session_id必填

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.

輸入參數limitprocessorsession_id必填

版本歷史

2
  1. v0.2.0最新Oct 26, 2026
  2. v0.1.0Sep 16, 2026

評分

已滿足適用檢查項的 90%

該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。

  • 近 30 天內可連通25 分
  • 已宣告認證方式10 分

    請在註冊中心條目中宣告憑證請求標頭,或保持端點能夠回應探測,以便判定其認證方式。

  • 已列出工具必需15 分
  • 描述必需15 分
  • 圖示10 分
  • 文件15 分
  • 授權條款10 分