Inspiration

I study anthropology, which in practice means I spend a lot of time around genomic data that isn't mine. Population panels, ancient DNA, samples from communities who agreed to one specific study and nothing beyond it. Consent in this field is narrow and it's supposed to stay narrow.

That makes most genomics tooling unusable for me. Every variant browser I found opens the same way, upload your raw file to our server. I can not click that with a participant's genotypes, and I wouldn't click it with my own either.

WebMCP removes the upload from the equation. The tools are declared by the page and run in the tab where the file already is, so the model can operate on data that never moves. That was enough to make the tool worth building.

What it does

LocusLocal is a variant-triage workbench. Drop in a VCF or a consumer raw export, it is parsed in a Web Worker, annotated against a bundled 98,262-variant ClinVar subset, and analysed entirely inside the tab.

The demo genome is 250,000 markers from 1000 Genomes sample NA12878.

Two audiences, one analysis engine. Guided mode answers the questions a person reading their own export actually has: how much of the file was read, how much of it ClinVar knows about, what they carry, how strong the evidence is, and what the analysis cannot tell them. Advanced mode gives the full table, filter stack, sorting and manual selection. One click either way, and an agent can make that click too.

How I built it

Vanilla TypeScript and Vite 8, no UI framework, deployed on a Cloudflare Worker that runs before static assets so the security headers can't be skipped.

Tools are grouped into read_*, set_*, act_*, explain_*, and history. Chrome's secure-tools guidance applied throughout. readOnlyHint on all 13 read_*/explain_* tools and on none of the mutating ones; untrustedContentHint on analysis tools, whose output contains text from a user-supplied file; descriptions that state the visible UI effect.

What's next for LocusLocal

  • Pharmacogenomics (CPIC/PharmGKB). Drug-response markers are the genomics question with the most immediately actionable answer, and the annotation set is small enough to bundle under the same no-egress constraint.
  • Polygenic scores, honestly presented. The interesting design problem is communicating a population-relative distribution to someone who wants a yes/no with the ancestry-portability caveat in the interface rather than a footnote.
  • Trio and family-set support. Multi-sample VCFs, inheritance patterns, and a compare_samples tool, the point at which the shared-selection model gets genuinely harder and more interesting.
  • A second annotation source (gnomAD frequencies) so "rare" stops meaning "not in ClinVar".
  • Lift-over for GRCh38 so coordinates become comparable rather than merely disclaimed, retiring the coordinatesComparable: false path.

Built With

  • genomics
  • local-first
  • privacy
  • webmcp
Share this project:

Updates

Submission history