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.

io.github.AImplifier/neuro-mcp

PYPI · NEURO-MCP · SCANNED SEP 20

MCP for NeuroAgents assisting clinicians: MNE processing, EHR store, NeuroII visualization.

Available components

0 this week 80 Trust /100
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 setuptools.build_meta at install time, a recognised native-build step with no shell scripting around it. View diagnostics → Pass
  • 5 of 59 dependencies flagged as unhealthy. View diagnostics → Partial
Provenance & Transparency45
Schema Quality & AI Usability77
  • AI-judged instruction clarity (excellent).Pass
  • Tool/resource definitions use about 4693 tokens (~86/item across 54 items; 54 tools + 0 resources), lean.Pass
  • Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management83
  • Stability observed for 25 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage84
  • 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
  • 46% of tool parameters carry a description.Partial
  • 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 1 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation; "apply_ica" implies "remove" 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 55 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
Install

How do I install the io.github.AImplifier/neuro-mcp server?

io.github.AImplifier/neuro-mcp runs locally as a PyPI package, launched with uvx neuro-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 · neuro-mcp

# add to Claude Code
claude mcp add aimplifier-neuro-mcp -- uvx neuro-mcp
// .cursor/mcp.json
{
  "mcpServers": {
    "aimplifier-neuro-mcp": {
      "command": "uvx",
      "args": [
        "neuro-mcp"
      ]
    }
  }
}
// .vscode/mcp.json
{
  "servers": {
    "aimplifier-neuro-mcp": {
      "command": "uvx",
      "args": [
        "neuro-mcp"
      ]
    }
  }
}
# add to Codex CLI
codex mcp add aimplifier-neuro-mcp -- uvx neuro-mcp
// opencode.json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "aimplifier-neuro-mcp": {
      "type": "local",
      "command": [
        "uvx",
        "neuro-mcp"
      ],
      "enabled": true
    }
  }
}
# add to OpenClaw
openclaw mcp add aimplifier-neuro-mcp --command uvx --arg neuro-mcp
# ~/.hermes/config.yaml
mcp_servers:
  aimplifier-neuro-mcp:
    command: "uvx"
    args: ["neuro-mcp"]
// ~/.netclaw/config/netclaw.json
{
  "McpServers": {
    "aimplifier-neuro-mcp": {
      "Transport": "stdio",
      "Command": "uvx",
      "Arguments": [
        "neuro-mcp"
      ]
    }
  }
}
# add to Vellum
assistant mcp add aimplifier-neuro-mcp -t stdio -c uvx -a neuro-mcp
// mcp.json
{
  "mcpServers": {
    "aimplifier-neuro-mcp": {
      "command": "uvx",
      "args": [
        "neuro-mcp"
      ]
    }
  }
}
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.

  • 20 Sept 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 80 to 83. That category is still filling its 30-day observation window: 24 days of observed history at the previous scan, 25 at this one. The score rises as the window fills, whether or not the server changes.

  • 19 Sept 26 −3
    • Stability: pass → 0.80 functional
  • 18 Sept 26 0
    • Stability: 0.97 → pass security
  • 17 Sept 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 93 to 97. That category is still filling its 30-day observation window: 28 days of observed history at the previous scan, 29 at this one. The score rises as the window fills, whether or not the server changes.

  • 15 Sept 26 +16
    • Malware scan: unverified → pass security
  • 14 Sept 26 −15
    • Malware scan: pass → unverified security
  • 13 Sept 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 80 to 83. That category is still filling its 30-day observation window: 24 days of observed history at the previous scan, 25 at this one. The score rises as the window fills, whether or not the server changes.

  • 11 Sept 26 −3
    • Stability: pass → 0.77 functional
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 20 Sept 2026 · Analysed pypi/neuro-mcp@0.1.3

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 setuptools.build_meta

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

Dependencies 59 packages
Packages resolved 59
Stale 4
No linked repository 1
Tree resolution Complete

Background: SBOMs and build attestations, explained →

MCP tools · 54 exposed · ~4,417 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
add_annotation ~75

Add a clinician/algorithm annotation to a recording (version 1).

NameTypeReqDescription
actorstringyes
channels
durationnumber
labelstringyes
onsetnumberyes
payload
recording_idintegeryes
sourcestring

Structured output declared, but exposes no named fields.

No examples provided.

add_ehr_record ~124

Add an EHR record (a FHIR resource such as Condition or Observation). Creates version 1 of a new logical record. Use amend_ehr_record to change it.

