关于 UniProt MCP
UniProt MCP 是面向研究人员的只读 MCP 服务,可从 UniProt 及关联来源获取蛋白质、靶点和变异证据。结果附带来源信息,并支持用摘要值检查已记录的 UniProt REST 数据与当前记录是否一致。
主要功能
- 01搜索 UniProt 并获取条目
- 02查询序列、特征和变异
- 03蛋白质化学性质与残基分析
- 04结构化关联科学数据库信息
- 05提供来源元数据和 SHA-256 摘要
- 06版本固定与来源验证
适用场景
- 01收集某个蛋白质登录号的证据
- 02检查序列位置或变异
- 03汇总结构化靶点档案
- 04检查已记录的 UniProt 响应是否变化
MCP 相关
该服务提供 41 个只读 MCP 工具,涵盖 UniProt 查询、序列分析、生物医学特征和关联来源工作流。来源验证工具会将记录的 UniProt REST 响应与当前数据比较;它不会独立验证 ClinVar 或 AlphaFold DB 结果。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
41收录的工具列表 · 更新于 1 天前
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| accession | string | 是 | UniProt 登录号,例如 'P04637'(人类 TP53)或 'P38398'(人类 BRCA1)。接受已审阅(Swiss-Prot)和未审阅(TrEMBL)登录号;区分大小写。 |
| response_format | string | 否 | 'markdown'(默认)用于生成带来源说明页脚、便于人类阅读的报告;'json' 用于生成包含相同数据、可供机器解析的结构化 payload。其他值均会被拒绝。 |
详细介绍
UniProt MCP 服务
从 UniProt 及其关联的科学来源生成可验证、与版本发布关联的蛋白质证据包。
使用此 MCP 服务查找蛋白质、汇集蛋白质、靶标和变异证据,并保存可核查的记录,注明每项结果的来源。响应会保留特定来源的溯源信息,包括提供方、检索时间、来源 URL 和 SHA-256 摘要。提供方提供版本标识符时,也会记录该标识符。uniprot_provenance_verify 可将记录的 UniProt REST 数据与当前 UniProt 数据进行比对;它不会独立验证 ClinVar 或 AlphaFold DB 的结果。
完整的工具目录仍可用于专业研究工作流。
作者:Santiago Maniches · ORCID 0009-0005-6480-1987 · TOPOLOGICA LLC
研究署名: Santiago Maniches 独立维护此服务,并独自承担该项目特定研究贡献的科学署名。开发、测试和内部审查过程中,在他的指导下使用了 AI 辅助工具。UniProt 记录、关联来源数据及底层第三方方法均保留其原有署名;内部的工具辅助审查不构成外部科学验证。
一行运行:
uvx uniprot-mcp-server
来源可追溯:有来源支持的 TP53 捕获记录
TP53 R175H 示例 是2026 年 10 月 15 日的真实捕获记录,并非假设的模型 转录。UniProt、ClinVar 和 AlphaFold DB 的响应及其原始响应字节均已保存于 捕获目录。 契约测试会根据保存的上游字节重新计算原始和规范化 SHA-256 值,并检查捕获记录中的页脚 URL 和哈希值。 测试还会单独将转录文本与保存的工具输出记录进行比较;但不会独立从这些字节重新推导每一条解析后的陈述。
例如,捕获的 UniProt P04637 响应包含:
Source: UniProt release 2026_03 (02-September-2026)
Retrieved: 2026-10-15T10:32:43Z
URL: https://rest.uniprot.org/uniprotkb/P04637
Canonical SHA-256: 112540dcb662c3ce2feba05272ce0e946ce76089a5bcf8346eb55141892f7fcf
要在仓库检出版本中验证这份历史捕获记录:
pytest -q tests/contract/test_tp53_capture_binding.py
要将当前上游记录与捕获记录进行比较,请使用上述 URL、版本和摘要调用
uniprot_provenance_verify。
实时响应可能与 2026 年 10 月的捕获记录不同;
请勿假设其验证结果一定为 verified。
这只能验证来源摘要绑定关系,以及两份已记录的文本副本是否一致,不能验证每条解析后主张的科学正确性。ClinVar 的生殖系分类并不能 证明体细胞变异具有临床可操作性,AlphaFold 对整个模型的置信度 摘要也不能证明特定残基的置信度。
安装
无需安装即可运行(推荐):
uvx uniprot-mcp-server
或安装到一个环境中:
pip install uniprot-mcp-server
注意: PyPI 上有一个无关的同名包
uniprot-mcp(作者不同,包含 5 个工具,采用 MIT 许可证)。本项目的包名是uniprot-mcp-server。 运行pip install uniprot-mcp会静默安装错误的包。
研究人员 — 从何处着手
如果你是访问此仓库的生物医学研究人员,最值得优先查看的内容如下:
| 资源 | 内容 |
|---|---|
| MCP 工具文档 | 实时访问 UniProt 来源、按登录号查询、来源溯源,以及可选的 AlphaFold 结构置信度检索。本项目不单独发布人工维护的临床数据集。 |
| TP53 R175H 捕获记录 | 有日期的实时转录、保存的上游响应字节、摘要/页脚检查,以及已记录的文本比较。并非经独立验证的生物医学解读。示例性转录已撤下。 |
tests/benchmark/ | 预注册的 30 条提示词基准测试,并在 main 上提交 SHA-256 校验值。2026-04-26 的 v1.1.0 运行已通过实时 UniProt 验证全部 30 条结果 — 转录位于 tests/benchmark/run-2026-04-26-v1.1.0/。 |
scripts/replicate.sh | 一条命令即可验证已发布的 PyPI wheel 是从本仓库精确构建的(交叉核对 PyPI / GitHub Release / SLSA 证明中的 SHA-256;运行 --self-test;实时重新运行基准测试)。适用于 POSIX;Windows 请使用 scripts/replicate.ps1。 |
docs/COMPETITIVE_LANDSCAPE.md | 对生物领域 MCP 服务生态的 14 个服务进行如实调研(2026 年 4 月),并介绍本服务声称的具体差异化优势。 |
欢迎在 https://github.com/smaniches/uniprot-mcp/issues 提交问题或更正。工具结果均注明来源;UniProt 注释和预测的结构置信度保留其上游证据类型。本项目不单独维护临床疾病索引。
有哪些不同之处
| uniprot-mcp | Vanilla LLM + WebFetch | 典型的 bio-MCP | |
|---|---|---|---|
| 工具范围 | 41 个工具,8 个类别 | 无——调用方需自行编写 URL | 通常为 5–10 个 |
| 来源溯源 | 提供方 • 日期 • URL • SHA-256(可用时提供版本) | 无 | 有时仅提供 URL |
| UniProt REST 验证 | uniprot_provenance_verify 会比对记录的 UniProt REST 响应;外部 ClinVar/AlphaFold 来源不在其范围内 | 不一 | 不一 |
| 版本固定 | --pin-release=YYYY_MM 在版本漂移时会报错 | 不适用 | 不适用 |
| 预注册基准测试 | 30 个提示词,SHA-256 已提交至 main + 可复现的验证器 | 不适用 | 不适用 |
| 本地溯源缓存 | uniprot_replay_from_cache 只读原语(自动缓存写入尚未接入请求路径——参见 §溯源与验证) | 不适用 | 不适用 |
| 临床原语 | 序列化学性质 / 感知位置的特征 / HGVS 变体查询 / 疾病关联 / AlphaFold pLDDT / ClinVar | 无 | 无 |
| 组合工具 | uniprot_target_dossier——一次调用,返回九个部分 | 不适用 | 不适用 |
| 输入验证 | 发起任何 HTTP 调用前进行正则表达式验证 + 长度上限检查 | 无 | 部分支持 |
| 错误通道安全性 | 不会向 LLM 回显上游异常文本 | 不适用 | 部分支持 |
| 跨来源允许列表 | 已枚举、经过威胁建模并列出隐私信息 | 不适用 | 通常未经审计 |
| 供应链 | SLSA 构建溯源 + Sigstore + CycloneDX SBOM(flip 后) | 不适用 | 少见 |
| 测试层 | 单元 + 属性 + 契约 + 客户端 + 集成 + 基准测试 | 不适用 | 通常仅有单元测试 |
| 变异测试 | 每周 + 按需工作流;已完成 cache 82 %、proteinchem 92 %、client 70 % 的模块级测量;当前门槛为 0 %(以测量为先),v1.2.0 的目标为 ≥ 95 %——参见 docs/MUTATION_SCORES.md | 不适用 | 少见 |
在我于 2026-04-26 进行的调查中,我能找到的其他 bio-MCP 都没有 溯源 + 验证 链条。受监管领域的用户可以对任何先前的 uniprot-mcp 答案进行验证,无需联系作者——证明 UniProt 仍会返回相同的字节,或准确检测上游的漂移情况。如果你发现我遗漏的反例,请提交 issue,我会更新对比内容。
工具(41 个)
涵盖八类端点。全部为只读(readOnlyHint: true)。除 uniprot_replay_from_cache 外,所有工具都会与至少一项上游服务交互(openWorldHint: true)。无需 UniProt API 密钥。
UniProtKB 核心功能(10 个)
| 工具 | 用途 |
|---|---|
uniprot_get_entry | 完整的 UniProt 条目(例如 p53 的 P04637)。功能、基因、物种、疾病、交叉引用。 |
uniprot_search | UniProt 查询语言——基因、物种、分类 ID、审校标记、自由文本。 |
uniprot_get_sequence | FASTA。首条记录前附有 PIR 风格的溯源注释块(兼容 BLAST+ / biopython)。 |
uniprot_get_features | 结构域、结合位点、PTM、信号肽——可选类型筛选。 |
uniprot_get_variants | 天然变体和疾病突变。 |
uniprot_get_go_terms | 按方面(F / P / C)分组的 GO 注释。 |
uniprot_get_cross_refs | 指向 PDB、Pfam、Ensembl、Reactome、KEGG、STRING 等的原始交叉引用。 |
uniprot_id_mapping | 在数据库之间映射 ID(Gene_Name → UniProtKB、PDB → UniProtKB 等)。 |
uniprot_batch_entries | 一次调用最多处理 100 个条目;由客户端筛除无效登录号。 |
uniprot_taxonomy_search | 按物种名称搜索 UniProt 分类。 |
受控词汇表(4 个)
| 工具 | 用途 |
|---|---|
uniprot_get_keyword | 按 ID 查询关键词(例如 KW-0007 = 乙酰化)。定义、同义词、GO 引用、层级结构。 |
uniprot_search_keywords | 自由文本关键词搜索。 |
uniprot_get_subcellular_location | 按 ID 查询亚细胞定位术语(例如 SL-0039 = 细胞膜)。 |
uniprot_search_subcellular_locations | 自由文本定位搜索。 |
序列档案与集群(4)
| 工具 | 用途 |
|---|---|
uniprot_get_uniref | 按 ID 查询 UniRef 集群(UniRef50_P04637、UniRef90_P04637、UniRef100_P04637)。 |
uniprot_search_uniref | 使用 identity_tier 筛选器(50 / 90 / 100)搜索集群。 |
uniprot_get_uniparc | 按 UPI 查询序列档案记录(UPI000002ED67)。 |
uniprot_search_uniparc | UniParc 全文搜索。 |
蛋白质组与文献(4)
| 工具 | 用途 |
|---|---|
uniprot_get_proteome | 按 UP ID 查询蛋白质组(UP000005640 = 人类)。包括计数、BUSCO 评分和组成部分。 |
uniprot_search_proteomes | 按生物体 / 类型 / 完整度筛选。 |
uniprot_get_citation | 按 ID 查询引文记录(通常为 PubMed 数字 ID)。 |
uniprot_search_citations | 在 UniProt 引文中进行索引搜索。 |
结构化跨数据库解析工具(4)
仅通过网关调用——不会有请求离开 UniProt 源站。这些工具从 UniProt 条目中提取相关交叉引用,并返回结构化记录(类型化列表 / 对象,而非透传字符串)。
| 工具 | 用途 |
|---|---|
uniprot_resolve_pdb | PDB 结构:ID + 方法 + 分辨率 + 链覆盖范围。 |
uniprot_resolve_alphafold | AlphaFold 模型 ID + EBI 查看器 URL(仅模型 ID——如需 pLDDT,请调用下方专用工具)。 |
uniprot_resolve_interpro | InterPro 特征:ID + 条目名称。 |
uniprot_resolve_chembl | ChEMBL 药物靶点 ID + EBI 靶点卡片 URL。 |
生物医学特征(7)
基于条目的纯 Python 组合操作——不访问额外源站。前四个工具用于回答残基级和变异相关问题;后三个是 v1.1.0 扩展,面向药物发现、治疗性蛋白质工程和病原体分泌分析:每个工具都会筛选条目的 features 数组,按特征类型结构化分组,并在结果集为空时提供明确提示。
| 工具 | 用途 |
|---|---|
uniprot_compute_properties | 根据 FASTA 序列推导化学性质:MW / pI / GRAVY / 芳香性 / 电荷 / ε₂₈₀。 |
uniprot_features_at_position | 查询与某个残基位置重叠的所有特征。对解读变异效应至关重要。 |
uniprot_lookup_variant | 将 HGVS 简写(R175H、V600E、R248*)与 UniProt 的天然变异特征进行匹配。 |
uniprot_get_disease_associations | 从 DISEASE 类型注释中提取结构化疾病记录:名称 + 缩写 + UniProt 疾病 ID + OMIM 交叉引用 + 描述。 |
uniprot_get_active_sites | 催化和配体结合残基:活性位点、结合位点、位点、金属结合、DNA 结合。展示蛋白质的残基级化学信息。 |
uniprot_get_processing_features | 成熟加工特征:信号肽、前肽、转运肽、起始甲硫氨酸、链、肽。对治疗性蛋白质工程和病原体分泌分析至关重要。 |
uniprot_get_ptms | 翻译后修饰:修饰残基(磷酸化 / 乙酰化 / 甲基化)、糖基化、脂质化(GPI / 异戊二烯基 / 棕榈酰基)、二硫键、交联。 |
跨源站增强(3)
只有这些工具会查询 rest.uniprot.org 以外的源站。每个工具均在 PRIVACY.md 和威胁模型中有说明。
| 工具 | 源站 | 用途 |
|---|---|---|
uniprot_get_alphafold_confidence | alphafold.ebi.ac.uk | pLDDT 均值 + 四档分布;供 Agent 判断是否可信任该模型。 |
uniprot_resolve_clinvar | eutils.ncbi.nlm.nih.gov | 仅限人类 UniProt 条目(NCBI 分类单元 9606);按基因和可选的蛋白质变异查询 ClinVar 分类,不适用于非人类直系同源物。 |
uniprot_get_publications | rest.uniprot.org | 基于条目参考文献的纯 Python 操作——此处列出是因为它可补充跨源站增强功能。 |
组成与来源(5)
| 工具 | 用途 |
|---|---|
uniprot_resolve_orthology | 按来源数据库归类直系同源交叉引用(KEGG / OMA / OrthoDB / eggNOG / 另外 8 个)。 |
uniprot_get_evidence_summary | 汇总 UniProt ECO 注释证据和断言方法,并提供加权的 0-100 描述性混合指数。该指数未经校准,不代表注释正确的概率,也不能与 AlphaFold pLDDT 比较。 |
uniprot_target_dossier | 一次调用即可全面表征:九个部分——身份 / 功能 / 化学性质 / 结构 / 药物靶点 / 疾病 / 变异 / 功能注释 / 交叉引用。 |
uniprot_provenance_verify | 重新获取此前记录的 URL,并比较版本标签和规范响应的 SHA-256。提供六种判定(verified、incomplete_evidence、release_drift、hash_drift、release_and_hash_drift、url_unreachable),每种都附有建议。 |
uniprot_replay_from_cache | 读取缓存的 UniProt 响应,不访问上游服务。通过 UNIPROT_MCP_CACHE_DIR 启用。 |
来源与验证
上述可验证的来源凭据来自存储的 2026 年 10 月 TP53 捕获记录,而非示例性或重建的记录。
uniprot_provenance_verify 工具会将记录的 UniProt
版本和规范 SHA-256 与新获取的响应进行比较。根据当前上游字节内容,它可能报告匹配或偏移状态。
比较成功并不等同于独立的临床验证。
不要提前声称未来的验证结果。要精确重放历史记录,请保留原始响应字节,或获取相应的 UniProt 源快照。
如果 UniProt 已有更新,该工具会明确告知具体情况:
| 判定 | 含义 | 建议 |
|---|---|---|
verified | 版本和哈希均匹配 | 来源可复现 |
incomplete_evidence | URL 可访问,但缺少参考校验信息 | 提供记录的版本和 SHA-256 |
release_drift | UniProt 发布了新版本 | 如果需要历史答案,请通过 FTP 快照锁定版本 |
hash_drift | 版本相同,但正文已更改 | 这是版本内编辑;请调查或重新获取 |
release_and_hash_drift | 版本和正文均已更新 | 使用特定版本的 FTP 快照 |
url_unreachable | 端点已停用或受到速率限制 | 重试或向 UniProt 报告 |
要严格确保可复现性,请启用版本锁定:
export UNIPROT_PIN_RELEASE=2026_01
uniprot-mcp
# every response is checked against the pinned release;
# any drift raises `ReleaseMismatchError`, which the server surfaces
# as an agent-actionable error envelope.
要离线重放,uniprot_replay_from_cache(url) 会从 UNIPROT_MCP_CACHE_DIR 指向的目录读取先前记录的响应:
export UNIPROT_MCP_CACHE_DIR=~/.uniprot-mcp-cache
uniprot-mcp
# uniprot_replay_from_cache(url) returns the entry at
# $UNIPROT_MCP_CACHE_DIR/<sha256(url)>.json if present.
状态说明(v1.1.3)。
uniprot_replay_from_cache是一种读取原语。缓存目前必须由外部进程填充,例如使用维护者提供的基准测试捕获脚本,或由你封装httpx调用并按文档规定的 JSON 格式写入目录(参见src/uniprot_mcp/cache.py)。 请求路径目前尚未接入自动缓存回写;缓存条目必须显式填充,或通过外部捕获工作流填充。
2026 年 10 月 TP53 示例 保留了实际的上游响应字节,并会离线验证这些内容。 较早的 2026 年 4 月基准测试记录因未保留源字节,已 撤回其作为来源证据的资格;请勿将其原有判定用作科学或密码学证明。
预注册基准测试
tests/benchmark/ 提供一套包含 30 条提示词的评估(Tier A / B / C × 10),其中预期答案已在 main 上提交了 SHA-256 校验值。明文 expected.jsonl 仅在本地保存,直到发布基准测试运行结果;加密承诺意味着作者无法事后改写“正确”答案。
第三方可复现路径(无需 seal 文件)。 直接从 UniProt 实时重新推导每个 Tier A / B 答案并打印,无需 expected.jsonl。这可以确认这些答案如今仍可从一手来源独立复现;但不会重新计算 seal(已提交的 SHA-256 绑定了被隐藏的推理依据,见下文):
python tests/benchmark/verify_against_hashes.py tests/benchmark/expected.hashes.jsonl
# Re-derives all 30 answers live and prints them (informational; exit 0).
维护者加密验证路径(需要本地明文 seal)。 expected.hashes.jsonl 中已提交的摘要针对 {prompt_id, answer, rationale} 生成;作为预注册 seal 的一部分,推理依据被刻意隐藏,因此完整的加密校验需要本地的 expected.jsonl:
python tests/benchmark/verify_answers.py tests/benchmark/expected.jsonl
# OK: all 30 prompts verified against https://rest.uniprot.org
python tests/benchmark/verify.py tests/benchmark/expected.jsonl tests/benchmark/expected.hashes.jsonl
# OK: 30 commitments verified
参见 tests/benchmark/AUDIT.md,了解每条提示词的来源归属和正式的独立性声明(编写答案时未使用 uniprot-mcp)。
安装
pip install uniprot-mcp-server # PyPI distribution
# or, for a pinned, isolated install:
uvx --from uniprot-mcp-server uniprot-mcp
为什么有三个不同的名称? 这是标准的 Python 打包模式,正是因为 PyPI 的命名空间是全局的,名称冲突时必须消歧:
概念 值 含义 GitHub 仓库 smaniches/uniprot-mcp源代码和问题跟踪 PyPI 发行包 uniprot-mcp-serverpip install安装的包(本项目发布时,PyPI 上的uniprot-mcp名称已被占用)Python 模块 uniprot_mcpimport导入的模块(PEP-8 下划线形式)控制台脚本 + MCP 服务标识 uniprot-mcp在 shell 中运行的名称,也是 Claude Desktop 显示的名称 可交叉验证你安装的 wheel 确实由此仓库构建:每个版本都附带 Sigstore 签名、SLSA 构建来源证明和 CycloneDX SBOM,均附加在 v1.1.0 GitHub Release 中。运行
bash scripts/replicate.sh(POSIX)或pwsh scripts/replicate.ps1(Windows),即可端到端验证完整链路。其他常见的“一件事三个名称”先例:pillow/PIL、python-dateutil/dateutil、beautifulsoup4/bs4、python-Levenshtein/Levenshtein。
从源代码安装:
git clone https://github.com/smaniches/uniprot-mcp.git
cd uniprot-mcp
pip install -e .
Claude Desktop
claude_desktop_config.json:
{
"mcpServers": {
"uniprot": {
"command": "uvx",
"args": ["uniprot-mcp-server"]
}
}
}
如需固定版本、满足可复现性要求的访问方式:
{
"mcpServers": {
"uniprot": {
"command": "uniprot-mcp",
"args": ["--pin-release=2026_01"]
}
}
}
如需启用 uniprot_replay_from_cache,从你自行填充的缓存目录读取(请求路径未接入自动写入功能——参见§来源与验证):
{
"mcpServers": {
"uniprot": {
"command": "uniprot-mcp",
"env": {
"UNIPROT_MCP_CACHE_DIR": "/absolute/path/to/cache"
}
}
}
}
Claude Code(CLI)
claude mcp add uniprot -- uniprot-mcp
自检(UniProt 实时冒烟测试)
uniprot-mcp --self-test
# [tools] registered: 41/41
# [live] P04637 -> TP53 OK
# [PASS]
示例工作流
1. TP53 R175H 临床变异解读资料包。
> What's at residue 175 of P04637? Is R175H a known variant? Pull
> the UniProt and ClinVar evidence and tell me how confident the
> AlphaFold model is at that residue.
→ uniprot_features_at_position("P04637", 175)
→ uniprot_lookup_variant("P04637", "R175H")
→ uniprot_resolve_clinvar("P04637", change="R175H")
→ uniprot_get_alphafold_confidence("P04637")
2. 一次调用生成药物靶点档案。
> Give me a complete drug-target characterisation of human BRCA1.
→ uniprot_target_dossier("P38398")
# nine sections, two upstream calls (entry + FASTA), one tool call.
3. 为缓冲液选择 / 表达系统选择分析序列化学性质。
> What's the molecular weight, pI, and hydrophobicity of human insulin?
→ uniprot_compute_properties("P01308")
# MW 11,981 Da, pI 4.93, ε₂₈₀ 24,980 M⁻¹·cm⁻¹ — pure Python on the FASTA.
4. 使用已记录的 TP53 捕获数据检查来源漂移。
> Check the 2026-10-15 UniProt P04637 response for drift.
> Supply the captured release, URL, and canonical SHA-256:
uniprot_provenance_verify(
url="https://rest.uniprot.org/uniprotkb/P04637",
release="2026_03",
response_sha256="112540dcb662c3ce2feba05272ce0e946ce76089a5bcf8346eb55141892f7fcf"
)
判定结果由上游实时响应决定;不会预先断言是否匹配。
5. 离线重放先前缓存的答案(读取原语——见下方状态说明)。
# Pre-condition: $UNIPROT_MCP_CACHE_DIR/<sha256(url)>.json already exists,
# populated by the maintainer benchmark capture script or an external
# wrapper. Automatic cache write-through is not currently wired into the
# request path; cache entries must be populated explicitly or by an
# external capture workflow.
export UNIPROT_MCP_CACHE_DIR=~/sealed-cache
> uniprot_replay_from_cache("https://rest.uniprot.org/uniprotkb/P04637")
测试
| 层级 | 路径 | 内容 |
|---|---|---|
| 单元测试 | tests/unit/ | 每个公共函数的行为。 |
| 属性测试 | tests/property/ | 基于 Hypothesis 的正则表达式与查询构造不变量测试。 |
| 契约测试 | tests/contract/ | 防止清单 / pyproject / 文档 / 事件策略 / 基准测试发生偏移。 |
| 客户端测试 | tests/client/ | 针对由 respx 模拟的 HTTP 请求测试重试 / 退避 / ID 映射轮询。 |
| 集成测试 | tests/integration/ | 实时 UniProt + AlphaFold;通过 --integration 选择运行。 |
| 基准测试 | tests/benchmark/ | 30 个已提交 SHA-256 的提示词 + 可复现的验证器。 |
CI 会在 main 上强制运行离线测试套件和可选的实时集成测试套件(实际数量通过 pytest --collect-only --ignore=tests/integration 和 pytest --collect-only tests/integration 获取;离线测试数量包括针对 cache、proteinchem、client 的 v1.1.x 变异测试文件、用于版本一致性 / 更新日志存在性检查的契约测试,以及补齐完整覆盖率的覆盖率缺口测试文件)。所有七个源文件的行覆盖率 + 分支覆盖率均为 100.00 %;[tool.coverage.report] 中的门槛设为 fail_under = 100,由 CI 强制执行。两个分支对确实不可达的导入时回退路径使用了合理说明的 # pragma: no cover(说明已内联记录,并写入 pyproject.toml)。可在本地通过 pytest tests/unit tests/property tests/client tests/contract --cov=uniprot_mcp --cov-branch --cov-report=term-missing 重现。Mypy(严格模式)、ruff(检查 + 格式化)、bandit(所有严重级别均为 0 个问题)、pip-audit(--strict,无已知漏洞)均检查通过。**变异测试基础设施已交付,并以测量为先:**最新的矩阵工作流结果见 docs/MUTATION_SCORES.md 中的模块明细表;≥ 95 % 的门槛是 v1.2.0 的目标,并非当前状态。
# Fast, offline (CI on every push):
pytest tests/unit tests/property tests/client tests/contract -v
# Live UniProt (opt-in, nightly in CI):
pytest --integration tests/integration -v
# Lint / type-check / security / SCA:
ruff check . && ruff format --check . && mypy src/uniprot_mcp
bandit -r src/uniprot_mcp && pip-audit --strict
架构与威胁模型
docs/THREAT_MODEL.md— 十二项基于 STRIDE 的威胁,每项均附有指向代码路径或提交 SHA 的证据,以及跨源允许列表策略(§T3b)。docs/INCIDENT_POLICY.md+docs/POSTMORTEM_TEMPLATE.md+docs/INCIDENT_LOG.md— 每次夜间集成测试中断都会触发事后复盘记录。AUDIT.md— 1.0.1 之前的专业审计,记录 P0/P1 级问题的修复情况。docs/RELEASE.md— 发布操作手册,涵盖 tag → PyPI → MCP Registry → Sigstore → GitHub Release → Zenodo 流程,包括打 tag 后的release-verify.yml验证任务,以及 Zenodo + PyPI Webhook 的一次性设置。docs/archive/— 保留翻转前的规划文档以供审计追溯(PENDING_V1.md、MERGE_PLAN.md、RELEASE_AUDIT_v1.1.3.md)。这些文档不属于已发布的文档站点;当前运行状态见README.md、CHANGELOG.md和docs/MUTATION_SCORES.md。mkdocs.yml— Material 主题的文档站点,可通过.github/workflows/docs.yml部署到gh-pages。可使用pip install -e ".[docs]" && mkdocs serve在本地构建。
同一作者的相关 MCP 服务
alphafold-sovereign-mcp— 一款 Model Context Protocol 服务,可将 AlphaFold DB 与另外八个公共生物医学数据源集成,并配备本地 SQLite 知识图谱(pip install alphafold-sovereign-mcp)。semantic-scholar-mcp— 面向 Semantic Scholar(超过 2 亿篇学术论文)的 Model Context Protocol 服务,提供 14 个工具,用于论文搜索、引用图遍历、作者资料查询和推荐(pip install s2-mcp-server)。
引用
通过 CITATION.cff 引用(GitHub 会显示“引用此仓库”按钮)。同时务必引用 UniProt Consortium:
The UniProt Consortium. UniProt: the Universal Protein Knowledgebase in 2025. Nucleic Acids Research(2025 年)。 doi:10.1093/nar/gkae1010
许可证
Apache-2.0 — 详见 LICENSE 和 NOTICE。
这是由 TOPOLOGICA LLC 维护的独立 Apache-2.0 许可 UniProt MCP。它不依赖配套产品。其源数据溯源和重放功能不应被误认为具有防篡改能力的审计账本或独立的科学验证。需要持久、可信审计记录的集成必须单独实现并评估此类功能。
版权所有 © 2026 Santiago Maniches。TOPOLOGICA LLC。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。