mne-analyst — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited mne-analyst (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Drive MNE-Python analysis conversationally through the MNE MCP server. The server keeps one persistent session, so load a recording once and build the pipeline step by step. Every plotting tool returns > Figure: <path> — read that PNG and interpret it before deciding the next step.
mne_check_status # 1. confirm MNE (+ sklearn for ICA) is available
mne_load_raw path=... name=raw # 2. load
mne_set_montage name=raw # 3. positions (needed for topomaps/ICA/interpolation)
mne_plot_psd name=raw # 4. LOOK (read the PNG) → pick filter cutoffs / spot bad channels| User wants | Call (in order) |
|---|---|
| Look at the data | mne_describe / mne_get_info, mne_plot_psd, mne_plot_raw |
| Clean / preprocess | mne_filter (+notch), mne_mark_bad_channels → mne_interpolate_bads, mne_set_reference |
| Remove eye/heart artifacts | mne_fit_ica (on ~1 Hz HP data) → mne_plot_ica_components → mne_apply_ica exclude=... |
| ERP / evoked | get events (mne_find_events or mne_events_from_annotations) → mne_make_epochs → mne_average_evoked → mne_plot_evoked / mne_plot_topomap |
| Time-frequency | mne_make_epochs (wide window) → mne_tfr_morlet |
| Decoding (MVPA) | mne_decode cond_a=… cond_b=… |
| Connectivity | mne_connectivity method=coh fmin=8 fmax=13 |
| Source localization (EEG) | mne_compute_noise_cov → mne_make_forward → mne_apply_inverse → mne_plot_source_estimate |
| Save | mne_save |
| BIDS / stats / anything else | mne_run_code (see references/mne-pipelines.md) |
mne_get_info) — never guess channel names, montage, or event codes.reject_eeg=100e-6, not 100. (The #1 silent error.)tmin=-0.5 tmax=1.5).User: "加载 sub01_raw.fif,1–40Hz 带通去 50Hz 工频,跑 ICA 去眼电,按 target 事件做 ERP 并画地形图"
mne_load_raw path=sub01_raw.fif → mne_set_montage name=rawmne_plot_psd name=raw → read PNG: confirm 50 Hz peak, note any flat/noisy channelsmne_filter name=raw l_freq=1 h_freq=40 notch=50mne_fit_ica name=raw → mne_plot_ica_components → read PNG: ICs 0,2 look frontal/blinkmne_apply_ica ica_name=ica inst_name=raw exclude=0,2mne_find_events (or mne_events_from_annotations) → mne_make_epochs event_id=target:1 tmin=-0.2 tmax=0.8mne_average_evoked condition=target → mne_plot_evoked + mne_plot_topomap times=0.1,0.2,0.3Many tools fall back to user-configured defaults (montage, line freq, filter band, ICA method, epoch window, rejection) when a parameter is omitted. Check them with mne_get_config; the user sets them via mne-mcp configure. Respect their configured line frequency (50 vs 60 Hz).
After a meaningful analysis/plot step, archive to mne_result/ in the working directory:
mne_result/ if missing; next sequence number = max NN_ prefix + 1 (start 01).> Figure: PNG to mne_result/NN_<label>.png (e.g. 02_ica_components.png). `python block to mne_result/pipeline.py under a # NN <step> header,so the whole analysis re-runs as one script. Read-only tools (status/describe/get_info/session_info/ list_files/get_config) don't trigger archiving.
+ mne_run_code recipes for source localization, connectivity, decoding, statistics, BIDS, Report.
TFR wavelet length, units, empty epochs, file formats, timeouts.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.