NameTypeReqDescription
actorstringyesClinician/author id (recorded, audited).
fhirobjectyesThe FHIR resource body as a dict.
noteOptional context for the entry.
resource_typestringyesFHIR resourceType, e.g. 'Condition', 'Observation'.
subject_external_idstringyesThe subject this record belongs to.

Structured output declared, but exposes no named fields.

No examples provided.

amend_ehr_record ~128

Amend an EHR record: create a new audited version with an updated FHIR body. The prior version is retained (status 'amended') and remains in the history; this is how a clinician corrects or updates a record without destroying the original. Returns the new current version.

NameTypeReqDescription
actorstringyesClinician making the amendment (audited).
fhirobjectyesThe updated FHIR resource body.
logical_idstringyesThe logical id of the record to amend (stable across versions).
noteReason for the amendment (recommended).

Structured output declared, but exposes no named fields.

No examples provided.

apply_ica ~40

Remove the listed ICA components from the recording, in place. Requires run_ica first.

NameTypeReqDescription
exclude
session_idstring

Structured output declared, but exposes no named fields.

No examples provided.

apply_inverse ~154

Estimate distributed cortical source activity for the ERP. Averages the epochs (optionally for one condition) and applies the inverse operator, then reports the peak-activation vertex, hemisphere, and latency.

NameTypeReqDescription
conditionEvent-id name to localize (None = all epochs averaged).
methodstring'MNE', 'dSPM', 'sLORETA', or 'eLORETA'.
save_stcIf given, save the source estimate to this path stem (.stc/.h5).
session_idstring
snrnumberAssumed signal-to-noise ratio (sets regularization lambda^2 = 1/snr^2).

Structured output declared, but exposes no named fields.

No examples provided.

apply_lcmv_beamformer ~116

Localize sources with an LCMV beamformer (an alternative to minimum-norm). Uses the epoch data covariance for the spatial filter and the noise covariance for whitening. Requires compute_forward and compute_noise_covariance.

NameTypeReqDescription
conditionEvent-id name to localize (None = all epochs).
regnumberDiagonal loading (regularization) of the data covariance.
save_stcOptional path stem to save the source estimate.
session_idstring

Structured output declared, but exposes no named fields.

No examples provided.

compute_erp ~64

Average epochs into an ERP and report peak latency/amplitude.

NameTypeReqDescription
conditionEvent-id name to average (None = all epochs together).
pick_channelChannel to report peak for (None = the global-field-power peak).
session_idstring

Structured output declared, but exposes no named fields.

No examples provided.

compute_forward ~77

Compute the forward solution (leadfield) mapping cortical sources to sensors. Requires a loaded recording with an electrode montage (call set_montage) and a template head model (call fetch_template_head).

NameTypeReqDescription
mindistnumberMinimum distance (mm) of sources from the inner skull surface.
session_idstring

Structured output declared, but exposes no named fields.

No examples provided.

compute_noise_covariance ~107

Estimate the sensor noise covariance from epoch baseline periods. Uses the pre-stimulus interval (up to ``tmax``, default 0 s = event onset) of the epochs as the noise estimate. Requires epoch_neuro first.

NameTypeReqDescription
methodstring'empirical', 'shrunk', or 'auto' (regularized estimators).
session_idstring
tmaxEnd of the baseline window used for noise, in seconds.

Structured output declared, but exposes no named fields.

No examples provided.

compute_psd ~92

Compute the power spectral density and summarize band power. Returns absolute and relative power for each canonical band (delta, theta, alpha, beta, gamma), averaged across channels, plus per-channel band power.

NameTypeReqDescription
fmaxnumber
fminnumber
session_idstring
use_epochsbooleanCompute on epochs (averaged) instead of continuous raw.

Structured output declared, but exposes no named fields.

No examples provided.

detect_artifact_components ~101

Automatically score ICA components against EOG/ECG channels to find likely blink/heartbeat artifacts. Requires run_ica first and, ideally, EOG/ECG channels present in the data.

NameTypeReqDescription
ecg_chName of an ECG channel (auto-detected if None and any exist).
eog_chName of an EOG channel (auto-detected if None and any exist).
session_idstring

Structured output declared, but exposes no named fields.

No examples provided.

detect_bad_channels ~120

Flag likely-bad channels by robust variance outlier detection. Computes each channel's variance, converts to a robust z-score (median / MAD), and flags channels beyond ``z_threshold``. This is a fast heuristic, not a substitute for RANSAC/autoreject, but works without extra deps.

NameTypeReqDescription
markbooleanIf True, add the flagged channels to raw.info['bads'].
session_idstringSession key.
z_thresholdnumberRobust z-score cutoff; higher = more permissive.

