jean — Molecular Biology & Genomics

io.github.genmnz/jean · v1.0.1 · design

jean — Molecular Biology & Genomics is healthy: it completed an MCP handshake in 4869 ms and exposes 289 tools.

Validated molecular biology tools: cloning, primers, CRISPR, Sanger, alignment, qPCR, phylogenetics

Endpoint: https://jeanslabs.vercel.app/mcp (streamable-http)

No repository listed · Website · JSON · Add to my inventory

Facts

Users (last 30 days)0
HandshakeHealthy
Auth neededNone
Tool count289
Latency4869 ms
Last checked (UTC)2026-10-20T22:21:03.965Z

Health history

Checked (UTC)StatusLatencyError
2026-10-20T22:21:03.965ZHealthy4869

Tools (100)

list_workflow_templatesThe built-in starter workflows — id, name, what each does and which tools it chains. Pass an `id` to get that template’s graph back, ready to hand to `run_workflow`. This server is stateless, so these are the shipped templates only, not anything a person has saved in their own editor.
validate_workflowWould this workflow graph run? Returns the blocking errors — an unknown tool, a wire into a port that does not exist, a cycle — each naming the node and the port, without running anything.
run_workflowRun a workflow graph: nodes naming tools, wires carrying one node’s output into another’s input, `$whenExpression` to make a step conditional, and `scatter` to run a step once per element of a list. Returns the run record — per-node status, outputs and errors, in topological order.
get_open_recordReturn the plasmid/sequence currently open in the editor. Emits it as a `record`, so it is the SOURCE node of a pipeline — wire its record into any downstream node's $subject.
load_recordRead a CHOSEN project document as a record — the pipeline's data-reader source, for running on a specific file instead of whatever happens to be open in the editor. Wire its `record` into any downstream node's $subject.
list_libraryList the project's sequence documents (id, name, length, topology, kind).
find_restriction_sitesCut positions of the given enzymes on the open plasmid (top/bottom cut, overhang, kind).
find_star_sitesWhere the given enzymes could ALSO cut the open plasmid under non-standard conditions, from REBASE's own star-activity list and its one-base rule. Not cut sites: these need low ionic strength, high pH, Mn²⁺ for Mg²⁺, glycerol, DMSO or some detergents, and are what turns an over-digested reaction int
check_methylation_blockWhether the host's own methylation blocks the given enzymes ON THIS PLASMID, from REBASE's methylation-sensitivity tables localised onto your sites. The other term of the same reaction question `find_star_sites` answers. It is deliberately per-SITE and not per-enzyme: REBASE says Dam blocks ClaI, an
digest_reaction_conditionsThe reaction a digest needs, from NEB's own data: the NEBuffer that serves every enzyme together (scored on the WORST enzyme's percent activity, a star-activity buffer disqualified at any percent), the incubation temperature(s), any cofactor that must be added (SAM or ATP), and each product's heat-i
enzyme_cut_countsPer-enzyme cut counts on the open plasmid (the EcoRI² superscript-badge numbers).
export_map_svgRender the open plasmid's circular map to a publication SVG string — the same figure the Export panel draws, with the same knobs and the same defaults. Give it enzymes to draw the outer restriction-site ring.
run_gel_laneResolve a gel lane (ladder / plasmid / digest / pcr) into [bp, form] bands for the open plasmid.
draw_gelRun an agarose gel and photograph it: every lane's fragments migrated by the validated pydna model, drawn as a gel-doc image with the marker ladder's bp marks and each lane's name. The same plate the gel panels draw, so the figure and the rail put every fragment in the same place. Wire `fragments` f
primer_checkWhere a primer anneals on the open plasmid: 3'-anchored sites with identity % and the ✓/⚠/~/✗ verdict, graded at a bar you can move and that the answer states. The scan is 3'-anchored, so every site it reports matches the oligo's 3' seed exactly and 'no sites' means no seed match rather than a low s
design_oligo_plate_orderLay a set of oligos out as a supplier's PLATE order sheet: one worksheet per plate, in the well order the supplier's own order form fills, with the column shape its loading direction requires. A plate order is addressed BY WELL, which a flat tube list cannot express — so this is the shape an oligo s
build_genbank_submissionTurn a record into the SUBMISSION SET NCBI's `table2asn` consumes: a `.fsa` whose defline carries the source modifiers, and a 5-column feature table (`.tbl`) beside it. This is not a GenBank export — GenBank's submission pipeline takes neither a `.gb` nor a plain fasta. Its real work is REFUSING and
build_ena_submissionTurn a record into what ENA's Webin-CLI takes for an annotated sequence (`-context sequence`): an ENA flat file (`.embl`) and its manifest. Features are checked against the tables ENA's own validator reads, so what Webin-CLI would refuse (an unknown key, a missing mandatory qualifier, a double quote
screen_oligo_structureFold a set of oligos and check them against each other: every oligo's hairpin, its self-dimer anywhere and its self-dimer at the 3' end, plus the cross-dimer with every other oligo in the set, at any position and at a 3' end. This is primer3's `thal` — the same engine the Tm columns elsewhere use —
check_manufacturabilityMeasure a sequence against what a NAMED synthesis vendor publishes it can make: length, average and windowed GC, homopolymer runs, tandem repeats, long repeats and hairpin-forming inverted repeats. Every threshold is the vendor's own, read from the vendor's own page with the date it was read, and ev
classify_grammar_partWhich Golden Braid / MoClo / Yeast ToolKit grammar, position and level the open plasmid represents (or null). Reads the record's own annotations, which is what lets an assembled transcription unit be recognised by its backbone half, and what lets a Level-0 module whose own backbone carries an extra
align_readPairwise-align ONE sequencing read against a reference and hand on the two gapped rows, so the read can be graded. Needleman-Wunsch with free end gaps and the IUPAC substitution matrix — SeqTrace's aligner, the same call the trace editor makes, so a pipeline and the panel align a read identically. L
trim_readsTrim sequencing adapters and low-quality ends off FASTQ reads before mapping, and report what was removed. This is cutadapt's algorithm: quality trimming is BWA's running-sum rule (not a threshold - a single bad base in a good tail is absorbed, a real decline is not), and the adapter is found by sem
map_readsMap sequencing reads (FASTQ or FASTA) or assembled contigs onto a reference and return the alignment as SAM, the file a pileup viewer, a variant caller or `samtools` reads next. This is minimap2 (minimizer seeds, chaining, banded dual-affine extension with inversion detection, MAPQ), ported and chec
verify_readGrade a sequencing read against a reference (✓ verified / ⚠ near / ~ partial / ✗ divergent) from an alignment.
read_sequencing_qcRead the QC files a sequencing provider returns alongside the reads: a per-base COVERAGE table, or a Plasmidsaurus summary (k-mer composition and the contamination estimate with its named source). These are the numbers that say whether a disappointing read is the clone's fault or the run's — a base
domesticate_partSilently recode the internal Type-IIS sites inside a part's coding sequence so the part can be used in a Golden Gate assembly — same protein, no recognition site. Only occurrences the given CDS covers can be fixed this way; any outside it are reported untouched rather than skipped quietly, because a
design_fusion_site_primersDesign the PCR primers that ADD Type-IIS fusion sites to a part: enzyme site, spacer and the four-base overhang you chose, on a Tm-matched annealing footprint. This is how a sequence that is not yet a Golden Gate part becomes one, and it is the other half of check_golden_gate_parts — that says which
notebook_cross_refsExtract @plasmid / !action / &gel cross-references from a lab-notebook markdown body.
history_protocolRender a construct's build history into a numbered bench-recipe protocol.
scrub_restriction_sitesPropose the minimal SILENT synonymous edits that remove forbidden restriction sites from a CDS (a design/write).
fold_rnaMinimum-free-energy secondary structure (dot-bracket + ΔG) of an RNA/DNA sequence (Turner-2004).
pcr_amplifyAmplify the subject template with a forward + reverse primer (pydna Anneal). Emits the first product as a NEW sequence record so downstream tools (digest, gel, map) operate on the amplicon, not the template — the tool→tool hand-off.
design_mutagenesis_primersDesign site-directed mutagenesis (SOE-PCR/QuikChange) primers for a point change on a CDS: the ranked inner mutagenic pairs, the constant outer pair, and the single spanning primer that replaces an outer when the site sits too near a CDS end. A design/write.
design_saturation_primersDesign site-saturation mutagenesis (SSM) primers: one overlapping forward/reverse pair per site, each carrying a degenerate codon, sharing ONE reaction-level overlap and 3' temperature so every site amplifies in the same tube (both of Mutation Maker's solvers: fast approximation by default, exhausti
design_multisite_primersDesign QCLM (quick-change lightning multi-site) oligos: one primer per mutated site, all annealing in one reaction, with the codons drawn from an organism's usage table. A design/write.
reverse_complementReverse-complement the subject sequence. Emits a NEW record, so downstream nodes (map, digest, gel, ORF) run on the revcomp rather than the original.
translate_sequenceTranslate the subject DNA to protein (Biopython `Bio.Seq.translate` semantics). The SUBJECT is the selection when there is one, the named feature when `feature` is given, and the whole record otherwise — the `region` output says which, so never paste bases in to scope it.
find_orfsFind open reading frames on BOTH strands of the subject (origin-spanning when circular).
digest_fragmentsDigest the subject with the given enzymes into real fragments (sequence + both overhangs). Emits the selected fragment as a NEW record, so a downstream gel/map/ORF runs on that fragment — the digest→assembly hand-off.
gc_contentGC fraction of the subject — whole-sequence, or a sliding window profile (DnaChisel).
record_compositionWhat the subject record is MADE OF: molecular weight under its own topology and strand count, GC and AT over the resolved bases, and the per-symbol census with the ambiguity codes broken out. The nucleic-acid counterpart of `protein_properties`, and the same derivation the editor's Properties panel,
protein_propertiesMolecular weight (average + monoisotopic), molecular formula, isoelectric point, instability index and amphipathicity (Boman index, Eisenberg hydrophobic moment) of a protein sequence (Biopython ProtParam + `peptides` + `pyteomics`).
protein_profileWindowed physicochemical profile along a protein (ExPASy ProtScale). Pass `scaleId` for any of the 57 scales ProtScale publishes plus the 14 Biopython tables it does not, with optional 0-1 normalisation; or pass `kind` for the five ProtParam profiles (hydropathy over the 28 GRAVY scales, Vihinen fle
protein_signal_peptideSignal-peptidase cleavage sites in a protein, by von Heijne's (1986) weight matrix as implemented by EMBOSS sigcleave. Scores a 15-residue window at every position (the 13 residues before the cut plus the first two after) against either the eukaryotic or the prokaryotic training set. Predicts WHERE
protein_membrane_profileEisenberg hydrophobic-moment plot along a protein: per-window mean hydrophobicity and moment, each classified Globular / Transmembrane / Surface-seeking, plus those windows collapsed into residue spans. A hydrophobicity-based prediction, NOT a trained topology model.
protein_topologyTransmembrane topology of a protein by the HMM-TM 114-state hidden Markov model (JUCHMME, Bagos et al.), decoded residue by residue into inside / transmembrane-helix / outside runs. Reports the labelled path, the runs as residue spans, and the per-residue posterior. Needs the trained model, which th
protein_disorderIntrinsic disorder along a protein by FoldIndex (Prilusky 2005): I_F = 2.785·⟨H⟩ − |⟨R⟩| − 1.151 over a sliding window, where ⟨H⟩ is mean normalized Kyte-Doolittle hydropathy and ⟨R⟩ the mean net charge per residue. Negative means predicted unfolded. Reports the whole-protein score, the per-window s
protein_disorder_metapredictPer-residue intrinsic disorder by metapredict (Emenecker, Griffith & Holehouse, Biophys J 2021; V2/V3 the lab's successors), a bidirectional LSTM trained to reproduce a consensus of disorder predictors, run locally. Reports a 0–1 score per residue, the IDRs and folded domains its domain caller draws
protein_digestIn-silico proteolytic digest of a protein (ExPASy PeptideCutter / PeptideMass): peptides with coordinates, average and monoisotopic masses, m/z per charge state, and the MS mass-window filter. 49 proteases and chemicals — or an enzyme of your own written in RPG rule grammar — one or several at a tim
peptide_massMonoisotopic and average mass of a peptide, and its m/z at each charge state (validated against pyteomics). Plain one-letter sequences also take an ion type (b, y, c, z, a, x and their neutral-loss forms); a ProForma peptidoform with modification tags, as masses or Unimod names and accessions (e.g.
fragment_ionsTheoretical MS/MS fragment ion ladder of a peptide: a, b, c from the N-terminus and x, y, z from the C-terminus, with neutral-loss and radical variants, at each charge up to a maximum (validated against pyteomics, cross-checked against OpenMS). Takes ProForma modification tags (a signed mass, a Unim
isotopic_compositionThe most probable isotopic composition of a peptide (e.g. how many 13C atoms it most likely carries) and that composition's relative abundance, from natural isotope abundances (validated against pyteomics).
isotope_envelopeCoarse isotope pattern of a peptide or of an elemental formula (C29H31N7O, as a compound's formula reads): the relative heights and masses of its M, M+1, M+2 … peaks as an instrument that does not resolve isotopic fine structure sees them, computed by per-element convolution from natural abundances
score_spectrumScore how well an MS/MS spectrum matches a peptide with the X!Tandem HyperScore (validated against OpenMS): b and y ions are generated for the peptide, matched to the observed peaks within a tolerance, and scored as ln(1 + dot product) + ln(matched b!) + ln(matched y!).
read_mgfRead the MS/MS spectra of a Mascot Generic Format (MGF) file: each spectrum's title, precursor m/z, precursor intensity, declared charge states and peak list, interpreted as pyteomics reads MGF (validated on every spectrum of PXD000001). A spectrum it returns is what score_spectrum takes as mz, inte
read_mzmlRead the spectra of a PSI mzML run file: each spectrum's native id, MS level, centroid or profile, scan start time and unit, base peak, total ion current, precursor (selected ion m/z, charge, intensity, isolation window) and peak arrays, interpreted as pyteomics reads mzML (validated on every spectr
infer_proteinsProtein inference from peptide-spectrum matches (validated against OpenMS BasicProteinInferenceAlgorithm on PXD000001): maps each peptide to the protein database, keeps the best match per spectrum, scores each protein by aggregating its peptides' best scores, reports the proteins its evidence cannot
bayesian_protein_inferenceBayesian protein inference, Epifany (validated against OpenMS BayesianProteinInferenceAlgorithm on PXD000001): the posterior probability that each protein, each indistinguishable group and each peptide-spectrum match is present, from the matches' posterior error probabilities under a network in whic
target_decoy_qvaluesFalse discovery rate and q-values for peptide-spectrum matches by target-decoy competition (validated against pyteomics): give each match's score and whether it hit a decoy; returns every match's q-value, the whole set's FDR, and how many targets pass a q-value threshold. Supports the +1 and finite-
crispr_design_guidesDesign and score CRISPR guides on the subject — on/off-target scores, QC flags, and cloning-enzyme conflicts. Nuclease list comes from the real nuclease registry.
crispr_design_libraryTurn the open record's annotated targets into an ORDERABLE sgRNA oligo pool: the best N guides per target, filtered at order time (Pol-III terminator, Graf inactive motif, cloning-enzyme site, minimum on-target score), each composed into the oligo a synthesiser makes — the vector's cloning overhangs
crispr_analyze_screenCall HITS from a pooled CRISPR screen: per-guide read counts in, a gene-level Bayes factor and a precision/recall curve out. This is the other end of a screen from the pool designer — it reads what came back rather than deciding what to order. The estimator is BAGEL2 (Kim & Hart 2021), reproduced by
design_knockout_packageThe complete build package for a knockout or knock-in, as one object: guides inside the target, an off-target census for the chosen one within this molecule, a repair template with real homology arms, a screening PCR whose primers sit OUTSIDE the arms, the protocol in order, the fragments and oligos
screen_guidesScreen guide spacers the way CHOPCHOP does before it accepts them: GC gate, self-complementary hairpins inside the spacer, and hairpins against the sgRNA backbone. A guide that folds onto its own scaffold is loaded into Cas9 poorly however good its on-target score is, so this is the check that expla
search_off_targetsSearch a sequence for sites a guide could also cut, allowing mismatches, and score each one (MIT and CFD) plus the aggregate specificity of the guide WITHIN that sequence. This is specificity against what you searched — it is not a genome-wide score, and it says so rather than inventing one.
survey_off_targetsCount every guide's off-target sites by mismatch class across one sequence, in one pass — the question that comes BEFORE opening any single guide's site table: which of these spacers is worth looking at. Returns counts and the aggregate specificity per spacer, never the sites themselves, so a few hu
fold_guideFold a guide RNA — the spacer alone, and the whole sgRNA on a real published scaffold — and report which bases of the spacer pair with the scaffold. A spacer that base-pairs into the scaffold disrupts the structure Cas9 binds, which is a physical cause of a dead guide rather than a score. Every free
list_sgrna_scaffoldsEvery sgRNA scaffold this workbench has sourced, with the nucleases each covers and the publication it comes from. A scaffold not listed here is one we do not have — the list is what we ship, not what exists.
scan_splice_sitesFind the splice sites a sequence accidentally spells - the check a codon-optimised CDS needs before it goes into a plant or any other eukaryotic host, because a synonymous swap chosen for codon usage or GC can spell a donor or acceptor that was not there before, and the transcript is then spliced so
scan_motif_sitesFind every place a transcription-factor binding motif (a position-frequency matrix, such as a JASPAR matrix's counts) matches a DNA sequence, on both strands, at a threshold set per motif as a fraction of that matrix's own score range. It is the scan the optimizer's avoid-motif specification counts,
scan_sigma70_promotersFind σ70 (housekeeping) promoters in a bacterial sequence and say how strong each one is, using the published La Fleur-Hossain-Salis biophysical model - six interaction motifs (UP element, -35, spacer, extended -10, -10, discriminator) plus the R-loop strength of the first transcribed bases, fitted
scan_intrinsic_terminatorsFind rho-independent (intrinsic) transcription terminators in a bacterial sequence: a stem-loop followed by a thymine-rich tail, scored by TransTermHP's published model (Kingsford, Ayanbule & Salzberg 2007). TWO NUMBERS, BOTH LOWER IS STRONGER - how well the hairpin folds and how thymine-rich the ta
score_rbsScore the ribosome-binding site already in front of a start codon: the Shine-Dalgarno hybridisation energy, the mRNA folding that competes with it, the spacing it implies, and the resulting relative initiation strength. This reads an existing 5'UTR — design_rbs writes a new one.
assemble_operonStack several CDSs into one contiguous operon, designing a fresh ribosome-binding site in front of each one AGAINST ITS REAL UPSTREAM CONTEXT — which is why the RBS for gene 2 is not the RBS design_rbs would give it in isolation. Returns the assembled sequence, its layout, and each gene's achieved s
codon_usage_analysisCodon-usage analysis of an in-frame CDS: CAI / expression stats, GC, and every rare-codon occurrence for the chosen organism (pydna port), plus the two bias measures that need NO reference table — ENC (Wright 1990) and RCBS (Roymondal 2009), which are therefore computable for any organism.
codon_usage_distanceHow this region's codon usage compares with the record's OTHER genes (CUFS, Diament, Pinter & Tuller 2014). Every other codon score grades one sequence against a reference TABLE; this one grades two sequences against each other, so it stays available for an organism no authority covers. Answers 'doe
check_invariantsDecide whether a sequence is scientifically admissible: protein unchanged, forbidden restriction sites absent, reading frame intact, length/GC/CAI inside stated bounds. Every verdict names what broke, where, and the remedy. Run this after any design or optimisation step, and stop the chain when `adm
design_expression_variantsThe expression-design deliverable: several coding sequences for one protein, each variant following a different published strategy (maximise codon adaptation, match the host's codon usage, harmonise with the native host, or preserve the initiation region), each scored by an engine — CAI, GC, the fol
optimize_sequenceRun the DnaChisel optimizer over the subject with real constraints/objectives (GC window, pattern avoidance, translation enforcement, …). Emits the optimized sequence as a NEW record for downstream nodes.
design_rbsDesign a 5'UTR (Shine-Dalgarno + spacer) in front of a CDS to hit a target translation-initiation strength (SC-08 engine, Turner-2004 folding).
design_lamp_primersDesign LAMP (loop-mediated isothermal amplification) primer SETS - four core oligos (F3 · B3 · FIP · BIP) plus optional loop primers, judged against Eiken's own PrimerExplorer V5 criteria. Not a pair: LAMP needs six binding regions in the published order and the distances BETWEEN them are as much of
design_codehopDesign CODEHOP hybrid oligos from a block of aligned PROTEIN - for homologues too diverged for nucleotide-level design to see at all. Each primer is a 3' DEGENERATE core over a few conserved residues fused to a 5' non-degenerate consensus clamp, back-translated through a codon-usage table. A differe
design_degenerate_primersDesign degenerate primers from a multiple-sequence ALIGNMENT - the 'amplify every homologue in this family' question, which a single-template designer cannot answer because it only ever sees one sequence. A faithful port of DegePrime (Hugerth et al. 2014). Wire an upstream align_sequences `rows` out
design_bisulfite_primersDesign BSP or MSP primers for a methylation assay, on the CONVERTED strands: after bisulfite treatment every unmethylated C reads as T, which is a different template from the one every other designer sees. BSP primers avoid CpGs so they amplify regardless of methylation state; MSP primers sit ON CpG
design_sequencing_primersDesign a WALK of sequencing primers that reads a whole region, not one pair: tiled reads with confirmed overlap, on both strands by default, plus the coverage the walk actually achieves and any stretch it cannot reach. This is the 'how do I read all 6 kb of this construct' question, which a single p
design_primersDesign a forward + reverse primer pair to amplify the subject (pydna `primer_design`), with Tm, Ta and suggested Taq/Phusion cycling programs. Emits both primers so a downstream pcr_amplify runs on them — the design→PCR→gel loop.
align_sequencesMultiple-sequence alignment over several sequences, under either of TWO engines that answer different questions and neither of which is a fallback for the other. `poa` (partial-order, poapy) aligns into a graph, keeps every path a read took and produces its own consensus row — what a pile of reads o
draw_alignmentDraw a block of an alignment as an SVG figure: the rows named, the residues shaded by how much of their column agrees with them, the column numbers over the block and Easel's Clustal conservation line under it. Wire `alignedSequences` from align_sequences. Name the window around whatever you are ask
read_structure_consensusRead the consensus RNA secondary structure a Stockholm alignment states in its `#=GC SS_cons` line (WUSS, the notation Rfam and Infernal write), and measure how well the aligned rows actually support it. Reports the base pairs, what each unpaired column is (hairpin, bulge, multifurcation, external,
gibson_assembleAssemble fragments by terminal homology (Gibson / NEBuilder / In-Fusion, DnaCauldron). Emits the first product as a NEW record for downstream nodes.
design_gibson_primersDesign the PCR primers that CREATE the terminal homology a Gibson/NEBuilder/In-Fusion assembly needs: a Tm-matched pair per fragment, each carrying the 5' overhang that fuses it to its neighbour in the order given (pydna assembly_fragments). This is the step that turns a planned assembly into oligos
golden_gate_assembleAssemble parts with a Type-IIS enzyme (Golden Gate / MoClo, DnaCauldron). Emits the first construct as a NEW record for downstream nodes.
check_golden_gate_partsCheck parts BEFORE a Type-IIS assembly: how many recognition sites each carries, which of them are the two deliberate flanking sites and which are internal sites that will mis-cut the part. This is what answers “why will this assembly not work” — an internal site has to be domesticated (silently rec
score_overhang_fidelityScore a Golden Gate junction (fusion-site) set against MEASURED T4 DNA ligase end-joining data. It is the number NEB's Ligase Fidelity Viewer reports: the expected fraction of assemblies in which EVERY junction ligated correctly. This is the quantitative counterpart to check_golden_gate_parts: that
design_split_sitesDecide where to CUT one sequence into Golden Gate fragments, optimising the split positions and the overhangs they create together. Where design_overhang_set proposes junctions for parts you already have, this fragments a sequence you are about to order: it searches every legal arrangement of fragme
design_overhang_setDesign a high-fidelity Golden Gate overhang set of a given size against measured ligation data, optionally pinning junctions you cannot change (a fixed vector's own overhangs). The counterpart to score_overhang_fidelity: that grades a set you already have, this proposes one. The search is greedy-plu
assembly_plan_simulateRun a MULTI-LEVEL assembly plan (DnaCauldron `AssemblyPlan`): several assemblies arranged into dependency levels, where each level's products become parts for the next. Emits the FINAL construct as a record. The plan is DnaCauldron's own spreadsheet shape — one row per construct, `construct_name, pa
melt_profileDNA melting behaviour of the subject by the Poland–Scheraga model (DECIPHER): the melt curve (mean helicity vs temperature), its Tm50, and the cooperatively-melting domains behind each HRM peak.
design_ish_probesDesign an in-situ hybridization probe against the subject: tile it into candidate oligos that meet a melting-temperature, G+C and composition specification, screen them for off-target binding against an alignment, and gather the survivors into the set that images best. Merges OligoMiner's tiling and