一个 MCP 服务器,让任何 agent 都能拥有沙箱、浏览器和 GitHub 访问能力
代码工厂(code factory)是一类托管 agent,能把一项任务直接变成 pull request。它们的上手流程都差不多:部署这个、安装那个、连接你的仓库、再带一个访问模型的 API key。
如果这个工厂本身就是一个 MCP 服务器呢?
你把它加到现有的任意 agent 里——本地的或远程的都行——这个 agent 就获得了远程沙箱、你的 GitHub 仓库、一个浏览器,以及整套 Upstash 技术栈。接下来你只要描述任务,然后回来看 pull request 就好。PR 描述里有结果的截图,任务运行时还有一个实时 URL 指向正在跑的应用。
Upstash MCP server 就变成了这个样子。上周它完成了远程化,现在 Box 和 Blob 也加入了 Redis、QStash、Vector 的行列。这篇文章会讲怎么搭建、各组件怎么配合,以及它给我们带来了什么。
配置
MCP 服务器只在一个 URL 上。任何支持远程 MCP 服务器的 agent——Claude 对话、部署好的机器人,或者你自己的 agent——都通过这个地址来连接:
本地 agent 可以改用 Upstash 插件。它把同一个服务器和 SDK 技能打包在一起。在 Claude Code 里:
其他 agent 的配置步骤在 agent 配置页面上。
插件还附带一项技能,叫 upstash-box-remote-work,它会告诉 agent 什么任务该放进 box、以及如何在里面从头到尾跑完:克隆、构建、预览、截图、提交 PR。当你说「使用远程工作(use remote work)」,或者你要求的 PR 需要附带截图或预览 URL 时,它就会启用。
agent 第一次连接 MCP 服务器时,浏览器会打开 OAuth 授权页面进行授权。选好 agent 要操作的账号,并关闭只读模式——因为提交 PR 属于写操作。
然后告诉 Box,agent 可以访问哪些仓库。在 Upstash 控制台里打开 Box → Settings → GitHub,连接 GitHub 账号并挑选仓库。这一步会在这些仓库上安装 Upstash GitHub App。公开和私有仓库都支持,而且你完全不用手动复制 token。

配置就这么多。启动你的 agent,给它一个任务,然后在 PR 到来时查看就行了。
Agent 能获得什么
这个 MCP server 提供五个组件,能把本地或远程的 agent 变成一座"代码工厂",还自带远程工作区。从"任务在这里"到"PR 在这里"之间的所有环节,它们全都包了。

文件系统和 shell。 一个 Box 就是一台沙箱容器,自带 shell、git、Node 和 Python。Agent 创建一个 Box,把仓库 clone 进去,在里面构建、测试,用完就删。浏览器标签页里的聊天窗口靠这种方式拿到文件系统,你笔记本上的 Claude Code 还能额外多几个。
GitHub。 Box 会 clone 你在设置里连接过的仓库,也能往这些仓库推分支、开 PR。Agent 全程拿不到 GitHub token——App 的安装权限归属于你的账号,Box 用的是这个。
浏览器。 每个 Box 都能带一个无头 Chromium(headless 浏览器),agent 用它检查改动后的预览效果并截图。Box 还能把一个端口暴露成公网 URL,这样 agent 继续干活时,你可以自己点一点正在运行的应用。
文件存储。 Blob 给 agent 提供一个 bucket 和预签名上传 URL。截图从 Box 传到 Blob,它的公网 URL 再写进 PR 描述。这里有一个用这种方式开的 PR,里面嵌了渲染后的页面和自动生成的 Open Graph 图片作佐证。

