Skip to content
verify mcp Beta VerifyMCP is currently in beta. If you notice any issues, get in touch and we’ll put it right.

MNE-MCP

PYPI · MNE-MCP

MNE-Python neurophysiology analysis (EEG, MEG, sEEG, ECoG, fNIRS) via the Model Context Protocol

Available components

−3 this week 88 Trust /100

Last scanned (23 hours ago)

Scores higher than 91% of PyPI servers

Category Health and Science

Trust breakdown (7 categories)

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. How we score → Why this is hard to score →

Supply Chain Security100
  • No malware found by supply-chain analysis.Pass
  • No known CVEs affecting this package version or its production dependencies.Pass
  • Runs hatchling.build at install time, a recognised build step with no custom scripting around it. View diagnostics → Pass
  • 5 of 63 dependencies flagged as unhealthy. View diagnostics → Partial
Provenance & Transparency97
  • Source repository is publicly reachable at the declared URL. View diagnostics → Pass
  • Cryptographically verified build provenance (signed, bound to Exekiel179/MNE-MCP). View diagnostics → Pass
  • Clear OSI-approved license (MIT).Pass
  • Actively maintained (last published 44 days ago).Pass
  • Disclosure check failed: no security disclosure policy was found in the source repository. See how to fix → Fail
Schema Quality & AI Usability75
  • AI-judged instruction clarity (good).Pass
  • Tool/resource definitions use about 2773 tokens (~72/item across 38 items; 38 tools + 0 resources), lean.Pass
  • Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management77
  • Stability observed for 23 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage71
  • 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
  • 0% of tool parameters carry a description.Fail
  • Structured output schemas are declared (100% of tools); any adoption earns full credit.Pass
Tool Safety75
  • No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
  • 0 of 2 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation; "mne_run_code" implies "execute" and declares no destructiveHint at all, which the MCP spec reads as destructive by default. See how to fix → Fail
  • An AI judge read all 38 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
  • Implements a current MCP spec version (2026-07-28).Pass
What we tested

Checks we ran (16)

  • Malware scan
  • Known CVEs
  • Install scripts
  • Dependency health
  • Source repository
  • Provenance
  • License
  • Maintenance
  • Security disclosure
  • Schema quality
  • Stability
  • Tool coverage
  • Injection markers
  • Destructive annotations
  • Judged manipulation
  • MCP protocol

Does not apply to this package (2)

  • Endpoint SecurityScored on hosted endpoints only. A package has no live endpoint of its own for us to probe.
  • Transport & ReachabilityScored on hosted endpoints only. A package has no live endpoint of its own for us to probe.

The score does not measure everything. What the score does not measure →

Changelog

Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.

  • 5 Nov 26 −3
    • Stability: pass → 0.77 functional
  • 30 Oct 26 0
    • Stability: 0.97 → pass security
  • 29 Oct 26 0
    • Stability: pass → 0.97 functional
  • 23 Oct 26 0
    • Stability: 0.97 → pass security
  • 22 Oct 26 +11
    • Known CVEs: unverified → pass ▲ security
    • Dependency health: unverified → 0.98 ▲ functional
    • Stability: pass → 0.97 functional
  • 21 Oct 26 −11
    • Known CVEs: pass → unverified ▼ security
    • Dependency health: 0.97 → unverified ▼ functional
  • 18 Oct 26 +15
    • Malware scan: unverified → pass ▲ security
  • 17 Oct 26 −15
    • Malware scan: pass → unverified ▼ security
Diagnostics

Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.

Captured 5 Nov 2026 · Analysed pypi/mne-mcp@0.2.2

Provenance Verified

A signed build attestation was found and verified, binding this exact artifact to the source repository it claims to come from.

