Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Query gene, variant, and drug annotations via BioThings APIs
.claude/skills/brycewang-stanford-biothings-api/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-01 | ✗→✓ | ▲ Improved | 72% | 0% |
| case-05 | ✗→✓ | ▲ Improved | 109% | 0% |
| case-09 | ✗→✓ | ▲ Improved | 130% | 0% |
| case-10 | ✗→✓ | ▲ Improved | 116% | 0% |
| case-17 | ✗→✓ | ▲ Improved | 454% | 0% |
BioThings is a family of high-performance biomedical annotation APIs developed at the Scripps Research Institute. The suite provides unified, up-to-date access to gene, variant, and chemical/drug annotations aggregated from dozens of authoritative sources. Three primary services cover the core entities in translational research:
All three share identical query syntax, require no authentication, and return JSON. Free for academic and commercial use.
No authentication or API keys are required. All endpoints are open-access.
bash# No API key needed — just query directly curl "https://mygene.info/v3/query?q=BRCA1&size=1"
GET https://mygene.info/v3/query?q={query}&size={n}Query by gene symbol, name, Entrez ID, Ensembl ID, or keyword. Supports boolean operators (AND, OR, NOT) and field-specific queries like symbol:CDK2.
bashcurl -s "https://mygene.info/v3/query?q=BRCA1&size=1"
Response:
json{ "took": 178, "total": 13223, "hits": [ { "_id": "672", "_score": 145.6796, "entrezgene": "672", "name": "BRCA1 DNA repair associated", "symbol": "BRCA1", "taxid": 9606 } ] }
GET https://mygene.info/v3/gene/{entrez_id}Returns comprehensive annotations for a single gene. Use the fields parameter to select specific data sources.
bash# Full annotation (large response) curl -s "https://mygene.info/v3/gene/1017" # Selective fields curl -s "https://mygene.info/v3/gene/1017?fields=symbol,name,summary,genomic_pos,go"
Response (key fields for CDK2, Entrez ID 1017):
json{ "_id": "1017", "symbol": "CDK2", "name": "cyclin dependent kinase 2", "HGNC": "1771", "MIM": "116953", "AllianceGenome": "1771", "taxid": 9606, "type_of_gene": "protein-coding" }
The full response includes accessions, Gene Ontology terms, pathway memberships (KEGG, Reactome, WikiPathways), protein domains (InterPro, Pfam), homology data, and genomic coordinates.
GET https://myvariant.info/v1/query?q={query}&size={n}Query by rsID, HGVS notation (e.g., chr7:g.140453136A>T), gene symbol, or ClinVar significance. Returns aggregated annotations from 15+ sources.
bashcurl -s "https://myvariant.info/v1/query?q=rs58991260&size=1"
Response (truncated):
json{ "took": 20, "total": 1, "hits": [ { "_id": "chr1:g.218631822G>A", "_score": 21.382616, "dbsnp": { "rsid": "rs58991260", "vartype": "snv", "ref": "G", "alt": "A", "chrom": "1" }, "cadd": { "phred": 1.679, "consequence": "INTERGENIC", "chrom": 1, "pos": 218631822 }, "gnomad_genome": { "af": { "af": 0.0150338, "af_afr": 0.0528007, "af_eas": 0.0, "af_nfe": 0.00032417 }, "alt": "A", "ref": "G" } } ] }
GET https://myvariant.info/v1/variant/{hgvs_id}bashcurl -s "https://myvariant.info/v1/variant/chr1:g.218631822G>A?fields=dbsnp,cadd,clinvar"
GET https://mychem.info/v1/query?q={query}&size={n}Query by drug name, NDC code, InChIKey, or active ingredient. Aggregates data from FDA NDC, DrugBank, ChEMBL, PubChem, SIDER, and more.
bashcurl -s "https://mychem.info/v1/query?q=aspirin&size=1"
Response (truncated):
json{ "took": 82, "total": 248, "hits": [ { "_id": "0615-8613", "_score": 13.657401, "ndc": { "substancename": "ASPIRIN", "nonproprietaryname": "Aspirin", "proprietaryname": "Adult Low Dose Aspirin", "active_numerator_strength": "81", "active_ingred_unit": "mg/1", "dosageformname": "TABLET, DELAYED RELEASE", "routename": "ORAL", "producttypename": "HUMAN OTC DRUG", "pharm_classes": [ "Cyclooxygenase Inhibitors [MoA]", "Decreased Platelet Aggregation [PE]", "Anti-Inflammatory Agents, Non-Steroidal [CS]", "Nonsteroidal Anti-inflammatory Drug [EPC]", "Platelet Aggregation Inhibitor [EPC]" ] } } ] }
GET https://mychem.info/v1/chem/{id}bashcurl -s "https://mychem.info/v1/chem/CHEMBL25?fields=drugbank,chembl,pubchem"
All BioThings APIs share the same query engine. Key features:
| Feature | Syntax | Example | |---------|--------|---------| | Field-specific | field:value | symbol:TP53 | | Boolean | AND, OR, NOT | BRCA1 AND cancer | | Wildcard | * | CDK* | | Range | [min TO max] | exac.af:[0.01 TO 0.05] | | Pagination | size, from | size=20&from=40 | | Field selection | fields | fields=symbol,name,go | | Sorting | sort | sort=_score:desc | | Batch POST | POST with ids | Up to 1000 IDs per request |
pythonimport requests, time MYGENE = "https://mygene.info/v3" MYVARIANT = "https://myvariant.info/v1" MYCHEM = "https://mychem.info/v1" def search_gene(symbol): resp = requests.get(f"{MYGENE}/query", params={"q": f"symbol:{symbol}", "size": 1, "species": "human"}) resp.raise_for_status() hits = resp.json().get("hits", []) return hits[0] if hits else {} def search_variants(gene_symbol, size=5): resp = requests.get(f"{MYVARIANT}/query", params={"q": f"clinvar.gene.symbol:{gene_symbol}", "fields": "dbsnp.rsid,clinvar.rcv.clinical_significance,cadd.phred", "size": size}) resp.raise_for_status() return resp.json().get("hits", []) def search_drug(name): resp = requests.get(f"{MYCHEM}/query", params={"q": name, "size": 1, "fields": "ndc.substancename,ndc.pharm_classes"}) resp.raise_for_status() hits = resp.json().get("hits", []) return hits[0] if hits else {} # Translational research pipeline: gene -> variants -> drug gene = search_gene("BRCA1") print(f"Gene: {gene.get('symbol')} (Entrez: {gene.get('entrezgene')})") time.sleep(0.35) variants = search_variants("BRCA1", size=3) for v in variants: rsid = v.get("dbsnp", {}).get("rsid", v.get("_id")) print(f" Variant: {rsid} | CADD: {v.get('cadd', {}).get('phred', 'N/A')}") time.sleep(0.35) drug = search_drug("olaparib") print(f" Drug: {drug.get('ndc', {}).get('substancename', 'N/A')}")
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→pass | 15,889 | 23,011 | +45% | 1 | 1 | 0% | 3,239 | 5,567 | +72% | 0 | 0 | — |
case-02 | pass→pass | 4,285 | 4,610 | +8% | 1 | 1 | 0% | 848 | 3,661 | +332% | 0 | 0 | — |
case-03 | pass→pass | 5,028 | 3,150 | -37% | 1 | 1 | 0% | 918 | 3,436 | +274% | 0 | 0 | — |
case-04 | pass→pass | 3,715 | 2,536 | -32% | 1 | 1 | 0% | 596 | 3,293 | +453% | 0 | 0 | — |
case-05 | fail→pass | 13,543 | 10,638 | -21% | 1 | 1 | 0% | 2,381 | 4,971 | +109% | 0 | 0 | — |
case-06 | pass→pass | 6,685 | 4,760 | -29% | 1 | 1 | 0% | 1,048 | 3,642 | +248% | 0 | 0 | — |
case-07 | pass→pass | 5,580 | 3,336 | -40% | 1 | 1 | 0% | 1,060 | 3,408 | +222% | 0 | 0 | — |
case-08 | pass→pass | 4,266 | 3,151 | -26% | 1 | 1 | 0% | 684 | 3,385 | +395% | 0 | 0 | — |
case-09 | fail→pass | 9,981 | 5,753 | -42% | 1 | 1 | 0% | 1,686 | 3,885 | +130% | 0 | 0 | — |
case-10 | fail→pass | 9,442 | 1,812 | -81% | 1 | 1 | 0% | 1,458 | 3,144 | +116% | 0 | 0 | — |
case-11 | pass→pass | 3,972 | 2,402 | -40% | 1 | 1 | 0% | 665 | 3,245 | +388% | 0 | 0 | — |
case-12 | pass→pass | 6,817 | 3,717 | -45% | 1 | 1 | 0% | 1,223 | 3,425 | +180% | 0 | 0 | — |
case-13 | pass→pass | 3,768 | 3,001 | -20% | 1 | 1 | 0% | 663 | 3,406 | +414% | 0 | 0 | — |
case-14 | pass→pass | 12,332 | 4,973 | -60% | 1 | 1 | 0% | 1,706 | 3,725 | +118% | 0 | 0 | — |
case-15 | pass→pass | 8,476 | 9,159 | +8% | 1 | 1 | 0% | 1,597 | 4,034 | +153% | 0 | 0 | — |
case-16 | pass→pass | 5,941 | 2,847 | -52% | 1 | 1 | 0% | 880 | 3,283 | +273% | 0 | 0 | — |
case-17 | fail→pass | 3,703 | 1,867 | -50% | 1 | 1 | 0% | 562 | 3,112 | +454% | 0 | 0 | — |
case-18 | pass→pass | 7,215 | 4,833 | -33% | 1 | 1 | 0% | 1,284 | 3,642 | +184% | 0 | 0 | — |
case-19 | pass→pass | 4,632 | 2,609 | -44% | 1 | 1 | 0% | 805 | 3,292 | +309% | 0 | 0 | — |
case-20 | pass→pass | 11,514 | 5,339 | -54% | 1 | 1 | 0% | 2,413 | 3,944 | +63% | 0 | 0 | — |
case-21 | pass→pass | 17,701 | 17,271 | -2% | 1 | 1 | 0% | 3,578 | 6,540 | +83% | 0 | 0 | — |
case-22 | pass→pass | 11,799 | 11,113 | -6% | 1 | 1 | 0% | 2,191 | 4,968 | +127% | 0 | 0 | — |
case-23 | pass→pass | 4,129 | 4,471 | +8% | 1 | 1 | 0% | 735 | 3,733 | +408% | 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. 23 cases were attempted. The headline lift of +22 percentage points is the difference between those two pass rates over the 23 comparable cases.
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.