Install
$ agentstack add skill-google-deepmind-science-skills-embl-ebi-ols ✓ scanned · ✓ verified, works with Claude Code, Cursor, and more.
Security review
✓ PassedNo issues found. Passed automated security review. · v0.1.0 How review works →
- ✓ Prompt-injection patterns
- ✓ Secret / credential exfiltration
- ✓ Dangerous shell & filesystem operations
- ✓ Untrusted network calls
- ✓ Known-malicious package signatures
What it can access
- ● Network access Used
- ✓ Filesystem access No
- ✓ Shell / process execution No
- ✓ Environment & secrets No
- ✓ Dynamic code execution No
From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.
Verified badge
Passed review? Show it. Paste this badge into your README, it links to the public security report.
Reliability & compatibility
Declared compatibility
Compatibility is declared by the source manifest. End-to-end runtime verification is coming, see below.
We're building live execution health for every listing: tool-call success rate, median latency, uptime, and last-checked timestamps, measured, not self-reported. It isn't live yet, so we don't show numbers we can't stand behind.
How agent discovery & health will work →About
EMBL-EBI Ontology Lookup Service (OLS)
Prerequisites
uv: Read theuvskill and follow its Setup instructions to ensure
uv is installed and on PATH.
- User Notification: If LICENSE_NOTIFICATION.txt does not already exist in
this skill directory then (1) prominently notify the user to check the terms at https://www.ebi.ac.uk/ols4/api-docs, then (2) create the file recording the notification text and timestamp.
Core Rules
- [!IMPORTANT] Use the Utility Scripts: You MUST ALWAYS use the provided
utility script under scripts/ for all API interactions, including checking status. NEVER use curl or custom Python requests to query API directly.
- Rate Limiting & Resilience: You MUST respect EBI's Terms of Use with a
maximum 5 requests per second. The provided utility scripts automatically enforce this.
- Notification: If this skill is used, ensure this is mentioned in the
output.
When to Use — Quick Recipes
Use this skill whenever a user query matches one of these patterns:
- Definition of a disease, phenotype, or term → `getterm.py --oboid
--summary`
- Subtypes or children of a term → `getterm.py --oboid
--relations children`
- Parent of a term →
get_term.py --obo_id --relations parents - Ancestors / disease categories / classified under → `get_term.py
--obo_id --relations ancestors`
- Root terms of an ontology →
get_term.py --ontology --roots - Hierarchical parents (is-a + part-of) → `getterm.py --oboid
--relations hierarchicalParents`
- Structures part of / hierarchical children → `getterm.py --oboid
--relations hierarchicalChildren`
- Compare direct vs hierarchical parents → `getterm.py --oboid
--relations parents,hierarchicalParents`
- Search for a term (e.g., "apoptosis" in GO) → `search_ols.py --query "..."
--ontology `
- Find a GO term matching a function → `search_ols.py --query "..."
--ontology go --exact`
- Search in MONDO, CHEBI, CL, UBERON → `search_ols.py --query
"..." --ontology --defining`
- Paginate search results / next page → `search_ols.py --query "..."
--rows N --start `
- Autocomplete a partial name →
suggest_ols.py --query "..." - Ontology metadata (e.g., EFO info) →
get_ontology.py --id - OLS index statistics →
get_stats.py
> Multi-step queries (e.g., "What is the parent of myocardial infarction?"): > When the user names a term but you don't know its OBO ID, complete in > exactly 2 steps — do NOT search across multiple ontologies: > > 1. Search in the single most appropriate ontology: search_ols.py --query > "myocardial infarction" --ontology doid --exact --rows 1 --output > /tmp/step1.json > 2. Get relations using the OBO ID from step 1: get_term.py --obo_id > DOID:5844 --relations parents --output /tmp/step2.json > > Ontology selection rule: ALWAYS use doid for common human diseases > (e.g., diabetes, cancer), hp for phenotypes, go for gene functions, > chebi for chemicals, uberon for anatomy, cl for cell types. Use mondo > ONLY when cross-species context is explicitly mentioned or needed.
Utility Scripts
1. Search Terms Across Ontologies
Search for ontology terms by keyword and return clean JSON.
uv run scripts/search_ols.py --query "diabetes" \
--rows 5 --output /tmp/ols_search_results.json 2>/dev/null
> Important: --output is required for all scripts. Results are always > written to the specified file. For larger output, you can limit --rows > (e.g., 5-10) or paginate using --start.
Returned Fields: JSON results include iri, label, description, ontology_name, ontology_prefix, obo_id, short_form, type, is_defining_ontology, and exact_synonyms.
Pagination: Output includes a pagination block with start, rows, and has_more so you can decide whether to fetch more results.
Options:
--query: Search string (required). Searches labels, synonyms,
descriptions, and identifiers.
--ontology: Filter by ontology ID (e.g.,go,doid,efo,hp).
Recommended when you know which ontology to search — avoids noise from 250+ ontologies.
--type: Filter by entity type:class,property,individual, or
ontology.
--exact: Flag for exact label match only. **Use this for entity
resolution** when mapping a user's string to a specific ontology term ID.
--defining: Only return terms from their defining (authoritative)
ontology. E.g., GO:0005634 only from GO, not cross-referenced copies.
--obsolete: Flag to include obsolete terms in results.--local: Only return terms in their defining ontology.--childrenOf: Restrict to children of given term IRI(s), comma-separated.--allChildrenOf: Restrict to all children including transitive relations
(part of, develops from), comma-separated IRIs.
--queryFields: Comma-separated fields to search in (e.g.,
label,synonym,description).
--fieldList: Comma-separated fields to return.--groupField: Group results by unique IRI.--isLeaf: Only return leaf terms (no children).--rows: Number of results to return (default 10).--start: Pagination offset (default 0).--output: File path to save results (required).
2. Autocomplete / Suggest
Get autocomplete suggestions for partial term names.
uv run scripts/suggest_ols.py --query "diabet" --rows 5 \
--output /tmp/ols_suggest.json 2>/dev/null
Options:
--query: Partial term to autocomplete (required).--ontology: Filter by ontology ID(s), comma-separated.--rows: Number of suggestions (default 10).--start: Pagination offset (default 0).--output: File path to save results (default: stdout).
3. Get Term Details
Retrieve full details for a specific ontology term by its OBO ID or IRI.
uv run scripts/get_term.py --obo_id "GO:0005634" \
--output /tmp/ols_term.json 2>/dev/null
Returned Fields: JSON includes iri, label, description, obo_id, synonyms, ontology_name, is_obsolete, is_defining_ontology, has_children, is_root, annotation, in_subset, and any requested relations.
Summary Mode: Use --summary to get a clean, human-readable block on stdout (Label, OBO ID, Ontology, Definition, Synonyms). The full JSON is always saved to the --output file.
uv run scripts/get_term.py --obo_id "GO:0005634" --summary \
--output /tmp/nucleus_full.json
Options:
--obo_id: OBO-style identifier (e.g.,GO:0005634,DOID:9351). Mutually
exclusive with --iri. Auto-converts to IRI with double encoding.
--iri: Full IRI of the term. Mutually exclusive with--obo_id.--ontology: Ontology ID (auto-derived from--obo_idif not provided).--relations: Comma-separated list of relations to fetch.
- Direct (is-a only):
parents,children,ancestors,
descendants
- Hierarchical (is-a + transitive like "part of", "develops from"):
hierarchicalParents, hierarchicalChildren, hierarchicalAncestors, hierarchicalDescendants
- Graph:
graph— full graph JSON for a term
> Note: Use hierarchical variants for anatomical/developmental > ontologies (UBERON, CL) where transitive relations like "part of" and > "develops from" are critical for navigating the hierarchy.
--roots: List root terms of the ontology (requires--ontology).
--preferred_roots: List preferred root terms (requires--ontology).
--summary: Human-readable summary on stdout, full JSON to--output.
--output: File path to save results (default: stdout).
4. Get Property Details
Retrieve details for an ontology property (relation type) with hierarchy.
uv run scripts/get_property.py --obo_id "BFO:0000051" --ontology go \
--output /tmp/ols_property.json 2>/dev/null
Options:
--obo_id: OBO-style ID of the property. Mutually exclusive with--iri.--iri: Full IRI of the property. Mutually exclusive with--obo_id.--ontology: Ontology ID (required with--iri).--relations: Comma-separated:parents,children,ancestors,
descendants.
--roots: List root properties of the ontology (requires--ontology).--output: File path to save results (default: stdout).
5. Get Individual Details
Retrieve details for an ontology individual (instance).
uv run scripts/get_individual.py --obo_id "IAO:0000103" --ontology iao --types \
--output /tmp/ols_individual.json 2>/dev/null
Options:
--obo_id: OBO-style ID. Mutually exclusive with--iri.--iri: Full IRI. Mutually exclusive with--obo_id.--ontology: Ontology ID (required with--iri).--types: Fetch the direct types (classes) of this individual.--alltypes: Fetch all types including ancestor classes.--output: File path to save results (default: stdout).
6. Get Ontology Information
List available ontologies or retrieve details for a specific one.
uv run scripts/get_ontology.py --id go \
--output /tmp/ols_ontology.json 2>/dev/null
Options:
--id: Specific ontology ID (e.g.,go,efo,doid). If omitted, lists
all ontologies.
--page: Page number for pagination (default 0).--size: Number of ontologies per page (default 20).--output: File path to save results (default: stdout).
7. Get OLS Statistics
Retrieve index statistics (total ontologies, classes, properties, individuals).
uv run scripts/get_stats.py --output /tmp/ols_stats.json 2>/dev/null
Options:
--output: File path to save results (default: stdout).
Reference
- API Reference: See
[references/apireference.md](references/apireference.md) for common ontology IDs, OBO ID format, and key API endpoints.
Workflow
- Use
suggest_ols.pyfor autocomplete when you have a partial term name. - Search for terms using
search_ols.py. Use--definingto prioritize
authoritative definitions. Use --exact for entity resolution.
- If full details are needed, use
get_term.pywith the OBO ID or IRI. Use
--summary for a concise view.
- To explore a term's hierarchy, use `get_term.py --relations
parents,children for is-a only, or --relations hierarchicalParents,hierarchicalChildren` for "part of" etc.
- To explore from the top down, use
get_term.py --ontology go --roots. - For properties or individuals, use
get_property.pyorget_individual.py. - To discover available ontologies, use
get_ontology.py. - To check OLS index status, use
get_stats.py.
Source & license
This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.
- Author: google-deepmind
- Source: google-deepmind/science-skills
- License: Apache-2.0
- Homepage: https://antigravity.google/use-cases/science
Install and usage instructions live in the source repository linked above.
Reviews
No reviews yet, be the first.
Write a review
Versions
- v0.1.0 Imported from the upstream source.