Result Verified
Ecosystem pypi
Reason Verified
Discovered via Registry attestation endpoint
Source repo Exekiel179/MNE-MCP
Certificate issuer https://token.actions.githubusercontent.com
Certificate SAN https://github.com/Exekiel179/MNE-MCP/.github/workflows/release.yml@refs/tags/v0.2.2
Rekor log index 1731186752
Predicate type PyPI publish attestation https://docs.pypi.org/attestations/publish/v1
Subject digest sha256:3d0399a99045c36466e1b14a25cf2aca7bd6dc79a9799145ab7bf583fda610b6

Background: How many MCP packages publish verified provenance →

Install scripts 1 script
Hook Tier Command
build_backend Known build tool hatchling.build

Background: Why install scripts are a supply-chain risk →

Dependencies 63 packages
Packages resolved 63
Stale 3
No linked repository 2
Tree resolution Complete

Background: SBOMs and build attestations, explained →

MCP tools · 38 exposed · ~2,773 tokens

The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →

Tool Tokens
mne_apply_ica ~72

Remove ICA components from an instrument in place. exclude = comma-separated component indices to drop (e.g. '0,3'); if omitted, uses the ICA object's current exclude list.

NameTypeReqDescription
excludestring––
ica_namestring––
inst_namestring––
NameTypeReqDescription
resultstringyes–

No examples provided.

mne_apply_inverse ~129

Estimate cortical sources from an Evoked using a forward model and noise covariance. method: 'dSPM' (default), 'MNE', 'sLORETA', 'eLORETA'. Stores the source estimate (stc) and reports the peak activation time. Pair with mne_make_forward + mne_compute_noise_cov.

NameTypeReqDescription
cov_namestring––
evoked_namestring––
fwd_namestring––
methodstring––
snrnumber––
stc_namestring––
NameTypeReqDescription
resultstringyes–

No examples provided.

mne_average_evoked ~72

Average Epochs into an Evoked (ERP/ERF) response. condition = an event_id name to average just that condition (else averages all). Stored under evoked_name.

NameTypeReqDescription
conditionstring––
epochs_namestring––
evoked_namestring––
NameTypeReqDescription
resultstringyes–

No examples provided.

mne_check_status ~47

Check MNE MCP capabilities: MNE-Python version, scikit-learn (needed for ICA), numpy/scipy/matplotlib versions, and runtime directories. Call this first.

Input schema present but exposes no named parameters.

NameTypeReqDescription
resultstringyes–

No examples provided.

mne_compute_noise_cov ~66

Compute a noise covariance matrix from the Epochs baseline (data up to tmax seconds, default 0). Needed before building an inverse operator for source localization.

NameTypeReqDescription
cov_namestring––
namestring––
tmaxnumber––
NameTypeReqDescription
resultstringyes–

No examples provided.

mne_connectivity ~104

Spectral connectivity between channels over Epochs in a frequency band. method: 'coh', 'plv', 'wpli', 'pli', 'imcoh', etc. Returns a channel×channel connectivity heatmap + strongest pairs. Requires mne-connectivity.

NameTypeReqDescription
con_namestring––
epochs_namestring––
fmaxnumber––
fminnumber––
methodstring––
NameTypeReqDescription
resultstringyes–

No examples provided.

mne_crop ~58

Crop a Raw/Epochs/Evoked object to the time window [tmin, tmax] seconds, in place.

NameTypeReqDescription
namestring––
tmaxnumber––
tminnumber––
NameTypeReqDescription
resultstringyes–

No examples provided.

mne_decode ~117

Time-resolved decoding (MVPA): train a classifier at each time point to discriminate two conditions, with cross-validation. cond_a/cond_b are event_id names (e.g. 'target','standard'). Returns mean/peak score over time + a scores-vs-time plot. Requires scikit-learn.

NameTypeReqDescription
cond_astring––
cond_bstring––
cvinteger––
epochs_namestring––
namestring––
scoringstring––
NameTypeReqDescription
resultstringyes–

No examples provided.

mne_describe ~39

Show a detailed summary of one named session object (channels, sfreq, montage, bads, etc.).

