interpro-mcp-server
Provides Wikipedia thumbnail images for InterPro entries and clans when the includeThumbnail option is enabled.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@interpro-mcp-servermap the domains and functional sites on UniProt P04637"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Overview
Protein families, domains, repeats, and functional sites from InterPro and the member databases it integrates (Pfam, PROSITE, SMART, CDD, PANTHER, and others), read through the keyless EMBL-EBI InterPro API. Search entries, read their full metadata, map a UniProt protein's annotations to residue coordinates, walk Pfam, CDD, and PIRSF clans, and find proteins that carry a signature. Runs over STDIO or Streamable HTTP, with no credentials to configure.
Tools
Tool | Description |
| Find InterPro entries or member signatures by text, entry type, GO annotation, or integrating InterPro accession |
| Read one entry's description, hierarchy, member signatures, GO terms, literature, cross-references, clan membership, and coverage counters |
| Map a UniProt protein's domains, families, repeats, and functional sites to sequence coordinates, optionally at one residue |
| Read a Pfam, CDD, or PIRSF set and page through its members, optionally with its relationship graph |
| Find UniProt proteins carrying an entry, defaulting to reviewed human proteins |
| Decode database slugs, entry types, accession patterns, common taxon IDs, and the current InterPro release |
Related MCP server: mcp-uniprot
Capability reference
interpro_search_entries tool
sourceDatabase(defaultinterpro) plus optionalquery(1-300 characters),entryType,goTerm(GO:0003677form),goCategory(P,F,C), andintegratedInto(anIPRaccession, member databases only); no filter is required, so omitting all of them browses the databaseCursor-paged,
limit1-100 (default 20); returnsentries,page(total,returned,hasMore,nextCursor), and the appliedquery
interpro_get_entry tool
accessionrequired;sourceDatabaseis inferred from standard accession prefixes when omitted. A set accession (CL…) fails asentry_not_foundand points tointerpro_get_clanWikipedia thumbnails are omitted unless
includeThumbnail: true, and a notice reports what was left outA withdrawn record fails as
entry_withdrawnwith its deletion date and short name
interpro_get_protein_domains tool
Canonical six- or ten-character UniProt
accession(no isoform suffix); optionalresiduePosition(1-based, inclusive) keeps every match with a fragment covering it, with all of that match's fragments intact;includeExtraFeaturesadds predicted features such as disorder and transmembrane regionsLarge maps arrive in segments of whole matches within a 100,000-byte response budget, following
coverage.nextCursoruntilhasMoreisfalse. The first segment carries the protein metadata, and an empty segment cannot establish that nothing is annotatedDiscontinuous fragments, models, and upstream scores are kept as returned;
residue_out_of_rangeandprotein_not_foundare typed failures
interpro_get_clan tool
accessionfor a Pfam (CL0016), CDD (cl21453), or PIRSF (PIRSF000047) set, withsourceDatabase(pfam,cdd,pirsf) inferred from the prefix; members page bycursor,limit1-100 (default 20)includeRelationships: trueadds the relationship graph in slices that fit the response budget;relationshipsPage.nextOffsetgoes back in asrelationshipOffset, which needsincludeRelationshipssetincludeThumbnailworks as oninterpro_get_entry; a missing set isclan_not_found
interpro_find_proteins_by_domain tool
accessionplus optionalsourceDatabase;taxonId(NCBI, default9606) andreviewedOnly(defaulttrue;falsecovers reviewed and unreviewed proteins) are echoed inqueryCursor-paged,
limit1-50 (default 20); each result keeps the protein summary, matched entry locations, and taxon lineageNo hits is a success with a notice, since the API answers an unknown entry, an unknown taxon, and an empty intersection the same way
interpro_list_reference tool
topicrequired:databases,entry_types,accession_patterns,taxa, orrelease. The first four are local and make no network call;taxalists common examples, not every taxonreleasereads the current InterPro version, date, and per-database entry counts, and fails asrelease_changedif the two upstream responses disagree on the version
Features
Built on @cyanheads/mcp-ts-core: stdio and Streamable HTTP transports, pluggable auth (none / jwt / oauth), swappable storage (in-memory, filesystem, Supabase, Cloudflare KV/R2/D1), structured logging with optional OpenTelemetry tracing.
InterPro-specific:
15 database slugs (
interpro,pfam,prosite,profile,smart,cdd,panther,cathgene3d,ssf,ncbifam,hamap,prints,pirsf,sfld,antifam) and 11 entry types, with the entry database inferred from standard accession prefixes and conflicting routes rejected locallyOne process-wide request pacer at one upstream request per second, a 50-second budget per tool call covering pacing, retries, and every request, and a 4 MiB cap on upstream responses
Upstream HTTP/1.1 client that handles the API's bodyless 204 responses, which native
fetchrejects on NodeSparse upstream metadata passes through as
nullor omitted rather than filled in
Agent-friendly output:
content[]carries the complete output as compact JSON plus an index of every URL as a link and every image as an image, so clients that read only one surface get the same dataOpaque cursors bound to their query, with a notice naming the exact next call whenever a result is partial
Typed failure reasons (
entry_not_found,invalid_cursor,upstream_rate_limited, and others) each paired with a recovery hintCoordinates describe sequence annotation, not pathogenicity or clinical significance
Getting started
Add the following to your MCP client configuration file. No API key is needed.
{
"mcpServers": {
"interpro-mcp-server": {
"type": "stdio",
"command": "bunx",
"args": ["@cyanheads/interpro-mcp-server@latest"],
"env": {
"MCP_TRANSPORT_TYPE": "stdio",
"MCP_LOG_LEVEL": "info"
}
}
}
}Or with npx (no Bun required):
{
"mcpServers": {
"interpro-mcp-server": {
"type": "stdio",
"command": "npx",
"args": ["-y", "@cyanheads/interpro-mcp-server@latest"],
"env": {
"MCP_TRANSPORT_TYPE": "stdio",
"MCP_LOG_LEVEL": "info"
}
}
}
}Or with Docker:
{
"mcpServers": {
"interpro-mcp-server": {
"type": "stdio",
"command": "docker",
"args": ["run", "-i", "--rm", "-e", "MCP_TRANSPORT_TYPE=stdio", "ghcr.io/cyanheads/interpro-mcp-server:latest"]
}
}
}For Streamable HTTP, set the transport and start the server:
MCP_TRANSPORT_TYPE=http MCP_HTTP_PORT=3010 bun run start:http
# Server listens at http://localhost:3010/mcpPrerequisites
Bun v1.4.0 or higher (or Node.js v24+).
Installation
Clone the repository:
git clone https://github.com/cyanheads/interpro-mcp-server.gitNavigate into the directory:
cd interpro-mcp-serverInstall dependencies:
bun installConfigure environment (optional):
cp .env.example .envConfiguration
The server defines no variables of its own; the InterPro API is keyless. These framework variables are the ones most often set:
Variable | Description | Default |
| Transport: |
|
| HTTP server port. |
|
| HTTP server host. |
|
| HTTP endpoint path. |
|
| HTTP session mode: |
|
| Authentication: |
|
| Log level ( |
|
| Directory for log files (Node.js only). |
|
| Storage backend: |
|
| Enable OpenTelemetry. |
|
See .env.example for the common framework overrides.
Running the server
Local development
Build and run the production version:
# One-time build bun run rebuild # Run the built server bun run start:http # or bun run start:stdioRun checks and tests:
bun run devcheck # Lints, formats, type-checks, and more bun run test # Runs the test suite
Project structure
Directory | Purpose |
|
|
| Tool definitions ( |
| InterPro service: HTTP/1.1 adapter, pacer and deadlines, accession routing, cursors, schemas, and the shared result formatter. |
| Unit and integration tests, mirroring the |
Development guide
See CLAUDE.md for development guidelines and architectural rules. The short version:
Handlers throw, framework catches, with no
try/catchin tool logicUse
ctx.logfor request-scoped loggingRegister new tools in the
createApp()array insrc/index.tsWrap external API calls: validate raw, normalize to the domain type, return the output schema; never fabricate missing fields
Contributing
Issues are welcome. Run checks and tests before submitting:
bun run devcheck
bun run testLicense
This project is licensed under the Apache 2.0 License. See the LICENSE file for details.
Data comes from InterPro and its member databases through the EMBL-EBI API. Licensing varies by member database, so attribute InterPro and the originating database; see InterPro's license page and the EMBL-EBI terms of use.
This server cannot be deployed
Maintenance
Related MCP Connectors
Official STRING database MCP server. Query for protein-protein interactions, enrichment, annotations, homology, and PPI networks.
Protein research over UniProtKB: search by function, fetch curated records, map IDs, proteomes.
Look up genes, sequences, variants, homologs, and cross-database xrefs from Ensembl REST.
Related MCP Servers
- AlicenseBqualityDmaintenanceProvides seamless access to UniProtKB protein database, enabling queries for protein entries, sequences, Gene Ontology annotations, full-text search, and ID mapping across 200+ database types.521 PyPI2MIT
- AlicenseNot gradedqualityBmaintenanceProvides access to UniProt protein sequence and function knowledge base, enabling search and retrieval of protein entries, proteomes, taxonomy, and feature annotations.12 npmMIT
- FlicenseAqualityDmaintenanceProvides access to EMBL-EBI bioinformatics data including InterPro domains, Pfam families, protein features, and taxonomy through a unified tool.11-
- FlicenseNot gradedqualityCmaintenanceProvides protein family, domain, and functional annotation using InterProScan, supporting local or API backends.-