MNE-MCP
PYPI · MNE-MCP · SCANNED SEP 21
MNE-Python neurophysiology analysis (EEG, MEG, sEEG, ECoG, fNIRS) via the Model Context Protocol
Available components
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 Security50
- Malware scan not yet available for this package.Unverified
- No known CVEs affecting this package version or its production dependencies.Pass
- Runs hatchling.build at install time, a recognised native-build step with no shell scripting around it. View diagnostics → Pass
- 6 of 65 dependencies flagged as unhealthy. View diagnostics → Partial
Provenance & Transparency45
- Source repository is publicly reachable at the declared URL. View diagnostics → Pass
- Provenance check failed: no build-provenance attestation is published. See how to fix → View diagnostics → Fail
- Clear OSI-approved license (MIT).Pass
- Actively maintained (last published 4 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 Management87
- Stability observed for 26 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
How do I install the MNE-MCP server?
MNE-MCP runs locally as a PyPI package, launched with uvx mne-mcp. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.
pypi · mne-mcp
claude mcp add exekiel179-mne-mcp -- uvx mne-mcp
{
"mcpServers": {
"exekiel179-mne-mcp": {
"command": "uvx",
"args": [
"mne-mcp"
]
}
}
} {
"servers": {
"exekiel179-mne-mcp": {
"command": "uvx",
"args": [
"mne-mcp"
]
}
}
} codex mcp add exekiel179-mne-mcp -- uvx mne-mcp
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"exekiel179-mne-mcp": {
"type": "local",
"command": [
"uvx",
"mne-mcp"
],
"enabled": true
}
}
} openclaw mcp add exekiel179-mne-mcp --command uvx --arg mne-mcp
mcp_servers:
exekiel179-mne-mcp:
command: "uvx"
args: ["mne-mcp"] {
"McpServers": {
"exekiel179-mne-mcp": {
"Transport": "stdio",
"Command": "uvx",
"Arguments": [
"mne-mcp"
]
}
}
} assistant mcp add exekiel179-mne-mcp -t stdio -c uvx -a mne-mcp
{
"mcpServers": {
"exekiel179-mne-mcp": {
"command": "uvx",
"args": [
"mne-mcp"
]
}
}
} 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.
- 21 Sept 26 −14
- Malware scan: pass → unverified ▼ security
- 19 Sept 26 −3
- Stability: pass → 0.80 functional
- 18 Sept 26 +16
- Malware scan: unverified → pass ▲ security
- Stability: 0.97 → pass security
- 17 Sept 26 −15
- Malware scan: pass → unverified ▼ security
- 16 Sept 26 +16
- Malware scan: unverified → pass ▲ security
- 14 Sept 26 −14
- Malware scan: pass → unverified ▼ security
- 12 Sept 26 −3
- Stability: pass → 0.80 functional
- 11 Sept 26 +1
- Stability: 0.97 → pass security
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 21 Sept 2026 · Analysed pypi/mne-mcp@0.2.2
Provenance No attestation
The registry publishes no build provenance for this version, so there is nothing to verify.
| Result | No attestation |
|---|---|
| Ecosystem | pypi |
Background: How many MCP packages publish verified provenance →
Install scripts 1 script
| Hook | Tier | Command |
|---|---|---|
| build_backend | allowlisted | hatchling.build |
Background: Why install scripts are a supply-chain risk →
Dependencies 65 packages
| Packages resolved | 65 |
|---|---|
| Stale | 4 |
| No linked repository | 2 |
| Tree resolution | Complete |
Background: SBOMs and build attestations, explained →
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 →
mne_apply_ica 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.
| Name | Type | Req | Description |
|---|---|---|---|
| exclude | string | – | – |
| ica_name | string | – | – |
| inst_name | string | – | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
mne_apply_inverse 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.
| Name | Type | Req | Description |
|---|---|---|---|
| cov_name | string | – | – |
| evoked_name | string | – | – |
| fwd_name | string | – | – |
| method | string | – | – |
| snr | number | – | – |
| stc_name | string | – | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
mne_average_evoked 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.
| Name | Type | Req | Description |
|---|---|---|---|
| condition | string | – | – |
| epochs_name | string | – | – |
| evoked_name | string | – | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
mne_check_status 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.
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
mne_compute_noise_cov 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.
| Name | Type | Req | Description |
|---|---|---|---|
| cov_name | string | – | – |
| name | string | – | – |
| tmax | number | – | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
mne_connectivity 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.
| Name | Type | Req | Description |
|---|---|---|---|
| con_name | string | – | – |
| epochs_name | string | – | – |
| fmax | number | – | – |
| fmin | number | – | – |
| method | string | – | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
mne_crop Mne Crop ~58
Crop a Raw/Epochs/Evoked object to the time window [tmin, tmax] seconds, in place.
| Name | Type | Req | Description |
|---|---|---|---|
| name | string | – | – |
| tmax | number | – | – |
| tmin | number | – | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
mne_decode 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.
| Name | Type | Req | Description |
|---|---|---|---|
| cond_a | string | – | – |
| cond_b | string | – | – |
| cv | integer | – | – |
| epochs_name | string | – | – |
| name | string | – | – |
| scoring | string | – | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
mne_describe Mne Describe ~39
Show a detailed summary of one named session object (channels, sfreq, montage, bads, etc.).
| Name | Type | Req | Description |
|---|---|---|---|
| name | string | yes | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
mne_events_from_annotations Mne Events From Annotations ~52
Convert a Raw object's annotations into an events array + event_id map (for EDF/BrainVision/EEGLAB data).
| Name | Type | Req | Description |
|---|---|---|---|
| events_name | string | – | – |
| raw_name | string | – | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
mne_filter 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).
| Name | Type | Req | Description |
|---|---|---|---|
| h_freq | number | – | – |
| l_freq | number | – | – |
| name | string | – | – |
| notch | number | – | – |
| picks | string | – | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
mne_find_events Mne Find Events ~54
Find stimulus/trigger events on a stim channel of a Raw object. Stores them under events_name.
| Name | Type | Req | Description |
|---|---|---|---|
| events_name | string | – | – |
| raw_name | string | – | – |
| stim_channel | string | – | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
mne_fit_ica 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.
| Name | Type | Req | Description |
|---|---|---|---|
| ica_name | string | – | – |
| method | string | – | – |
| n_components | number | – | – |
| name | string | – | – |
| random_state | integer | – | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
mne_get_config 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.
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
mne_get_info Mne Get Info ~31
Show the full channel list and measurement info for a named session object.
| Name | Type | Req | Description |
|---|---|---|---|
| name | string | yes | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
mne_interpolate_bads Mne Interpolate Bads ~44
Interpolate currently-marked bad channels using spherical splines (requires a montage).
| Name | Type | Req | Description |
|---|---|---|---|
| name | string | – | – |
| reset_bads | boolean | – | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
mne_list_files 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.
| Name | Type | Req | Description |
|---|---|---|---|
| directory | string | – | – |
| pattern | string | – | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
mne_load_raw 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.
| Name | Type | Req | Description |
|---|---|---|---|
| name | string | – | – |
| path | string | yes | – |
| preload | boolean | – | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
mne_make_epochs 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.
| Name | Type | Req | Description |
|---|---|---|---|
| baseline | string | – | – |
| epochs_name | string | – | – |
| event_id | string | – | – |
| events_name | string | – | – |
| raw_name | string | – | – |
| reject_eeg | number | – | – |
| tmax | number | – | – |
| tmin | number | – | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
mne_make_forward 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.
| Name | Type | Req | Description |
|---|---|---|---|
| fwd_name | string | – | – |
| name | string | – | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
mne_mark_bad_channels 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.
| Name | Type | Req | Description |
|---|---|---|---|
| bads | string | – | – |
| name | string | – | – |
| replace | boolean | – | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
mne_plot_epochs_image Mne Plot Epochs Image ~47
Plot an ERP image (epochs × time heatmap) for an Epochs object. Returns PNG path(s).
| Name | Type | Req | Description |
|---|---|---|---|
| name | string | – | – |
| picks | string | – | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
mne_plot_evoked Mne Plot Evoked ~61
Plot an Evoked response. style: 'joint' (butterfly + topomaps, default), 'topo', or 'butterfly'. Returns PNG path.
| Name | Type | Req | Description |
|---|---|---|---|
| name | string | – | – |
| style | string | – | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
mne_plot_ica_components Mne Plot Ica Components ~43
Plot ICA component scalp topographies (to identify eye/heart/muscle artifacts). Returns PNG path(s).
| Name | Type | Req | Description |
|---|---|---|---|
| ica_name | string | – | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
mne_plot_ica_sources Mne Plot Ica Sources ~47
Plot ICA component time courses for an instrument (raw/epochs). Returns a PNG path.
| Name | Type | Req | Description |
|---|---|---|---|
| ica_name | string | – | – |
| inst_name | string | – | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
mne_plot_psd Mne Plot Psd ~62
Plot the power spectral density of a Raw/Epochs/Evoked object. Returns a PNG path.
| Name | Type | Req | Description |
|---|---|---|---|
| fmax | number | – | – |
| fmin | number | – | – |
| name | string | – | – |
| picks | string | – | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
mne_plot_raw Mne Plot Raw ~56
Plot raw signal traces (a window of channels over time). Returns a PNG path.
| Name | Type | Req | Description |
|---|---|---|---|
| duration | number | – | – |
| n_channels | integer | – | – |
| name | string | – | – |
| start | number | – | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
mne_plot_sensors Mne Plot Sensors ~59
Plot the sensor/electrode layout (kind='topomap' 2D or '3d'). Returns a PNG path.
| Name | Type | Req | Description |
|---|---|---|---|
| kind | string | – | – |
| name | string | – | – |
| show_names | boolean | – | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
mne_plot_source_estimate 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.
| Name | Type | Req | Description |
|---|---|---|---|
| hemi | string | – | – |
| stc_name | string | – | – |
| time | number | – | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
mne_plot_topomap 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.
| Name | Type | Req | Description |
|---|---|---|---|
| name | string | – | – |
| times | string | – | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
mne_resample Mne Resample ~44
Resample a Raw/Epochs object to a new sampling frequency (Hz), in place.
| Name | Type | Req | Description |
|---|---|---|---|
| name | string | – | – |
| sfreq | number | – | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
mne_reset_session Mne Reset Session ~27
Clear all loaded objects and figures from the session, starting fresh. Irreversible.
Input schema present but exposes no named parameters.
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
mne_run_code 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.
| Name | Type | Req | Description |
|---|---|---|---|
| code | string | yes | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
mne_save 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.
| Name | Type | Req | Description |
|---|---|---|---|
| name | string | yes | – |
| overwrite | boolean | – | – |
| path | string | yes | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
mne_session_info 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.
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
mne_set_montage 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`).
| Name | Type | Req | Description |
|---|---|---|---|
| montage | string | – | – |
| name | string | – | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
mne_set_reference 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').
| Name | Type | Req | Description |
|---|---|---|---|
| name | string | – | – |
| ref_channels | string | – | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
mne_tfr_morlet 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.
| Name | Type | Req | Description |
|---|---|---|---|
| epochs_name | string | – | – |
| fmax | number | – | – |
| fmin | number | – | – |
| n_freqs | integer | – | – |
| tfr_name | string | – | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
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 64 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 21 September 2026. 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 21 September 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.