Structured output declared, but exposes no named fields.

No examples provided.

epoch_neuro ~172

Segment the recording into epochs around events. Call find_events first (or the tool will attempt it). Baseline correction uses (baseline_start, baseline_end); pass baseline_start=None for "from the start of the epoch". reject_uv drops epochs whose EEG peak-to-peak exceeds that many microvolts (None to disable).

NameTypeReqDescription
baseline_endBaseline window end (s), or None for event onset.
baseline_startBaseline window start (s), or None for epoch start.
reject_uvPeak-to-peak EEG rejection threshold in microvolts.
session_idstring
tmaxnumberEpoch end relative to event onset, in seconds.
tminnumberEpoch start relative to event onset, in seconds.

Structured output declared, but exposes no named fields.

No examples provided.

export_data ~70

Save processed data to disk.

NameTypeReqDescription
out_pathstringDestination path. For raw use a *-raw.fif or .fif name; for epochs use *-epo.fif.
session_idstring
whatstring'raw' or 'epochs'.

Structured output declared, but exposes no named fields.

No examples provided.

extract_label_timecourses ~145

Extract ROI (atlas-region) time courses from the current source estimate. Reads an anatomical parcellation on fsaverage and summarizes source activity per region, ranking regions by peak absolute amplitude. Requires a source estimate (apply_inverse or apply_lcmv_beamformer first).

NameTypeReqDescription
modestringHow to collapse sources within a label ('mean_flip', 'mean', 'pca_flip').
parcellationstring'aparc' (Desikan-Killiany, 68 regions) or 'aparc.a2009s'.
session_idstring
top_nintegerHow many strongest regions to return.

Structured output declared, but exposes no named fields.

No examples provided.

fetch_template_head ~109

Download and register the fsaverage template head model for source imaging. Sets up the template subject (BEM, source space, and MRI-head transform) so a forward model can be built without a subject-specific MRI. The first call downloads the fsaverage dataset (cached afterwards).

NameTypeReqDescription
session_idstringSession key. A recording must already be loaded.
spacingstringSource-space resolution: 'ico5' (~20k sources, standard) or 'oct6'.

Structured output declared, but exposes no named fields.

No examples provided.

filter_neuro ~100

Apply a band-pass (and optional notch) filter to the loaded recording, in place.

NameTypeReqDescription
h_freqLow-pass edge in Hz (None to skip low-pass).
l_freqHigh-pass edge in Hz (None to skip high-pass).
notch_freqsFrequencies to notch out, e.g. [50] or [60, 120] for line noise.
session_idstringSession key.

Structured output declared, but exposes no named fields.

No examples provided.

find_events ~60

Extract events from a stimulus/trigger channel or from annotations. Tries stim-channel events first, then falls back to annotation-derived events. Stores the result for epoch_neuro to use.

NameTypeReqDescription
session_idstring
stim_channel

Structured output declared, but exposes no named fields.

No examples provided.

get_audit_log ~40

Return recent audit-log entries, optionally filtered by target.

NameTypeReqDescription
limitinteger
target_id
target_table

Structured output declared, but exposes no named fields.

No examples provided.

get_ehr_history ~34

Return every version of an EHR record, oldest first (full audit trail).

NameTypeReqDescription
logical_idstringyes

Structured output declared, but exposes no named fields.

No examples provided.

get_subject ~34

Return a subject and their *current* (non-voided) EHR records.

NameTypeReqDescription
external_idstringyes

Structured output declared, but exposes no named fields.

No examples provided.

import_recording ~177

Import a recording into the BIDS store and register it in the database. Loads the file with MNE, writes it into the BIDS tree under the subject, and inserts a recordings row. Optionally loads it into an in-memory processing session so you can immediately run filter_neuro/epoch_neuro/etc.

NameTypeReqDescription
dataset_nameOptional dataset to group under (created if missing).
file_pathstringyesPath to the recording (EDF/FIF/SET/BDF/BrainVision/…).
load_into_sessionbooleanIf True, populate the processing session for analysis.
session_idstringProcessing session id to load into.
subject_external_idstringyesSubject to attach the recording to (created if missing).
taskstringBIDS task label.

Structured output declared, but exposes no named fields.

No examples provided.

interpolate_bads ~38

Interpolate channels currently marked bad using neighboring electrodes. Requires a montage (call set_montage first).

NameTypeReqDescription
session_idstring

Structured output declared, but exposes no named fields.

No examples provided.

list_annotations ~38

List the *current* version of each annotation on a recording.

