在云主机上验 MCP 兼容性,哪些格子根本测不出来
看完那张十七格全绿的表,很多人的第一反应是:我自己复现一遍。于是开一台云主机,装 client,拉 server,跑一轮,想看看是不是真的都通。
我也这么干过。结论是,云主机能验的东西比想象中少,而且它给你的失败信号里,有相当一部分跟宿主没关系。下面按"这台机器上测不出什么"来拆。
先分清采集机和云主机的差别
那份表是在一台已经用熟的采集机上跑出来的:依赖下载过,缓存热着,出网是直连,进程跟着终端会话走。云主机是另一个物种——镜像是干净的,出网要过安全组,进程的生命周期不归你的 ssh 会话管。
这三点差异不解决,你在云上跑出来的结果就没法和表对齐:同一个 server,在本地 3 秒起来,在云上第一次要 20 秒,因为它在现下依赖。你会以为是宿主的锅。
哪些格子测不出来
| 观察对象 | 云主机上测不出的部分 | 换到哪儿才测得出来 |
|---|---|---|
| 客户端配置校验 | 大多数宿主是图形程序,无头机器上装不起来 | 你自己的桌面机 |
| 交互式授权流程 | 回调地址要落到浏览器,纯 ssh 环境接不住 | 带浏览器的跳板机或本机转发 |
| 工具数量上限 | 需要能构造几十个工具的合成 server | 自己写一个假 server 压测 |
| 冷启动耗时 | 缓存状态取决于这台机器之前干过什么 | 全新镜像 + 清空缓存 |
| 出网可达性 | 安全组、NAT、域名白名单各挡一层 | 先在机器上裸测连通性 |
表格里第三行和第五行最容易被忽略。工具上限要靠合成 server 才压得出来,出网要先单独证明"不是网络问题",否则你会把网络故障记成宿主不兼容。
出网策略会先吃掉一半结论
云主机的默认出网经常是收紧的。装 server 时最常见的失败不是协议错误,而是拉不到包:Python 的索引站、Node 的注册表、镜像仓库,任何一个不通,uvx 或 npx 就卡在那儿等超时。
症状看起来很像宿主有问题——进程起来了,两秒后退出,客户端显示连接关闭。实际原因是它根本没拿到可执行文件。
正确顺序是先在机器上裸测:能不能解析域名、能不能拉一个已知的小包、能不能连上远程 server 的端口。这三步全过,再去装宿主。顺序反了,你会在客户端日志里找一个不存在的问题。
还有一类是远程 server 的域名解析。云上的 DNS 有时候和你本地不一样,本地能连的端点在云上解析到别的地址,甚至直接不解析。这种情况下的"连不上"和兼容性毫无关系。
常驻进程是最容易自己骗自己的一环
stdio 型 server 的设计前提是:由宿主拉起,由宿主结束。你手动 nohup 一个在后台跑,然后让宿主去连,这个组合本身就不成立——宿主连的是一个它没启动的进程,stdio 的管道没接上。
想让它常驻,只有两条正经路。一是交给 systemd 之类的进程管理器,配好重启策略和日志;二是容器化,把 server 打进镜像,用 restart policy 兜住。
容器化之后要小心一个新问题:stdio 变成了"容器 exec",这跟宿主直接 fork 子进程不是一回事。环境变量、工作目录、用户身份都会变,原本能跑的命令在容器里可能找不到解释器。所以容器里跑通,不等于宿主里跑通。
权限收敛这步不能省
云主机上顺手用 root 跑一遍是最快的,也是最不该做的。server 是你从网上拉下来的第三方代码,它继承的是启动它的那个用户的全部权限。
给它单独建一个用户,只给它需要的工作目录,日志写到独立路径,别放在挂载出来的共享盘上。远程 server 的凭据更要注意,别写进镜像层——镜像推到哪里,凭据就跟到哪里。用环境变量或挂载的密钥文件,跑完就撤。
这些做法不会让你的兼容性结果更准,但会让你的验证环境不至于变成事故现场。
C 组那两条:超时和工具上限
第一条是超时。OpenCode 默认只给五秒去拉工具列表,超过就不再等。这个值可以调,也可以在启动前先把依赖缓存预热,让它别在握手阶段下载东西。
值得说的是那个 7,889 毫秒的样本。它在别的宿主那里记了通过,可它明明越过了五秒这条线。这里有两种都说得通的解释:一是采集机上 uvx 的依赖早就下过,实际握手并没有真的花掉七千多毫秒,那个数字包含了别的东西;二是那个宿主在首次超时之后又重试或异步补拉了一次,第二次命中了已经加载好的进程。
两种解释指向的操作完全不同——前者说明"预热就行",后者说明"重试机制救了它"。没有更多日志之前,不应该挑一个当成结论。在云上,冷启动只会更慢,所以这条线更容易被你踩到。
第二条是工具数量。Cursor 对工具有一个大约四十个的软上限,越过之后不是报错,是有些工具干脆不出现。这个边界是用 41、45、90 三个合成样本试出来的:四十以内整齐,越过去就开始少。软上限的麻烦之处在于它是静默的,你只会觉得"这个 server 好像少了几个功能"。
所以在云上验一个真实 server 时,先数一遍它声明了多少工具。接近四十的,别急着下"不兼容"的判断。
云上复核的推荐顺序
先证明网络:域名、端口、包索引三项裸测。再证明 server:命令行直连,记下工具数与启动耗时,冷热各一次。最后才装宿主,一次只配一个 server。
这套顺序做下来,你得到的结论至少能说清楚"失败发生在哪一层"。
总结
云主机是一台很好的服务器,却是一台很差的客户端——图形界面、浏览器授权、缓存状态这三样它都给不了,能测的只剩下协议层和容量层;先把网络和进程生命周期这两笔账算清,再谈兼容。完整坑点见 速查表。
适合与不适合
适合:打算在自己机器或云上复现兼容性结论的人;把 MCP server 长期部署在服务器上、需要管进程和权限的人;手上 server 工具数偏多、怀疑被静默截断的人;踩过"本地能跑云上不行"这类问题的人。
不适合:只在笔记本上用一个官方 server 的人,出网和常驻这两节跟你无关;看到全绿就满足、没打算复核的人;以及所有 server 都由托管平台代管、自己从不碰进程和镜像的人。
标签:MCP、DeepSeek Harness、云上部署、超时与容量
本文由 DeepSeek Harness Hub 自动整理,数据来源于插件详情页。