Interpro Mcp Server

io.github.cyanheads由 GitHub 账号 cyanheads 发布v0.2.0更新于 Oct 30, 2026

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

已验证Streamable HTTP可网页运行数据与分析AI 与机器学习

概览

AI 生成的概览

检索 InterPro 条目,将蛋白质结构域和功能位点映射到 UniProt 蛋白与 PDB 结构,并可扫描原始蛋白序列。

可以做什么
  • 按文本、条目类型、GO 术语或整合登录号检索 InterPro 条目与成员签名,并读取完整条目元数据
  • 读取 Pfam、CDD、PIRSF clan 及其分页成员,可选返回关系图
  • 将结构域、家族、重复和功能位点映射到 UniProt 蛋白或 PDB 条目的链上,并给出残基坐标
  • 查找携带某签名的 UniProt 蛋白,可按分类单元、审核状态或蛋白质组筛选
  • 扫描原始蛋白序列并查询由此启动的 InterProScan 任务
  • 查询数据库标识、条目类型、登录号格式、常见分类单元 ID 和当前版本
适用场景
适合生物信息学与分子生物学工作:为蛋白或结构标注结构域坐标、浏览 InterPro 家族与 clan、查找共享同一签名的蛋白,或检查新序列的结构域。
运行要求
可作为公开托管的 HTTP 端点直接使用,也可通过 npx(Node.js)或 Docker 本地运行。InterPro API 无需密钥。提交新的 InterProScan 任务需要设置 INTERPRO_SCAN_EMAIL;托管端点未设置该变量,因此只能获得预计算结果。
安装前请注意
interpro_scan_sequence 并非只读:它可能向 EBI Job Dispatcher 提交 InterProScan 任务,通常约需十分钟。INTERPRO_SCAN_EMAIL 由该服务器的所有调用方共用,EBI 会将其与任务数据一并保留七天。注释坐标不构成临床解读。上游描述与文献属于不可信数据。

安装

在 SourceWeft 中

  1. 打开 控制台中的 Interpro Mcp Server,将其添加到工作区。
  2. 为需要使用其工具的对话启用该服务。

Web executable,通过 Streamable HTTP。 远程服务在工作区中配置后即可从网页运行时运行。

交给智能体安装

把这段提示词粘贴到 Claude Code、Codex、Cursor 等智能体,或 SourceWeft 对话中。智能体会读取该服务器的安装指南,先向你展示发布者、端点和登录方式,经你同意后再把它添加到你的客户端。密钥不会写进任何命令。

阅读 https://sourceweft.com/mcp/io.github.cyanheads%2Finterpro-mcp-server/install.md,并按其中说明把这个 MCP 服务器接入我的客户端。修改任何配置之前,先告诉我它的发布者、端点和登录方式,等我确认。不要把 API 密钥写进命令或我会提交的文件;问我密钥应从哪里获取。

查看智能体所依据的安装指南

其他 MCP 客户端

把它添加到你客户端的 mcpServers 配置中。

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

README

@cyanheads/interpro-mcp-server

Search InterPro entries, map domains and functional sites onto UniProt proteins and PDB structures, find proteins by domain, and scan raw protein sequences via MCP. STDIO or Streamable HTTP.

9 Tools

Public Hosted Server: https://interpro.caseyjhand.com/mcp


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 or a PDB entry's chains to annotations with residue coordinates, walk Pfam, CDD, and PIRSF clans, find proteins that carry a signature, and scan a raw protein sequence. Runs over STDIO, Streamable HTTP, or the public hosted endpoint above, with no credentials to configure; starting new InterProScan jobs needs an operator-set contact email (see Configuration).

Tools

