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 分