Discover which bioinformatics software tool, biomedical REST API, R/Bioconductor package, CRAN package, or training material exists for a task, before writing analysis code or building a pipeline. Covers ELIXIR bio.tools (30,000+ software tools/databases by keyword, EDAM topic, or EDAM operation), SmartAPI (biomedical API registry, incl. NCATS Translator components), ELIXIR TeSS (bioinformatics training materials/events), Bioconductor (R packages for computational biology), and CRAN (general R packages). Use when someone asks 'is there an existing tool/package for X', 'what software does [analysis]', 'find an API for Y', or 'is there a tutorial on Z'.
90%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
Low
Low-risk findings worth noting
Answers "what already exists for this task" — software, APIs, R packages, or training material — before writing new analysis code, choosing an nf-core pipeline, or wrapping a new REST API by hand.
LOOK UP, DON'T GUESS: Never assert that a tool/package/API does or doesn't exist for a task from memory. These 5 registries are live and current — search them.
NOT for: actually running an nf-core pipeline once you've picked one (-> tooluniverse-nfcore-pipelines); resolving IDs between databases (-> tooluniverse-sequence-retrieval's Bioregistry/Identifiers.org/TogoID section); retrieving biological data itself (sequences, structures, expression) rather than software/APIs about it.
ELIXIR's registry of 30,000+ bioinformatics tools, web services, and databases.
| Tool | Use for | Key params |
|---|---|---|
BioTools_search | Free-text keyword search across name/description/topics | q, page, size (max 50) |
BioTools_get_tool | Full record for a known tool by its bio.tools ID | biotoolsID |
BioTools_search_by_topic | Filter by EDAM scientific topic (e.g. "Genomics", "Proteomics") | topic, page, size |
BioTools_search_by_operation | Filter by EDAM operation — what the tool DOES (e.g. "Sequence alignment", "Variant calling") | operation, page, size |
BioTools_search_by_type | Filter by resource type | toolType (e.g. "Database portal"), q, page, size |
Which tool for "what software does X?": start with BioTools_search (free text). Results are relevance-ranked (sort=score): q="blast" returns BLAST first and q="variant calling" returns the GATK tools first. The _by_topic / _by_operation / _by_type filters are for narrowing and counting: they return the exact EDAM set (multi-word terms are sent as exact phrases, so operation="Variant calling" matches 1,015 tools, not the 4,165 a loose match gives), but upstream's ordering within a filter is not by relevance, so do not read the first few hits as "the best tools". Combine both: read the count from a filter, then rank with a text query.
Verified live: BioTools_search {"q": "RNA-seq", "size": 3} -> 6,081 total matches. BioTools_get_tool {"biotoolsID": "blast"} -> the real BLAST record (homepage, EDAM operations, full description). BioTools_search_by_topic {"topic": "Genomics"} -> 10,165 matches; BioTools_search_by_operation {"operation": "Sequence alignment"} -> 5,890 matches; BioTools_search_by_type {"toolType": "Database portal"} -> 2,597 matches — note toolType is the required param name, not tool_type, and topic/operation searches return a real, differently-sized result set per filter even when the very top-ranked item coincides across filters (bio.tools' own relevance/recency ranking, not a wrapper bug) — always check count and page through more than the first result.
~270 OpenAPI-described biomedical web APIs, many of them NCATS Biomedical Data Translator components (BioThings APIs, knowledge-provider APIs).
| Tool | Use for | Key params |
|---|---|---|
SmartAPI_search_apis | Keyword or field-scoped Lucene search (e.g. tags.name:translator) | query, limit (max 100) |
SmartAPI_get_api | Full spec for one API: base URLs, endpoint list, contact | api_id |
Verified live: SmartAPI_search_apis {"query": "biothings", "limit": 3} -> real APIs including "Biothings Therapeutic Target Database API" (base_url: https://biothings.transltr.io/ttd) and "MyGeneset.info API". Feeding that api_id into SmartAPI_get_api returns base_urls (prod/test/CI variants), endpoint_count: 5, and the actual endpoint paths (/query, /metadata, /association/{id}, ...).
Use this to find an API not yet wrapped as a dedicated ToolUniverse tool — resolve its base URL and endpoints here, then either call it directly (if simple/one-off) or use create-tooluniverse-skill to wrap it properly (the devtu-create-tool workflow it builds on now ships in the separate tu-harness plugin). Also useful for resolving an API mentioned in a paper's methods section to its actual current base URL.
Aggregates bioinformatics/life-science tutorials, courses, webinars, and events from ELIXIR nodes and partners.
| Tool | Use for | Key params |
|---|---|---|
ELIXIRTeSS_search_materials | Find tutorials/courses/webinars | q, scientific_topics (EDAM), target_audience, difficulty_level, licence, page_size, page |
ELIXIRTeSS_search_events | Find live/scheduled training events | q, plus similar filters |
Verified live: ELIXIRTeSS_search_materials {"q": "RNA-seq", "page_size": 3} -> real materials, e.g. "A practical introduction to bioinformatics and RNA-seq using Galaxy". ELIXIRTeSS_search_events {"q": "bioinformatics"} -> real upcoming events (e.g. a 2026-09-21 SIB Swiss Institute of Bioinformatics course, "Feature Selection for Bioinformatics with Python"). A query with zero matches (e.g. q: "CRISPR" at time of testing) returns a clean empty list, not an error — confirmed by re-running with a broader query and an empty-query call, both of which returned real, different, non-empty result sets, so treat an empty result as "nothing currently listed for that exact term," not a broken call.
2,200+ R packages for RNA-seq, single-cell, proteomics, epigenomics, and more, indexed via the R-universe search API.
| Tool | Use for | Key params |
|---|---|---|
Bioconductor_search_packages | Keyword/topic search | q, limit (max 100) |
Bioconductor_get_package | Full metadata for a known package | package_name (exact, case-sensitive) |
Verified live: Bioconductor_search_packages {"q": "differential expression", "limit": 3} -> real packages ranked by relevance score (_score), e.g. compcodeR. Bioconductor_get_package {"package_name": "DESeq2"} -> the real current DESeq2 record (Version: "1.53.3", full author list, description) — note the param is package_name, not package (that name is reserved for the separate CRAN tools below; passing package to this tool fails validation).
20,000+ general R packages (via the crandb mirror) — use for R packages outside Bioconductor's bio-specific scope (stats, viz, data wrangling, and bio-adjacent packages like survival).
| Tool | Use for | Key params |
|---|---|---|
CRAN_get_package | Current metadata: version, description, license, dependencies | package (exact, case-sensitive) |
CRAN_get_package_versions | Full release history | package |
Verified live: CRAN_get_package {"package": "ggplot2"} -> real current metadata (Version: "4.0.3", full author list, license). CRAN_get_package_versions {"package": "ggplot2"} -> full version history back to 0.5 (2007-01-01) with each version's own metadata snapshot.
| Resource | What it holds | Example question |
|---|---|---|
| bio.tools (Sec. 1) | Bioinformatics software/services/databases, catalogued by EDAM topic & operation | "What tools do variant calling from BAM files?" |
| SmartAPI (Sec. 2) | Live biomedical REST APIs with machine-readable specs | "What's the base URL and endpoints for the BioThings TTD API?" |
| ELIXIR TeSS (Sec. 3) | Training materials and events | "Is there a beginner RNA-seq course I can point someone to?" |
| Bioconductor (Sec. 4) | R packages specifically for computational biology | "What Bioconductor package does differential expression on RNA-seq counts?" |
| CRAN (Sec. 5) | General-purpose R packages (incl. bio-adjacent) | "What does the survival package's current version support?" |
A Bioconductor_search_packages hit and a CRAN_get_package hit can both resolve for a genuinely bio-relevant R package (e.g. survival lives on CRAN, not Bioconductor) — try Bioconductor first for a task that sounds computational-biology-specific, and fall back to CRAN if it's a general statistics/viz need or Bioconductor returns nothing relevant.
Bioconductor_get_package takes package_name; CRAN_get_package/CRAN_get_package_versions take package; BioTools_search_by_type takes toolType (camelCase), not tool_type. Don't assume a shared convention across these 5 resources — check each tool's own schema.count field, which does differ, and by paging further if the very top hit looks generic.mims-harvard/ToolUniverse
37bb81a
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.