.vscode — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited .vscode (MCP Server) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
A Model Context Protocol (MCP) server that brings flow cytometry analysis to any MCP-capable AI assistant — locally, privately, and for free.
Flow cytometry analysis (FCS files, gating, compensation, clustering) is tedious, error-prone, and hard to script. cyto-mcp lets an AI assistant like Claude or GitHub Copilot drive the entire analysis pipeline through natural language — while keeping every byte of your data on your own machine.
Cloud LLM ──HTTPS──► MCP Client (Claude Desktop / VS Code / Cursor)
│ stdio / local HTTP
▼
cyto-mcp server ──► FCS files on your diskNo data leaves your machine. The LLM only sees compact summaries, statistics, and images that the server sends back.
| Category | Tools |
|---|---|
| File I/O | List, load, validate FCS files; read FCS keywords |
| Preprocessing | Apply compensation matrix; Logicle / asinh / biexp transform |
| Subsampling | Reproducible down-sampling for fast exploration |
| Statistics | Per-channel percentile stats; cross-sample comparison |
| Gating | Rectangle and threshold gates; population frequency & MFI |
| Visualization | Scatter plots and histograms — returned as PNG + structured JSON |
Quality control (time-drift, saturation flagging), polygon/ellipse gates, reporting, and clustering (FlowSOM, UMAP) are planned for v0.2.
VS Code + GitHub Copilot, or Cursor
pip install cyto-mcp
cyto-mcp --help # verify it worksOr with uv (faster, isolated):
uv tool install cyto-mcp
cyto-mcp --helpgit clone https://github.com/luangxiao/cyto-mcp.git
cd cyto-mcp
uv sync # creates .venv and installs all deps
uv run cyto-mcp --help # verify it worksClaude Desktop — edit claude_desktop_config.json:
{
"mcpServers": {
"flow": {
"command": "cyto-mcp",
"args": ["serve", "--data-dir", "/path/to/your/fcs/files"]
}
}
}VS Code — create .vscode/mcp.json in your workspace:
{
"servers": {
"flow": {
"type": "stdio",
"command": "cyto-mcp",
"args": ["serve", "--data-dir", "/path/to/your/fcs/files"]
}
}
}Note for VS Code: ifcyto-mcpis not on VS Code's PATH, use the full path to the executable (e.g.C:/Users/you/AppData/Roaming/Python/Scripts/cyto-mcp.exeon Windows, or runwhich cyto-mcpon macOS/Linux to find it).
In your AI assistant, ask:
"List FCS files in my data directory and load the first one. Show me the panel channels and a scatter plot of FSC-A vs SSC-A."
See ARCHITECTURE.md for a detailed description of the codebase layout, design decisions, and extension guide.
src/cyto_mcp/
├── server.py # FastMCP app wiring and startup
├── cli.py # click CLI entry point (`cyto-mcp serve`)
├── config.py # Pydantic settings (data-dir, output-dir, cache size)
├── errors.py # Typed error hierarchy
├── cache.py # LRU in-memory sample cache
├── tools/
│ ├── io.py # load_fcs, list_fcs, fcs_keywords, validate_fcs
│ ├── preprocess.py # apply_compensation, transform, subsample
│ ├── stats.py # channel_stats, compare_samples
│ ├── gating.py # gate_rectangle, gate_threshold, population_stats
│ └── plots.py # scatter_plot, histogram
└── utils/
├── image.py # fig → PNG bytes helper
└── paths.py # safe path resolution within data-dir sandbox--data-dirand writes outputs to --output-dir. No network calls.
and referenced by URI. Tool responses stay small enough to fit in any context window.
structured JSON summary (for the LLM to reason about numerically).
--data-dir andvalidated to prevent path traversal attacks.
an optimisation, not a requirement for correctness.
I'm a solo developer building this in my spare time — I'd genuinely love to hear from you, whether you're a researcher, clinician, bioinformatician, or just curious.
All contributions are welcome — from typo fixes to new tools. Here's how to get started:
git checkout -b feat/my-featureuv sync --extra devuv run pytestuv run ruff check src testsFor anything non-trivial, please open an issue or discussion first so we can align on approach before you invest time coding. I'll do my best to review PRs promptly and give constructive feedback.
Apache 2.0 — see LICENSE.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.