NameTypeReqDescription
namestringyes–
NameTypeReqDescription
resultstringyes–

No examples provided.

mne_events_from_annotations ~52

Convert a Raw object's annotations into an events array + event_id map (for EDF/BrainVision/EEGLAB data).

NameTypeReqDescription
events_namestring––
raw_namestring––
NameTypeReqDescription
resultstringyes–

No examples provided.

mne_filter ~116

Band-pass / high-pass / low-pass and/or notch filter a Raw/Epochs/Evoked object in place. l_freq=high-pass edge, h_freq=low-pass edge (either may be null), notch=line-noise frequency (e.g. 50 or 60). picks optional ('eeg', 'meg', or null).

NameTypeReqDescription
h_freqnumber––
l_freqnumber––
namestring––
notchnumber––
picksstring––
NameTypeReqDescription
resultstringyes–

No examples provided.

mne_find_events ~54

Find stimulus/trigger events on a stim channel of a Raw object. Stores them under events_name.

NameTypeReqDescription
events_namestring––
raw_namestring––
stim_channelstring––
NameTypeReqDescription
resultstringyes–

No examples provided.

mne_fit_ica ~125

Fit Independent Component Analysis on a (preferably 1 Hz high-pass filtered) Raw/Epochs object for artifact removal. n_components can be an int, a float (variance fraction), or null. method: 'fastica' (default), 'infomax', 'picard'. Stored under ica_name (default 'ica'). Requires scikit-learn.

NameTypeReqDescription
ica_namestring––
methodstring––
n_componentsnumber––
namestring––
random_stateinteger––
NameTypeReqDescription
resultstringyes–

No examples provided.

mne_get_config ~69

Show the configured default analysis parameters (line frequency, default montage, filter band, rejection threshold, ICA method/components, epoch window, dirs, timeout) that the structured tools fall back to when a parameter is omitted. Users change these by running `mne-mcp configure` in a terminal.

Input schema present but exposes no named parameters.

NameTypeReqDescription
resultstringyes–

No examples provided.

mne_get_info ~31

Show the full channel list and measurement info for a named session object.

NameTypeReqDescription
namestringyes–
NameTypeReqDescription
resultstringyes–

No examples provided.

mne_interpolate_bads ~44

Interpolate currently-marked bad channels using spherical splines (requires a montage).

NameTypeReqDescription
namestring––
reset_badsboolean––
NameTypeReqDescription
resultstringyes–

No examples provided.

mne_list_files ~90

List neurophysiology data files (.fif, .edf, .bdf, .vhdr, .set, .cnt, .egi/.mff, .ds, .snirf, …) under a directory. Defaults to MNE_MCP_DATA_DIR / current dir. Optionally pass a glob pattern.

NameTypeReqDescription
directorystring––
patternstring––
NameTypeReqDescription
resultstringyes–

No examples provided.

mne_load_raw ~89

Load a raw recording from disk into the session. Auto-detects the format by extension (FIF/EDF/BDF/BrainVision/EEGLAB/CNT/EGI/…). Stores it under `name` (default `raw`). Set preload=False for very large files.

NameTypeReqDescription
namestring––
pathstringyes–
preloadboolean––
NameTypeReqDescription
resultstringyes–

No examples provided.

mne_make_epochs ~151

Segment a Raw object into Epochs around events. tmin/tmax in seconds relative to the event; baseline 'default' = (None, 0); event_id like 'target:1,standard:2' to name/select conditions; reject_eeg = peak-to-peak EEG rejection threshold in volts (e.g. 100e-6). Stored under epochs_name.

NameTypeReqDescription
baselinestring––
epochs_namestring––
event_idstring––
events_namestring––
raw_namestring––
reject_eegnumber––
tmaxnumber––
tminnumber––
NameTypeReqDescription
resultstringyes–

No examples provided.

mne_make_forward ~70

