Repository navigation
MSMCP 1.0.0
The first tagged release. Every acceptance criterion in ARCHITECTURE.md is met on this commit.
MSMCP is a local, offline MCP server for mass-spectrometry data: an agent can ingest real MS data, compute over it, pass large datasets between operations without pushing them through the conversation, and trace every result back to its inputs.
In this release
- Core server — MCP over stdio (
protocolVersion 2025-06-18), 13 tools with titles, annotations,outputSchemaandstructuredContent. - Ingestion —
.mzML/.mzML.gzand.mgf/.mgf.gzvia MSMCP's own readers;.imzMLthrough MassFlow. Vendor formats are refused with conversion guidance rather than guessed at. - Server-side data references — payloads stay in the server and cross the wire as opaque
ptr:spectrum:<id>tokens. A 100,000-peak spectrum reaches the model as a ~300-character JSON object. - Provenance — immutable, JSON-safe records tied to each result.
- Asynchronous execution — a pluggable
JobExecutorwith a local asyncio implementation, a concurrency cap and TTL sweeping. - Spectral scoring contract —
SpectrumScorerwith classical and embedding scorers behind one interface. - Security boundary — every file-reading tool confined to one allowed root, with size, reference-count and spectrum-count ceilings; symlink escapes rejected.
- Chemistry tools — exact mass, adduct offsets, isotope patterns, ppm validation, QC.
- Evaluation notebook —
make evalruns every tool end to end and writes a machine-readable report.
Not in this release
The spectral-library reader. search_library still generates a synthetic library from the database_file string rather than opening it, and every report says so. ARCHITECTURE.md names the real reader the first v1.1 deliverable — this is the largest known gap, and it is deliberately disclosed rather than papered over.
Also known and documented: job state is in-process (does not survive a restart), MS-Numpress mzML arrays require an optional extra, and the eval notebook is the slowest artefact to run.
Verification
uv sync --extra dev --locked resolved 113, audited 82 packages
ruff format --check . 48 files already formatted
ruff check . All checks passed
mypy no issues in 42 source files
basedpyright 0 errors, 0 warnings, 0 notes
pytest 423 passed, 1 deselected
make eval 1 passed
The gate job in CI runs this exact sequence on every push and pull request.