Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Performs multiple sequence alignment of proteins with EBI Clustal Omega. Use when you need to align multiple sequences to assess similarity, domain conservation, or key residue conservation. Supports up to 4000 sequences and a maximum file size of 4 MB. Do not use to search for homologous proteins in a database (use MMseqs2, BLAST), align non-protein sequences (DNA, RNA), perform structural alignment (use Foldseek, PyMOL), or if you only have a single sequence.
.claude/skills/mkurman-protein-sequence-msa/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-08 | ✗→✓ | ▲ Improved | 86% | 0% |
| case-09 | ✗→✓ | ▲ Improved | 148% | 0% |
| case-15 | ✗→✓ | ▲ Improved | -8% | 0% |
| case-16 | ✗→✓ | ▲ Improved | 115% | 0% |
| case-10 | ✓→✗ | ▼ Worse | -23% | 0% |
uv: Read the uv skill and follow its Setup instructions to ensureuv is installed and on PATH.
this skill directory then (1) prominently notify the user to check the terms at https://www.ebi.ac.uk/jdispatcher/msa/clustalo and https://www.ebi.ac.uk/about/terms-of-use/, then (2) create the file recording the notification text and timestamp.
.env file: Make sure the .env file exists in your home directory.Create one if it does not exist.
USER_EMAIL (optional but recommended): Recommended by the EBI forClustal Omega job tracking, but the skill works without it. If the variable is missing from .env, do NOT ask the user to paste it into the chat (this would leak the value into the agent's context). Instead, give the user this command — substituting ENV_FILE with the resolved literal path to the .env file:
bash printf "Enter contact email: " && read email && echo "USER_EMAIL=$email" >> "ENV_FILE" && echo "Saved."
The scripts load credentials automatically via dotenv. NEVER read, print, or inspect the .env file or its variables (e.g. no cat, grep, echo, printenv, or os.environ.get on keys). Credentials must stay out of the agent's context.
scripts/msa_align.py rather than writing your own curl or custom Python requests. The script automatically enforces the required rate limit to respect EBI's Terms of Use.
output.
alignment was performed using EBI Clustal Omega.
Report only what is present in the alignment file.
Take a file containing multiple protein sequences in FASTA format, perform multiple sequence alignment using the EBI Clustal Omega API, save the resulting alignment locally for future programmatic analysis, and interpret the results towards addressing the user's specific research objective (e.g., assessing similarity, identifying conserved domains, or analyzing key residues).
or more protein sequences in FASTA format. Each sequence header must start with a > symbol. Example:
>Sequence_1_Name MQIFVKTLTGKTITLEVEPSDTIENVKAKIQDKEGIPPDQ QRLIFAGKQLEDGRTLSDYNIQKESTLHLVLRLRGG >Sequence_2_Name MQIFVKTLTGKTITLEVEPSDTIENVKAKIQDKEGIPPDQ QRLIFAGKQLEDGRTLSDYNIQKESTLHLVLRLRGG
bash uv run scripts/msa_align.py <INPUT_FASTA> -o <OUTPUT_FILE>
Always specify the output file with -o or --output.
selecting metrics and mapping strategies aligned with the research objective. Note that while Clustal Omega produces a Global Alignment, pairwise metrics can be extracted to evaluate specific relationships within the set:
insertions/deletions (gaps) affect the final percentage. Select the most appropriate calculation based on the biological context:
(Length of Shorter Sequence). Use when determining if a specific domain or fragment is fully preserved within a larger protein. This ignores gaps in the longer sequence, focusing purely on the "content" of the shorter one.
(Total Alignment Columns). Use when comparing full-length sequences of similar expected length. This is the most conservative metric; it penalizes for all gaps (indels) introduced by any sequence in the MSA.
(Total Alignment Columns - Terminal Gaps). Use when comparing a fragment to a full-length protein or when sequences have long unaligned "tails." This focuses on similarity only where the sequences physically overlap.
(Total Alignment Columns). Use for quantifying the percentage of residues that are 100% identical across the entire alignment set. This identifies the core evolutionary signature of the protein family.
sequences to ground the analysis:
(e.g., catalytic residues, binding motifs) from your input or via external tools.
Column Indices of the alignment.
are invariant across the set.
specifically within the mapped functional regions rather than the whole sequence.
goal, e.g. using conservation to corroborate a prediction or divergence to reject a functional hypothesis.
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→fail | 26,202 | 6,177 | -76% | 1 | 1 | 0% | 4,374 | 1,724 | -61% | 0 | 0 | — |
case-02 | fail→fail | 12,096 | 5,787 | -52% | 1 | 1 | 0% | 2,083 | 1,664 | -20% | 0 | 0 | — |
case-03 | fail→fail | 6,918 | 6,986 | +1% | 1 | 1 | 0% | 252 | 1,673 | +564% | 0 | 0 | — |
case-04 | fail→fail | 13,784 | 6,596 | -52% | 1 | 1 | 0% | 1,980 | 1,859 | -6% | 0 | 0 | — |
case-05 | fail→fail | 10,881 | 11,862 | +9% | 1 | 1 | 0% | 1,823 | 1,765 | -3% | 0 | 0 | — |
case-06 | fail→fail | 7,641 | 6,157 | -19% | 1 | 1 | 0% | 1,319 | 1,751 | +33% | 0 | 0 | — |
case-07 | fail→fail | 13,709 | 6,782 | -51% | 1 | 1 | 0% | 2,287 | 1,749 | -24% | 0 | 0 | — |
case-08 | fail→pass | 7,493 | 8,263 | +10% | 1 | 1 | 0% | 1,144 | 2,130 | +86% | 0 | 0 | — |
case-09 | fail→pass | 5,366 | 4,665 | -13% | 1 | 1 | 0% | 915 | 2,268 | +148% | 0 | 0 | — |
case-10 | pass→fail | 12,392 | 6,073 | -51% | 1 | 1 | 0% | 2,139 | 1,646 | -23% | 0 | 0 | — |
case-11 | fail→fail | 12,587 | 8,483 | -33% | 1 | 1 | 0% | 2,445 | 2,029 | -17% | 0 | 0 | — |
case-12 | fail→fail | 11,909 | 9,995 | -16% | 1 | 1 | 0% | 1,967 | 2,156 | +10% | 0 | 0 | — |
case-13 | fail→fail | 15,656 | 9,732 | -38% | 1 | 1 | 0% | 2,393 | 2,054 | -14% | 0 | 0 | — |
case-14 | fail→fail | 6,260 | 10,240 | +64% | 1 | 1 | 0% | 910 | 1,878 | +106% | 0 | 0 | — |
case-15 | fail→pass | 13,824 | 5,222 | -62% | 1 | 1 | 0% | 2,493 | 2,299 | -8% | 0 | 0 | — |
case-16 | fail→pass | 5,230 | 3,107 | -41% | 1 | 1 | 0% | 888 | 1,910 | +115% | 0 | 0 | — |
case-17 | pass→fail | 14,311 | 5,677 | -60% | 1 | 1 | 0% | 2,591 | 1,651 | -36% | 0 | 0 | — |
case-18 | pass→fail | 12,562 | 9,380 | -25% | 1 | 1 | 0% | 2,256 | 2,004 | -11% | 0 | 0 | — |
case-19 | fail→fail | 9,279 | 8,025 | -14% | 1 | 1 | 0% | 1,518 | 1,838 | +21% | 0 | 0 | — |
case-20 | fail→fail | 15,461 | 6,886 | -55% | 1 | 1 | 0% | 3,016 | 1,651 | -45% | 0 | 0 | — |
case-21 | fail→fail | 5,677 | 6,840 | +20% | 1 | 1 | 0% | 854 | 1,908 | +123% | 0 | 0 | — |
case-22 | fail→fail | 12,592 | 7,363 | -42% | 1 | 1 | 0% | 2,042 | 1,743 | -15% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted, and 4 counted toward the lift figure. The other 18 produced results that are not comparable between the two arms, so they are excluded from the headline rather than averaged into it. The headline lift of +5 percentage points is the difference between those two pass rates over the 4 comparable cases. 13 cases got worse with the skill loaded, and they are included in that figure.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.