Build a template-head (fsaverage) EEG forward model for the named object's montage. Downloads the fsaverage template once (~ tens of MB). Use for EEG source localization without an individual MRI. Stored under fwd_name.

NameTypeReqDescription
fwd_namestring––
namestring––
NameTypeReqDescription
resultstringyes–

No examples provided.

mne_mark_bad_channels ~66

Mark channels as bad (comma-separated names, e.g. 'Fp1,T7'). By default appends to existing bads; set replace=true to overwrite.

NameTypeReqDescription
badsstring––
namestring––
replaceboolean––
NameTypeReqDescription
resultstringyes–

No examples provided.

mne_plot_epochs_image ~47

Plot an ERP image (epochs × time heatmap) for an Epochs object. Returns PNG path(s).

NameTypeReqDescription
namestring––
picksstring––
NameTypeReqDescription
resultstringyes–

No examples provided.

mne_plot_evoked ~61

Plot an Evoked response. style: 'joint' (butterfly + topomaps, default), 'topo', or 'butterfly'. Returns PNG path.

NameTypeReqDescription
namestring––
stylestring––
NameTypeReqDescription
resultstringyes–

No examples provided.

mne_plot_ica_components ~43

Plot ICA component scalp topographies (to identify eye/heart/muscle artifacts). Returns PNG path(s).

NameTypeReqDescription
ica_namestring––
NameTypeReqDescription
resultstringyes–

No examples provided.

mne_plot_ica_sources ~47

Plot ICA component time courses for an instrument (raw/epochs). Returns a PNG path.

NameTypeReqDescription
ica_namestring––
inst_namestring––
NameTypeReqDescription
resultstringyes–

No examples provided.

mne_plot_psd ~62

Plot the power spectral density of a Raw/Epochs/Evoked object. Returns a PNG path.

NameTypeReqDescription
fmaxnumber––
fminnumber––
namestring––
picksstring––
NameTypeReqDescription
resultstringyes–

No examples provided.

mne_plot_raw ~56

Plot raw signal traces (a window of channels over time). Returns a PNG path.

NameTypeReqDescription
durationnumber––
n_channelsinteger––
namestring––
startnumber––
NameTypeReqDescription
resultstringyes–

No examples provided.

mne_plot_sensors ~59

Plot the sensor/electrode layout (kind='topomap' 2D or '3d'). Returns a PNG path.

NameTypeReqDescription
kindstring––
namestring––
show_namesboolean––
NameTypeReqDescription
resultstringyes–

No examples provided.

mne_plot_source_estimate ~103

Render a source estimate (stc) as a cortical activation map (PNG) at its peak time or a given time. hemi: 'both' / 'lh' / 'rh'. Requires PyVista with off-screen rendering; if 3D rendering is unavailable the estimate is still computed and can be inspected via mne_run_code.

NameTypeReqDescription
hemistring––
stc_namestring––
timenumber––
NameTypeReqDescription
resultstringyes–

No examples provided.

mne_plot_topomap ~70

Plot scalp topographies of an Evoked at given times. times='auto', 'peaks', or comma-separated seconds (e.g. '0.1,0.2,0.3'). Returns PNG path.

NameTypeReqDescription
namestring––
timesstring––
NameTypeReqDescription
resultstringyes–

No examples provided.

mne_resample ~44

Resample a Raw/Epochs object to a new sampling frequency (Hz), in place.

NameTypeReqDescription
namestring––
sfreqnumber––
NameTypeReqDescription
resultstringyes–

No examples provided.

mne_reset_session ~27

Clear all loaded objects and figures from the session, starting fresh. Irreversible.

Input schema present but exposes no named parameters.

NameTypeReqDescription
resultstringyes–

No examples provided.

mne_run_code ~110