NameTypeReqDescription
include_voidedboolean
recording_idintegeryes

Structured output declared, but exposes no named fields.

No examples provided.

list_recordings ~32

List recordings, optionally filtered by subject or dataset.

NameTypeReqDescription
dataset_name
subject_external_id

Structured output declared, but exposes no named fields.

No examples provided.

list_sessions ~17

List the ids of all active analysis sessions.

Input schema present but exposes no named parameters.

Structured output declared, but exposes no named fields.

No examples provided.

load_neuro ~141

Load an EEG recording from disk and return its metadata. Supports the formats MNE auto-detects by extension: .fif, .edf, .bdf, .gdf, .set (EEGLAB), .vhdr (BrainVision), .cnt, .egi/.mff, and more. Creates (or resets) the given session and stores the loaded recording in it.

NameTypeReqDescription
file_pathstringyesAbsolute path to the recording file.
preloadbooleanLoad sample data into memory (required for most processing).
session_idstringSession key to store state under; reuse it in later calls.

Structured output declared, but exposes no named fields.

No examples provided.

make_inverse_operator ~117

Assemble the inverse operator from the forward solution and noise covariance. Requires compute_forward and compute_noise_covariance. The operator is reused by apply_inverse for any distributed method (MNE/dSPM/sLORETA/eLORETA).

NameTypeReqDescription
depthnumberDepth weighting exponent (0.8 typical) to counter the bias toward superficial sources.
loosenumberLoose-orientation constraint in [0, 1] (0.2 typical for surface src).
session_idstring

Structured output declared, but exposes no named fields.

No examples provided.

neuroii_create_viz_session ~55

Create a shareable neuroii viz/annotation session for a recording. Returns a not_configured contract if NEUROII_API_URL is unset.

NameTypeReqDescription
layout
recording_idintegeryes

Structured output declared, but exposes no named fields.

No examples provided.

neuroii_pull_annotations ~70

Pull clinician annotations from neuroii into the database (source='neuroii'). Each pulled annotation is stored as a new audited annotation. Returns a not_configured contract if NEUROII_API_URL is unset.

NameTypeReqDescription
actorstring
recording_idintegeryes

Structured output declared, but exposes no named fields.

No examples provided.

neuroii_push_recording ~50

Push a recording (and its derivatives) to neuroii for clinician viewing. Returns a not_configured contract if NEUROII_API_URL is unset.

NameTypeReqDescription
recording_idintegeryes

Structured output declared, but exposes no named fields.

No examples provided.

plot_erp ~46

Render the ERP (evoked average) as a PNG image (base64 data URI).

NameTypeReqDescription
condition
pick_channel
session_idstring

Structured output declared, but exposes no named fields.

No examples provided.

plot_ica_components ~42

Render ICA component scalp topographies as a PNG image (base64 data URI). Requires run_ica and a montage.

NameTypeReqDescription
session_idstring

Structured output declared, but exposes no named fields.

No examples provided.

plot_psd ~49

Render the power spectral density plot as a PNG image (base64 data URI).

NameTypeReqDescription
fmaxnumber
fminnumber
session_idstring

Structured output declared, but exposes no named fields.

No examples provided.

plot_raw ~55

Render a segment of the raw traces as a PNG image (base64 data URI).

NameTypeReqDescription
durationnumber
n_channelsinteger
session_idstring
startnumber

Structured output declared, but exposes no named fields.

No examples provided.

plot_source_brain ~97

Render the source estimate on a 3D cortical surface at its peak time. Requires an offscreen 3D backend (pyvista + a software/GL renderer). If that is unavailable in the environment, returns a clear message instead of failing — use plot_source_timecourses for a dependency-free 2D summary.

NameTypeReqDescription
hemistring
session_idstring
time_ms

Structured output declared, but exposes no named fields.

No examples provided.

plot_source_timecourses ~81

Plot the time courses of the strongest ROIs as a PNG (base64 data URI). A 2D matplotlib summary of source activity that works headlessly (no 3D brain rendering required). Requires a source estimate.

NameTypeReqDescription
parcellationstring
session_idstring
top_ninteger

Structured output declared, but exposes no named fields.

No examples provided.

plot_topomap ~51

Render a scalp topographic map of band power (base64 PNG data URI). Requires a montage (call set_montage first).

NameTypeReqDescription
bandstring
session_idstring

Structured output declared, but exposes no named fields.

No examples provided.

query_datasets ~17

List all registered datasets with recording counts.

Input schema present but exposes no named parameters.

Structured output declared, but exposes no named fields.

No examples provided.

