Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Identify domains, families, and sites in proteins; find all proteins in a family or sharing a domain; explore species distribution for a domain; annotate genomes with protein families and GO terms. InterPro combines 14 databases (e.g., Pfam, CDD) into one searchable resource. InterPro-N significantly expands annotation and sequence coverage with deep learning. Includes domain architecture (IDA) search.
.claude/skills/mkurman-interpro-database/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-18 | ✗→✓ | ▲ Improved | 239% | 0% |
| case-20 | ✗→✓ | ▲ Improved | 138% | 0% |
| case-04 | ✓→✗ | ▼ Worse | 603% | 0% |
| case-05 | ✓→✗ | ▼ Worse | 256% | 0% |
| case-11 | ✓→✗ | ▼ Worse | 140% | 0% |
uv: Read the uv skill and follow its Setup instructions to ensureuv is installed and on PATH.
this skill directory then (1) prominently notify the user to check the terms at https://www.ebi.ac.uk/interpro/ and https://www.ebi.ac.uk/about/terms-of-use/, then (2) create the file recording the notification text and timestamp.
InterPro combines signatures from multiple, diverse databases into a single searchable resource, reducing redundancy and helping users interpret their sequence analysis results. By uniting these member databases (e.g., Pfam, CDD, SMART), InterPro capitalises on their individual strengths to produce a powerful diagnostic tool and integrated resource.
Use interpro-database to:
protein.
particular domain, even when the names and activities of the proteins are highly variable.
terms.
This skill provides a robust utility, interpro_client.py, to interact with the InterPro API seamlessly. It natively handles rate limiting (HTTP 429), background query sleep tracking (HTTP 408), terminal errors (HTTP 404/410), and lazy pagination.
scripts/interpro_client.py helperscript to query the database rather than accessing the database directly. The scripts automatically enforce fair use and implement retry logic.
--limit.This allows you to rapidly understand the data schema without polluting your context window or fetching millions of results.
than attempting to print it all to the console. Process the output using jq or code.
scripts to consume the generator directly, preventing the need to deserialize CLI strings in large workflows.
output.
Examples:
bashuv run ./scripts/interpro_client.py fetch protein --source_db reviewed --limit 2 --query_params tax_id=9606 --output exploratory_results.jsonl
pythonimport sys sys.path.append('scripts') from interpro_client import fetch_interpro_data import itertools # fetch_interpro_data lazily yields results page-by-page results = fetch_interpro_data( endpoint="entry", source_db="pfam", query_params={"page_size": 10} ) for match in itertools.islice(results, 10): print(match["metadata"]["accession"])
The arguments strictly map to the four common API path constructions. Do not format your own / separated strings:
/{endpoint} (e.g. /entry) uv run ./scripts/interpro_client.py fetchentry --limit 10 --output entries.jsonl
/{endpoint}/{sourceDB} (e.g. /entry/pfam) uv run./scripts/interpro_client.py fetch entry --source_db pfam --limit 10 --output pfam_entries.jsonl
/{endpoint}/{sourceDB}/{accession} (e.g. /entry/pfam/PF00001) uvrun ./scripts/interpro_client.py fetch entry --source_db pfam --accession PF00001 --limit 10 --output pf00001_entry.jsonl
/{endpoint}/{sourceDB}/{linked_endpoint}/{sourceDB}/{accession} (e.g./entry/interpro/protein/uniprot/P04637) uv run ./scripts/interpro_client.py fetch entry \ --source_db interpro \ --linked_endpoint protein \ --linked_source_db uniprot \ --linked_accession P04637 \ --limit 10 --output p04637_entries.jsonl
--source_db)Each endpoint only accepts specific source_db values. Using an invalid value returns a 404 error.
/entry (16 values): interpro, pfam, cathgene3d, ssf,panther, cdd, profile, smart, ncbifam, prosite, prints, hamap, pirsf, sfld, antifam.
/protein (3 values): uniprot (all), reviewed (SwissProt),unreviewed (TrEMBL).
/structure (1 value): pdb./taxonomy (1 value): uniprot./proteome (1 value): uniprot./set (2 values): pfam, cdd.For a complete, exhaustive list of all query parameters, see the Full API Reference.
The API is fully open and supports 6 core endpoints. You can combine them using the linked parameters described above. Below is a nested list of the specific query parameters available for each endpoint:
/entry (Domain, family, active site, repeat, or homologous superfamilyentries)
integrated: Filter by integrated status (e.g., pfam).type: Filter by type (e.g., family, domain,homologous_superfamily).
go_term / go_category: Filter by Gene Ontology.ida_search / ida_ignore / exact / ordered: Filter by domainarchitecture (see IDA Search section).
extra_fields: Request additional data (e.g., counters for matchcoordinates).
group_by / sort_by: Aggregate or sort results (valid values dependon context, see Full API Reference).
pfam --query_params type=domain --output count.jsonl
/protein (Protein records matching entries or domains)tax_id: Filter by taxonomy ID (does not search lineage).match_presence: Filter by proteins having InterPro matches(true/false).
is_fragment: Filter complete vs. fragment sequences.group_by: Aggregate results (e.g., taxonomy).extra_fields: Request sequence or match details.isoforms / residues / structureinfo: Include specificsub-features.
conservation / extra_features: Append residue conservation flags orMobidb/coil features (only valid for `/protein/{source_db}/{accession}`).
--source_db uniprot --limit 20 --query_params tax_id=9606 --output human_proteins.jsonl
/structure (PDB structures linked to InterPro entries)experiment_type: Filter by experimental method (e.g., X-RAYDIFFRACTION).
resolution: Filter by resolution limit.extra_fields: Include additional structural metadata.group_by: Aggregate results.--accession 1ATP --limit 10 --output 1atp_structures.jsonl
/taxonomy (Taxonomy distribution nodes)key_species: Filter to limit to key species.with_names: Include scientific names.filter_by_entry / filter_by_entry_db: Filter intersection withspecific entries.
extra_fields: Additional taxonomic metadata.uniprot --accession 9606 --limit 10 --output human_taxonomy.jsonl
/proteome (Complete proteomes linked to InterPro)extra_fields: General query expansion.--source_db uniprot --accession UP000005640 --limit 10 --output proteome.jsonl
/set (Curated sets of related entries, e.g., Pfam clans)extra_fields: Additional metadata (only valid for/set/{sourceDB}).
pfam --accession CL0001 --limit 10 --output pfam_clan.jsonl
InterPro provides powerful tools for searching proteins by their domain architecture (the exact combination and order of domains). Because the API does not allow querying proteins directly by multiple domains at once (e.g., "give me proteins with PF00069 AND PF00017"), finding proteins with specific domain combinations requires a two-step process.
ida_search)The ida_search parameter is used on the root /entry endpoint to find all Domain Architectures (IDAs) containing the domains you specify.
/entry endpoint.ida_search):ida_ignore: Ignores the given domains in the search (query param).ordered: Ensures domains appear in the exact specified order (flag).exact: Ensures the architecture matches exactly (no additionaldomains) (flag). Requires ordered flag to be present.
Example: Find architectures containing both a kinase domain (PF00069) and an SH2 domain (PF00017), in that exact order:
bashuv run scripts/interpro_client.py fetch entry --query_params ida_search=PF00069,PF00017 --flags ordered exact --output architectures.jsonl
Note: This returns the architectures and their unique ida_ids, not all individual proteins.
ida)Once you have the ida_ids (e.g., 619edbb...) from Step 1, you can fetch all the actual proteins that share that precise layout by filtering the /protein endpoint.
Constraints:
/protein and /entry/{sourceDB}/{accession} endpoints.Example: Fetch proteins matching one of the architecture IDs from Step 1:
bashuv run scripts/interpro_client.py fetch protein --source_db uniprot --query_params ida=619edbb2b445bfa3ad51bd894e3c115b025a5f25 --output matching_proteins.jsonl
(When building pipelines or querying comprehensively, you would loop through all the ida_ids from Step 1 and run Step 2 for each one).
Each InterPro entry is assigned a type indicating what you can infer when a protein matches the entry:
in a variety of biological contexts. Example: PH domain or classical C2H2 zinc finger.
reflected by related functions, sequence similarities, or primary/secondary/tertiary structures.
reflected by structural similarity but often displaying very low sequence similarity. Usually comprises signatures from the SUPERFAMILY and CATH-Gene3D databases.
often <50 amino acids long. Example: Leucine Rich Repeats or WD40 repeats.
Active site (sequence containing conserved residues forcatalytic activity) and Binding site (sequence containing conserved residues forming a protein interaction site).
InterPro-N is a deep-learning-based extension of the standard InterPro database. It utilizes an AI architecture inspired by computer vision to treat protein sequence annotation as a "panoptic segmentation" task, labeling residues and distinguishing between domains.
Standard InterPro signatures are the "gold standard" and should not be discarded in favor of InterPro-N predictions. Use InterPro-N primarily to fill in gaps or refine results.
In addition to standard InterPro:
returns no hits in standard InterPro. InterPro-N excels at identifying remote homologs.
(e.g., TPR or WD40) where standard HMMs might merge or miss them.
interrupted by a completely different inserted sequence.
Instead of standard InterPro (specific scenarios):
coordinates for a domain than fuzzy standard hits provide.
of fragmented or highly divergent sequences.
When you are asked to find annotations for a protein and standard InterPro queries return no results or no annotations, you MUST check InterPro-N as a fallback.
Example Scenario: If a user asks to "List the SSF annotations for protein X" and the standard query returns no hits, you should retry the query with the interpro_n flag.
This fallback is crucial because InterPro-N can identify remote homologs and domains in "dark matter" proteins that standard methods miss.
If found, ALWAYS report to the user that these annotations are deep learning predictions from InterPro-N.
InterPro-N predictions are accessed by passing the interpro_n flag to the protein endpoint with uniprot as the source database.
Via CLI:
bashuv run ./scripts/interpro_client.py fetch protein --source_db uniprot --accession A0A096LNN2 --flags interpro_n --output A0A096LNN2_interpro_n.jsonl
Via Python Pipeline:
pythonresults = fetch_interpro_data( endpoint="protein", source_db="uniprot", accession="A0A096LNN2", flags=["interpro_n"])
proteins in InterPro, you MUST use their UniProt Accessions (e.g. P04637). InterPro does not natively support or reliably map gene names (e.g. TP53). If the user provides a gene name, you must use a database like Ensembl or UniProt first to resolve it to an accession.
many domains are there?"), you MUST read the count field from the initial API JSON response using the get_interpro_count() helper. NEVER iterate over the fetch_interpro_data generator to tally elements. Iterating over an endpoint with 50,000+ entries just to count them silently hangs the agent and abuses the API. Every time. No exceptions.
✅ Correct:
Via CLI:
bash uv run ./scripts/interpro_client.py count entry --source_db interpro --query_params type=domain --output count.json
Via Python Pipeline:
python from interpro_client import get_interpro_count cnt = get_interpro_count( endpoint="entry", source_db="interpro", query_params={"type": "domain"}, )
❌ Wrong (Iterating over fetch):
bash # NEVER DO THIS: uv run ./scripts/interpro_client.py fetch entry --source_db interpro --query_params type=domain --output output.jsonl && wc -l output.jsonl
For detailed examples of the invocations and JSON output schemas returned by various endpoints, see the Example Responses Reference. This TSV contains command-line calls, Python equivalents, and the corresponding JSON payload structures.
bash# Fetches InterPro Entries within UniProt protein P04637 # URL equivalent: /entry/interpro/protein/uniprot/P04637 uv run ./scripts/interpro_client.py fetch entry --source_db interpro --linked_endpoint protein --linked_source_db uniprot --linked_accession P04637 --output p04637_domains.jsonl
bash# URL equivalent: /structure/pdb/entry/interpro/IPR011615 # Only fetch the first 5 structures uv run ./scripts/interpro_client.py fetch structure --source_db pdb --linked_endpoint entry --linked_source_db interpro --linked_accession IPR011615 --output ipr011615_structures.jsonl
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-22 | fail→fail | 10,343 | 7,305 | -29% | 1 | 1 | 0% | 1,815 | 5,132 | +183% | 0 | 0 | — |
case-01 | fail→fail | 12,886 | 5,937 | -54% | 1 | 1 | 0% | 807 | 4,939 | +512% | 0 | 0 | — |
case-02 | fail→fail | 6,536 | 6,548 | +0% | 1 | 1 | 0% | 303 | 4,890 | +1514% | 0 | 0 | — |
case-03 | fail→fail | 10,403 | 8,870 | -15% | 1 | 1 | 0% | 501 | 4,894 | +877% | 0 | 0 | — |
case-09 | fail→fail | 29,482 | 6,648 | -77% | 1 | 1 | 0% | 4,755 | 5,017 | +6% | 0 | 0 | — |
case-04 | pass→fail | 3,675 | 10,693 | +191% | 1 | 1 | 0% | 701 | 4,926 | +603% | 0 | 0 | — |
case-05 | pass→fail | 7,789 | 7,193 | -8% | 1 | 1 | 0% | 1,386 | 4,939 | +256% | 0 | 0 | — |
case-06 | fail→fail | 16,143 | 9,871 | -39% | 1 | 1 | 0% | 530 | 5,410 | +921% | 0 | 0 | — |
case-07 | fail→fail | 9,186 | 6,575 | -28% | 1 | 1 | 0% | 539 | 4,909 | +811% | 0 | 0 | — |
case-08 | fail→fail | 9,681 | 5,851 | -40% | 1 | 1 | 0% | 951 | 4,772 | +402% | 0 | 0 | — |
case-10 | fail→fail | 12,689 | 6,428 | -49% | 1 | 1 | 0% | 1,049 | 4,964 | +373% | 0 | 0 | — |
case-11 | pass→fail | 10,425 | 6,908 | -34% | 1 | 1 | 0% | 2,020 | 4,847 | +140% | 0 | 0 | — |
case-12 | pass→fail | 4,039 | 8,036 | +99% | 1 | 1 | 0% | 762 | 4,960 | +551% | 0 | 0 | — |
case-13 | fail→fail | 7,693 | 5,415 | -30% | 1 | 1 | 0% | 632 | 4,778 | +656% | 0 | 0 | — |
case-14 | fail→fail | 4,313 | 5,193 | +20% | 1 | 1 | 0% | 815 | 4,691 | +476% | 0 | 0 | — |
case-15 | fail→fail | 5,827 | 7,027 | +21% | 1 | 1 | 0% | 242 | 4,858 | +1907% | 0 | 0 | — |
case-16 | fail→fail | 9,707 | 6,792 | -30% | 1 | 1 | 0% | 1,935 | 4,877 | +152% | 0 | 0 | — |
case-17 | fail→fail | 6,046 | 5,615 | -7% | 1 | 1 | 0% | 1,040 | 4,738 | +356% | 0 | 0 | — |
case-18 | fail→pass | 9,665 | 13,797 | +43% | 1 | 1 | 0% | 1,865 | 6,323 | +239% | 0 | 0 | — |
case-19 | fail→fail | 12,045 | 6,599 | -45% | 1 | 1 | 0% | 2,069 | 4,914 | +138% | 0 | 0 | — |
case-20 | fail→pass | 13,729 | 3,375 | -75% | 1 | 1 | 0% | 2,145 | 5,103 | +138% | 0 | 0 | — |
case-21 | fail→fail | 17,979 | 8,437 | -53% | 1 | 1 | 0% | 2,604 | 5,066 | +95% | 0 | 0 | — |
case-23 | fail→fail | 8,063 | 7,318 | -9% | 1 | 1 | 0% | 1,390 | 4,894 | +252% | 0 | 0 | — |
case-24 | fail→fail | 12,650 | 5,718 | -55% | 1 | 1 | 0% | 449 | 4,779 | +964% | 0 | 0 | — |
case-25 | fail→fail | 11,457 | 5,985 | -48% | 1 | 1 | 0% | 1,266 | 4,771 | +277% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 25 cases were attempted, and 2 counted toward the lift figure. The other 23 produced results that are not comparable between the two arms, so they are excluded from the headline rather than averaged into it. The headline lift of -8 percentage points is the difference between those two pass rates over the 2 comparable cases. 6 cases got worse with the skill loaded, and they are included in that figure.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.