Colab MCP实战:把本地Agent接到云端Notebook

本地 Coding Agent 有两个很现实的限制:

本机算力有限
不想让不可信代码直接跑在电脑上

Google 已经把 Colab 做成一个 MCP Server:任何兼容 MCP 的 Agent,都可以把 Colab Notebook 当成远程可执行工作区,创建和重排 Cell、写 Python、执行代码、安装依赖,并把结果保存在一个可人工接管的 Notebook Artifact 里。

这比普通“远程执行 Python”更有意思,因为 Notebook 本身同时是:

Code
Execution State
Result
Visualization
Documentation

特别适合数据分析、模型实验和临时计算。

但如果准备把它接进生产 Agent,真正应该关心的不只是 uvx 配置,而是 Workspace 隔离、依赖供应链、Artifact、数据边界和“谁能执行什么”。

最小安装只有几步

本地需要:

Python
git
uv

安装 uv

pip install uv

MCP 配置可以直接使用:

{
  "mcpServers": {
    "colab-proxy-mcp": {
      "command": "uvx",
      "args": [
        "git+https://github.com/googlecolab/colab-mcp"
      ],
      "timeout": 30000
    }
  }
}

然后在浏览器里打开一个 Colab Notebook,让 Agent 执行:

Load the sales dataset,
forecast next month,
and visualize the result.

Agent 可以:

创建 Markdown Cell
创建 Python Cell
安装依赖
执行代码
生成图表
整理 Notebook

为什么 Notebook 比普通 Shell 更适合分析 Agent

Shell Agent 往往得到:

stdout
stderr
files

Notebook 则天然有:

步骤结构
Cell 级代码
中间结果
图表
解释文本

一轮分析完成后,用户可以直接 Review:

第 3 个 Cell 为什么这样清洗?
第 6 个图表用的是什么字段?

它的可解释性比一串终端日志高很多。

但不要把一个 Notebook 当成多个任务的共享沙箱

生产里最危险的做法:

所有 Agent
→ 同一个长期 Notebook

会残留:

变量
DataFrame
文件
环境依赖
凭证
输出

任务 B 很可能读到任务 A 的状态。

更合理:

Run
→ Notebook Workspace

至少做到:

一个高风险 Run 一个独立 Notebook

Notebook Manifest

public record NotebookWorkspace(
        String workspaceId,
        String runId,
        String subjectId,
        String tenantId,
        String notebookId,
        WorkspaceStatus status,
        Instant createdAt,
        Instant expiresAt) {
}

状态:

CREATED
RUNNING
WAITING_HUMAN
COMPLETED
CLEANING
EXPIRED

Cell 本身应该有类型

不要把 Agent 所有动作都当普通代码。

我会区分:

INPUT
TRANSFORM
ANALYSIS
VISUALIZATION
INSTALL
EXPORT

例如:

{
  "cell_id": "cell-18",
  "type": "INSTALL",
  "source": "!pip install xgboost==3.0.2",
  "risk": "MEDIUM"
}

INSTALL 应该走更严格 Policy。

pip install 是真实供应链风险

Google 官方示例允许 Agent 安装 Notebook 基础镜像中不存在的库。

开发环境很好用。

生产里不能默认无限制:

pip install whatever-model-suggests

更安全:

Internal Package Mirror
Allowed Package List
Pinned Version
Hash Validation

例如:

packages:
  allow:
    pandas: "2.3.1"
    matplotlib: "3.10.5"
    xgboost: "3.0.2"
  deny_unlisted: true

Notebook 的输入数据也必须走 Artifact Registry

不要让 Agent 自己猜路径:

/home/user/data.csv

而是:

artifact://sales/2026-08-23/input.csv

Gateway 负责下载到 Workspace。

public record NotebookInputArtifact(
        String artifactId,
        String sha256,
        long sizeBytes,
        DataClass dataClass,
        String mountedPath) {
}

Notebook 只看到当前 Run 允许的文件。

不要让 Notebook 直接拥有整个云存储凭证

危险:

GOOGLE_APPLICATION_CREDENTIALS
AWS_SECRET_ACCESS_KEY

直接放在 Notebook Environment。

任何生成代码都可以读取并外传。

更合理:

Agent requests artifact
↓
Gateway checks authority
↓
short-lived URL / proxy stream
↓
Notebook reads file

网络默认也应该收紧

数据分析 Agent 通常不需要访问整个互联网。

可以根据任务给:

NO_NETWORK
PACKAGE_MIRROR_ONLY
ALLOWLIST
FULL_NETWORK

默认从低权限开始。

例如:

network_profile: PACKAGE_MIRROR_ONLY

避免一个数据分析 Prompt Injection 最后变成:

上传内部 CSV 到公网

Colab 的一个巨大优势:用户可以中途接管

Google 强调,Notebook 是一个真实 Artifact,用户可以在任何时候跳进去看状态、检查 Cell 或人工修改。

这特别适合:

Human-in-the-Loop Analysis

例如 Agent 已经做到:

数据清洗完成
异常值策略有两个选择

此时暂停:

Option A: winsorize
Option B: drop

让分析师决定。

但人工修改以后必须让 Agent 知道版本变化

假设用户改了 Cell 5。

Agent 仍然基于旧 Cell 5 继续推理,会产生状态漂移。

所以每个 Cell 应该有:

version
hash

人工修改:

cell-5 v2

Agent 下一步必须刷新 Notebook Snapshot。

Notebook Snapshot

public record NotebookSnapshot(
        String notebookId,
        long revision,
        List cells,
        String environmentHash,
        Instant capturedAt) {
}

每次重要执行之前检查:

expected revision
==
current revision

不一致则重新读取。

输出也不要只留在 Notebook

最终 Artifact 可以有:

Notebook
CSV
PNG
Model
Report

每个输出都进入 Artifact Registry。

例如:

{
  "artifact_id": "forecast-92",
  "type": "CSV",
  "source_notebook": "nb-18",
  "source_revision": 12,
  "sha256": "..."
}

这样后续 Workflow 不需要重新解析整个 Notebook。

一个 Agent 生成模型文件时风险更高

例如:

model.pkl

Pickle 不是安全的数据交换格式。

不要在其他服务里直接加载不可信 Pickle。

更推荐:

ONNX
SafeTensors
JSON parameters

或者在同类隔离沙箱中加载。

Notebook 成本也要进入 Run Budget

Agent 可能安装大包、跑 GPU、反复训练。

预算不应该只有 Token。

public record ComputeBudget(
        Duration maximumRuntime,
        long maximumCpuSeconds,
        long maximumGpuSeconds,
        long maximumDiskBytes,
        BigDecimal maximumCost) {
}

达到限制:

PAUSE / TERMINATE

而不是让 Notebook 一直跑。

一类很常见的死循环:模型不断重新跑重任务

例如:

训练模型
↓
结果不理想
↓
改一个参数
↓
重新训练
↓
继续

所以要限制:

max_expensive_cells

例如:

execution:
  max_training_runs: 4
  max_cell_runtime: 10m

Cell Cache 可以省很多计算

如果输入、代码和环境都没变:

Cell Output 可以复用

Cache Key:

source_hash
+ input_artifact_hash
+ environment_hash

但有:

time()
random
network

这类非确定性 Cell 不应该默认 Cache。

Environment Hash 很关键

同一代码在:

pandas 2.2

和:

pandas 2.3

可能结果不同。

所以 Notebook Artifact 不能只保存 .ipynb

还需要:

Python Version
Package Lock
Runtime Image

例如:

{
  "python": "3.12.4",
  "requirements_lock_hash": "...",
  "runtime": "colab-2026-08"
}

“可复现 Notebook”需要再跑一次

Agent 跑完以后,Notebook 很可能依赖当前 Kernel 的隐藏状态。

例如 Cell 顺序:

5
2
7
3

人工看文件却以为从上到下能执行。

所以发布前应该:

Restart Runtime
Run All Top-to-Bottom

只有第二次仍成功,才标记:

REPRODUCIBLE

这是一条非常硬的 Gate。

我会给分析 Notebook 加 6 个发布检查

1. All Cells Run Top-to-Bottom
2. No Hidden Dependency
3. Input Artifacts Versioned
4. Package Versions Locked
5. Output Artifacts Registered
6. No Secrets in Cells / Outputs

任何一项失败:

不能交付为正式分析结果

MCP Tool 的权限同样需要限制

Agent 不应该因为连接了 Colab MCP,就可以控制所有 Notebook。

Discovery 应只暴露:

当前 Run Notebook

而不是用户账户下所有 Notebook。

最小能力可以拆:

notebook.read
notebook.edit
cell.execute
package.install
artifact.export

其中 package.installartifact.export 风险更高。

一个实际的能力 Manifest

capability: colab.cell.execute
risk: medium
resource:
  notebook: nb-18
limits:
  max_calls: 50
  max_runtime: 120s
network: restricted

这比给 Agent 一个:

colab_admin

好得多。

什么场景最适合 Colab MCP

我会优先用在:

数据探索
临时 ETL
可视化
模型原型
Benchmark
Notebook 报告

不太适合直接承担:

长期在线服务
高频生产交易
需要严格低延迟的 API

Notebook 是工作区,不是生产微服务。

从 Notebook 进入生产还要再走一步

例如 Agent 在 Colab 验证了一个预测模型。

正确链路:

Notebook Experiment
↓
Reproducibility Gate
↓
Export Artifact
↓
Model Registry
↓
Offline Eval
↓
Canary
↓
Serving

不要:

Notebook 看起来不错
→ 直接让业务系统调用

Colab MCP 真正有意思的地方,不只是“Agent 可以远程跑 Python”。

它提供的是一个:

可执行
可观察
可人工接管
可保存 Artifact

的云端工作空间。

但一旦从个人实验升级到企业 Agent,必须补上:

Run 隔离
Artifact 权限
依赖供应链
网络策略
计算预算
Notebook 版本
可复现 Gate

否则只是把“在本机乱跑代码”的风险搬到了云端。

真正生产化的目标不是让 Agent 获得更多计算权限,而是让它获得足够完成当前实验、但不会顺手获得整个云环境的权限


更多企业级 AI 应用、Agent、RAG 与大模型工程化内容,我会继续整理在 智元界

https://www.zyentor.com/