openreadout
OfficialOpenReadout MCP server lets an agent inspect, validate, convert, visualize and analyze raw lab-instrument files across microscopy, mass spec, flow cytometry, plates/qPCR, NMR, electrophysiology and more, offline and without vendor software.
Inspect file metadata, contents, tables, traces, spectra, images, structure and embedded attachments; ask plain-language questions about a file.
Check files for truncation/corruption, see validation/assurance status, and audit storage health of indexed folders.
Export/convert to open formats (OME-TIFF/Zarr, mzML, CSV/Parquet/Arrow, NWB, JCAMP-DX, ASM, RDML, NIfTI, MRC, FASTQ) and extract attachments.
Preview images, plates, traces, spectra and chromatograms; draw annotated plots and multi-panel figures.
Analyze pixels/ROIs/objects/gels, plate-reader assays (wells, curves, dose-response, kinetics, growth, QC), qPCR, flow gating, MS scans/spectra/chromatograms/peaks, NMR peaks/integrals, patch-clamp features and spikes.
Read tables and traces, summarize groups with statistics/tests, batch-measure many files, join sample sheets/plate maps, index/search/link datasets, compare files, and watch live acquisitions with QC events.
Reads Nikon ND2 microscopy files, extracting images, metadata, and allowing inspection, preview, integrity checks, and conversion to open formats such as OME-TIFF and OME-Zarr.
OpenReadout
OpenReadout lets AI agents read and analyze raw files from lab instruments like microscopes, mass specs, flow cytometers, plate readers and NMR. It reads 120+ formats without vendor software, and runs as an MCP server, a CLI, or a Python or R package.
Gallery
Related MCP server: MCP_Documents
Get Started
Install it, then connect it to your agent:
brew install openreadout/tap/openreadout # other ways under Installation below
openreadout mcp --install claude-desktop # or claude, codex, cursor, vscode, geminiThen ask your agent about a file, like "What's in cells.czi?" In Claude Code you can install it as a plugin instead (see AI Integration).
Or try the browser demo with no install. Your files never leave your computer.
With an Agent
Claude finds the cerebellum in a 3.7 GB slide scan and labels its layers.
https://github.com/user-attachments/assets/7ee0f9fe-e6e0-4378-a46d-5cdc04d57151
Claude checks a gene knockout with files from five instruments.
https://github.com/user-attachments/assets/658d300b-dc9d-4164-af84-bb48261fd33f
What It Does
Inspect images, channels, traces, spectra, tables, and metadata, in plain text or structured JSON
Check files for truncation, missing planes, and damaged structure, with exit code 4 when a file is corrupt
Export to OME-TIFF, OME-Zarr, mzML, NWB, CSV, Parquet, Arrow, JCAMP-DX, Allotrope ASM, and RDML, reading every export back to verify it
Preview image planes, traces, spectra, and plate heat maps as PNG
Analyze chromatographic peaks, plate assays (IC50, standard curves), qPCR (Cq, ΔΔCq), NMR peaks, patch-clamp features, spikes, and flow-cytometry gates, with documented methods
Batch over whole directories, index lab shares, and watch running acquisitions
On the Command Line
# Install (macOS / Linux; other ways under Installation)
curl -fsSL https://raw.githubusercontent.com/openreadout/openreadout/main/scripts/install.sh | sh
# What is in the file?
openreadout info cells.lif
# → format: Leica LIF (lif) v2 size: 16.0 MiB images: 1 planes: 2
# → [0] PEI_laminin_35k 2048x2048 z=1 c=2 t=1 uint16 px=0.3250 µm
# → objective: HC PL FLUOTAR L 20x/0.40 DRY
# Is it complete?
openreadout check partial-copy.lif
# → error truncated block chain runs past end of file
# → error missing_planes geometry needs 16777216 bytes but only 8969789 are stored
# Integrate the peaks of a chromatogram
openreadout analyze peaks gc-run.ch --min-height 1
# → 4 peaks, area in pA·min
# → 1 4.852 min area 0.2779 25.08 %
# → ...
# Structured JSON for scripts and agents
openreadout info cells.lif --json{
"ok": true,
"schema_version": "2",
"data": {
"format": { "id": "lif", "name": "Leica LIF", "vendor": "Leica Microsystems" },
"images": [
{
"size_x": 2048, "size_y": 2048, "size_c": 2,
"pixel_type": "uint16",
"physical_size": { "x": 0.325, "y": 0.325, "unit": "µm" }
}
]
}
}Formats
Area | Formats | Export to |
Light microscopy | Zeiss CZI, Nikon ND2, Leica LIF, Olympus OIR/VSI/OIB, Imaris, OME-TIFF and other TIFF variants, OME-Zarr, whole-slide images (including Philips iSyntax, Hamamatsu VMS and MIRAX) | OME-TIFF, OME-Zarr |
High-content screening | Harmony (Opera Phenix, Operetta), ImageXpress, CellVoyager | OME-Zarr plate, OME-TIFF |
Electron microscopy | MRC, Gatan DM3/DM4, FEI SER/EMI, Velox EMD, EER movies, SerialEM mdoc | OME-TIFF, OME-Zarr, MRC |
Structural biology | CBF/miniCBF, SMV, EIGER NeXus (NXmx) diffraction images | MRC, OME-TIFF |
Medical imaging | DICOM (files, series, studies, DICOMDIR), NIfTI, Analyze, Bruker ParaVision | NIfTI, OME-TIFF |
Mass spectrometry | Thermo RAW, Bruker timsTOF and BAF, Agilent MassHunter, Waters MassLynx, Sciex WIFF, mzML | mzML, Parquet, Arrow |
Chromatography | Agilent ChemStation and OpenLab, Shimadzu, Chromeleon, AIA/ANDI | CSV, JCAMP-DX, Parquet |
Electrophysiology | Axon ABF, Intan, SpikeGLX, Open Ephys, Neuralynx, Blackrock, Plexon, HEKA, Spike2, TDT, Axona, NWB | NWB, CSV, Parquet |
NMR and spectroscopy | Bruker TopSpin and OPUS, Varian, JEOL, Thermo OMNIC, Renishaw, JCAMP-DX, SPC | JCAMP-DX, CSV |
Flow cytometry | FCS, FlowJo workspaces, Gating-ML | CSV, Parquet, Arrow |
Plate readers and qPCR | Plate-reader exports, RDML, Applied Biosystems, LightCycler, Rotor-Gene | Allotrope ASM, RDML, CSV |
DNA sequencing and electrophoresis | Illumina run folders, Oxford Nanopore POD5 and FAST5, FASTQ, BAM, ABIF Sanger and fragment-analysis files, Agilent Bioanalyzer and TapeStation | FASTQ, CSV, Parquet |
Other | NanoDrop, Qubit, Incucyte, gel and blot imagers, ÄKTA, ITC, Biacore, Seahorse, Octet, Zetasizer, XRD, EPR, electrochemistry, thermal analysis | CSV, Parquet |
The format list lists every format OpenReadout reads, with its known gaps.
Installation
Ships as a single self-contained binary. No Java, no Python, no vendor DLLs -- nothing else to install.
# macOS / Linux
curl -fsSL https://raw.githubusercontent.com/openreadout/openreadout/main/scripts/install.sh | sh
# Windows (PowerShell)
irm https://raw.githubusercontent.com/openreadout/openreadout/main/scripts/install.ps1 | iex
# Homebrew (macOS / Linux)
brew install openreadout/tap/openreadout
# npm (all platforms; installs the native binary for your platform as a dependency)
npm install -g openreadout
# Rust toolchain
cargo install openreadout --lockedDocker, Nix, cargo-binstall, and the other channels are on the install page.
Verify installation: openreadout --version
AI Integration
MCP Server
Built-in MCP server — register with one command:
openreadout mcp --install claude # Claude Code
openreadout mcp --install claude-desktop # Claude Desktop
openreadout mcp --install codex # OpenAI Codex
openreadout mcp --install cursor # Cursor
openreadout mcp --install vscode # VS Code / Copilot
openreadout mcp --install gemini # Gemini CLIWindsurf, Zed, Continue, and Cline are supported too. The server exposes 28 tools (openreadout_info, openreadout_check, openreadout_preview, openreadout_export, openreadout_peaks, ...) over JSON-RPC, so the client doesn't need shell access.
Claude Code Plugin
Installs the MCP server and the skill together:
/plugin marketplace add openreadout/agent-plugins
/plugin install openreadout@openreadoutGemini CLI Extension
gemini extensions install https://github.com/openreadout/agent-pluginsCodex Plugin
codex plugin marketplace add openreadout/agent-plugins
codex plugin add openreadout@openreadoutEach of these adds the skill and the MCP server from the openreadout/agent-plugins repository. The server runs the openreadout binary from your PATH, so install it first.
Agent Skill
openreadout self skill --install claude # ~/.claude/skills/openreadout
openreadout self skill --install agents # ~/.agents/skills/openreadout (Codex, Cursor, Copilot, Gemini CLI)The skill source is in skills/openreadout.
Built for Agents
JSON output for every command, with published schemas.
Fixed exit codes:
0ok,1error,2usage,3unknown format,4corrupt,5I/O,6unsupported.Errors with a hint about what to try next.
Assurance on every result: whether that kind of file was checked against another reader.
--strictrefuses anything that wasn't.Previews the agent can look at, as PNG.
Figures from
plot: plate grids, dose-response fits, gated dot plots and more, as PNG, SVG or PDF.Fast metadata:
inforeads headers only, so a 100 GB file is as quick as a small one.Read-only and offline.
Python and R
Python — pip install openreadout returns metadata as dicts and pixels as NumPy, dask, or xarray arrays, with plugins for bioio and napari. See the Python guide.
import openreadout
with openreadout.File("cells.lif") as f:
f.images[0]["channels"] # same keys as `info --json`
stack = f.to_xarray(0) # labelled with channel names and µm
f.preview(composite=True) # shows itself in Jupyter
openreadout.plot(data={"file": "growth.pda"}, facet="plate").save("plate.pdf")R — the R package returns arrays and data frames, and draws the same previews and figures. See the R guide.
Comparison
OpenReadout | Bio-Formats | bioio | czifile / nd2 / liffile | msconvert | |
Open source & free | ✓ (MIT / Apache-2.0) | ✓ (GPL) | ✓ (plugins vary) | ✓ (BSD) | ✓ (vendor DLLs are not) |
AI-native CLI + JSON + MCP | ✓ | ✗ | ✗ | ✗ | ✗ |
Zero install (single binary) | ✓ | ✗ (JVM) | ✗ (Python) | ✗ (Python) | ✗ |
No vendor DLLs | ✓ | ✓ | ✓ | ✓ | ✗ |
Integrity check | ✓ | ✗ | ✗ | ✗ | ✗ |
Microscopy | ✓ | ✓ | ✓ | ✓ (one format each) | ✗ |
Mass spectrometry | ✓ | ✗ | ✗ | ✗ | ✓ |
Ephys, flow, NMR, chromatography, plates, qPCR | ✓ | ✗ | ✗ | ✗ | ✗ |
Cross-platform | ✓ | ✓ | ✓ | ✓ | Windows (or Wine) |
Validation
Each reader is tested against other readers on public instrument files. See how we validate.
The readers were written from public files, published specifications and permissively licensed readers (credited in NOTICE), without vendor SDKs or DLLs. GPL readers such as Bio-Formats are only run as black boxes in tests. See the clean-room policy and the per-format provenance logs.
Documentation
The documentation has guides for every command and format:
Getting started: Install | Your first file | Reading the JSON output
Guides: AI agents | Python | R | Recipes | Batch tables
A file that does not work: run
openreadout report FILEand attach the bundle to a new-variant issue. The bundle contains no data values, sample names, or paths.
Privacy
OpenReadout runs on your computer, makes no network connections and sends no telemetry. See PRIVACY.md.
License
Licensed under either the Apache License 2.0 or the MIT license, at your option. OpenReadout is not affiliated with any instrument vendor; see TRADEMARKS.md.
Bug reports and contributions are welcome on GitHub Issues. See CONTRIBUTING.md, and read the clean-room policy before working on a reader.
Demo files and README images come from the public test corpus (corpus/manifest.toml), used under their licences, and are credited in .github/assets/gallery/CREDITS.md. demo.tape regenerates the terminal demo.
If you find OpenReadout useful, please give it a star on GitHub — it helps others discover the project.
Available Tools
28 toolsopenreadout_assayBRead-onlyIdempotent
Plate-reader exports, with the layout the file stores or layout. analysis: wells (per-well values, blank subtraction, replicate mean/SD/CV, outliers), curve (standard curve, back-calculated concentrations, LLOQ/ULOQ), dose-response (IC50/EC50 per compound with CI and Hill slope), kinetics (Vmax, lag, AUC per well), growth (growth rate, doubling time, lag, logistic fit, and whether each well grew, crashed or regrew, with times), qc (Z′, S/B, S/N, SSMD). An argument that names analyses applies to those only.
Inputs: file (required), analysis (required), lloq, plot, +18 more. Returns: path, read, blank, curve, +17 more
openreadout_batchADestructiveIdempotent
One measure over many files as one tidy table, optionally joined to sample sheets or plate maps (the join key is chosen from the data and reported in joins[] with unmatched rows) and summarized by group (by; test against a control). Analyses (peaks, chromatogram, nmr-peaks, ephys-features, spikes, qpcr, gate, assay) take the arguments of their tools as options. Inputs (paths): files, directories, globs or an index query. Returns at most limit rows (page with offset; output writes them all to a file); a failing file is a row with error. openreadout_summarize regroups a table written by an earlier output.
Inputs: measure (required), by, keys, test, +18 more. Returns: rows, grain, joins, inputs, +9 more
openreadout_checkARead-onlyIdempotent
Integrity check: ok plus findings (severity, code, message) for truncation, missing planes or parts, bad blocks; a plate folder reports missing files per well; a file still being written reports acquisition_in_progress.
Inputs: file (required), strict, headers_only. Returns: ok, path, format, findings, +3 more
openreadout_chromatogramARead-onlyIdempotent
Chromatograms from mass spectra and detector signals: TIC, BPC, extracted-ion (mz with ppm or da), SRM/MRM transitions, stored chromatograms and UV/DAD/FID/TCD traces (traces). Per chromatogram: apex time and intensity, integral, and thinned arrays. Answers 'when does m/z X elute'.
Inputs: file (required), da, mz, bpc, +19 more. Returns: run, path, notes, format, +3 more
openreadout_compareARead-onlyIdempotent
Compare two files, e.g. a raw file and its export: metadata differences, geometry, channel names, physical sizes, and per-plane hashes or the largest difference within tolerance. identical says whether they hold the same data.
Inputs: file (required), against (required), image, level, +5 more. Returns: ours, notes, images, planes, +3 more
openreadout_ephys_featuresCRead-onlyIdempotent
Patch-clamp features: action potentials per sweep, rheobase, f-I slope, input resistance, membrane time constant, capacitance, sag; in voltage clamp, holding current and access resistance.
Inputs: file (required), trace, strict, sweeps, +5 more. Returns: cell, path, notes, trace, +10 more
openreadout_exportADestructiveIdempotent
Convert to an open format, or save a figure, as a new file read back and verified; the source is never touched. format: ome-tiff (images, default; pyramidal when the source is), ome-zarr (multiscale; plates as OME-NGFF HCS), mzml (mass spectra, default), csv (one table or one sweep of a trace, default for tables and traces), parquet or arrow (tables, traces with every sweep, spectra=true for MS points), nwb (electrophysiology), jcamp (NMR, IR/Raman, chromatograms), asm (plate readers), rdml (qPCR), nifti (volumes: CT, MRI). Figures: plot or preview = the arguments of that call, output .png, .jpg, .tiff, .svg or .pdf (scale, dpi for print); the picture comes back too. Sends progress with a progressToken.
Inputs: dpi, run, file, plot, +19 more.
openreadout_extractADestructiveIdempotent
Write one attachment a file embeds (a slide label or thumbnail, a preview image, time stamps) to a new file as stored, verified. openreadout_info view=structure lists them.
Inputs: file (required), attachment (required), output, overwrite. Returns: path, xxh3, format, output, +3 more
openreadout_gateARead-onlyIdempotent
Flow-cytometry gating from a FlowJo workspace (workspace) or Gating-ML 2.0 file (gatingml): the event count, percentage and medians of every population of the FCS file. Without workspace or gatingml, file is the gating file and the answer describes its samples and gate tree.
Inputs: file (required), table, sample, strict, +4 more. Returns: path, tree, notes, table, +8 more
openreadout_healthARead-onlyIdempotent
Storage health of a share indexed by openreadout_index: truncated or corrupt files, unreadable formats, duplicates (confirmed by content hash unless no_hash), the same experiment stored twice, files at risk, totals and personal-data findings.
Inputs: index_dir (required), no_hash, max_list. Returns: pii, roots, totals, at_risk, +11 more
openreadout_indexAIdempotent
Catalog every data set under roots into index_dir (Parquet: one row per data set with format, size, sample, instrument, technique, method, operator, start, dimensions, channels, objective, events, scans, integrity status, personal-data flags). Headers only and resumable: a call stops after max_files/max_seconds with complete=false, and the same call again continues. openreadout_search queries the result. For one folder of files, openreadout_batch with measure info lists what each file is in one call.
Inputs: roots (required), index_dir (required), pii, check, +7 more. Returns: pii, next, tool, bytes, +19 more
openreadout_infoARead-onlyIdempotent
What an instrument file or data-set directory holds, from its headers (fast on huge files): format, images[] (sizes, pixel type, µm/px, channels and dyes, objective), tables[], traces[], spectra[] (MS runs), plate, experiment (sample, instrument, method, operator, start) and assurance. view=summary attaches a ~384 px thumbnail of image 0 with full-resolution pixel rulers. ask answers a question in words, naming the fields it used.
Inputs: file (required), ask, kind, view, +7 more. Returns: object
openreadout_linkBRead-onlyIdempotent
Groups files that measured the same sample across instruments and formats (sample id, barcode, plate well + plate, a conversion naming its source, the same acquisition or the same spectra), from headers; every link has its evidence and a confidence (high/medium/low; links below min_confidence are listed in weak_links).
Inputs: paths, query, formats, from_index, +2 more. Returns: notes, groups, inputs, unlinked, +4 more
openreadout_nmr_peaksARead-onlyIdempotent
NMR peak list (ppm, height, width, S/N) and integrals of given regions or of every multiplet (auto_integrate), from the vendor's processed spectrum or a spectrum processed from the FID (from=fid: group delay, apodization, zero filling, FT, phase, baseline).
Inputs: file (required), lb, from, size, +14 more. Returns: axis, path, notes, peaks, +12 more
openreadout_peaksBRead-onlyIdempotent
Detect and integrate peaks: chromatograms (detector traces, TIC, XIC, SRM) with retention time, area, height, widths, tailing, plates, resolution, S/N and area % (purity); one peak near rt; a compound list; bands and regions of IR, Raman, UV-Vis and NMR spectra and peaks of sized electropherograms in bp (x_range, integrate). Takes the openreadout_chromatogram arguments to choose the signal.
Inputs: file (required), da, mz, rt, +31 more. Returns: path, notes, format, outputs, +3 more
openreadout_plotARead-onlyIdempotent
A finished figure from lab files in one call, as image content plus what was drawn (series, data read, ranges, units, marked peaks). Name data by file and selector, never by pasting numbers: traces and sweeps, chromatograms (TIC, XIC) and the spectrum at an rt or the TIC apex, plate wells by range or layout group (curves per well, or mean ± spread per group), FCS dot plots coloured by gate population and histograms, f–I curves, dose-response and standard-curve fits, a table file's columns (openreadout_batch output); small inline values are allowed. Several files overlay; facet=series gives small multiples, facet=plate plate positions; panels side by side; annotate with bands, lines, labelled points, arrows. Draws only; openreadout_export saves the figure.
Inputs: x, y, data, file, +15 more. Returns: save, files, notes, theme, +6 more
openreadout_previewARead-onlyIdempotent
A picture of the data as image content plus what was drawn: an image plane (default channel 0, middle z), a composite, a max projection (mip=z), a region (only the tiles needed are read), a trace or spectrum plot (largest peaks labelled; marks=spikes marks action potentials; x_range zooms), a Sanger chromatogram with base calls and quality or a sized electropherogram with the ladder, a plate heat map or, for kinetic reads, per-well growth curves coloured by layout group, or a flow-cytometry density plot. Image pictures carry rulers in full-resolution pixels and a µm scale bar, so a region read off the rulers zooms in. annotations draw your own labelled points, boxes, outlines, arrows, lines and bands in the picture's coordinates, to show the user what you found. Draws only; openreadout_export saves the picture.
Inputs: file (required), fft, lut, mip, +29 more. Returns: hint, kind, path, save, +20 more
openreadout_qpcrARead-onlyIdempotent
Real-time PCR (RDML, .eds, .rex, ...): one record per well and target with sample, task, Cq and Tm; compute_cq recomputes Cq, ddcq gives 2^-ΔΔCq fold changes, standard_curve fits efficiency per target.
Inputs: file (required), run, ddcq, well, +14 more. Returns: path, notes, cycles, format, +15 more
openreadout_reportBIdempotent
A privacy-reviewed diagnostic bundle for a file that is refused, fails or is not validated, for a new-variant issue: no data values, free text only with include_text, and the issue_url to file it at. Nothing is sent; the user files it.
Inputs: file (required), output, include_text. Returns: bytes, output, report, issue_url
openreadout_scansARead-onlyIdempotent
The scans of a mass-spectrometry run, without decoding peaks: scan number, MS level, retention time, polarity, precursor m/z and charge, isolation window, activation, collision energy, filter, stored TIC; filtered and paged, and every match counted (matched, ms_level_counts). IR, Raman, UV-Vis and NMR spectra are traces: openreadout_trace.
Inputs: file (required), run, count, limit, +11 more. Returns: run, path, scans, filter, +9 more
openreadout_searchARead-onlyIdempotent
Query an index from openreadout_index: 'format=nd2 objective=60x', 'channel~CD4', 'events>100000', 'rate>=20kHz', 'acquired<2015', 'status=truncated|corrupt'. Returns {total, returned, results[]}: total counts every match, results is capped by limit (default 50); fields=['all'] returns every column.
Inputs: index_dir (required), sort, limit, query, +1 more. Returns: query, total, fields, results, +4 more
openreadout_spectrumARead-onlyIdempotent
One mass spectrum, picked by retention time (rt, minutes: the scan nearest it), scan number or zero-based spectrum index: metadata, peaks[] (the most intense, with charge from the isotope spacing and neutral mass) and mz[]/intensity[].
Inputs: file (required), rt, run, scan, +7 more. Returns: run, path, view, peaks, +4 more
openreadout_spikesARead-onlyIdempotent
Extracellular spike detection per channel: band-pass, threshold at K x MAD noise, spike counts, rates and times.
Inputs: file (required), sign, trace, strict, +6 more. Returns: path, notes, trace, format, +5 more
openreadout_statsARead-onlyIdempotent
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).
Inputs: file (required), mip, per, bins, +12 more. Returns: object
openreadout_summarizeADestructiveIdempotent
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.
Inputs: by (required), table (required), test, where, +6 more. Returns: input, output, summary
openreadout_tableARead-onlyIdempotent
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.
Inputs: file (required), count, table, filter, +10 more. Returns: path, rows, table, texts, +8 more
openreadout_traceBRead-onlyIdempotent
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.
Inputs: file (required), count, sweep, trace, +6 more. Returns: axis, path, sweep, trace, +11 more
openreadout_watchARead-only
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.
Inputs: dirs (required), qc, limit, since, +3 more. Returns: more, notes, cursor, events, +2 more
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 28 tools
Most tools target a distinct data type or analysis (e.g. chromatogram vs spectrum vs scans vs trace), and descriptions often cross-reference boundaries like 'Draws only; openreadout_export saves'. However, the visualization cluster (plot, preview, export) and data-inspection cluster (info, stats, table) can still be confused by an agent. Overlap exists but is mostly mitigated by detailed descriptions.
All 28 tools use the openreadout_ prefix followed by lowercase snake_case, with no case mixing or chaotic patterns. Compound names like ephys_features and nmr_peaks are still predictable. The convention is uniform across the entire set.
28 tools is above the 25-tool threshold for 'too many' and risks overwhelming an agent choosing among them. While most tools are specialized and non-redundant, the surface is heavy for a single MCP server. Some grouping or consolidation would improve usability.
The set covers indexing, search, info, preview, plot, export, conversion, integrity checks, batch analysis, summarization, and technique-specific analyses (MS, NMR, qPCR, flow, ephys, plate, imaging). Lifecycle operations for reading, inspecting, analyzing, and exporting lab data are thorough. No obvious dead ends for the apparent scientific data readout domain.
Maintenance
Related MCP Connectors
Convert PDF, Word, Excel and scanned documents to Markdown, tables and RAG chunks. OCR.
Geometry and CAD file metadata extraction for STL, OBJ, PLY, PCD, LAS/LAZ, glTF/GLB.
PDF, Word, PowerPoint and Excel to clean Markdown plus every table as JSON rows, OCR for scans.
Messy CSV, JSON, Excel, SPSS/Stata/SAS and PDF tables to typed Parquet; inspect, query, join.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceMCP server that extracts clean text, tables, and structured data from documents, images, code, and audio files, supporting 97 formats with OCR, transcription, and code intelligence.MIT
- FlicenseBqualityBmaintenanceEnables local, offline document extraction and manipulation—PDF first but also HTML, DOCX, XLSX, PPTX, EML, EPUB, Markdown, and plain text—through tools for probing, locating, extracting, converting, assembling, OCR, protecting, and redacting documents, with nothing leaving the machine.7-
- AlicenseAqualityCmaintenanceConverts documents among PDF, DOCX, Markdown, plain text, and images while returning fidelity reports that clearly distinguish PASS, FAIL, NOT_CHECKED, and UNSUPPORTED outcomes. Also enables lossless reading, exact search, and structured extraction from long documents without treating unchecked content as passed.16AGPL 3.0
- AlicenseNot gradedqualityBmaintenanceLets AI assistants and editors read documents on the local machine, turning PDFs, scans, invoices, receipts and bank statements into structured fields, line items and entities over stdio. Runs fully self-hosted with no cloud calls or API keys, so sensitive files never leave the user's machine.2MIT