ToolDescription
interpro_search_entriesFind InterPro entries by GO annotation, or InterPro entries and member signatures by text, entry type, or integrating accession
interpro_get_entryRead one entry's description, hierarchy, member signatures, GO terms, literature, cross-references, clan membership, and coverage counters
interpro_get_protein_domainsMap a UniProt protein's domains, families, repeats, and functional sites to sequence coordinates, optionally at one residue
interpro_get_clanRead a Pfam, CDD, or PIRSF set and page through its members, optionally with its relationship graph
interpro_find_proteins_by_domainFind UniProt proteins carrying an entry, defaulting to reviewed human proteins, optionally within one proteome
interpro_get_structure_domainsMap signatures onto the protein chains of one PDB entry, in chain, author, and UniProt numbering
interpro_scan_sequenceFind domain, family, and site matches for a raw protein sequence: precalculated for UniParc sequences, otherwise an InterProScan job
interpro_get_scan_resultRead the status and matches of an InterProScan job started by interpro_scan_sequence
interpro_list_referenceDecode database slugs, entry types, accession patterns, common taxon IDs, and the current InterPro release

Capability reference

interpro_search_entries tool

  • sourceDatabase (default interpro) plus optional query (1-300 characters), entryType, goTerm (GO:0003677 form), goCategory (P, F, C), and integratedInto (an IPR accession, member databases only); no filter is required, so omitting all of them browses the database
  • goTerm and goCategory require sourceDatabase: "interpro"; choose one GO filter per call. Combining them fails before network access because upstream ignores the category when a term is supplied. For member signatures, search InterPro with the GO filter, then read member_databases with interpro_get_entry or search the member database with integratedInto set to the matching InterPro accession
  • Cursor-paged, positive integer limit capped at 100 (default 20); larger requests are clamped with a notice. Returns entries, page (total, returned, limit, hasMore, nextCursor), and the applied query; page.limit is the effective page size

interpro_get_entry tool

  • accession required; sourceDatabase is inferred from standard accession prefixes when omitted. A set accession (CL…) fails as entry_not_found and points to interpro_get_clan
  • Optional sections selects from description, hierarchy, member_databases, go_terms, literature, cross_references, wikipedia, counters, and overlaps_with. Core metadata and unknown upstream fields remain; omitted sections returns full detail
  • Optional positive integer overlapLimit pages complete overlaps_with records; overlapOffset requires it, starts at zero, and advances using overlapsPage.nextOffset. Paging requires overlaps to be retained. Selection and omissions are disclosed; absent or null overlap data stays distinct from an empty list
  • Wikipedia thumbnails are omitted unless includeThumbnail: true, and a notice reports what was left out
  • entry.descriptionText adds readable text with paragraph, list, and table boundaries alongside the unchanged source entry.description, including its HTML and annotation flags. It is omitted when description is excluded or no readable text is supplied
  • A withdrawn record fails as entry_withdrawn with its deletion date and short name

interpro_get_protein_domains tool

  • Canonical six- or ten-character UniProt accession (no isoform suffix); optional residuePosition (1-based, inclusive) keeps every match with a fragment covering it, with all of that match's fragments intact; includeExtraFeatures adds predicted features such as disorder and transmembrane regions
  • includeResidueAnnotations: true adds residueAnnotations, the provider's functional rule annotations. A residue filter keeps each whole rule with any fragment covering the position, preserving descriptions, residue letters, locations, and provenance
  • Large maps arrive in segments of whole records within a 100,000-byte response budget: matches, requested extra features, then requested residue rules. Follow coverage.nextCursor until hasMore is false. The first segment carries protein metadata; an empty segment cannot establish that nothing is annotated. Residue annotations are omitted until their stage is reached, while {} means that stage returned no selected rules
  • Discontinuous fragments, models, and upstream scores are kept as returned; residue_out_of_range and protein_not_found are typed failures

interpro_get_clan tool

  • accession for a Pfam (CL0016), CDD (cl21453), or PIRSF (PIRSF000047) set, with sourceDatabase (pfam, cdd, pirsf) inferred from the prefix; members page by cursor, with positive integer limit capped at 100 (default 20). Larger requests are clamped with a notice; page.limit reports the effective size
  • includeRelationships: true adds the relationship graph in slices that fit the response budget; relationshipsPage.nextOffset goes back in as relationshipOffset, which needs includeRelationships set
  • includeThumbnail works as on interpro_get_entry; a missing set is clan_not_found

