Unified Python access to 40+ bioinformatics web services; use when you need to query multiple databases (e.g., UniProt/KEGG/ChEMBL/Reactome) with one consistent API in a single workflow, especially for cross-database analysis and identifier mapping.
68
83%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
View guide
Passed
No findings from the security scan
python >= 3.9bioservices (install via pip/uv; version depends on your environment)Optional (commonly used alongside returned formats):
pandas >= 1.5 (TSV/tabular outputs)beautifulsoup4 >= 4.11 (XML parsing)lxml >= 4.9 (faster XML parsing)networkx >= 2.8 (network analysis of interactions)biopython >= 1.81 (sequence handling for FASTA outputs)A single runnable script that demonstrates a cross-service workflow:
"""
Run:
uv pip install bioservices pandas
python bioservices_example.py
Notes:
- Some services may rate-limit or be temporarily unavailable.
- NCBI BLAST requires an email; this example does not run BLAST to stay lightweight.
"""
from bioservices import UniProt, KEGG, QuickGO, PSICQUIC, UniChem
def main():
# --- UniProt: search + retrieve ---
u = UniProt(verbose=False)
# Search by entry name (example: ZAP70 human)
tab = u.search("ZAP70_HUMAN", frmt="tab", columns="id,entry name,genes,organism")
print("UniProt search (tab):")
print(tab.splitlines()[0:3], "\n") # show header + first rows
uniprot_ac = "P43403" # ZAP70_HUMAN accession
fasta = u.retrieve(uniprot_ac, "fasta")
print("UniProt FASTA header:")
print(fasta.splitlines()[0], "\n")
# --- UniProt: identifier mapping (UniProt -> KEGG) ---
mapping = u.mapping(fr="UniProtKB_AC-ID", to="KEGG", query=uniprot_ac)
print("UniProt -> KEGG mapping:")
print(mapping, "\n")
# --- KEGG: pathway discovery + parsing ---
k = KEGG(verbose=False)
k.organism = "hsa"
# Example gene: ZAP70 is KEGG gene hsa:7535
pathways = k.get_pathway_by_gene("7535", "hsa")
print("KEGG pathways containing hsa:7535:")
print(pathways, "\n")
pathway_id = "hsa04660" # T cell receptor signaling pathway (example)
kgml_relations = k.parse_kgml_pathway(pathway_id).get("relations", [])
print(f"KEGG KGML relations count for {pathway_id}: {len(kgml_relations)}\n")
# Export to SIF (useful for network tools)
sif = k.pathway2sif(pathway_id)
print(f"KEGG SIF preview for {pathway_id}:")
print("\n".join(sif.splitlines()[:5]), "\n")
# --- QuickGO: GO annotations for a UniProt protein ---
g = QuickGO(verbose=False)
ann = g.Annotation(protein=uniprot_ac, format="tsv")
print("QuickGO annotation TSV header:")
print(ann.splitlines()[0], "\n")
# --- PSICQUIC: interaction query (database name may vary by availability) ---
p = PSICQUIC(verbose=False)
# Example query: ZAP70 interactions in human
# Choose a database that is active in your environment; "intact" is commonly available.
interactions = p.query("intact", "ZAP70 AND species:9606")
print("PSICQUIC query result preview:")
print("\n".join(interactions.splitlines()[:3]), "\n")
# --- Compound workflow: KEGG compound -> UniChem -> ChEMBL ---
# Example: Geldanamycin
cpd_hits = k.find("compound", "Geldanamycin")
print("KEGG compound find('Geldanamycin'):")
print(cpd_hits, "\n")
# If you already know the KEGG compound ID:
kegg_compound_id = "C11222"
uc = UniChem(verbose=False)
chembl_id = uc.get_compound_id_from_kegg(kegg_compound_id)
print(f"UniChem KEGG {kegg_compound_id} -> ChEMBL:")
print(chembl_id, "\n")
if __name__ == "__main__":
main()UniProt, KEGG, QuickGO, PSICQUIC, NCBIblast). You instantiate a client and call methods that wrap the underlying endpoints.verbose: toggles HTTP/request logging (verbose=False is recommended for scripts).TIMEOUT: per-service timeout control (useful for slow networks or large responses).search(query, frmt=..., columns=...), retrieve(accession, format), mapping(fr=..., to=..., query=...)find(db, query), get(entry_id), parse(raw), parse_kgml_pathway(pathway_id), pathway2sif(pathway_id)run(...) → getStatus(jobid) → getResult(jobid, ...))pandas.read_csv(io.StringIO(text), sep="\t")BeautifulSoup or lxmlf5ef65b
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.