一个提供无缝访问 UniProtKB 蛋白质数据的 Model Context Protocol (MCP) 服务器。通过一个设计用于 LLM 代理的类型化且健壮的接口查询蛋白质条目、序列、基因本体注释,并执行 ID 映射。
pip install uniprot-mcp
本地开发(stdio):
uniprot-mcp
远程部署(HTTP):
uniprot-mcp-http --host 0.0.0.0 --port 8000
HTTP 服务器提供:
http://localhost:8000/mcphttp://localhost:8000/healthzhttp://localhost:8000/metrics(Prometheus 格式)npx @modelcontextprotocol/inspector uniprot-mcp
通过 URI 模式访问静态或动态数据:
| URI | 描述 |
|---|---|
uniprot://uniprotkb/{accession} | 任何准入编号的原始 UniProtKB 条目 JSON |
uniprot://help/search | 搜索查询语法的文档 |
执行操作并检索类型化数据:
| 工具 | 参数 | 返回值 | 描述 |
|---|---|---|---|
fetch_entry | accession, fields? | Entry | 获取完整的蛋白质条目及其所有注释 |
get_sequence | accession | Sequence | 获取蛋白质序列及其长度和元数据 |
search_uniprot | query, size, reviewed_only, fields?, sort?, include_isoform | SearchHit[] | 全文搜索并进行高级过滤 |
map_ids | from_db, to_db, ids | MappingResult | 在 200 多种数据库之间转换标识符 |
fetch_entry_flatfile | accession, version, format | string | 检索历史条目版本(txt/fasta) |
进度跟踪:map_ids 报告长运行任务的进度(0.0 → 1.0)。
预构建模板用于常见工作流程:
| 变量 | 默认值 | 描述 |
|---|---|---|
UNIPROT_ENABLE_FIELDS | 未设置 | 请求最小字段子集以减少负载大小 |
UNIPROT_LOG_LEVEL | info | 日志级别:debug, info, warning, error |
UNIPROT_LOG_FORMAT | plain | 日志格式:plain 或 json |
UNIPROT_MAX_CONCURRENCY | 8 | 最大并发 UniProt API 请求 |
MCP_HTTP_HOST | 0.0.0.0 | HTTP 服务器绑定地址 |
MCP_HTTP_PORT | 8000 | HTTP 服务器端口 |
MCP_HTTP_LOG_LEVEL | info | Uvicorn 日志级别 |
MCP_HTTP_RELOAD | 0 | 启用自动重新加载:1 或 true |
MCP_CORS_ALLOW_ORIGINS | * | CORS 允许的来源(逗号分隔) |
MCP_CORS_ALLOW_METHODS | GET,POST,DELETE | CORS 允许的方法 |
MCP_CORS_ALLOW_HEADERS | * | CORS 允许的头 |
# HTTP 服务器标志
uniprot-mcp-http --host 127.0.0.1 --port 9000 --log-level debug --reload
# 使用 MCP 客户端
result = await session.call_tool("fetch_entry", {
"accession": "P12345"
})
# 返回结构化的 Entry 包含:
# - 主准入编号,蛋白质名称,生物体
# - 序列(长度,质量,序列字符串)
# - 特征(域,修饰,变异)
# - GO 注释(生物学过程,分子功能,细胞成分)
# - 到其他数据库的交叉引用
# 搜索已审核的人类蛋白质
result = await session.call_tool("search_uniprot", {
"query": "kinase AND organism_id:9606",
"size": 50,
"reviewed_only": True,
"sort": "annotation_score"
})
# 返回 SearchHit 对象列表,包含准入编号和分数
# 将 UniProt ID 转换为 PDB 结构
result = await session.call_tool("map_ids", {
"from_db": "UniProtKB_AC-ID",
"to_db": "PDB",
"ids": ["P12345", "Q9Y6K9"]
})
# 返回 MappingResult,包含成功和失败的映射
# 克隆仓库
git clone https://github.com/josefdc/Uniprot-MCP.git
cd Uniprot-MCP
# 安装依赖
uv sync --group dev
# 安装开发工具
uv tool install ruff
uv tool install mypy
# 运行所有测试并生成覆盖率报告
uv run pytest --maxfail=1 --cov=uniprot_mcp --cov-report=term-missing
# 运行特定测试文件
uv run pytest tests/unit/test_parsers.py -v
# 仅运行集成测试
uv run pytest tests/integration/ -v
# 检查
uv tool run ruff check .
# 格式化
uv tool run ruff format .
# 类型检查
uv tool run mypy src
# 运行所有检查
uv tool run ruff check . && \
uv tool run ruff format --check . && \
uv tool run mypy src && \
uv run pytest
# Stdio 服务器
uv run uniprot-mcp
# 带有自动重新加载的 HTTP 服务器
uv run python -m uvicorn uniprot_mcp.http_app:app --reload --host 127.0.0.1 --port 8000
src/uniprot_mcp/
├── adapters/ # UniProt REST API 客户端和响应解析器
│ ├── uniprot_client.py # 带有重试逻辑的 HTTP 客户端
│ └── parsers.py # 将 UniProt JSON 转换为 Pydantic 模型
├── models/
│ └── domain.py # 类型化数据模型(Entry, Sequence 等)
├── server.py # MCP stdio 服务器(FastMCP)
├── http_app.py # MCP HTTP 服务器(Starlette + CORS)
├── prompts.py # MCP 提示模板
└── obs.py # 可观察性(日志记录,指标)
tests/
├── unit/ # 解析器、模型、工具的单元测试
├── integration/ # 使用 VCR 固件的端到端测试
└── fixtures/ # 测试数据(UniProt JSON 响应)
此服务器发布到:
# 构建分发包
uv build
# 发布到 PyPI(需要令牌)
uv publish --token pypi-YOUR_TOKEN
# 发布到 MCP 注册表(需要 GitHub 认证)
mcp-publisher login github
mcp-publisher publish
查看 docs/registry.md 获取详细的注册表发布说明。
欢迎贡献!请:
快速入门贡献者:
git checkout -b feature/amazing-feature)uv tool run ruff check . && uv tool run mypy src && uv run pytestfeat:,fix:,docs: 等)本项目根据 MIT 许可证发布 - 详情见 LICENSE 文件。
这是一个独立项目,未经 UniProt 联盟正式认可或支持。使用其数据时,请查阅 UniProt 的 使用条款。
为生物信息学和 AI 社区打造 ❤️