query-interpro — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited query-interpro (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Query the InterPro REST API for protein domains, families, and functional sites.
import requests
import json
BASE_URL = "https://www.ebi.ac.uk/interpro/api"
# 1. Get protein annotation (domains/families for a UniProt ID)
def get_protein_domains(uniprot_id):
url = f"{BASE_URL}/protein/uniprot/{uniprot_id}"
r = requests.get(url, headers={"Accept": "application/json"})
r.raise_for_status()
return r.json()
# 2. Get InterPro entry details
def get_interpro_entry(interpro_id):
url = f"{BASE_URL}/entry/interpro/{interpro_id}"
r = requests.get(url, headers={"Accept": "application/json"})
r.raise_for_status()
return r.json()
# 3. Search InterPro by text
def search_interpro(query, max_results=10):
url = f"{BASE_URL}/entry/interpro"
params = {"search": query, "page_size": max_results}
r = requests.get(url, params=params, headers={"Accept": "application/json"})
r.raise_for_status()
return r.json()
# 4. Get domain matches for a protein
def get_domain_matches(uniprot_id):
url = f"{BASE_URL}/protein/uniprot/{uniprot_id}/entry/interpro"
r = requests.get(url, headers={"Accept": "application/json"})
r.raise_for_status()
return r.json()
# Example: TP53 domains
domains = get_domain_matches("P04637")
for result in domains.get("results", []):
meta = result.get("metadata", {})
name = meta.get("name", "N/A")
ipr_type = meta.get("type", "N/A")
accession = meta.get("accession", "N/A")
proteins = result.get("proteins", [])
if proteins:
locations = proteins[0].get("entry_protein_locations", [])
for loc in locations:
for frag in loc.get("fragments", []):
start = frag.get("start", "?")
end = frag.get("end", "?")
print(f"{accession} ({ipr_type}): {name} [{start}-{end}]")domain — Structural/functional domainfamily — Protein familyhomologous_superfamily — Distant homologsrepeat — Repeated motifsite — Active/binding site~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.