interpro_find_proteins_by_domain tool

  • accession plus optional sourceDatabase; taxonId (NCBI, default 9606) and reviewedOnly (default true; false covers reviewed and unreviewed proteins) are echoed in query
  • Optional isFragment selects proteins annotated as fragments (true) or not annotated as fragments (false); omit it to include both. False does not establish sequence completeness. Explicit selections appear in query and must stay unchanged when following cursors
  • Optional architectureId accepts protein.ida_accession from interpro_get_protein_domains: a 40-character hexadecimal identifier, normalized lowercase. Equality means the provider's Pfam architecture grouping, not equivalent function. Keep it unchanged when following cursors
  • Cursor-paged, positive integer limit capped at 50 (default 20); larger requests are clamped with a notice, and page.limit is the effective size. Ordinary results keep the protein summary, matched entry locations, taxon lineage, and native extra_fields.is_fragment annotation; missing or null status remains unknown. Architecture-filtered rows retain native extra_fields.ida_id when supplied and use detailAvailability to distinguish unavailable entry/taxon details from actual empty arrays
  • Optional proteomeId (UP plus nine digits, case-insensitive, canonicalized uppercase; for example protein.proteome from interpro_get_protein_domains) intersects one UniProt proteome with every other selection. taxonId still applies, including its 9606 default, and a proteome returns proteins only when taxonId is its organism or an ancestor. Echoed in query; keep it unchanged when following cursors. Rows then carry the upstream proteomes array, and architecture rows add detailAvailability.proteomes
  • No hits is a success with a notice, since the API answers an unknown entry, an unknown taxon, an unknown proteome, and an empty intersection the same way

interpro_get_structure_domains tool

  • pdbId required: a four-character PDB ID such as 1tsr, case-insensitive (accession is accepted as an alias); extended pdb_0000… IDs are not supported. Optional chain restricts the map to one protein chain, case-sensitive (A and a differ); nucleic-acid chains are not listed
  • Each match lists its chain records in structures, joined by entry. A record carries locations in chain numbering (start/end, 1-based) beside author numbering (auth_start/auth_end, which can be null or skip), UniProt numbering, and the chain-to-UniProt residue map; protein is null for chains with no UniProt mapping
  • InterPro nests at most 20 chain records per match. chainRecordLimitReached flags a match at that limit, which may cover chains not returned; set chain to read one chain completely
  • Segments hold whole matches within a 100,000-byte response budget; follow coverage.nextCursor until hasMore is false. The first segment carries structure (metadata, including the protein chains)
  • A DNA-only entry succeeds with no matches and a notice; an unknown or obsolete ID fails as structure_not_found, and a chain outside the structure's protein chains as chain_not_found with availableChains

interpro_scan_sequence tool

  • sequence required: one protein sequence as residue letters, optionally after a single FASTA header line (up to 100,000 characters). Case, spaces, and line breaks are ignored; digits, gaps, and stop symbols (*) are rejected, as are empty input and multiple FASTA records
  • Sequences already in UniParc return precalculated matches at once (source: "precalculated"). Any other sequence starts one InterProScan 6 job through the EBI Job Dispatcher (source: "interproscan"), which commonly runs about ten minutes, so the usual first result for a novel sequence is a jobId with status submitted, queued, or running
  • waitSeconds (0-35, default 30) sets how long a newly started job is awaited before returning its jobId. Repeating a sequence whose job is still running returns the same jobId (tracked per server process); at most 25 jobs are in flight per process, beyond which the call fails as rate_limited with retryAfter
  • Without INTERPRO_SCAN_EMAIL set, only precalculated matches are available and any other sequence fails as scan_not_configured (see Configuration). The hosted endpoint does not set it
  • Matches are InterProScan records verbatim, sorted by earliest location, 1-based and inclusive, in segments of whole records within a 100,000-byte budget; follow coverage.nextCursor with the same sequence. This tool is not read-only: a call can start a job