register_dataset ~35

Register a dataset (a named collection of recordings).

NameTypeReqDescription
metadata
namestringyes
source

Structured output declared, but exposes no named fields.

No examples provided.

register_subject ~84

Register a study/patient subject (FHIR Patient-shaped demographics).

NameTypeReqDescription
actorstringWho is performing this action (recorded for audit).
demographicsOptional dict (e.g. {"gender": "female", "birthDate": "1990-01-01"}).
external_idstringyesYour stable identifier for the subject (de-identified).

Structured output declared, but exposes no named fields.

No examples provided.

resample_neuro ~41

Resample the recording to a new sampling frequency (Hz), in place.

NameTypeReqDescription
session_idstring
sfreqnumber

Structured output declared, but exposes no named fields.

No examples provided.

reset_session ~25

Discard a session and free its memory.

NameTypeReqDescription
session_idstring

Structured output declared, but exposes no named fields.

No examples provided.

run_ica ~127

Fit ICA on the loaded recording for artifact inspection/removal. Fitting on data high-passed at ~1 Hz is recommended. Returns per-component summaries; use apply_ica to zero out the components you identify as artifacts (blinks, heartbeat, muscle).

NameTypeReqDescription
methodstring'fastica', 'infomax', or 'picard'.
n_componentsNumber of components, or a float in (0,1] as explained variance.
random_stateintegerSeed for reproducibility.
session_idstring

Structured output declared, but exposes no named fields.

No examples provided.

session_info ~31

Return the current state of a session: what's loaded and the step history.

NameTypeReqDescription
session_idstring

Structured output declared, but exposes no named fields.

No examples provided.

set_montage ~80

Assign a standard electrode montage so channels get 3D positions. Needed for topographic plots and some source/interpolation steps. Common choices: 'standard_1020', 'standard_1005', 'biosemi64', 'GSN-HydroCel-128'.

NameTypeReqDescription
montagestring
session_idstring

Structured output declared, but exposes no named fields.

No examples provided.

set_reference ~60

Re-reference the EEG. Use 'average' for common average reference, or a list of channel names (e.g. ['M1', 'M2'] for linked mastoids).

NameTypeReqDescription
ref_channels
session_idstring

Structured output declared, but exposes no named fields.

No examples provided.

time_frequency ~107

Morlet-wavelet time-frequency decomposition of epochs. Returns the induced power averaged over epochs, summarized per frequency band and time. Requires epoch_neuro first.

NameTypeReqDescription
conditionEvent-id name to restrict to.
fmaxnumber
fminnumber
n_freqsintegerNumber of log-spaced frequencies.
pick_channelRestrict to one channel (recommended for a compact summary).
session_idstring

Structured output declared, but exposes no named fields.

No examples provided.

update_annotation ~66

Edit an annotation by creating a new audited version (original retained).

NameTypeReqDescription
actorstringyes
channels
duration
label
logical_idstringyes
note
onset
payload

Structured output declared, but exposes no named fields.

No examples provided.

visualize_averaging ~115

Render the EvokedView averaged-ERP viewer as interactive HTML. Left: the averaged ERP as stacked channels with a green time cursor. Right: the scalp topomap at the cursor time. A time slider scrubs both, and a sidebar shows nave / peak / tmin / tmax. Requires epochs (epoch_neuro) with a montage (set_montage).

NameTypeReqDescription
condition
n_framesinteger
out_path
session_idstring

Structured output declared, but exposes no named fields.

No examples provided.

Common questions

What is the io.github.AImplifier/neuro-mcp server?

io.github.AImplifier/neuro-mcp is listed in the public MCP registry as io.github.AImplifier/neuro-mcp. MCP for NeuroAgents assisting clinicians: MNE processing, EHR store, NeuroII visualization. This page covers its PyPI package (neuro-mcp).

Is the io.github.AImplifier/neuro-mcp server safe to use?

io.github.AImplifier/neuro-mcp scores 80 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 20 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 io.github.AImplifier/neuro-mcp server expose?

io.github.AImplifier/neuro-mcp exposes 54 tools: load_neuro, session_info, list_sessions, reset_session, filter_neuro, and 49 more. Their descriptions and schemas cost roughly 4,417 tokens of context every time the server is loaded.

Is the io.github.AImplifier/neuro-mcp server still maintained?

io.github.AImplifier/neuro-mcp is still listed as active in the MCP registry. We last reached this channel on 20 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 io.github.AImplifier/neuro-mcp server under?

io.github.AImplifier/neuro-mcp declares the BSD-3-Clause licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.