# Chebi Query

> Query the ChEBI (Chemical Entities of Biological Interest) database. Use whenever the user asks about small molecule identifiers, chemical ontology roles, molecular formulae, SMILES, InChI, synonyms, or cross-references for biologically relevant chemical compounds via ChEBI.

- Skill: `gabrielmoreira/chebi-query` (Agent Skill, multi-file: 6 files)
- Install (CLI): `npx skillmds@latest add gabrielmoreira/chebi-query`
- Raw SKILL.md: https://api.skillmd.com/api/skills/gabrielmoreira/chebi-query/raw
- Safety review: pending (external: skill-scanner PASS, skillspector PASS)
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: AI & ML
- Author: gabrielmoreira (https://skillmd.com/u/gabrielmoreira)
- Updated: 2026-09-09
- Page: https://skillmd.com/skills/gabrielmoreira/chebi-query

---


# ChEBI Query Skill

Search the ChEBI 2.0 REST API by any entity. Auto-detects input type:

| Input Pattern | Detected As | Action |
|---|---|---|
| `CHEBI:15422` / `chebi:15422` | ChEBI ID (prefixed) | full entity lookup via `/compound/{id}/` |
| `27732` (pure digits ≤7) | ChEBI ID (numeric) | full entity lookup via `/compound/{id}/` |
| anything else | free text | Elasticsearch search via `/es_search/?term=...` |

## API

| Function | Input | Returns |
|---|---|---|
| `search(query, max_results=25)` | single entity string | `list[dict]` |
| `search_batch(queries, max_results=25)` | list of entity strings | `dict[str, list[dict]]` |
| `summarize(results, label)` | result list + label | compact one-line-per-hit text |
| `to_json(results)` | result list | `list[dict]` (JSON-serialisable) |

Lower-level helpers (called internally):

| Function | Purpose |
|---|---|
| `search_chebi(query, max_results)` | keyword search via `GET /es_search/?term=...&size=N` |
| `get_entity(chebi_id)` | full entity via `GET /compound/CHEBI:{id}/` |
| `get_entities_batch(chebi_ids)` | batch lookup via `GET /compounds/?chebi_ids=id1,id2,...` |

`search_batch()` automatically uses the efficient batch endpoint when all
queries are ChEBI IDs; otherwise it iterates with a 0.3 s delay.

## Usage

See `if __name__ == "__main__"` block in `64_ChEBI.py` for runnable examples
covering: single ID lookup, name search, formula search, batch ID search,
mixed batch search, and JSON output.

## Key Fields Returned

**Top-level**: `chebi_accession`, `name`, `ascii_name`, `definition`, `stars`
(curation quality; 3 = fully curated), `secondary_ids`, `is_released`.

**chemical_data** (nested dict): `formula`, `charge`, `mass`,
`monoisotopic_mass`.

**default_structure** (nested dict): `smiles`, `standard_inchi`,
`standard_inchi_key`, `wurcs`.

**names** (nested dict by type): keys like `IUPAC NAME`, `SYNONYM`,
`BRAND NAME`, `UNIPROT NAME`; each value is a list of name objects.

**ontology_relations**: `incoming_relations` and `outgoing_relations`, each a
list of `{init_id, init_name, relation_type, final_id, final_name}`.

**database_accessions** (nested dict by type): `CAS`, `MANUAL_X_REF`,
`REGISTRY_NUMBER`, `CITATION`; cross-refs to DrugBank, KEGG, HMDB, PubChem,
PDBeChem, Wikipedia, etc.

**roles_classification**: list of role dicts with `chebi_accession`, `name`,
`definition`, `biological_role` (bool), `application` (bool),
`chemical_role` (bool).

## Data Source

- **Database**: ChEBI 2.0 (EMBL-EBI), >195,000 molecular entities
- **API base**: `https://www.ebi.ac.uk/chebi/backend/api/public/`
- **Docs**: <https://www.ebi.ac.uk/chebi/backend/api/docs/>
- **License**: CC BY 4.0
- **Citation**: Bento et al. *Nucleic Acids Res.* 2025, 54(D1), D1768–D1774.

