本系列:00 什么是 MCP · 01 协议与心智模型 · 02 Python 框架选型 · 03 部署与调用 · 04 重任务与优化 · 05 从 0 开发 · 06 进阶示例 · 07 阿里云案例(本文)
1. 场景与目标
在 MCP Host(如 Cursor、内部 Agent 平台)中,用户希望用自然语言驱动酶/蛋白相关分析:
| 能力 | 模型 | 输入 | 输出 |
|---|---|---|---|
| 序列嵌入 | ESM2 | 氨基酸序列 / FASTA | 嵌入向量(.npz) |
| 结构预测 | ESMFold | 氨基酸序列 / FASTA | 3D 结构(.pdb / .cif)+ pLDDT |
| 序列设计 | ProteinMPNN 等 | 3D 结构 | 新酶序列(.fasta) |
单次任务 GPU 占用高、耗时长,不适合在 MCP 进程内同步推理。本文给出在 阿里云 上的落地方式:
- 计算编排:ACK 集群内的 Argo Workflows
- 对象存储:OSS(输入/输出、跨步骤 URI 传递)
- 共享文件:NAS(模型权重、缓存、大体积中间文件)
- 协议层:三个独立 MCP Server(+ 可选 pipeline MCP),模式见 04 重服务与长任务
段末注释:ACK(Alibaba Cloud Container Service for Kubernetes,阿里云容器服务 Kubernetes 版)是托管 K8s;OSS(Object Storage Service,对象存储服务)用于存放大对象;NAS(Network Attached Storage,文件存储 NAS)提供 POSIX 共享挂载。
2. 总体架构(阿里云)
1 | flowchart TB |
分工原则:
| 组件 | 职责 |
|---|---|
| MCP Server | 参数校验、写 OSS 输入、提交 Argo Workflow、查状态、返回摘要与 URI;不加载模型 |
| Argo Workflow | GPU Pod 生命周期、重试、超时、DAG(可选全链路) |
| OSS | 每个 run_id 目录存 input/output;MCP 与 Worker 只传 URI 字符串 |
| NAS | 各 Worker 镜像挂载同一 模型目录(ESM2/ESMFold/MPNN 权重),避免打进镜像 |
| RDS / Redis | run_id → status, workflow_name, output_uris(MCP 快速查询) |
MCP 部署建议:Streamable HTTP + 无状态(03 部署与调用),Ingress 或 ALB(Application Load Balancer,应用型负载均衡)暴露 HTTPS。
3. 存储布局与 URI 约定
3.1 OSS 目录(跨 MCP 串联)
1 | oss://{bucket}/protein-runs/{run_id}/ |
跨服务传递:只传 oss://{bucket}/protein-runs/{run_id}/outputs/structure.pdb,禁止把 PDB 全文塞进 Tool 返回或 LLM context。
3.2 NAS 挂载(Worker Pod)
| 挂载路径 | 内容 |
|---|---|
/mnt/nas/models/esm2/ |
ESM2 权重 |
/mnt/nas/models/esmfold/ |
ESMFold 权重 |
/mnt/nas/models/mpnn/ |
MPNN checkpoint |
/mnt/nas/cache/ |
可选,HF / 临时缓存 |
NAS 选型:容量型 NAS 存模型;若多可用区 Worker,使用 NAS 挂载点 与 ACK PersistentVolume 绑定(存储类 alicloud-nas)。
3.3 鉴权
- MCP Pod / Worker Pod:通过 ACK RRSA(RAM Roles for Service Accounts)或 Worker RAM 角色,授予 OSS
PutObject/GetObject、NAS 读权限;勿在 Tool 参数或镜像中写 AccessKey。 - MCP 返回结果时,大文件可提供 OSS 签名 URL(短期有效),供用户浏览器或下游下载。
4. 三个 MCP 服务定义
三个服务 Tool 形态统一,便于 Agent 记忆;实现可共用 argo_client.py、oss_client.py(oss2 SDK)。
4.1 通用 Tool 集(每个 MCP 相同模式)
| Tool | 说明 |
|---|---|
submit_* |
创建 run、上传输入到 OSS、提交 Argo Workflow;返回 run_id(支持 Task 时立即 working) |
get_run_status(run_id) |
pending / running / succeeded / failed |
fetch_run_summary(run_id) |
摘要 + output_uris;小 JSON 可 inline |
cancel_run(run_id) |
终止 Argo Workflow |
Resource 示例:resource://runs/{run_id}/summary(只读 meta + OSS 路径列表)。
4.2 esm2-mcp(序列 → 嵌入)
1 | submit_esm2_embed( |
Argo WorkflowTemplate 名:esm2-embed(见 §6)。
4.3 esmfold-mcp(序列 → 3D 结构)
1 | submit_esmfold_predict( |
GPU 建议:独占 A10 / V100 / GU30 等 ACK GPU 共享池 中较大显存规格;与 ESM2 分 WorkflowTemplate 与节点池。
4.4 mpnn-mcp(结构 → 新序列)
1 | submit_mpnn_design( |
典型 Agent 调用链:
1 | esmfold.submit → poll → fetch → pdb_uri |
5. 可选:pipeline-mcp(Argo DAG 一键)
若 Host 常跑固定流程,可增加第四个 MCP,内部提交 一条 Argo DAG:
1 | flowchart LR |
1 | submit_enzyme_design_pipeline( |
单步调试仍用三个专用 MCP;产品化「一键酶设计」用 pipeline。
6. Argo WorkflowTemplate(阿里云适配骨架)
以下 YAML 为 骨架,镜像需推送到 ACR(Alibaba Cloud Container Registry,容器镜像服务);参数由 MCP 在 submit_* 时注入。
6.1 ESM2 嵌入
1 | apiVersion: argoproj.io/v1alpha1 |
6.2 ESMFold / MPNN
结构类似,替换:
- 镜像:
esmfold-worker、mpnn-worker - NAS 子路径:
/mnt/nas/models/esmfold、/mnt/nas/models/mpnn - GPU / memory:ESMFold 显存需求更高,可设
activeDeadlineSeconds: 7200 - MPNN 输入参数:
--structure-uri={{workflow.parameters.structure-oss-uri}}
6.3 MCP 提交 Workflow(Python 概念代码)
1 | from argo_workflows.api import workflow_service_api |
Worker 内读写 OSS 使用 oss2,Endpoint 与 Bucket 同地域,优先 内网 endpoint 免流量费、降延迟。
7. ACK 部署清单
7.1 集群与组件
| 项 | 建议 |
|---|---|
| ACK 集群 | 至少 1 个 GPU 节点池(可按 ESMFold / MPNN 分池) |
| Argo Workflows | argo 命名空间安装;MCP 通过 K8s RBAC create workflows |
| MCP Deployment | mcp-gateway 命名空间,2+ 副本,无状态 HTTP |
| Ingress / ALB | HTTPS,WAF 可选;校验 MCP Origin 头 |
| ACR | 私有镜像;与 ACK 同地域 |
7.2 MCP Pod 环境变量(示例)
1 | ARGO_SERVER_URL=https://argo.internal/api/v1 |
7.3 Host 侧注册(多 MCP)
1 | { |
建议在某一 MCP 上提供 @mcp.prompt() enzyme_design_workflow,写明:先 esmfold → 再 mpnn → 可选 esm2;禁止粘贴完整 PDB。
8. 异步、Task 与取消
与 04 一致:
- Host 支持 Tasks:
@mcp.tool(task=True),内部 watch Argo Workflow 状态并report_progress(如「Argo phase: Running」)。 - 不支持 Tasks:暴露
submit_*+get_run_status+fetch_run_summary三 Tool。 - 取消:
cancel_run→ ArgoterminateWorkflow;Worker 应监听 SIGTERM 释放 GPU。
| 任务 | 典型耗时 | 说明 |
|---|---|---|
| ESM2 | 秒~分钟 | 序列长度线性影响 |
| ESMFold | 分钟级 | 长序列需大显存 |
| MPNN | 分钟级 | num_sequences 可 Argo 内 parallel steps |
9. 安全与成本
| 主题 | 做法 |
|---|---|
| 鉴权 | RAM 角色 + RRSA;OSS Bucket 私有;MCP 网关 OAuth / mTLS |
| 网络 | Worker 与 OSS/NAS 同 VPC;MCP 仅内网 Ingress |
| 成本 | GPU 节点池 弹性伸缩(缩容至 0 需注意冷启动);OSS 生命周期转低频存储 |
| 合规 | 序列/结构数据按租户前缀隔离:oss://bucket/{tenant_id}/protein-runs/ |
10. 落地顺序建议
- ACK + NAS 模型目录 + OSS Bucket + ACR 镜像(先 ESMFold Worker 跑通)。
- esmfold-mcp + WorkflowTemplate +
submit / status / summary。 - mpnn-mcp,输入改为
structure_oss_uri。 - esm2-mcp(可选特征/对比)。
- pipeline-mcp 或 Argo DAG 串联;接入 ARMS(应用实时监控服务)做 Workflow 与 MCP 链路追踪。
11. 与本系列其他篇章的关系
| 篇章 | 关联 |
|---|---|
| 04 重服务与长任务 | MCP 薄、Worker 厚;Tasks;Resource 卸载 |
| 03 部署与调用 | HTTP 无状态、Ingress、生产清单 |
| 06 进阶示例 | Tool / Resource / Task 代码形态 |
12. 小结
| MCP | Argo Template | OSS 输出 | NAS |
|---|---|---|---|
| esm2-mcp | esm2-embed |
embedding.npz |
ESM2 权重 |
| esmfold-mcp | esmfold-predict |
structure.pdb |
ESMFold 权重 |
| mpnn-mcp | mpnn-design |
designed.fasta |
MPNN 权重 |
在阿里云上,OSS 管对象、NAS 管模型、Argo 管算力、MCP 管协议与调度;三个(或四个)MCP 服务并列注册,由 Agent 按 URI 串联,即可在 Host 内完成「嵌入 → 折叠 → 设计」酶工程工作流。