GitHub 的 CLI 现在自己就能往 PR 里贴图,但它只认通过 gh auth login 得来的 token,或者经典的个人访问令牌(personal access token)。Box 是通过 GitHub App 认证的,所以它的图片只能走 Blob。
Upstash 全家桶。 同一个 server 还带 Redis、QStash、Vector 和 Search 这几套工具。当改动需要缓存、队列或索引时,agent 会自己建资源、拿凭证、接进代码,并对着真实环境测试——全都在同一个会话里完成,不用绕去控制台。
为什么你可能想把 factory 做成 MCP server
托管版 factory 在它自己的服务器上跑模型,所以你得提供 API key,按 token 付费。MCP server 则挂到你已经在付费的 agent 上。如果你用的是订阅版 Claude Code 或 Codex,那 factory 就吃这份订阅,消耗的 token 本来也是要花的。
挂到哪个 agent 上,决定了你能得到什么。分两种情况。
本地 agent 获得了并行执行的空间
你机器上的 Claude Code 或 Codex 已经有文件系统和 shell,缺的是空间。笔记本上跑一个任务没问题,跑五个就不行了。每个任务都需要独立的代码检出、独立的依赖安装、独立的 dev server 或构建流程,如果还要验证结果,还得有独立的浏览器。五份检出、五个 dev server、五个 Chromium 实例,这不是笔记本该扛的量,而且它们还会抢同样的端口、内存和 CPU。
加上 MCP server 之后,agent 可以把每个任务丢到自己的盒子里。它们并行运行,PR 一开完,所有东西就被删掉。你的机器保持干净,资源留给你自己手头的任务。

Alex Lieberman 上面那条帖子里提到的每一点,都能对应到一个盒子。每个 agent 一台电脑,就是盒子;活的 URL,就是公开 URL;「给我铁证证明这能跑」,就是 Blob 里的一张截图,从 PR 里链接过去。
浏览器是最先体现差别的地方。你笔记本上一个 agent、一个 dev server、一个浏览器,没问题。五个 agent,各自跑自己的 app、各自开浏览器去操作,就不行了。我让几个并行的 subagent 这么干过,眼看着机器内存和 CPU 都跑到见底。在盒子里,每个 agent 有自己的 app 和自己的 Chromium,谁都碰不到你的机器。
远程 agent 也能拿到工作区
如果 agent 跑在别处——网页版 Claude、Slack 里的机器人,或者你自己产品里的 agent——它没有你的文件系统、没有终端、没有浏览器,也没法提 PR。同一个 MCP 服务器能把这一切都给它。我把这个服务器加进 Claude 账号后,普通的 Claude 聊天比 Claude Code 会话还多了不少东西:一个终端、一个代码仓库、Redis 和 QStash,外加一个能给改动截图、能打开运行中应用预览链接的浏览器,全都在聊天窗口里完成。

交互界面一直在变。今天用终端,明天可能换成聊天窗口或 Linear 工单,后天又换成别的 agent。但 MCP 服务器在所有这些界面背后工作方式都一样,因为代码本来就没跑在客户端那一边。
一条消息,十二个 PR
我们最近给 Upstash Redis 加了三个功能:数组、向量,以及对流的搜索。每个功能都要做同样一套事:TypeScript SDK、Python SDK、技能仓库和文档。
这就是远程模式的用武之地。我在网页版 Claude 的普通聊天里告诉它要加哪些功能、更新哪些仓库。它自己创建了运行环境,克隆了四个仓库,读现有代码来匹配风格,做修改,把每个分支的 diff 和 main 对比,然后提交了 pull request。一共十二个,每个仓库三个:
我要做的只是写那条消息,然后审 PR。本地没克隆、没构建、没安装任何东西。Claude 本身也不在我机器上跑,它只是浏览器标签页里的一个聊天。
你的第一个 PR
-
给 agent 添加 MCP,或者安装插件。
-
把 agent 连到 MCP 服务器,批准它弹出的 OAuth 授权,记得关掉只读模式。
-
连接 GitHub,在 Box → Settings → GitHub 里选好仓库。
-
给 agent 派任务。说一句“用远程模式”,或者在 PR 里要求截图或预览链接,剩下的技能会自己处理。回来收 PR 就行。
一个 MCP 服务器,让任何 agent 都能拥有沙箱、浏览器和 GitHub 访问能力
agent 你已经有了,现在它还缺一个干活的地方。如果它遇到了什么阻碍,在 skills 仓库里提个 issue,我们会去看。