Skip to content
Agentmart
Submit a tool

bioservices

Provides a Python interface to bioinformatics services including UniProt, KEGG, ChEMBL, Reactome, QuickGO, and UniChem.

Skill by K-Dense-AI

IndexedMIT★ 54,411
Write a review

Chalk Labs

Need help deploying bioservices?

Chalk Labs sets up agents like this inside real teams: connected to your tools, tested on your data, with a human in the loop where it matters.

Book a call

Install

Works with Claude Code, Claude apps, Codex, Cursor, Gemini CLI, GitHub Copilot, VS Code, OpenCode, Goose, Windsurf. Read the repository before you give any tool access to your data.

npx agentmarket install skill/k-dense-ai-bioservices

Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.

Get the weekly diff

The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.

We use your email only for this newsletter. Privacy

About

Provides a Python interface to bioinformatics services including UniProt, KEGG, ChEMBL, Reactome, QuickGO, and UniChem. Used for cross-database protein annotation, pathway retrieval, chemical identifier mapping, and integrated biological data workflows with BioServices.

Use cases: backend, data

No reviews yet. Installed it? Reviews come from verified installers only. How reviews work

Permissions

What this skill can do and what it asks for, from its SKILL.md. Checked Oct 25, 2026.

Tools
No tools found
Secrets
None asked for
Install scripts
None found
Runs as
Python package

Network hosts it talks to 1

  • codeload.github.com · found in install command

Files it touches

  • ~/.claude/skills/bioservices

Tools it pre-approves 4

From allowed-tools in SKILL.md: the agent may use these without asking you each time.

  • Read
  • Write
  • Edit
  • Bash

What's inside

Skill name
bioservices
Description
Provides a Python interface to bioinformatics services including UniProt, KEGG, ChEMBL, Reactome, QuickGO, and UniChem. Used for cross-database protein annotation, pathway retrieval, chemical identifier mapping, and integrated biological data workflows with BioServices.
License
MIT
Compatibility
Requires Python >=3.9,<4 with bioservices==1.16.0 and internet access. EMBL-EBI BLAST submission requires a real contact email; the bundled script reads NCBI_EMAIL or an explicit parameter.
Allowed tools
Read, Write, Edit, Bash
Metadata
version: 1.7 · skill-author: K-Dense Inc. · last-reviewed: 2026-09-30
Instructions
232 lines in SKILL.md · view on GitHub

Before installing

  • Ships executable scripts
  • Pre-approves any shell command

Files (8)

  • SKILL.md
  • identifier_mapping.md · references/
  • services_reference.md · references/
  • workflow_patterns.md · references/
  • batch_id_converter.py · scripts/
  • compound_cross_reference.py · scripts/
  • pathway_analysis.py · scripts/
  • protein_analysis_workflow.py · scripts/

SKILL.md (first lines)

# BioServices

## When to use

Use BioServices when combining protein annotation, gene/pathway membership,
compound cross-references, or genomic resources in Python. Its service clients
share transport helpers, but their request parameters and return types differ.
Use [the service reference](references/services_reference.md) before composing
clients; method names from PubChemPy, mygene, or older BioServices are not portable.

Targets **bioservices 1.16.0**, the current PyPI release at review. Package metadata
allows Python >=3.9,<4; the bundled tests were run in an isolated Python 3.13
environment. The previous 3.12 upper bound was not a package requirement.

```bash
uv pip install "bioservices==1.16.0"
```

## Workflow

1. Resolve the requested organism and entity to stable accessions. Review search
   hits before selecting one; gene symbols and compound names may be ambiguous.
2. Inspect the service's actual response type, including pagination and errors.
   BioServices can return an integer-like HTTP error or `None`, not only raise.
3. Preserve one-to-many mappings, failed identifiers, taxonomy, database release,
   query parameters, and retrieval date alongside derived tables.
4. Distinguish annotations and inferred associations from experimental evidence.
   Pathway membership alone is not an enrichment analysis or causal finding.
5. Run a small lookup before batching; honor provider limits and retain failures
   separately from confirmed empty results.

## Protein search, sequence retrieval, and mapping

```python
from bioservices import UniProt

u = UniProt(verbose=False)
u.services.TIMEOUT = 30
rows = u.search(
    "gene_exact:ZAP70 AND organism_id:9606 AND reviewed:true",
    frmt="tsv", columns="accession,gene_names,organism_name,length",
    limit=5, size=5,
)
if not isinstance(rows, str):
    raise RuntimeError("UniProt search failed")
print(rows)
fasta = u.retrieve("P43403", frmt="fasta")
record = u.retrieve("P43403", frmt="json")

mapping = u.mapping(fr="UniProtKB_AC-ID", to="KEGG", query="P43403")
if not isinstance(mapping, dict) or "results" not in mapping:
    raise RuntimeError("Mapping incomplete or failed")
kegg_ids = [row["to"] for row in mapping["results"] if row["from"] == "P43403"]
print(kegg_ids, mapping.get("failedIds", []))
```

