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.
0 this week 50 Trust /100

Last scanned (6 hours ago)

Scores higher than 81% of MCPB 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 Security0
  • No malware scan is available for this kind of package: the supply-chain vendors we use do not cover it. This is a permanent gap in our coverage, not a finding about the package.Unverified
  • Known CVEs could not be checked: we found no dependency list to check in this bundle: either it runs a compiled binary, whose bundled manifests we do not read, or none of the package.json, requirements.txt, pyproject.toml or uv.lock files it ships for its runtime declares a dependency we can read (a requirements.txt that only points at a setup.py project, a local path, or a nested requirements file we cannot follow counts as none).Unverified
  • Install-script risk not yet assessed.Unverified
  • Dependency health could not be checked: we found no dependency list to check in this bundle: either it runs a compiled binary, whose bundled manifests we do not read, or none of the package.json, requirements.txt, pyproject.toml or uv.lock files it ships for its runtime declares a dependency we can read (a requirements.txt that only points at a setup.py project, a local path, or a nested requirements file we cannot follow counts as none).Unverified
Provenance & Transparency100
  • Source repository is publicly reachable at the declared URL. View diagnostics → Pass
  • Cryptographically verified build provenance (signed, bound to openreadout/openreadout). View diagnostics → Pass
  • Clear OSI-approved license (MIT OR Apache-2.0).Pass
  • Actively maintained (last published 18 days ago).Pass
  • Publishes a security disclosure policy (SECURITY.md).Pass
Schema Quality & AI Usability69
  • 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).Pass
  • AI-judged instruction clarity (good).Pass
  • Context-footprint check failed: tool/resource definitions use about 15505 tokens (~534/item across 29 items; 28 tools + 1 resources), over budget; trim descriptions and params. See how to fix → Fail
  • Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management0
  • Stability not yet verified: two runs of the same published version returned different tool surfaces, so we cannot tell a change in the package from a difference in our own sandbox run.Unverified
Tool Coverage100
  • 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
  • 100% of tool parameters carry a description.Pass
  • Structured output schemas are declared (96% of tools); any adoption earns full credit.Pass
Tool Safety100
  • No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
  • We read all 28 captured tool definition(s), and no name or description among them implies an irreversible operation.Pass
  • An AI judge read all 30 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

Unverified: 2 categories

Categories scored 0 because we could not verify them: a data source with nothing on this package, evidence we could not reach, or a check we could not run. We only credit what we can confirm.

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.

  • 18 Oct 26 −1
    • Schema quality: 451 → 534 ▼ functional
  • 13 Oct 26 0
    • Stability: Stability not yet verified: two runs of the same published version returned different tool surfaces, so we cannot tell a change in the package from a difference in our own sandbox run. security
    • Schema quality: 7826 → 14912 ▼ functional
    • Schema quality: excellent → good functional
  • 3 Oct 26 51

    First indexed and scored.

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 mcpb/https://github.com/openreadout/openreadout/releases/download/v0.4.0/openreadout-mcp-x86_64-unknown-linux-musl.mcpb

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 mcpb
Reason Verified
Discovered via GitHub artifact attestations
Source repo openreadout/openreadout
Certificate issuer https://token.actions.githubusercontent.com
Certificate SAN https://github.com/openreadout/openreadout/.github/workflows/release.yml@refs/tags/v0.4.0
Rekor log index 3304451478
Predicate type SLSA build provenance https://slsa.dev/provenance/v1
Subject digest sha256:dcab570888b3f7ca9c2455cbd34efed4ad6adac6a0577caf7aca90eb79b00434

Background: How many MCP packages publish verified provenance →

MCP tools · 28 exposed · ~15,215 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
openreadout_spikes ~217

Extracellular spike detection per channel: band-pass, threshold at K x MAD noise, spike counts, rates and times.

NameTypeReqDescription
band_hzarray–Band-pass `[low, high]` Hz (default [300, 6000]).
channelsarray–Channels (default all).
filestringyesPath to the file or data-set directory.
max_secondsnumber–Only the first N seconds of each sweep.
max_timesinteger–Spike times per channel returned (default 200).
signstring–`neg` (default), `pos` or `both`.
strictboolean–Refuse values the file's assurance does not validate (exit_code 6). Default: the server's.
sweepsarray–Sweeps/segments (default all).
thresholdnumber–Threshold in MAD noise units (default 5).
traceinteger–Trace index (default 0; pick the broadband stream).
NameTypeReqDescription
channelsarrayyesOne entry per channel.
formatstringyesFormat id.
notesarray–Remarks.
pathstringyesInput path.
sample_rate_hznumber|nullyesSampling rate, Hz.
settings–yesSettings used (the high edge after clamping to 0.45 × the sampling rate).
spike_count_totalintegeryesSpikes on all channels.
sweepsarrayyesSweeps analysed.
traceintegeryesTrace analysed.