Execute arbitrary Python/MNE code in the persistent session namespace. Pre-bound names: `mne`, `np`, `pd`, `plt`, plus every object you have loaded (e.g. `raw`, `epochs`, `evoked`, `ica`). Like a notebook cell: the value of a final expression is returned, stdout is captured, and any matplotlib figures are saved as PNG (paths returned). Use this for anything the structured tools do not cover.

NameTypeReqDescription
codestringyes–
NameTypeReqDescription
resultstringyes–

No examples provided.

mne_save ~78

Save a session object to disk. MNE naming rules: Raw → '*_raw.fif', Epochs → '*-epo.fif', Evoked → '*-ave.fif'. Other formats follow the object's .save() support.

NameTypeReqDescription
namestringyes–
overwriteboolean––
pathstringyes–
NameTypeReqDescription
resultstringyes–

No examples provided.

mne_session_info ~53

List every object currently held in the persistent analysis session (raw recordings, epochs, evoked, ICA, events, arrays) with a one-line summary. Use this to see what is loaded before operating on it.

Input schema present but exposes no named parameters.

NameTypeReqDescription
resultstringyes–

No examples provided.

mne_set_montage ~94

Apply a standard electrode montage (e.g. 'standard_1020', 'standard_1005', 'biosemi64', 'GSN-HydroCel-128') to set channel positions. Needed before topographic plots and interpolation. If montage is omitted, uses the configured default (set via `mne-mcp configure`).

NameTypeReqDescription
montagestring––
namestring––
NameTypeReqDescription
resultstringyes–

No examples provided.

mne_set_reference ~60

Set the EEG reference. Use 'average' for average reference, 'REST', or a comma-separated list of channel names (e.g. 'TP9,TP10').

NameTypeReqDescription
namestring––
ref_channelsstring––
NameTypeReqDescription
resultstringyes–

No examples provided.

mne_tfr_morlet ~98

Compute Morlet-wavelet time-frequency power on Epochs and plot it. fmin/fmax = frequency range (Hz), n_freqs = number of frequencies. Stored under tfr_name. Returns PNG path.

NameTypeReqDescription
epochs_namestring––
fmaxnumber––
fminnumber––
n_freqsinteger––
tfr_namestring––
NameTypeReqDescription
resultstringyes–

No examples provided.

Install

How do I install the MNE-MCP server?

MNE-MCP runs locally as a PyPI package, launched with uvx --from 'mne-mcp[ica]' mne-mcp serve --transport stdio. Ready-made configuration for Claude, Cursor, VS Code, Codex and 3 more is on this page, copied from each client's own documentation.

pypi · mne-mcp

# add to Claude Code
claude mcp add exekiel179-mne-mcp -- uvx --from 'mne-mcp[ica]' mne-mcp serve --transport stdio
Common questions

What is the MNE-MCP server?

MNE-MCP is listed in the public MCP registry as io.github.Exekiel179/mne-mcp. MNE-Python neurophysiology analysis (EEG, MEG, sEEG, ECoG, fNIRS) via the Model Context Protocol. This page covers its PyPI package (mne-mcp).

Is the MNE-MCP server safe to use?

MNE-MCP scores 88 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 5 November 2026. Its build provenance is signed and verified. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

What tools does the MNE-MCP server expose?

MNE-MCP exposes 38 tools: mne_check_status, mne_get_config, mne_session_info, mne_describe, mne_get_info, and 33 more. Their descriptions and schemas cost roughly 2,773 tokens of context every time the server is loaded.

Is the MNE-MCP server still maintained?

MNE-MCP is still listed as active in the MCP registry. We last reached this channel on 5 November 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.

What licence is the MNE-MCP server under?

MNE-MCP declares the MIT licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.

What did VerifyMCP test on the MNE-MCP server?

VerifyMCP ran 16 checks on MNE-MCP, covering Malware scan, Known CVEs, Install scripts, Dependency health and 12 more. Endpoint Security and Transport & Reachability do not apply to a PyPI package, so they were not tested. The score does not measure everything, and the scoring documentation lists what it leaves out.