Skip to main content
Glama

jean — Molecular Biology & Genomics

align_sequences

Read-only

Multiple-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 over one locus wants. progressive (biotite) computes Feng-Doolittle distances, clusters them into a guide tree and merges along it under "once a gap, always a gap" — the classic MSA algorithm, what a FAMILY of homologous genes wants, and what a reader coming from Clustal or MUSCLE expects. Wire many upstream record/sequence outputs into sequences, or name library documents.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
gapNo`poa` only: score for a gap column. Negative. Only applies when engine is poa. Advanced.
matchNo`poa` only: score for a pair of identical symbols. Only applies when engine is poa. Advanced.
_filesNoThe project: record references shaped like _subject. Their records become library documents a tool names in sequences/parts/document; a trace or alignment is found by file name.
engineNowhich aligner builds the alignment. They answer DIFFERENT questions: `poa` keeps every path through a pile of reads and emits its own consensus row, `progressive` merges a family along a guide tree the way Clustal and MUSCLE do. Each engine reads only its own parameters below. Values: poa (Partial-order (poapy) - reads over one locus), progressive (Progressive (biotite) - a family, guide-tree merged).poa
_subjectNoThe record to act on: exactly one of sequence, accession (+source), sample (an id from list_samples) or file ({name, text} or {name, base64}); record_index picks one record of several.
gap_openNo`progressive`, affine only: the penalty for STARTING a gap. Negative. Only applies when affine_gap is true.
mismatchNo`poa` only: score for a mismatching pair. Negative. Only applies when engine is poa. Advanced.
sequencesNothe sequences to align — wire several upstream outputs here, or list library document names/ids.
affine_gapNo`progressive` only: `false` charges one flat penalty per gap column; `true` charges separate opening and extension penalties, which is what keeps a real indel as ONE gap instead of many. Only applies when engine is progressive.
gap_extendNo`progressive`, affine only: the penalty for each column a gap is extended by. Negative, and gentler than `gap_open` - an extension harsher than the opening makes the aligner prefer many short gaps to one long indel. Only applies when affine_gap is true.
guide_treeNo`progressive` only: which tree the merge follows. The Feng-Doolittle distances are the aligner's either way; this chooses only how they are clustered into an order. UPGMA is biotite's own and the one the port reproduces byte-for-byte; neighbour-joining and BIONJ do not assume a molecular clock, so on sequences evolving at different rates they group by relatedness where UPGMA groups by raw similarity - which is exactly the case where the guide tree changes the alignment. Values: upgma (UPGMA (biotite's own)), nj (Neighbour-joining), bionj (BIONJ), wpgma (WPGMA). Only applies when engine is progressive.upgma
gap_penaltyNo`progressive` only: the flat penalty per gap column. Negative. Only applies when affine_gap is false.
align_matrixNo`progressive` only: the substitution matrix the ALIGNMENT itself is scored with - distinct from `score_matrix`, which only scores the quality report afterwards. `auto` reads the alphabet: EDNAFULL for nucleotides, BLOSUM62 for protein. Naming the wrong one is not an error the engine can raise - BLOSUM62 reads A, C, G and T as alanine, cysteine, glycine and threonine and returns a number. Values: auto (Auto - from the alignment's alphabet), EDNAFULL (EDNAFULL - nucleotides (EMBOSS NUC.4.4)), BLOSUM62 (BLOSUM62 - amino acids). Only applies when engine is progressive.auto
global_alignNoglobal alignment rather than local. Poapy's own default is LOCAL; both this tool and the MSA inspector open on global, which is the choice a full-length comparison wants - switch it off for reads over part of a locus. Only applies when engine is poa. Advanced.
score_matrixNosubstitution matrix for the pyMSA sum-of-pairs and star scores in the quality report. Both engines. Left unset only the matrix-free scores are computed (entropy, % non-gaps, % totally conserved columns) - an honest absence rather than a score under a matrix that does not match the alphabet. Values: PAM250 (PAM250 - amino acids, greater evolutionary distance), BLOSUM62 (BLOSUM62 - amino acids), EDNAFULL (EDNAFULL - nucleotides). Advanced.
include_subjectNoalso align the node's subject (the open or wired record).
terminal_penaltyNo`progressive` only: `true` charges overhanging ends like an internal gap - right for full-length homologues. `false` makes them free, which is right when a sequence covers only part of the region, e.g. a read against a gene. Only applies when engine is progressive.

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
fitYesper row: its closest row in this alignment, their identity here, and the same pair's identity aligned on its own with free end gaps (biotite align_optimal) — the loss shows where the alignment holds a row out of register; `outliers` names the rows flagged. `{ ok: false, reason }` when the check could not run
rowsYesaligned rows (name + gapped sequence)
countYesnumber of aligned sequences (excluding the consensus row)
engineYeswhich aligner produced this alignment — `poa` or `progressive`
lengthYesalignment width in columns
scoresYesthe pyMSA quality scores: summed entropy (nats, pyMSA's sign — negative), % non-gaps, % totally conserved columns, and the sum-of-pairs/star pair when a `score_matrix` was named
consensusYesthe per-column majority consensus (POA returns its own graph consensus row; the progressive engine has no graph, so the majority is the consensus for both)
conservationYesthe Clustal-style conservation line, one character per column — `*` where every row carries the same residue and the column is ungapped
guideTreeNewickYes`progressive` only: the guide tree the merge followed, in Newick, labelled with the row names. Branch lengths are deliberately omitted — a guide tree's heights are a clustering artifact, not divergence estimates
alignedSequencesYesthe aligned input rows only, excluding the generated consensus — wire this into build_tree

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observed

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, destructiveHint=false, openWorldHint=false; the description adds genuine context beyond that — that the engines are not fallbacks for each other, that poa emits its own consensus row, and warnings like naming the wrong substitution matrix 'is not an error the engine can raise'. It stops short of describing return structure, which the output schema covers.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the core distinction (two non-interchangeable engines) before the supporting detail, and every sentence about engine behavior earns its place. It is dense and somewhat long, overlapping with parameter descriptions, so not a clean 5.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 17-parameter tool with no required params, nested objects and an output schema, the description covers engine choice, engine-specific constraints and input sourcing well. A reader has enough to invoke it correctly, with parameter details and returns delegated to the schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so parameter meaning is already carried by the schema. The description reinforces the engine-to-parameter mapping and input wiring, but adds little syntax or semantics the schema lacks.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource (multiple-sequence alignment) and then distinguishes the two engines by the question each answers, in terms an agent can act on. It is clearly separable from siblings like align_read or ebi_align because it declares itself the multi-sequence family/pile aligner.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit engine-selection guidance: poa for 'a pile of reads over one locus', progressive for 'a FAMILY of homologous genes'. It also explains how to supply input (wire upstream outputs into sequences or name library documents). It stops short of naming sibling alternatives such as align_read for pairwise work, so not a full 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources