# io.github.cyanheads/interpro-mcp-server

> Search InterPro entries, map domains onto proteins and PDB structures, and scan raw sequences.

- name: io.github.cyanheads/interpro-mcp-server
- version: 0.2.0
- connection class: R0 (autonomous)
- trust: 94/100
- quality: 76/100 (good)
- owner: not claimed
- descriptor: https://api.protogrid.dev/v1/servers/io.github.cyanheads%2Finterpro-mcp-server
- tools: https://api.protogrid.dev/v1/servers/io.github.cyanheads%2Finterpro-mcp-server/tools

**An agent can connect right now, no human step.** Remote endpoint, no authentication, reachable on the last probe.

## Connection (mcpServers)

```json
{
  "mcpServers": {
    "interpro-mcp-server": {
      "type": "http",
      "url": "https://interpro.caseyjhand.com/mcp"
    }
  }
}
```


## Trust

- hygiene: 100
- liveness: 100
- freshness: 100
- provenance: 80
- drivers: +repository +namespace-matches-repo +reachable +uptime-100% +updated-10d-ago
- Derived from observable signals (official registry feed and our own credential-free probes); no code audit performed.

## Quality 76/100 (good)

### protocol: 88 (weight 25)

- pass `protocol.modern`: supports 2026-07-28 (server/discover)
- pass `protocol.stateless`: answers without a session
- pass `protocol.transport`: streamable HTTP
- warn `protocol.list_ttl`: tools/list declares ttlMs 0, so clients re-fetch it on every use

### authorization: n/a (weight 15)

- n/a `auth.prm`, `auth.as_metadata`, `auth.cimd`: no remote uses OAuth
- n/a `auth.secret_in_url`: no templated URL

### tool hygiene: 93 (weight 30)

- pass `tools.descriptions`: every tool has a description
- pass `tools.description_length`: descriptions are concise
- pass `tools.schemas`: every tool has an object input schema
- pass `tools.annotations`: 9 of 9 tools declare readOnlyHint or destructiveHint
- warn `tools.directory_hints`: 1 of 9 tools declare all four hints; missing: interpro_get_clan (destructiveHint); interpro_find_proteins_by_domain (destructiveHint); interpro_get_structure_domains (destructiveHint); …
- pass `tools.token_cost`: about 3,643 tokens to load every tool
- pass `tools.api_dump`: tools are not a one-to-one API dump

### stability: 25 (weight 15)

- warn `stability.changes`: 10 tool changes in 30 days
- fail `stability.rug_pull`: 1 tools kept their name but changed most of their description in 30 days; review before trusting them

### dependencies: n/a (weight 15)

- n/a `deps.known_vulns`, `deps.mcp_sdk_version`, `deps.resolvable`: deps.dev does not know @cyanheads/interpro-mcp-server@0.2.0, @cyanheads/interpro-mcp-server@0.2.0

- tools: 9, about 3,643 tokens to load them all
- tool set hash: 9583e24e8224b9e5dee609ba3b2c3ee5
- tools last changed: 2026-10-28T15:58:05.822Z
- badge: [![protogrid quality](https://protogrid.dev/badge/io.github.cyanheads/interpro-mcp-server.svg)](https://protogrid.dev/servers/io.github.cyanheads/interpro-mcp-server)
- Checks run on what our credential-free, read-only probes observe; tools are never called and no code audit is performed.

### Tool changes

- 2026-10-28 `interpro_get_scan_result` added
  - Check an InterProScan job started by interpro_scan_sequence, waiting up to waitSeconds for it to finish. Returns the matches once finished, otherwise its queued or running status to check again later. Matches are InterProScan records verbatim, 1-based and inclusive, with the InterPro and InterProScan versions that produced them. Jobs and their results expire seven days after submission.
- 2026-10-28 `interpro_scan_sequence` added
  - Find InterPro domain, family, and site matches for one raw protein sequence that has no UniProt accession. Sequences already in UniParc return precalculated matches at once; any other sequence starts one InterProScan 6 job, which commonly runs about ten minutes, so the usual first result is a jobId to read with interpro_get_scan_result. Repeating a sequence whose job is still running returns the same jobId instead of starting another. Matches are InterProScan records verbatim, 1-based and inclusive, each naming its member database and release.
- 2026-10-28 `interpro_get_structure_domains` added
  - Retrieve InterPro and member-signature matches on one PDB entry's protein chains. Each chain record keeps match locations in chain numbering (1-based start/end beside author auth_start/auth_end, which can be null), in UniProt numbering, and the chain-to-UniProt residue map, with discontinuous fragments preserved; the UniProt protein is null for unmapped chains. InterPro nests at most 20 chain records per match; set chain to read one chain completely. Budgeted segments hold whole matches; the first carries structure metadata listing the protein chains. Continue coverage.nextCursor until hasMore is false.
- 2026-10-28 `interpro_find_proteins_by_domain` changed (description, inputSchema, outputSchema)
  - before: Find UniProt proteins carrying an InterPro or member signature. Defaults to reviewed human proteins; reviewedOnly=false includes all review statuses in the chosen taxon. Optional isFragment filters fragment annotations; false does not prove sequence completeness. architectureId intersects the provider Pfam grouping with these selections, without implying functional equivalence; metadata-only hits disclose unavailable entry and taxon details without per-protein requests.
  - after: Find UniProt proteins carrying an InterPro or member signature. Defaults to reviewed human proteins; reviewedOnly=false includes all review statuses in the chosen taxon. Optional isFragment filters fragment annotations; false does not prove sequence completeness. architectureId intersects the provider Pfam grouping with these selections, without implying functional equivalence; metadata-only hits disclose unavailable entry and taxon details without per-protein requests. proteomeId intersects one UniProt proteome, such as protein.proteome from interpro_get_protein_domains, with every selection including taxonId.
- 2026-10-28 `interpro_get_protein_domains` changed (outputSchema)
- 2026-10-28 `interpro_list_reference` changed (description, outputSchema)
  - before: List supported InterPro database slugs, entry types, accession routing patterns, common taxon IDs, or current release information.
  - after: List supported InterPro database slugs, entry types, accession and PDB identifier patterns, common taxon IDs, or current release information.
- 2026-10-24 `interpro_find_proteins_by_domain` changed (description, inputSchema, outputSchema)
  - before: Find UniProt proteins carrying an InterPro or member signature. Defaults to reviewed human proteins; reviewedOnly=false includes reviewed and unreviewed proteins in the chosen taxon. Optional isFragment filters fragment annotations; false does not prove a complete canonical sequence.
  - after: Find UniProt proteins carrying an InterPro or member signature. Defaults to reviewed human proteins; reviewedOnly=false includes all review statuses in the chosen taxon. Optional isFragment filters fragment annotations; false does not prove sequence completeness. architectureId intersects the provider Pfam grouping with these selections, without implying functional equivalence; metadata-only hits disclose unavailable entry and taxon details without per-protein requests.
- 2026-10-24 `interpro_get_protein_domains` changed (description, inputSchema, outputSchema)
  - before: Retrieve InterPro and member-signature matches on a canonical UniProt protein, preserving every location and discontinuous fragment. Optionally retain matches covering a residue and include extra predicted features. Large maps arrive in segments of whole matches that fit the response budget: the first segment carries the protein metadata, requested extra features follow the last match, and coverage.nextCursor continues until hasMore is false.
  - after: Retrieve InterPro and member-signature matches on a canonical UniProt protein, preserving every location and discontinuous fragment. Optionally select records covering a residue, include extra predicted features, and include functional residue rules with provenance. Budgeted segments hold whole records in order: matches, requested extras, then requested residue rules sorted by key. The first segment carries protein metadata; continue coverage.nextCursor until hasMore is false.
- 2026-10-24 `interpro_get_entry` changed (description, inputSchema, outputSchema) **meaning changed**
  - before: Retrieve one InterPro or member-database entry, including description, hierarchy, member signatures, GO terms, literature, cross-references, clan membership, and coverage counters.
  - after: Retrieve one InterPro or member-database entry with full metadata by default. Select optional sections while retaining core and unknown metadata, or supply overlapLimit to page whole overlap records in upstream order; offsets are not a snapshot across calls.
- 2026-10-24 `interpro_search_entries` changed (inputSchema, outputSchema)

Full history: https://api.protogrid.dev/v1/servers/io.github.cyanheads%2Finterpro-mcp-server/changes

## Dependencies

- npm @cyanheads/interpro-mcp-server@0.2.0: unknown
- npm @cyanheads/interpro-mcp-server@0.2.0: unknown

Dependency graphs from deps.dev; advisories from OSV.dev, including the GitHub Advisory Database and the PyPI Advisory Database; all CC BY 4.0.

## Remotes

- https://interpro.caseyjhand.com/mcp (streamable-http, auth none, reachable true, uptime30d 1)

## Packages

- npm @cyanheads/interpro-mcp-server@0.2.0
- npm @cyanheads/interpro-mcp-server@0.2.0

## Tools (9)

- `interpro_find_proteins_by_domain`: Find UniProt proteins carrying an InterPro or member signature. Defaults to reviewed human proteins; reviewedOnly=false includes all review statuses in the chosen taxon. Optional isFragment filters fragment annotations; false does not prove sequence completeness. architectureId intersects the provider Pfam grouping with these selections, without implying functional equivalence; metadata-only hits disclose unavailable entry and taxon details without per-protein requests. proteomeId intersects one UniProt proteome, such as protein.proteome from interpro_get_protein_domains, with every selection including taxonId.
- `interpro_get_clan`: Retrieve a Pfam, CDD, or PIRSF clan/set and a cursor page of member entries; optionally include its relationship graph, returned in slices that fit the response budget and paged with relationshipOffset.
- `interpro_get_entry`: Retrieve one InterPro or member-database entry with full metadata by default. Select optional sections while retaining core and unknown metadata, or supply overlapLimit to page whole overlap records in upstream order; offsets are not a snapshot across calls.
- `interpro_get_protein_domains`: Retrieve InterPro and member-signature matches on a canonical UniProt protein, preserving every location and discontinuous fragment. Optionally select records covering a residue, include extra predicted features, and include functional residue rules with provenance. Budgeted segments hold whole records in order: matches, requested extras, then requested residue rules sorted by key. The first segment carries protein metadata; continue coverage.nextCursor until hasMore is false.
- `interpro_get_scan_result`: Check an InterProScan job started by interpro_scan_sequence, waiting up to waitSeconds for it to finish. Returns the matches once finished, otherwise its queued or running status to check again later. Matches are InterProScan records verbatim, 1-based and inclusive, with the InterPro and InterProScan versions that produced them. Jobs and their results expire seven days after submission.
- `interpro_get_structure_domains`: Retrieve InterPro and member-signature matches on one PDB entry's protein chains. Each chain record keeps match locations in chain numbering (1-based start/end beside author auth_start/auth_end, which can be null), in UniProt numbering, and the chain-to-UniProt residue map, with discontinuous fragments preserved; the UniProt protein is null for unmapped chains. InterPro nests at most 20 chain records per match; set chain to read one chain completely. Budgeted segments hold whole matches; the first carries structure metadata listing the protein chains. Continue coverage.nextCursor until hasMore is false.
- `interpro_list_reference`: List supported InterPro database slugs, entry types, accession and PDB identifier patterns, common taxon IDs, or current release information.
- `interpro_scan_sequence`: Find InterPro domain, family, and site matches for one raw protein sequence that has no UniProt accession. Sequences already in UniParc return precalculated matches at once; any other sequence starts one InterProScan 6 job, which commonly runs about ten minutes, so the usual first result is a jobId to read with interpro_get_scan_result. Repeating a sequence whose job is still running returns the same jobId instead of starting another. Matches are InterProScan records verbatim, 1-based and inclusive, each naming its member database and release.
- `interpro_search_entries`: Search InterPro entries or member signatures by text or entry type. GO filters require sourceDatabase interpro; integratedInto selects member signatures for an InterPro accession. Results are cursor-paged; use interpro_get_entry for full metadata.
