install
source · Clone the upstream repo
git clone https://github.com/mdbabumiamssm/LLMs-Universal-Life-Science-and-Clinical-Skills-
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/mdbabumiamssm/LLMs-Universal-Life-Science-and-Clinical-Skills- "$T" && mkdir -p ~/.claude/skills && cp -r "$T/Skills/Clinical/Clinical_Databases/pharmacogenomics" ~/.claude/skills/mdbabumiamssm-llms-universal-life-science-and-clinical-skills-pharmacogenomics && rm -rf "$T"
manifest:
Skills/Clinical/Clinical_Databases/pharmacogenomics/SKILL.mdsource content
<!--
# COPYRIGHT NOTICE
# This file is part of the "Universal Biomedical Skills" project.
# Copyright (c) 2026 MD BABU MIA, PhD <md.babu.mia@mssm.edu>
# All Rights Reserved.
#
# This code is proprietary and confidential.
# Unauthorized copying of this file, via any medium is strictly prohibited.
#
# Provenance: Authenticated by MD BABU MIA
-->
name: bio-clinical-databases-pharmacogenomics description: Query PharmGKB and CPIC for drug-gene interactions, pharmacogenomic annotations, and dosing guidelines. Use when predicting drug response from genetic variants or implementing clinical pharmacogenomics. tool_type: python primary_tool: requests measurable_outcome: Execute skill workflow successfully with valid output within 15 minutes. allowed-tools:
- read_file
- run_shell_command
Pharmacogenomics
PharmGKB REST API
Query Drug-Gene Relationships
import requests def get_pharmgkb_annotations(gene_symbol): '''Get PharmGKB clinical annotations for a gene''' url = f'https://api.pharmgkb.org/v1/data/clinicalAnnotation' params = {'view': 'base', 'location.genes.symbol': gene_symbol} response = requests.get(url, params=params) return response.json()['data'] annotations = get_pharmgkb_annotations('CYP2D6') for ann in annotations[:5]: print(f"{ann['location']['genes'][0]['symbol']}: {ann['chemicals'][0]['name']}")
Query by Drug
def get_drug_annotations(drug_name): '''Get pharmacogenomic annotations for a drug''' url = 'https://api.pharmgkb.org/v1/data/clinicalAnnotation' params = {'view': 'base', 'chemicals.name': drug_name} response = requests.get(url, params=params) return response.json()['data'] warfarin_annotations = get_drug_annotations('warfarin')
Get Dosing Guidelines
def get_cpic_guidelines(gene_symbol): '''Get CPIC dosing guidelines for a gene''' url = 'https://api.pharmgkb.org/v1/data/guideline' params = {'view': 'base', 'relatedGenes.symbol': gene_symbol, 'source': 'CPIC'} response = requests.get(url, params=params) return response.json()['data'] guidelines = get_cpic_guidelines('CYP2C19') for g in guidelines: print(f"{g['name']}: {g['chemicals'][0]['name']}")
Star Allele Interpretation
CYP2D6 Metabolizer Status
# CYP2D6 activity scores for common alleles # Based on CPIC guidelines CYP2D6_ACTIVITY = { '*1': 1.0, # Normal function '*2': 1.0, # Normal function '*3': 0.0, # No function '*4': 0.0, # No function '*5': 0.0, # Gene deletion '*6': 0.0, # No function '*9': 0.5, # Decreased function '*10': 0.25, # Decreased function (common in East Asian) '*17': 0.5, # Decreased function '*41': 0.5, # Decreased function } def calculate_activity_score(allele1, allele2): '''Calculate CYP2D6 activity score from diplotype''' score1 = CYP2D6_ACTIVITY.get(allele1, 1.0) score2 = CYP2D6_ACTIVITY.get(allele2, 1.0) return score1 + score2 def get_metabolizer_status(activity_score): '''Convert activity score to metabolizer phenotype CPIC thresholds: - PM: 0 - IM: 0 < score <= 1.25 - NM: 1.25 < score <= 2.25 - UM: > 2.25 (gene duplications) ''' if activity_score == 0: return 'Poor Metabolizer (PM)' elif activity_score <= 1.25: return 'Intermediate Metabolizer (IM)' elif activity_score <= 2.25: return 'Normal Metabolizer (NM)' else: return 'Ultrarapid Metabolizer (UM)' score = calculate_activity_score('*1', '*4') status = get_metabolizer_status(score) print(f'Activity score: {score}, Status: {status}')
CYP2C19 Interpretation
CYP2C19_ACTIVITY = { '*1': 1.0, # Normal function '*2': 0.0, # No function (most common loss-of-function) '*3': 0.0, # No function '*17': 1.5, # Increased function } def cyp2c19_phenotype(allele1, allele2): '''Determine CYP2C19 metabolizer status''' score = CYP2C19_ACTIVITY.get(allele1, 1.0) + CYP2C19_ACTIVITY.get(allele2, 1.0) if score == 0: return 'Poor Metabolizer' elif score < 1.5: return 'Intermediate Metabolizer' elif score <= 2.0: return 'Normal Metabolizer' elif score <= 2.5: return 'Rapid Metabolizer' else: return 'Ultrarapid Metabolizer'
Drug Interaction Lookup
def check_pgx_interaction(drug, gene, variant): '''Check for pharmacogenomic drug-gene-variant interaction''' url = 'https://api.pharmgkb.org/v1/data/variantAnnotation' params = { 'chemicals.name': drug, 'location.genes.symbol': gene } response = requests.get(url, params=params) annotations = response.json().get('data', []) for ann in annotations: if variant in str(ann.get('variant', {}).get('name', '')): return { 'drug': drug, 'gene': gene, 'variant': variant, 'phenotype': ann.get('phenotypes', []), 'evidence': ann.get('evidenceLevel') } return None
Common PGx Gene-Drug Pairs
| Gene | Drugs | Clinical Impact |
|---|---|---|
| CYP2D6 | Codeine, tamoxifen, ondansetron | Efficacy, toxicity |
| CYP2C19 | Clopidogrel, omeprazole, escitalopram | Efficacy, dosing |
| CYP2C9 | Warfarin, phenytoin, NSAIDs | Bleeding risk, dosing |
| VKORC1 | Warfarin | Dosing |
| TPMT | Azathioprine, mercaptopurine | Myelosuppression |
| DPYD | Fluorouracil, capecitabine | Severe toxicity |
| HLA-B*57:01 | Abacavir | Hypersensitivity |
| HLA-B*15:02 | Carbamazepine | SJS/TEN |
| SLCO1B1 | Simvastatin | Myopathy risk |
| UGT1A1 | Irinotecan | Neutropenia |
Batch PGx Annotation
import pandas as pd def annotate_pgx_variants(vcf_variants, pgx_genes): '''Annotate variants in pharmacogenes Args: vcf_variants: DataFrame with chrom, pos, ref, alt pgx_genes: List of pharmacogenes to check ''' results = [] for gene in pgx_genes: annotations = get_pharmgkb_annotations(gene) for ann in annotations: results.append({ 'gene': gene, 'drug': ann['chemicals'][0]['name'] if ann.get('chemicals') else None, 'phenotype': ann.get('phenotypes', []), 'level': ann.get('levelOfEvidence') }) return pd.DataFrame(results) pgx_genes = ['CYP2D6', 'CYP2C19', 'CYP2C9', 'VKORC1', 'TPMT'] pgx_df = annotate_pgx_variants(vcf_df, pgx_genes)
Related Skills
- clinical-databases/clinvar-lookup - Pathogenicity classification
- variant-calling/clinical-interpretation - ACMG guidelines
- clinical-databases/variant-prioritization - Clinical filtering