Skip to content

MSMCP 1.0.0

Latest

Choose a tag to compare

@janusson janusson released this 08 Oct 21:27
· 32 commits to main since this release
a58e50a

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, outputSchema and structuredContent.
  • Ingestion — .mzML/.mzML.gz and .mgf/.mgf.gz via MSMCP's own readers; .imzML through 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 JobExecutor with a local asyncio implementation, a concurrency cap and TTL sweeping.
  • Spectral scoring contract — SpectrumScorer with 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 eval runs 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.