interpro_get_scan_result tool

  • jobId required, as returned by interpro_scan_sequence; waitSeconds (0-35, default 30) waits for a pending job, and 0 checks its status once
  • Returns status: "finished" with matches, queued or running with no matches (check again later), plus interproVersion and interproscanVersion for a finished job. Large results continue by coverage.nextCursor with the same jobId
  • Jobs and results expire seven days after submission; an unknown or expired job fails as scan_not_found, and a job that ended in error as scan_failed, both pointing back to interpro_scan_sequence

interpro_list_reference tool

  • topic required: databases, entry_types, accession_patterns, taxa, or release. The first four are local and make no network call; taxa lists common examples, not every taxon
  • release reads the current InterPro version, date, and per-database entry counts, and fails as release_changed if 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 locally
  • One process-wide request pacer at one upstream request per second for the InterPro API, a 50-second budget per tool call covering pacing, retries, and every request, and a 4 MiB cap on upstream responses
  • Sequence scanning checks the keyless Matches API for precalculated results before submitting an InterProScan 6 job, and reuses a running job for a repeated sequence
  • Upstream HTTP/1.1 client that handles the API's bodyless 204 responses, which native fetch rejects on Node
  • Sparse upstream metadata passes through as null or 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 data
  • Opaque 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 hint
  • Coordinates describe sequence annotation, not pathogenicity or clinical significance
  • Publishes the interpro-guide agent skill (identifier chains, gates, and chain/author/UniProt numbering) over MCP and in plugin installs, the npm package, and the Docker image

Getting started

Connect to the hosted instance, no install:

sh
claude mcp add --transport http interpro-mcp-server https://interpro.caseyjhand.com/mcp

Or run it locally:

sh
claude mcp add interpro-mcp-server -- npx -y @cyanheads/interpro-mcp-server

For other clients, add this to the MCP config file:

json
{  "mcpServers": {    "interpro-mcp-server": {      "command": "npx",      "args": ["-y", "@cyanheads/interpro-mcp-server"]    }  }}

No API key is needed. For Docker or a source build, see Running the server.

Configuration

The InterPro API is keyless. The server defines one optional variable, and these framework variables are the ones most often set:

VariableDescriptionDefault
INTERPRO_SCAN_EMAILOptional contact address the EBI Job Dispatcher requires to submit InterProScan jobs. Unset, interpro_scan_sequence still returns precalculated matches for sequences already in UniParc and fails other sequences as scan_not_configured; interpro_get_scan_result still reads existing jobs. One address is shared by every caller of the server, and EBI keeps it with job data for seven days. The hosted endpoint does not set it.unset
MCP_TRANSPORT_TYPETransport: stdio or http.stdio
MCP_HTTP_PORTHTTP server port.3010
MCP_HTTP_HOSTHTTP server host.127.0.0.1
MCP_HTTP_ENDPOINT_PATHHTTP endpoint path./mcp
MCP_SESSION_MODEHTTP session mode: stateless, stateful, or auto.stateless
MCP_AUTH_MODEAuthentication: none, jwt, or oauth. With auth on, each tool requires its tool:<tool_name>:read scope; interpro_scan_sequence, which can start a job, requires tool:interpro_scan_sequence:write.none
MCP_LOG_LEVELLog level (debug, info, notice, warning, error).info
LOGS_DIRDirectory for log files (Node.js only).<app-root>/logs
STORAGE_PROVIDER_TYPEStorage backend: in-memory, filesystem, supabase, cloudflare-kv/r2/d1.in-memory
OTEL_ENABLEDEnable OpenTelemetry.false

See .env.example for the common framework overrides.

Running the server

Local development