No examples provided.

openreadout_stats ~908

Pixel statistics per channel and image: count, min, max, mean, std, percentiles p1–p99, zero and saturated fractions (at the detector's 2^bits−1 when recorded), histogram; RGB images also per component. per=plane adds every plane; per=well or field gives rows per well of a screening plate. mip='z' measures the maximum-intensity projection; whole slides: a coarser level and/or a region. Measurements on one plane: line (intensity profile, FWHM), polygon (statistics inside), objects (count nuclei, cells or spots; preview marks=objects shows them), lanes (gel and blot lanes, band volumes and sizes; preview marks=lanes).

NameTypeReqDescription
binsinteger–Histogram bins (0 = none). Default 32, at most 65536.
filestringyesAbsolute or working-directory-relative path to the instrument file, or a plate's index file or folder (Harmony `Index.idx.xml`, ImageXpress `.HTD`, CellVoyager `MeasurementData.mlf`, OME-Zarr plate).
imageinteger–Only this image index.
lanes––Lanes and bands of a gel or blot in `region` or the whole plane: each lane's total and each band's row and background-subtracted volume (with `ladder`, its size). `{}` finds the lanes; preview marks=…
levelinteger–Pyramid level: 0 = full resolution (default).
linearray–Intensity profile along the line `[x0, y0, x1, y1]` (pixels of `level`, as on the preview rulers): values per channel, peak position and FWHM in px and µm.
line_widthinteger–Profile width in pixels, averaged across the line. Default 1.
mipstring–Maximum-intensity projection first: `z` (per image, channel and time point: the largest value of each pixel over the selected z planes) or `t`; the statistics are of the projections. `z` = Along z: o…
objects––Count objects in `region`, `polygon` or the whole plane: count, density, sizes, centroids, each object's mean in every channel and how many are positive per channel. `{}` counts nuclei with settings…
perstring–Rows. `channel` = channel and image aggregates (default); `plane` = also one entry per plane (image, c, z, t); `well` = a screening plate (pass the plate folder or index, never one TIFF): one row per…
polygonarray–Statistics inside this polygon `[[x, y], ...]` (pixels of `level`): area, mean, std, median, sum per channel.
region––Only this rectangle of each plane, `{x, y, width, height}` in the pixel coordinates of `level` (e.g. the 512 x 512 centre of a whole-slide image).
scalestring–Histogram spacing: `linear` (default) or `log`. `linear` = Equal-width bins from `min` to `max` (integer data: to `max + 1`, so each bin holds whole values); `log` = Geometrically spaced bins from th…
selectarray–Plane selection strings such as `c=0`, `z=2-5`, `t=0,3`. The aggregates cover exactly the selection.
strictboolean–Refuse values the file's assurance does not validate (exit_code 6). Default: the server's.
wellsarray–per=well|field: only these wells (`C05`, `c5`).

Structured output declared, but exposes no named fields.

No examples provided.

openreadout_summarize ~251

Group statistics of a table written by an earlier openreadout_batch output (or any CSV, TSV, JSON Lines, JSON or Parquet table): n, mean, sd, sem, median, min, max and CV % per group of `by`, optionally averaging replicates first and testing every group against a control.

NameTypeReqDescription
byarrayyesGroup by these columns.
controlstring–The control group (a value of the first `by` column).
exact_byboolean–Group by exactly `by`.
outputstring–Write the summary to this file.
overwriteboolean–Replace an existing output file.
replicatestring–Average rows within each replicate first.
tablestringyesA table file written by an openreadout_batch `output` (or any CSV, TSV, JSON Lines, JSON or Parquet table).
teststring–`welch` or `mann-whitney` against `control`.
valuesarray–Value columns (default: the measure's main values).
wherearray–Row filters `COLUMN=VALUE` / `COLUMN!=VALUE`.
NameTypeReqDescription
inputstringyesThe table summarized.
output––Where it was written.
summary–yesThe summary.

No examples provided.

openreadout_table ~667

Rows of a table {columns, labels, rows, total_rows, truncated}: FCS events ($PnN columns), plate reads (well, row, col, read, wavelength_nm, time_s, value), event, spike or peak tables (including the vendor's own integration results). Values are raw; FCS can be compensated, transformed and given 0/1 population columns from a workspace or Gating-ML file. filter with count=true counts the events meeting conditions.

NameTypeReqDescription
compensatestring–FCS only: compensate the values: `auto` (the gating file's matrix when one is given, else the file's $SPILLOVER/$SPILL/SPILL), `fcs` or `gating`. Values become FCS scale values first ($PnE, $PnG, $TI…
countboolean–Return only the count (`filter.matched_rows`, `total_rows`, `percent`), no rows.
filestringyesPath to the file.
filterarray–Row conditions `COLUMN OP NUMBER` (OP: > >= < <= == !=; COLUMN: $PnN, $PnS or `gate:<path>`), all of which must hold, e.g. `["FITC-A > 1000"]`. Tested on the values returned (after compensate/transfo…
first_rowinteger–Zero-based first row. Default 0.
gatingmlstring–FCS only: Gating-ML 2.0 file (same uses as workspace).
max_rowsinteger–Maximum rows to return. Default 100 (fewer for wide tables: about 5000 values), capped at 10000.
parametersarray–FCS only: parameters ($PnN) to transform; default every fluorescence parameter.
populationsarray–FCS only: populations (paths like `/Lymphocytes/Singlets` or unique names) whose 0/1 membership is appended as `gate:<path>` columns.
samplestring–Workspace sample name or id (default: matched by file name or $FIL).
strictboolean–Refuse values the file's assurance does not validate (exit_code 6). Default: the server's.
tableinteger–Table index (FCS data set or plate read; see openreadout_info → tables[]). Default 0.
transformstring–FCS only: transform after compensation: `logicle`, `arcsinh`, `hyperlog`, `log`, `linear`, `biex`, `flowjo-log`, `arcsinh-cofactor`, with parameters as `NAME:K=V,…` (`logicle:T=262144,W=0.5,M=4.5,A=0…
workspacestring–FCS only: FlowJo workspace (.wsp) for compensate=gating, transform=workspace and populations.
NameTypeReqDescription
columnsarrayyesColumn names (FCS `$PnN`).
filter––Present with `--where`/`--count`: the row conditions and how many rows of the whole table meet them. `rows`, `first_row` and `truncated` then page through the matching rows.
first_rowintegeryesZero-based index of the first row returned.
formatstringyesFormat id of the input file.
labelsarrayyesColumn labels (FCS `$PnS`), `null` where absent.
pathstringyesThe input file.
processing––Present when the values were processed (FCS scale values, compensation, transforms, population membership columns); absent for raw values.
rowsarrayyesRow-major values; `rows[r][c]`. Non-finite values serialize as `null`. A text column holds codes here; `texts` has its text.
tableintegeryesTable index (see `info` → `tables[]`).
textsobject–Text columns (`info` → `tables[].columns[].extra.categories`) by column name: the text of each returned row, so `texts[name][r]` is what `rows[r][c]` codes. Absent when the table has no text column.
total_rowsintegeryesRows in the whole table.
truncatedbooleanyesTrue when more rows follow the returned slice.

No examples provided.

openreadout_trace ~419

One window of one sweep of a sampled signal or 1-D spectrum in physical units: electrophysiology sweeps, chromatography detector traces, ÄKTA curves, ITC thermograms, SPR sensorgrams, NMR FIDs and spectra (process=true turns an FID into a spectrum), IR/Raman/UV-Vis/CD spectra (each spectrum of a map is a sweep), qPCR curves, EPR, XRD, electrochemistry, thermal analysis. Per channel: min, max, mean, std and argmax_axis_value (the maximum's position on the axis: retention time, ppm, cm⁻¹, °2θ) over the window, plus the first max_samples values.

NameTypeReqDescription
channelsarray–Channel indices to return. Default: all channels.
countinteger–Window length in samples (statistics cover the whole window). Default: to the end of the sweep.
filestringyesPath to the file.
first_sampleinteger–First sample of the window, zero-based within the sweep. Default 0.
max_samplesinteger–Samples returned per channel. Default 200, capped at 10000.
processboolean–NMR: return FID traces as spectra processed by OpenReadout (group delay, apodization, zero filling, FT, stored or automatic phase, baseline, ppm axis).
strictboolean–Refuse values the file's assurance does not validate (exit_code 6). Default: the server's.
sweepinteger–Sweep (episode or segment) index. Default 0.
traceinteger–Trace index (see openreadout_info → traces[]). Default 0.
x_rangearray–Window on the trace's own axis instead of first_sample/count, `[a, b]` either order: cm⁻¹, nm, ppm, a chromatogram's retention time in its axis unit; seconds for signals without an axis.
NameTypeReqDescription
axis––The trace's abscissa (`info` → `traces[].extra.axis`: `{quantity, unit, first, step, …}`), e.g. the ppm axis of an NMR spectrum or a chromatogram's retention time in minutes; sample `i` of the sweep…
channelsarrayyesOne entry per requested channel.
first_sampleintegeryesFirst sample of the window (zero-based, within the sweep).
formatstringyesFormat id of the input file.
pathstringyesThe input file.
sample_countintegeryesSamples in the window (statistics cover all of them).
sample_rate_hznumber|nullyesSamples per second.
start_snumber|nullyesTime of the first window sample in seconds. Single-sweep traces use the trace's own clock: `info.traces[].start_s + first_sample / sample_rate_hz` (a chromatogram's retention time, negative when acqu…
sweepintegeryesSweep index.
sweep_countintegeryesSweeps in the trace.
sweep_sample_countintegeryesSamples in this sweep.
sweep_start_snumber|null–Time of the sweep's first sample on the recording clock, seconds, when the file records it (`info.traces[].start_s` for a single sweep, `extra.sweep_starts_s[sweep]` for multi-sweep traces).
traceintegeryesTrace index (see `info` → `traces[]`).
truncatedbooleanyesTrue when fewer samples are returned than the window holds.
x_rangearray|null–The axis window asked for (`x_range`, low to high): axis units, or seconds for signals without an axis. `first_sample`/`sample_count` are the samples inside it.

No examples provided.

openreadout_watch ~296

Follow directories an instrument writes to: each call looks once and returns events since cursor (dataset_new, plane_new, scan_new, frame_new, dataset_complete, dataset_stalled, qc with qc=true: saturation, focus drift, dropped frames, TIC drop, error). Poll with the returned cursor; files are never locked.

NameTypeReqDescription
cursorinteger–Return events with a sequence number greater than this (the `cursor` of the previous call); 0 or absent on the first call.
dirsarrayyesDirectories (or files) to watch. The same list (in any order) continues the same watcher across calls.
follow_symlinksboolean–First call only: walk into directories behind symbolic links too (links to files are always followed).
limitinteger–Most events returned (default 200, max 5000); call again with the new cursor for more.
qcboolean–First call only: evaluate the built-in live QC rules on each new plane or scan.
sincestring–First call only: report data sets modified since then (`10m`, `2h`, `1d`, an ISO-8601 time, or `all`). Default: the live window (5 minutes) back from now.
stall_afternumber–First call only: seconds without growth before `dataset_stalled` (default 120).
NameTypeReqDescription
cursorintegeryesPass back as `cursor` to get only newer events.
droppedbooleanyesTrue when events after the cursor were dropped (the server keeps the last 10000).
eventsarrayyesEvents after the given cursor, oldest first (the same objects `openreadout watch` prints under `data`).
morebooleanyesTrue when more events are waiting (raise `limit` or call again).
notesarray–What the watcher left out and how to include it.
trackedintegeryesData sets the watcher remembers.

No examples provided.

Install

How do I install the OpenReadout MCP server?

OpenReadout ships as an MCPB bundle, a single file you download and open in an MCP host that supports MCPB bundles, such as Claude Desktop. The host reads the launch command from the bundle's own manifest, so there is no command to copy. Before opening it, check the file's SHA-256 matches the one the MCP registry declares for it, dcab570888b3f7ca9c2455cbd34efed4ad6adac6a0577caf7aca90eb79b00434; the commands to do that are on this page. If it does not match, do not open it.

mcpb · openreadout-mcp-x86_64-unknown-linux-musl.mcpb

Download bundle

Check the download matches the SHA-256 the MCP registry declares before you open it. If it does not match, do not open the file.

SHA-256

dcab570888b3f7ca9c2455cbd34efed4ad6adac6a0577caf7aca90eb79b00434

macOS / Linux

echo "dcab570888b3f7ca9c2455cbd34efed4ad6adac6a0577caf7aca90eb79b00434  openreadout-mcp-x86_64-unknown-linux-musl.mcpb" | shasum -a 256 -c

Windows (PowerShell)

(Get-FileHash -Algorithm SHA256 .\openreadout-mcp-x86_64-unknown-linux-musl.mcpb).Hash -eq "dcab570888b3f7ca9c2455cbd34efed4ad6adac6a0577caf7aca90eb79b00434"

Run it in the folder you saved the bundle to, then open the file with an MCPB-capable host such as Claude Desktop.

Common questions

What is the OpenReadout MCP server?

OpenReadout is an MCP server listed in the public MCP registry as io.github.openreadout/openreadout. Read raw lab-instrument files offline: metadata, previews, integrity checks, open-format export. This page covers its MCPB bundle (https://github.com/openreadout/openreadout/releases/download/v0.4.0/openreadout-mcp-x86_64-unknown-linux-musl.mcpb).

Is the OpenReadout MCP server safe to use?

OpenReadout scores 50 out of 100 on VerifyMCP. 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 OpenReadout MCP server expose?

OpenReadout exposes 28 tools: openreadout_assay, openreadout_batch, openreadout_check, openreadout_chromatogram, openreadout_compare, and 23 more. Their descriptions and schemas cost roughly 15,215 tokens of context every time the server is loaded.

What licence is the OpenReadout MCP server under?

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