Analyze and engineer protein glycosylation. Scan sequences for N-glycosylation sequons (N-X-S/T), predict O-glycosylation hotspots, and access curated glycoengineering tools (NetOGlyc, GlycoShield, GlycoWorkbench). For glycoprotein engineering, therapeutic antibody optimization, and vaccine design.
npx skills add https://github.com/K-Dense-AI/scientific-agent-skills --skill glycoengineering
Glycosylation is the most common and complex post-translational modification (PTM) of proteins, affecting over 50% of all human proteins. Glycans regulate protein folding, stability, immune recognition, receptor interactions, and pharmacokinetics of therapeutic proteins. Glycoengineering involves rational modification of glycosylation patterns for improved therapeutic efficacy, stability, or immune evasion.
Two major glycosylation types:
Use this skill when:
N-glycosylation occurs at the sequon N-X-[S/T] where X ≠ Proline.
import re
from typing import List, Tuple
def find_n_glycosylation_sequons(sequence: str) -> List[dict]:
"""
Scan a protein sequence for canonical N-linked glycosylation sequons.
Motif: N-X-[S/T], where X ≠ Proline.
Args:
sequence: Single-letter amino acid sequence
Returns:
List of dicts with position (1-based), motif, and context
"""
seq = sequence.upper()
results = []
i = 0
while i <= len(seq) - 3:
triplet = seq[i:i+3]
if triplet[0] == 'N' and triplet[1] != 'P' and triplet[2] in {'S', 'T'}:
context = seq[max(0, i-3):i+6] # ±3 residue context
results.append({
'position': i + 1, # 1-based
'motif': triplet,
'context': context,
'sequon_type': 'NXS' if triplet[2] == 'S' else 'NXT'
})
i += 3
else:
i += 1
return results
def summarize_glycosylation_sites(sequence: str, protein_name: str = "") -> str:
"""Generate a research log summary of N-glycosylation sites."""
sequons = find_n_glycosylation_sequons(sequence)
lines = [f"# N-Glycosylation Sequon Analysis: {protein_name or 'Protein'}"]
lines.append(f"Sequence length: {len(sequence)}")
lines.append(f"Total N-glycosylation sequons: {len(sequons)}")
if sequons:
lines.append(f"\nN-X-S sites: {sum(1 for s in sequons if s['sequon_type'] == 'NXS')}")
lines.append(f"N-X-T sites: {sum(1 for s in sequons if s['sequon_type'] == 'NXT')}")
lines.append(f"\nSite details:")
for s in sequons:
lines.append(f" Position {s['position']}: {s['motif']} (context: ...{s['context']}...)")
else:
lines.append("No canonical N-glycosylation sequons detected.")
return "\n".join(lines)
# Example: IgG1 Fc region
fc_sequence = "APELLGGPSVFLFPPKPKDTLMISRTPEVTCVVVDVSHEDPEVKFNWYVDGVEVHNAKTKPREEQYNSTYRVVSVLTVLHQDWLNGKEYKCKVSNKALPAPIEKTISKAKGQPREPQVYTLPPSREEMTKNQVSLTCLVKGFYPSDIAVEWESNGQPENNYKTTPPVLDSDGSFFLYSKLTVDKSRWQQGNVFSCSVMHEALHNHYTQKSLSLSPGK"
print(summarize_glycosylation_sites(fc_sequence, "IgG1 Fc"))
def eliminate_glycosite(sequence: str, position: int, replacement: str = "Q") -> str:
"""
Eliminate an N-glycosylation site by substituting Asn → Gln (conservative).
Args:
sequence: Protein sequence
position: 1-based position of the Asn to mutate
replacement: Amino acid to substitute (default Q = Gln; similar size, not glycosylated)
Returns:
Mutated sequence
"""
seq = list(sequence.upper())
idx = position - 1
assert seq[idx] == 'N', f"Position {position} is '{seq[idx]}', not 'N'"
seq[idx] = replacement.upper()
return ''.join(seq)
def add_glycosite(sequence: str, position: int, flanking_context: str = "S") -> str:
"""
Introduce an N-glycosylation site by mutating a residue to Asn,
and ensuring X ≠ Pro and +2 = S/T.
Args:
position: 1-based position to introduce Asn
flanking_context: 'S' or 'T' at position+2 (if modification needed)
"""
seq = list(sequence.upper())
idx = position - 1
# Mutate to Asn
seq[idx] = 'N'
# Ensure X+1 != Pro (mutate to Ala if needed)
if idx + 1 < len(seq) and seq[idx + 1] == 'P':
seq[idx + 1] = 'A'
# Ensure X+2 = S or T
if idx + 2 < len(seq) and seq[idx + 2] not in ('S', 'T'):
seq[idx + 2] = flanking_context
return ''.join(seq)
def predict_o_glycosylation_hotspots(
sequence: str,
window: int = 7,
min_st_fraction: float = 0.4,
disallow_proline_next: bool = True
) -> List[dict]:
"""
Heuristic O-glycosylation hotspot scoring based on local S/T density.
Not a substitute for NetOGlyc; use as fast baseline.
Rules:
- O-GalNAc glycosylation clusters on Ser/Thr-rich segments
- Flag Ser/Thr residues in windows enriched for S/T
- Avoid S/T immediately followed by Pro (TP/SP motifs inhibit GalNAc-T)
Args:
window: Odd window size for local S/T density
min_st_fraction: Minimum fraction of S/T in window to flag site
"""
if window % 2 == 0:
window = 7
seq = sequence.upper()
half = window // 2
candidates = []
for i, aa in enumerate(seq):
if aa not in ('S', 'T'):
continue
if disallow_proline_next and i + 1 < len(seq) and seq[i+1] == 'P':
continue
start = max(0, i - half)
end = min(len(seq), i + half + 1)
segment = seq[start:end]
st_count = sum(1 for c in segment if c in ('S', 'T'))
frac = st_count / len(segment)
if frac >= min_st_fraction:
candidates.append({
'position': i + 1,
'residue': aa,
'st_fraction': round(frac, 3),
'window': f"{start+1}-{end}",
'segment': segment
})
return candidates
Web service for high-accuracy O-GalNAc site prediction:
import requests
def submit_netoglycv4(fasta_sequence: str) -> str:
"""
Submit sequence to NetOGlyc 4.0 web service.
Returns the job URL for result retrieval.
Note: This uses the DTU Health Tech web service. Results take ~1-5 min.
"""
url = "https://services.healthtech.dtu.dk/cgi-bin/webface2.cgi"
# NetOGlyc submission (parameters may vary with web service version)
# Recommend using the web interface directly for most use cases
print("Submit sequence at: https://services.healthtech.dtu.dk/services/NetOGlyc-4.0/")
return url
# Also: NetNGlyc for N-glycosylation prediction
# URL: https://services.healthtech.dtu.dk/services/NetNGlyc-1.0/
GlycoShield-MD analyzes how glycans shield protein surfaces during MD simulations:
# Installation
uv pip install glycoshield
# Basic usage: analyze glycan shielding from glycosylated protein MD trajectory
glycoshield \
--topology glycoprotein.pdb \
--trajectory glycoprotein.xtc \
--glycan_resnames BGLCNA FUC \
--output shielding_analysis/
import requests
def query_glyconnect(uniprot_id: str) -> dict:
"""Query GlyConnect for glycosylation data for a protein."""
url = f"https://glyconnect.expasy.org/api/proteins/uniprot/{uniprot_id}"
response = requests.get(url, headers={"Accept": "application/json"})
if response.status_code == 200:
return response.json()
return {}
# Example: query EGFR glycosylation
egfr_glyco = query_glyconnect("P00533")
| Goal | Strategy | Notes |
|------|----------|-------|
| Enhance ADCC | Defucosylation at Fc Asn297 | Afucosylated IgG1 has ~50× better FcγRIIIa binding |
| Reduce immunogenicity | Remove non-human glycans | Eliminate α-Gal, NGNA epitopes |
| Improve PK half-life | Sialylation | Sialylated glycans extend half-life |
| Reduce inflammation | Hypersialylation | IVIG anti-inflammatory mechanism |
| Create glycan shield | Add N-glycosites to surface | Masks vulnerable epitopes (vaccine design) |
| Mutation | Effect |
|----------|--------|
| N297A/Q (IgG1) | Removes Fc glycosylation (aglycosyl) |
| N297D (IgG1) | Removes Fc glycosylation |
| S298A/E333A/K334A | Increases FcγRIIIa binding |
| F243L (IgG1) | Increases defucosylation |
| T299A | Removes Fc glycosylation |
| Symbol | Full Name | Type |
|--------|-----------|------|
| Glc | Glucose | Hexose |
| GlcNAc | N-Acetylglucosamine | HexNAc |
| Man | Mannose | Hexose |
| Gal | Galactose | Hexose |
| Fuc | Fucose | Deoxyhexose |
| Neu5Ac | N-Acetylneuraminic acid (Sialic acid) | Sialic acid |
| GalNAc | N-Acetylgalactosamine | HexNAc |
Typical complex biantennary N-glycan:
Neu5Ac-Gal-GlcNAc-Man\
Man-GlcNAc-GlcNAc-[Asn]
Neu5Ac-Gal-GlcNAc-Man/
(±Core Fuc at innermost GlcNAc)
Use when you have a written implementation plan to execute in a separate session with review checkpoints
Integration with protocols.io API for managing scientific protocols. This skill should be used when working with protocols.io to search, create, update, or publish protocols; manage protocol steps and materials; handle discussions and comments; organize workspaces; upload and manage files; or integrate protocols.io functionality into workflows. Applicable for protocol discovery, collaborative protocol development, experiment tracking, lab protocol management, and scientific documentation.
Analyzes job descriptions and generates tailored resumes that highlight relevant experience, skills, and achievements to maximize interview chances
Generate Excalidraw diagrams from natural language descriptions. Use when asked to "create a diagram", "make a flowchart", "visualize a process", "draw a system architecture", "create a mind map", or "generate an Excalidraw file". Supports flowcharts, relationship diagrams, mind maps, and system architecture diagrams. Outputs .excalidraw JSON files that can be opened directly in Excalidraw.
Build and distribute Expo development clients locally or via TestFlight
Data structure for annotated matrices in single-cell analysis. Use when working with .h5ad files or integrating with the scverse ecosystem. This is the data format skill—for analysis workflows use scanpy; for probabilistic models use scvi-tools; for population-scale queries use cellxgene-census.
Benchling R&D platform integration. Access registry (DNA, proteins), inventory, ELN entries, workflows via API, build Benchling Apps, query Data Warehouse, for lab data management automation.
Comprehensive molecular biology toolkit. Use for sequence manipulation, file parsing (FASTA/GenBank/PDB), phylogenetics, and programmatic NCBI/PubMed access (Bio.Entrez). Best for batch processing, custom bioinformatics pipelines, BLAST automation. For quick lookups use gget; for multi-service integration use bioservices.
Take k-dense-ai/glycoengineering from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.
The instructions reference pip, uv.
Without those the skill loads but fails at the first command.