Requires Bun v1.4.0 or higher (or Node.js v24+).

  • Clone and install:

    sh
    git clone https://github.com/cyanheads/interpro-mcp-server.gitcd interpro-mcp-server && bun installcp .env.example .env   # optional; the server needs no keys
  • Build and run:

    sh
    # One-time buildbun run rebuild
    # Run the built serverbun run start:stdio# orbun run start:http
  • Run checks and tests:

    sh
    bun run devcheck   # Lint, format, typecheck, securitybun run test       # Vitest test suitebun run lint:mcp   # Validate MCP definitions against spec

Docker

sh
docker run --rm -p 3010:3010 ghcr.io/cyanheads/interpro-mcp-server:latest

The image defaults to HTTP transport, stateless session mode, and logs to /var/log/interpro-mcp-server. To run it over stdio from an MCP client, use "command": "docker" with "args": ["run", "-i", "--rm", "-e", "MCP_TRANSPORT_TYPE=stdio", "ghcr.io/cyanheads/interpro-mcp-server:latest"]. To build locally, docker build -t interpro-mcp-server .; OpenTelemetry peer dependencies are installed by default — build with --build-arg OTEL_ENABLED=false to omit them.

Project structure

DirectoryPurpose
src/index.tscreateApp() entry point: registers the tools and starts the InterPro and sequence-scan services.
src/configServer-specific environment parsing (INTERPRO_SCAN_EMAIL).
src/mcp-server/toolsTool definitions (*.tool.ts). Nine tools.
src/services/interproInterPro service: HTTP/1.1 adapter, pacer and deadlines, accession routing, cursors, schemas, and the shared result formatter.
src/services/sequence-scanSequence parsing, the precalculated lookup, InterProScan job submission and polling, and scan result segmentation.
skills/Published agent skill (interpro-guide), served over MCP and shipped with the package.
tests/Unit and integration tests, mirroring the src/ structure.

Development guide

See CLAUDE.md for development guidelines and architectural rules. The short version:

  • Handlers throw, framework catches, with no try/catch in tool logic
  • Use ctx.log for request-scoped logging
  • Register new tools in the createApp() array in src/index.ts
  • Wrap 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:

sh
bun run devcheckbun run test

License

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.

来源:README.md,提交 1ae7d45

工具

9

interpro_list_reference

InterPro reference vocabulary

List supported InterPro database slugs, entry types, accession and PDB identifier patterns, common taxon IDs, or current release information.

输入参数topic必填

interpro_search_entries

Search InterPro 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.

输入参数limitquerycursorgoTermentryTypegoCategoryintegratedIntosourceDatabase

interpro_get_entry

InterPro entry metadata

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.

输入参数sectionsaccession必填overlapLimitoverlapOffsetsourceDatabaseincludeThumbnail

interpro_get_clan

InterPro clan metadata and members

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.

输入参数limitcursoraccession必填sourceDatabaseincludeThumbnailrelationshipOffsetincludeRelationships

interpro_get_protein_domains

Map 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.

输入参数cursoraccession必填residuePositionincludeExtraFeaturesincludeResidueAnnotations

interpro_find_proteins_by_domain

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.

输入参数limitcursortaxonIdaccession必填isFragmentproteomeIdreviewedOnlyarchitectureIdsourceDatabase

interpro_get_structure_domains

Map 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.

输入参数chainpdbId必填cursor

interpro_scan_sequence

Scan a protein 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.

输入参数cursorsequence必填waitSeconds

interpro_get_scan_result

Read an InterProScan job

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.

输入参数jobId必填cursorwaitSeconds

版本历史

4
  1. v0.2.0最新Oct 29, 2026
  2. v0.1.3Oct 25, 2026
  3. v0.1.2Oct 24, 2026
  4. v0.1.1Oct 21, 2026

评分

已满足适用检查项的 100%

该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。

  • 近 30 天内可连通必需25 分
  • 已声明认证方式必需10 分
  • 已列出工具必需15 分
  • 描述必需15 分
  • 图标10 分
  • 文档15 分
  • 许可证10 分