eeg-mcp について
eeg-mcpは、リアルタイムEEGを扱う研究者や臨床従事者向けのMCPサーバーです。データ取得、録画の再生、オンライン信号処理、モニタリング、安全ゲート付き刺激を一つのインターフェースにまとめ、ハードウェア不要の試行用に合成ボードも備えています。
主な機能
- 01BrainFlowボードまたは合成ボードからのストリーミング
- 02録画を元のタイミングで再生
- 03状態を保持するオンラインDSPとカスタムプロセッサー
- 04ブラウザーでの信号ライブモニタリング
- 05クラッシュ後に復旧できるFIF記録
- 06安全ゲートを介した刺激の送信
活用シーン
- 01ハードウェアなしでEEGワークフローを試験
- 02録画をライブストリームとして確認
- 03データ取得中の信号品質の監視
- 04閉ループ型ニューロフィードバックの構築
MCP 対応
MCP経由で、EEGストリーミング、再生、処理、監視、記録、イベント、刺激に関する47個のツールを提供します。MCPクライアントからPythonモジュール `eeg_mcp` を起動できます。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
47掲載時のツール一覧 · 2 日前に更新
このツールにパラメーターはありません。
詳細
AI エージェントに、ライブ EEG ワークフロー全体を操作する単一のインターフェースを提供する Model Context Protocol サーバーです。約 66 種類の BrainFlow ボードからのデータ取得、既存の記録の実時間再生、状態を保持するオンライン DSP、ライブブラウザーモニター、クラッシュに強い記録、そして制御付きの刺激出力に対応しています。
オフライン処理に対応するのは neuro-mcp(MNE 処理、ソースイメージング、BIDS/EHR ストレージ)です。こちらはリアルタイム処理を担い、信号を受信している間に行う必要があるすべての処理に対応します。
コンセプト
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 & 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
ツールを手動で呼び出す必要はありません。平易な英語でエージェントに話しかけると、エージェントが内部の 47 個のツールを操作します。 **チュートリアル**では、ハードウェアを必要とせず、最初から最後までの流れを確認できます。
できること
|
📡 ストリーミング 66 種類の BrainFlow ボード識別子に対応しています。OpenBCI、Muse、ANT Neuro、g.tec、Mentalab などに加え、ハードウェア不要の合成ボードも利用できます。サンプルはバックグラウンドスレッドがリングバッファーに書き込むため、ツール呼び出しではデバイスの応答を待たずに、ライブデータを読み取れます。BrainFlow 自体がボードに接続できない場合(例:Muse は 上流の SimpleBLE のバグにより Windows で接続できません)、 |
⏪ 再生 EDF/BDF/GDF/SET/FIF ファイルまたは BrainFlow CSV を、録音時の速度で再生し、注釈を元のタイミングでイベントとして再出力します。速度変更、シーク、一時停止、ループ再生にも対応しています。ファイルを使って開発したパイプラインは、ハードウェアでも変更せずに実行できます。 |
|
👁 可視化 ループバックインターフェースにバインドされ、トークンで保護されたライブブラウザー表示を利用できます。スクロール波形、イベントマーカー、帯域パワー、電極ごとの品質、再生操作を表示します。自己完結型の HTML レポートも生成できます。CDN や外部アセットを使わず、ネットワークから隔離されたマシンでも開けます。 |
💾 録音 イベントログを注釈として添付した、MNE ネイティブの |
|
🧩 拡張 独自のリアルタイムプロセッサー(特徴抽出器、分類器、アーチファクトゲート、または系列モデル用 EEG トークナイザー)を追加できます。組み込み機能と同じように、取得ループ内で実行されます。 → 拡張 |
⚡ 刺激 プラグイン可能なバックエンドを通じて、単一の |
メモ
イベントログは 1 つです。 ボードのマーカー、再生された注釈、送信された刺激、手動のメモはすべて、同じクロックを使用する同じテーブルに、絶対サンプルインデックスとともに記録されます。クローズドループ実行は、クロックを結合せずに後から再構築できます。
インストール
conda create -n eeg-mcp python=3.11 -y && conda activate eeg-mcp
pip install eeg-mcp
オプションの追加機能と MCP クライアントの登録
pip install "eeg-mcp[lsl]" # LSL marker outlets (PsychoPy, OpenViBE, ...)
pip install "eeg-mcp[serial]" # serial/TTL trigger delivery to hardware
環境のインタープリターへの絶対パスを指定して、MCP クライアントに登録します。
{
"mcpServers": {
"eeg-realtime": {
"command": "/path/to/envs/eeg-mcp/bin/python",
"args": ["-m", "eeg_mcp"]
}
}
}
または、Claude Code CLI を使用します。
claude mcp add eeg-realtime -- /path/to/envs/eeg-mcp/bin/python -m eeg_mcp
→ 詳細なガイド:インストール
クイックスタート
エージェントに実現したい結果を伝えると、必要な呼び出しを選択します。ハードウェアは不要です。
start_stream(session_id="s1", board="synthetic")
check_signal_quality(session_id="s1") # before trusting anything
set_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
実際の録音をライブデータのように再生し、そのまま記録を続けます。
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.")
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
| ガイド | |
|---|---|
| 🚀 インストール | 環境、クライアントの登録、トラブルシューティング |
| 📘 チュートリアル | ハードウェア不要で、最初から最後まで体験できます |
| ⏪ リプレイ駆動開発 | 記録データを使って開発し、実環境にデプロイします |
| 🔁 クローズドループ・ニューロフィードバック | 特徴量からトリガーまでを、実測したレイテンシ予算で実現します |
| 🩺 ライブ臨床レビュー | 視覚的なレビュー、注釈、レポート作成 |
| ⚡ 刺激プロトコル | 安全ゲートを通じたTMSとtES |
| 🧩 拡張 | カスタムプロセッサーまたはEEGトークナイザーを作成します |
| 🔌 対応ハードウェア | 66種類すべてのボード、フォーマット、刺激トランスポート |
| ⚠️ 安全性 | 刺激装置を接続する前にお読みください |
| 🛠 ツールリファレンス | 全47種類のツール |
知っておくべき設計上の重要な判断
重要
フィルタリングはクエリ時ではなく、プロデューサースレッド内で行われます。
状態を持つIIRフィルターは、すべてのサンプルを順番どおりに一度だけ処理する必要があります。よくある近道、つまり各クエリウィンドウを個別にフィルタリングする方法では、ウィンドウ境界ごとにフィルターが再起動し、そのたびに過渡応答が生じます。バンドパワーのプロットでは見えませんが、位相に敏感な処理では致命的です。
そのため、プロデューサーは各チャンクの到着時に一度だけフィルタリングし、sosfiltの遅延線状態を引き継いで、2つ目のリングバッファに書き込みます。クエリは読み取りのみを行います。
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 & 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
テストスイートでは、チャンクごとのフィルタリングが信号全体のフィルタリングと1e-9の精度で一致することを検証し、さらに、比較対象として単純な方法では一致しないことも検証します。
| 結果 | |
|---|---|
| フィルターは因果的です | ゼロ位相オプションはありません。未来のサンプルが必要になるためです。stream_statusはgroup_delay_secを報告します |
| 両方のバッファを保持します | read_window(filtered=false)では常に生信号を取得でき、特徴量が実際のものかアーティファクトかを確認できます |
| インデックスは共有されます | イベントのsample_indexは、どちらのバッファでも同じ意味を持ちます |
ヒント
クローズドループの予算には、群遅延 + ポーリング間隔 + ディスパッチ遅延を見込んでください。 リファレンス構成での実測値は約71 msです。ニューロフィードバックには適していますが、 位相同期刺激には不十分です。
刺激の安全性
注意
**このソフトウェアは医療機器ではなく、臨床使用に対する検証も行われていません。**TMSとtESは、発作を含む危害を引き起こす可能性があります。倫理審査委員会が承認したプロトコルに従い、デバイスレベルのインターロックが正常に機能している装置を使用し、訓練を受けたオペレーターの立ち会いのもとでのみ使用してください。
すべてのハードウェアバックエンドには、次の3つのゲートが適用されます。
| # | ゲート | 効果 |
|---|---|---|
| 1 | 設定 | サーバーの起動時にEEG_MCP_ALLOW_HARDWARE_STIM=1が指定されていない場合、ハードウェアバックエンドは起動を拒否します。エージェントはこれを設定できません。 |
| 2 | アーミング | arm_stimは、期限切れになるウィンドウの間だけディスパッチを許可するため、停止したエージェントが再開して後から発火することはありません |
| 3 | 制限 | 強度、継続時間、間隔には上限が適用されます。違反は、黙って飽和させずにエラーを発生させます |
これらは、デバイス自体のインターロックの代わりにはなりません。
警告
**ハードウェアバックエンドは、デバイスのマニュアルをもとにユーザーが用意するコマンドテンプレートで動作する汎用トランスポートであり、ベンダードライバーではありません。また、実際の刺激装置でテストされたものもありません。**一見もっともらしく見える未テストのドライバーは、ないよりも危険です。人の頭部に向けられた装置に接続していても、何も通知せずに失敗する可能性があります。
すべてのプロトコルは、すべてのコマンドを受け付けて何も出力しない
backend="log"から開始してください。
検証
python testing/verify.py # core correctness
python testing/verify_recording.py # recording + metadata store
python testing/verify_processing.py # plugin processors
python testing/persona_bci_researcher.py # engineer workflow
python testing/persona_clinician.py # clinician workflow
5つすべてで、FastMCPのインメモリクライアントを通じて実際のサーバーを動かし、埋め込まれた正解データに照らしてアサーションを行います。
- アノテーションの開始時刻に埋め込まれたスパイクが、抽出されたエポック内で t = 0 ± 0 ms に到達します。これにより、アノテーションのタイミング、再生クロック、リングバッファのインデックス付け、エポック抽出のすべてが一致していることを確認できます。
- 意図的に壊したプラグインでも取得を停止できません。スループットは1.0を維持します。
- 設定ゲートが未設定の場合、ハードウェア刺激は拒否されます。
→ テスト対象と対象外 — 実機で一度もテストされていない項目も、正直に一覧にしています。
ライセンス
BSD-3-Clauseです。LICENSE と NOTICE をご覧ください。
⬆ トップに戻る · AImplifier 神経科学ツールチェーンの一部 · 姉妹プロジェクト neuro-mcp
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。