关于 protein-mcp-server
protein-mcp-server 汇集实验与预测蛋白质结构及注释数据,面向结构生物学和蛋白质研究。它支持结构搜索、相似性查找、比对、配体追踪和结构集合统计,并提供来源标记。
主要功能
- 01搜索实验与预测结构
- 02获取结构元数据和坐标
- 03查找序列或结构同源体
- 04追踪配体及结合位点
- 05比对多个蛋白质结构
- 06获取 UniProt 与 InterPro 注释
适用场景
- 01按序列或生物体筛选结构
- 02比较蛋白质模型并检查相似性
- 03查找含特定配体的结构和结合位点
MCP 相关
作为 MCP 服务,向客户端提供蛋白质结构搜索、获取、相似性分析、配体追踪、结构比对和注释工具,并公开 PDB 与 AlphaFold 资源。支持 STDIO 与 Streamable HTTP。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
npx -y protein-mcp-serverMCP_LOG_LEVELSets the minimum log level for output (e.g., 'debug', 'info', 'warn').MCP_HTTP_HOSTThe hostname for the HTTP server.MCP_HTTP_PORTThe port to run the HTTP server on.MCP_HTTP_ENDPOINT_PATHThe endpoint path for the MCP server.MCP_AUTH_MODE密钥Authentication mode to use: 'none', 'jwt', or 'oauth'.本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。
工具
6收录的工具列表 · 更新于 2 周前
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| limit | integer | 否 | 要返回的结果数上限(1-100,默认值为 25)。 |
| query | string | 是 | 用于搜索蛋白质名称、PDB ID、关键词或描述的查询(例如:"kinase"、"hemoglobin"、"1ABC")。 |
| offset | integer | 否 | 分页偏移量(默认值为 0)。 |
| organism | string | 否 | 按来源生物体的学名筛选(例如:"Homo sapiens"、"Escherichia coli")。 |
| maxResolution | number | 否 | 最大分辨率,单位为埃(例如,高分辨率结构可设为 2.0)。 |
| minResolution | number | 否 | 最小分辨率,单位为埃。 |
| experimentalMethod | enum | 否 | 按用于确定结构的实验方法筛选。X-RAY DIFFRACTION | SOLUTION NMR | ELECTRON MICROSCOPY | NEUTRON DIFFRACTION | FIBER DIFFRACTION | SOLID-STATE NMR | THEORETICAL MODEL |
详细介绍
@cyanheads/protein-mcp-server
通过 MCP 联合查询实验结构(PDB)和预测结构(AlphaFold)及其注释。支持 STDIO 或 Streamable HTTP。
概述
通过一个统一入口查询实验蛋白质结构(PDB)和预测蛋白质结构(AlphaFold)。可跨 RCSB、AlphaFold DB、3D-Beacons、UniProt、InterPro 和 Foldseek 搜索、获取、比对和注释结构及其配体。无需 API 密钥。
工具
| 工具 | 描述 |
|---|---|
protein_search_structures | 按文本、序列或生物体/方法/分辨率搜索实验和预测结构,并可选用筛选条件 |
protein_get_structure | 获取实验结构、预测结构或最佳可用结构的元数据和坐标 URL |
protein_find_similar | 查找序列同源物(RCSB mmseqs2)或折叠同源物(Foldseek) |
protein_track_ligands | 解析配体的组分 ID、查找包含该配体的结构,或映射其结合位点 |
protein_compare_structures | 使用 TM-align 或 jFATCAT 对齐结构,可与参考结构比对或比较所有结构对 |
protein_analyze_collection | 以计数、直方图、时间线和交叉表的形式分析 PDB |
protein_get_annotations | 获取 UniProt 特征和变体,以及带有 GO 术语的 InterPro 结构域 |
资源
| 资源 | 描述 |
|---|---|
pdb://{entry_id} | PDB 条目的实验结构摘要 |
af://{uniprot} | UniProt 登录号对应的 AlphaFold DB 预测结构摘要 |
对于不展示资源的客户端,这两种资源也可通过 protein_get_structure 访问。
功能参考
protein_search_structures 工具
- 至少提供
query、sequence(mmseqs2 搜索;min_identity/max_evalue仅与其搭配时生效)、organism、method或max_resolution中的一项;content_type可设为experimental、predicted或all(默认值);每页最多返回 100 条结果(默认 25 条),通过limit/start控制 sequence至少需要 10 个残基;空白字符会被移除,大小写会统一;无效序列会报错invalid_sequence。每条结果都会标明其source和条目id,后者可传递给其他工具- 可选的
facets(method、organism、polymer_type、resolution、release_year、molecular_weight)会增加分类统计,每个维度最多包含PROTEIN_FACET_BUCKET_CAP个分组
protein_get_structure 工具
source: experimental(默认值)接受 PDB 条目 ID,以及搜索返回的AF_*/MA_*计算模型 ID(这些结果的source为predicted);predicted接受 UniProt 登录号,用于获取带有 pLDDT/PAE 的 AlphaFold 模型;best_available接受 UniProt 登录号,并返回分辨率最高的实验结构,若无则返回最佳预测结构。每次调用最多处理PROTEIN_MAX_BATCH_IDS个 ID(默认 25 个)- 无法解析的 ID 会列入
failed[];超过上限而未处理的 ID 会显示在requested/processed中。如果没有任何 ID 可解析,调用会报错all_failed;如果 ID 类型与source不匹配,则会报错mixed_id_types。记录会包含现有文件的coordinateUrls include_coords会在大小限制内内嵌坐标文本;若批次超出限制,则返回overflow概要,可使用sections: [ids]再次调用
protein_find_similar 工具
by: sequence会根据sequence、pdb_id或uniprot运行同步的 RCSB mmseqs2 搜索,并按max_evalue/min_identity筛选;by: structure会根据pdb_id或uniprot运行异步 Foldseek 搜索,除非databases另有指定,否则会搜索pdb100+afdb50。如果某字段仅被另一种模式读取,则会报错mode_mismatched_field;每页最多返回 100 条结果(默认 25 条)- 序列遵循与
protein_search_structures相同的规则;如果提供了直接的sequence,则优先于标识符。结果会标明其source(结构搜索结果还会标明database),并按score排序;响应会报告totalCount和nextStart - 如果结构任务在轮询预算用尽时仍在运行,则会返回
status: computing和ticketId;使用ticket_id再次调用即可继续查询。多链结构会通过query一次搜索一条链(从 0 开始,默认值为 0),总链数见queryCount
protein_track_ligands 工具
mode可设为find_ligand(query:名称或分子式)、structures_with_ligand(comp_id)或binding_site(pdb_id,可选comp_id);缺少模式所需输入时会报错missing_param。limit范围为 1–100(默认 25);后两种模式可通过start分页find_ligand会返回组分 ID,以及分子式、分子量、SMILES 和 InChIKey,并按depositionCount排序;totalCount和candidatesConsidered可显示候选池是否被截断;structures_with_ligand会按分辨率从高到低列出条目binding_site会返回带有接触距离的口袋残基,并同时使用标签命名空间(asymId、seqId)和作者命名空间(authAsymId、authSeqId)编号;仅适用于实验结构
protein_compare_structures 工具
- 2 个结构,最多为
PROTEIN_MAX_COMPARE_STRUCTURES(默认值为 10,最大值为 25),每个结构包含一个pdb_id和可选的标签命名空间chain;method可设为tm-align(默认值)、fatcat-rigid或fatcat-flexible;reference可设为first(默认值)或all_pairs;timeout_s(5–120)用于设置每对结构的轮询时限 - 每对结构的结果行包含
status(complete、computing、failed)、tmScore、rmsd、alignedResidues、modeledResidues和coverage;TM-score 根据a的长度进行归一化,因此调换一对结构的顺序会改变分数。如果上游提供了similarityScore和sequenceSimilarity,结果中也会包含它们 - 正在计算的结构对会返回其任务
uuid;在resume[]中使用{ a, b, uuid }再次调用,即可轮询该任务,而无需重新提交。如果method或结构对不匹配,则会分别以resume_method_mismatch或resume_job_mismatch失败
protein_analyze_collection 工具
group_by可设为method、organism、polymer_type、resolution、release_year、molecular_weight中的一个,也可选择其中两个不同维度进行交叉制表;可通过query、organism、method、max_resolution和content_type限定范围(默认值为experimental)。interval用于设置resolution/molecular_weight的数值分箱宽度,或设为"year"用于release_year- 返回
total和bucketsReturned;每个分桶包含label和count(数值分箱还会添加rangeFrom/rangeTo),每个维度都会报告missingValueCount bucket_limit(1–500,默认值为PROTEIN_FACET_BUCKET_CAP)分别限制每个维度的分桶数量;truncated和notice会说明结果被截断的位置
protein_get_annotations 工具
- 可传入
uniprot登录号,或通过 UniProt 交叉引用解析的pdb_id(作者chain可用于选择一个登录号);include可设为features、domains、variants或all(默认值);limit分别为每种类别分页(1–200,默认值为 50),并可通过独立的零起始索引features_offset、variants_offset和domains_offset设置偏移量(默认值均为 0) - 返回 UniProt 特征和天然变异,以及包含 GO 术语的 InterPro 结构域;如果一个 PDB 条目映射到多个登录号,则使用编号最低的作者链,并在
ambiguity中列出其余登录号 - 每个请求的类别都包含
featuresTotal、variantsTotal或domainsTotal;如果当前页之后还有记录,则会设置truncated,并在notice中指出下一页的偏移量 - 错误类型包括
missing_identifier、invalid_accession、no_uniprot_mapping或chain_not_found
pdb://{entry_id} 资源
entry_id是 PDB 条目 ID(例如4HHB);返回application/json,包含标题、方法、分辨率、生物体、配体,以及同时携带authAsymIds和labelAsymIds的polymerEntities- 数据与
source: experimental的protein_get_structure相同
af://{uniprot} 资源
uniprot是 UniProt 登录号或 AlphaFold DB 条目 ID(例如AF-P69905-F1);返回application/json,包含meanPlddt、confidenceBuckets、cifUrl/pdbUrl/bcifUrl和modelVersion- 数据与
source: predicted的protein_get_structure相同
功能
基于 @cyanheads/mcp-ts-core:支持 stdio 和 Streamable HTTP 传输、可插拔身份验证(none / jwt / oauth)、可切换存储(in-memory、filesystem、Supabase、Cloudflare KV/R2/D1),以及支持可选 OpenTelemetry 跟踪的结构化日志记录。
PDB / AlphaFold 专属功能:
- 搜索、获取和比较时,对实验结构(PDB)和预测结构(AlphaFold DB、ModelArchive、3D-Beacons 提供方)采用相同的处理方式
- RCSB、AlphaFold DB、3D-Beacons、UniProt、InterPro 和 Foldseek 均无需密钥
- 集合分析通过 RCSB 的 facet 引擎运行,并返回分桶计数,而非匹配条目
- Foldseek 和比对任务最多轮询
PROTEIN_ASYNC_POLL_TIMEOUT_MS(默认 30 s),随后返回恢复句柄(ticketId、每对一个uuid),而不再阻塞 - 链命名空间保持分离:
authAsymIds用于protein_get_annotations的chain,labelAsymIds用于protein_compare_structures的chain
适合 Agent 的输出:
- 来源信息:每条命中都会注明其
source(experimental/predicted)以及背后的引擎或数据库;protein_get_structure和protein_get_annotations还会包含attribution块(参见上游数据许可) - 优雅处理部分失败:
failed[]行和每对各自的status可避免单个错误 ID 或配对导致请求失败 - 分页与提示:分页工具会返回
totalCount和nextStart;超出末尾的start会在notice中单独标记,以区别于零匹配;所有提示都会合并到这一个notice中
快速开始
公共托管实例
可使用公共实例 https://protein.caseyjhand.com/mcp,无需安装。通过 Streamable HTTP 将任意 MCP 客户端指向该实例:
{
"mcpServers": {
"protein-mcp-server": {
"type": "streamable-http",
"url": "https://protein.caseyjhand.com/mcp"
}
}
}
自托管 / 本地运行
将以下内容添加到 MCP 客户端配置文件中。无需 API 密钥。
{
"mcpServers": {
"protein-mcp-server": {
"type": "stdio",
"command": "bunx",
"args": ["@cyanheads/protein-mcp-server@latest"],
"env": {
"MCP_TRANSPORT_TYPE": "stdio",
"MCP_LOG_LEVEL": "info"
}
}
}
}
也可以使用 npx(无需 Bun):
{
"mcpServers": {
"protein-mcp-server": {
"type": "stdio",
"command": "npx",
"args": ["-y", "@cyanheads/protein-mcp-server@latest"],
"env": {
"MCP_TRANSPORT_TYPE": "stdio",
"MCP_LOG_LEVEL": "info"
}
}
}
}
也可以使用 Docker:
{
"mcpServers": {
"protein-mcp-server": {
"type": "stdio",
"command": "docker",
"args": ["run", "-i", "--rm", "-e", "MCP_TRANSPORT_TYPE=stdio", "ghcr.io/cyanheads/protein-mcp-server:latest"]
}
}
}
要使用 Streamable HTTP,请设置传输方式并启动服务:
MCP_TRANSPORT_TYPE=http MCP_HTTP_PORT=3010 bun run start:http
# Server listens at http://localhost:3010/mcp
先决条件
- Bun v1.4.0 或更高版本(或 Node.js v24+)。
- 无需账号或 API 密钥:所有上游服务均公开。
安装
- 克隆仓库:
git clone https://github.com/cyanheads/protein-mcp-server.git
- 进入目录:
cd protein-mcp-server
- 安装依赖项:
bun install
- 配置环境(可选):
cp .env.example .env
# every variable has a working default
配置
所有变量均为可选项。
| 变量 | 描述 | 默认值 |
|---|---|---|
PROTEIN_ASYNC_POLL_TIMEOUT_MS | 异步比对或 Foldseek 作业返回 computing 前的轮询时长预算(最小值为 1000)。 | 30000 |
PROTEIN_MAX_BATCH_IDS | 每次 protein_get_structure 调用的最大 ID 数(1–100)。 | 25 |
PROTEIN_MAX_COMPARE_STRUCTURES | 每次 protein_compare_structures 调用的最大结构数(2–25)。 | 10 |
PROTEIN_FACET_BUCKET_CAP | protein_search_structures 分面中每个维度的分桶数,以及 protein_analyze_collection 的默认值(1–500)。 | 50 |
PROTEIN_FANOUT_CONCURRENCY | 按 ID 和按配对扇出时的最大上游并发请求数(1–16)。 | 5 |
MCP_TRANSPORT_TYPE | 传输方式:stdio 或 http。 | stdio |
MCP_HTTP_PORT | HTTP 服务端口。 | 3010 |
MCP_SESSION_MODE | HTTP 会话模式:stateless、stateful 或 auto。覆盖服务端在代码中声明的 stateless 模式。 | stateless |
MCP_AUTH_MODE | 身份验证方式:none、jwt 或 oauth。 | none |
MCP_LOG_LEVEL | 日志级别(RFC 5424)。 | info |
OTEL_ENABLED | 启用 OpenTelemetry。 | false |
每个上游服务的基础 URL 也可以指向镜像:RCSB_SEARCH_BASE_URL、RCSB_DATA_BASE_URL、RCSB_FILES_BASE_URL、RCSB_MODELS_BASE_URL、RCSB_ALIGNMENT_BASE_URL、BEACONS_BASE_URL、ALPHAFOLD_BASE_URL、MODELARCHIVE_BASE_URL、FOLDSEEK_BASE_URL、UNIPROT_BASE_URL、INTERPRO_BASE_URL。有关默认值和完整的可选覆盖项列表,请参见 .env.example。
运行服务
本地开发
-
构建并运行:
# One-time build bun run rebuild # Run the built server bun run start:stdio # or bun run start:http -
运行检查和测试:
bun run devcheck # Lint, format, typecheck, security bun run test # Vitest test suite bun run lint:mcp # Validate MCP definitions against spec
Docker
docker build -t protein-mcp-server .
docker run --rm -p 3010:3010 protein-mcp-server
Dockerfile 默认使用 HTTP 传输、无状态会话模式,并将日志写入 /var/log/protein-mcp-server。默认会安装 OpenTelemetry 对等依赖项;构建时使用 --build-arg OTEL_ENABLED=false 可省略这些依赖项。
项目结构
| 目录 | 用途 |
|---|---|
src/index.ts | createApp() 入口:注册工具和资源,并初始化提供方服务。 |
src/config | 解析和验证服务专用环境变量,使用 Zod。 |
src/mcp-server/tools | 工具定义(*.tool.ts)和共享架构(_schemas.ts)。 |
src/mcp-server/resources | 资源定义(*.resource.ts)。 |
src/services | 上游客户端:rcsb/(搜索、数据、分面)、alphafold/、beacons/(3D-Beacons)、uniprot/(UniProt、InterPro、GO)、alignment/(RCSB 结构比对)、foldseek/,以及 shared/ 中的 HTTP、并发、标识符和来源标注辅助工具。 |
tests/ | 与 src/ 目录结构对应的单元测试和集成测试。 |
开发指南
开发指南和架构规则请参见 CLAUDE.md/AGENTS.md。简要说明如下:
- 处理程序抛出异常,框架负责捕获——工具逻辑中不要使用
try/catch - 使用
ctx.log记录请求范围内的日志,使用ctx.state存储租户范围内的数据 - 在
src/mcp-server/*/definitions/index.ts的汇总导出文件中导出新的定义,并在src/index.ts的createApp()数组中注册 - 封装外部 API 调用:验证原始数据 → 规范化为领域类型 → 返回输出架构;绝不编造缺失字段
上游数据许可
结构和注释数据来自各自采用不同许可证的公共数据库。protein_get_structure 和 protein_get_annotations 会返回一个 attribution 区块,其中列出为该响应提供数据的每个来源的许可证、引用信息和主页。CC BY 和 CC BY-SA 来源在再分发时需要署名;CC0 来源仅要求引用。
| 来源 | 提供的数据 | 许可证 |
|---|---|---|
| RCSB PDB | protein_get_structure — 实验记录 | CC0 1.0 Universal |
| AlphaFold DB | protein_get_structure — 预测模型 | CC BY 4.0 |
| ModelArchive | protein_get_structure — MA_* 计算模型 | CC BY 4.0 |
| SWISS-MODEL | protein_get_structure — best_available 模型 | CC BY-SA 4.0 |
| BFVD | protein_get_structure — best_available 模型 | CC BY 4.0 |
| UniProt | protein_get_annotations | CC BY 4.0 |
| InterPro | protein_get_annotations — 结构域/家族数据 | CC0 1.0 Universal |
| GO | protein_get_annotations — GO 术语 | CC BY 4.0 |
best_available 模型通过 3D-Beacons 提供,因此区块会注明实际提供模型的服务商;没有人工整理条目的服务商会使用 See provider terms 作为备用说明,而不是猜测许可证。只有在提供数据时,InterPro 和 GO 才会分别列出署名信息。本表涵盖上游数据;服务本身的代码采用单独的许可证(参见许可证)。
贡献
欢迎提交问题。提交前请运行检查和测试:
bun run devcheck
bun run test
许可证
Apache-2.0 — 详见 LICENSE。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。