Use `frmt="tsv"`, not `"tab"`; current field names include `accession`,
`gene_names`, `organism_name`, `protein_name`, `go_id`, and `xref_pdb`.
`mapping()` returns a `results`/`failedIds` envelope, **not** a source-to-list
dictionary. Mapping **to** UniProt uses `to="UniProtKB"` and returns full records
in `row["to"]`; extract `primaryAccession`. `UniProtKB_AC-ID` is a source code.
See [identifier mapping](references/identifier_mapping.md) for allowed pairs,
normalization, and limits. For bounded searches set `size=limit` (at most 500);
1.16.0 mixes the two values in its pagination loop.

## KEGG pathways and networks

```python
from bioservices import KEGG

k = KEGG(verbose=False)
k.services.url = "https://rest.kegg.jp"
pathway_names = k.get_pathway_by_gene("7535", "hsa")  # dict: pathway ID -> name
print(pathway_names)
kgml = k.parse_kgml_pathway("hsa04660")
entries = {entry["id"]: entry for entry in kgml["entries"]}
for relation in kgml["relations"][:5]:
    print(entries[relation["entry1"]]["name"], relation["name"],
          entries[relation["entry2"]]["name"])
```

The reviewed `/list/organism` endpoint returned HTTP 400 despite remaining in
the manual. SDK methods that validate against that catalogue can fail. The
bundled compound and pathway-list scripts use the documented scoped endpoints
through `k.services.http_get` to avoid that unrelated catalogue dependency.

KEGG `get` permits at most ten entries; KGML permits one pathway per request.
Keep requests at or below three per second. `list`/`find` return TSV strings;
`get` returns a flat-file string unless an option changes the representation.
KGML entries include genes, compounds, groups, and maps. A relation can produce
several subtype records; those counts are neither unique genes nor independent
physical interactions. Entry IDs are local to each pathway. The bundled SIF
export namespaces them as `pathway#entry` so combining pathways cannot merge
unrelated nodes. `pathway2sif(..., uniprot=False)` is an optional lossy projection
of gene-to-gene activation/inhibition, not a complete pathway network.

## Compound cross-references

```python
from bioservices import UniChem

uc = UniChem(verbose=False)
response = uc.get_compounds("CHEBI:15365", "chebi")  # aspirin
if not isinstance(response, dict) or "compounds" not in response:
    raise RuntimeError("UniChem request failed")
chembl_ids = sorted({source["compoundId"]
    for match in response["compounds"] for source in match.get("sources", [])
    if source.get("shortName") == "chembl"})
print(chembl_ids)
```

UniChem 2 uses `POST /api/v1/compounds` with a JSON body; BioServices assembles it.
Discover source names through `uc.source_ids`; KEGG is absent at review. From a
KEGG compound, preserve every ChEBI cross-reference and use only a uniquely
resolved, structurally reviewed candidate. Check charge, stereochemistry, salts,
and parent forms before merging data. Multiple unresolved name hits or mappings remain
unresolved in the bundled compound script. Empty results do not prove absence.

## QuickGO annotations

From K-Dense-AI/scientific-agent-skills, MIT.

More from K-Dense-AI/scientific-agent-skills

Signals

Stars
54,411
Forks
4,797
Open issues
8
Last commit (this folder)
Oct 1, 2026 (29 days ago)
Last release
Oct 1, 2026 (28 days ago)

From GitHub (fetched Oct 24, 2026).

Details

Version
1.7
License
MIT
First seen
Oct 24, 2026
Last checked
Oct 24, 2026

More from K-Dense-AI

Done for you

Rather not set it up yourself?

Chalk Labs scopes, builds and runs agents for your team: the task audit, the eval harness, the integrations and the weekly ops report. Fixed scope, priced before we start.

See how we build AI agents →Read the case studies

Chalk Labs is a two-founder AI and growth studio. We build AI agents, CRMs and MVPs for Web3 and AI companies, and have shipped 50+ product and token launches.

launches shipped
50+
launches shipped
media placements
500+
media placements
founders on every account
2
founders on every account

Press we've placed: Forbes · CoinDesk · Decrypt · Cointelegraph · The Block

Rahil Jain, Co-founder, Chalk Labs. Ex-Goldman Sachs engineer. You talk to the person who builds it.

Get bioservices running in your business

Tell us what you want to automate. A founder replies within one working day with a plan, not a pitch deck.

Goes to the Chalk Labs founders, not the newsletter. Privacy

Need help deploying bioservices?

CallGet help
Cite this page

bioservices skill. Agent Mart. https://agentmart.dev/skills/k-dense-ai-bioservices (last updated 2026-10-24)