蒙特卡洛模拟显示的不是一个完工日期,而是一个概率。借助 Merlin Project 中全新的 MCP 服务器,您只需一句话,就能请 Claude 读取您的计划并计算 10,000 个项目进程。下面就是具体做法。
蒙特卡洛模拟把不确定性转化为概率。您得到的不是单一日期,而是一系列可能完工日期的分布。借助 Merlin Project 中的 MCP 服务器,这不再需要专门的插件,也不再需要费力维护的估算;对 Claude 说一句话就够了。
蒙特卡洛模拟究竟是什么,以及它为何优于关键路径,请见我们的 项目管理中的蒙特卡洛模拟指南。这里讲的是实践:如何真正借助 Merlin Project 和 MCP 服务器完成这次模拟。
Merlin Project 与 MCP 服务器
Merlin Project 自带一个 MCP 服务器。MCP 代表 Model Context Protocol(模型上下文协议),这是一个开放标准,为 AI 助手提供与外部应用之间结构化且安全的连接。该服务器在您的 Mac 上本地运行,无法从远程访问;它本身不会主动上传任何内容,只会交出 AI 主动查询的部分。不过,AI 读取到的内容会在各自的服务商处处理:使用像 Claude 这样的云端客户端时,被读取的计划数据会发送至其 API。您始终掌控着要开放哪个项目,完全符合 数字主权 的精神。您可以通过文档工具栏中的「AI 工具」按钮按项目启用它。面向 Claude Desktop、Claude Code 及其他客户端的完整设置,详见 MCP 文档。
只读访问就够了
MCP 服务器目前仅提供对项目数据的只读访问。对蒙特卡洛模拟而言,这恰恰正合适:客户端只能读取计划,计划本身不会被改动。模拟只读取一次计划;整个随机计算都在 Merlin 之外运行。没有任何东西被写回实时计划。您的项目结构始终是不受触动的唯一可信数据源,您可以在任意计划版本上随意多次模拟。
AI 从计划中读取三样东西。其一,带有计划 工期 的各项 活动。其二,网络图逻辑,也就是前置活动与后续活动之间的 依赖关系,连同 逻辑关系类型 和 缓冲。其三,不确定性的所在位置,也就是某个 风险 挂在哪项活动上。网络图逻辑是核心:如果没有依赖关系的连线,您就只是在把工期相加,而不是在计算一张网络图。
关键点:不确定性尚未包含在计划中
Merlin 为每项活动保存一个计划工期,之后再保存一个实际值,但没有原生的三点估算。有三种方法可以解决:
- 自定义字段。 您在模板中把 O 和 P 设为自定义字段,并通过 MCP 一并读取。如果模板由您掌控,这是最干净的方案。
- 全局不确定性带。 计划工期正负 X%,作为三角或 PERT 分布,必要时按阶段或活动类型缩放。
- 混合。 被标注的风险活动获得各自的波动带,其余的用一个默认值。
无论您选择哪条路径:都要透明地展示不确定性从何而来。正是这一点让一次模拟可信。
智能体式流程,以及您必须避免的思维误区
这里藏着最常见的误解:Claude 并不会亲自跑完那 10,000 次迭代。没有哪个语言模型会在脑子里抽取 10,000 个随机样本。那样不仅耗费 token,而且在统计上毫无价值,因为语言模型是糟糕的随机数生成器。迭代应当放进代码里。
诀窍不是「Python 脚本对阵 MCP 客户端」,而是由客户端执行代码。流程分三步:
- 读取。 Claude 调用 Merlin MCP 服务器的读取工具,取得活动、工期和依赖关系。
- 计算。 Claude 用寥寥几行 numpy 为自己写出模拟并运行它,作为回答的一部分。这需要一个能执行代码的客户端,例如 Claude Code;没有代码执行的纯聊天窗口无法运行这些迭代。每次迭代,模型为每项活动抽取一个工期,按拓扑顺序走过网络图(顾及前置活动和延时),并取所有终点节点中最晚的完工时间作为项目完工。
- 解释。 Claude 返回 S 曲线、P50、P80 和 P90 以及一张龙卷风图,并用通俗的语言解读结果。
在您看来,这个过程很简单。您用自然语言提一个问题:
读取 Merlin Project 中的活动项目,并模拟 10,000 个可能的项目进程。
每项活动取计划工期上下浮动 20% 作为 PERT 分布。
向我展示 S 曲线,以及 P50、P80 和 P90 对应的日期。
Claude 读取计划,进行计算,并向您展示概率曲线。背后的代码是实现细节,不是一个学习步骤。这就像用计算器:您用它,而不是在脑子里做乘法。
顺便说一句,耗费 token 的并不是那些迭代(在代码里它们几乎是免费的),而是把一份 300 行的活动清单拉进上下文。因此,入门时的原则是:一个有意保持小而干净的示例计划,包含 15 到 25 项活动。它足够大,能体现路径汇聚和一张有趣的龙卷风图;又足够小,让整段对话能放进一个屏幕页面。
来自 10,000 次运行的结果
这就是 Claude 对上面那条提示词的回答,基于一个小型建筑项目计划算出。Claude 连接到活动文档,读取活动、连接关系(26 个完成-开始,1 个开始-开始)和日历(周一到周五,每天 8 小时),重建网络并对照计划完工日期进行校验。模型精确地复现了它:60 个工作日,也就是 2026 年 8 月 21 日。然后跑完那 10,000 次运行。

这个示例项目仅包含约两打活动,其完工日期由一条又长又串行的链条决定。因此 P10 与 P90 之间约一周的跨度是有意保持得很窄的;规模更大或分支更多的项目通常波动得明显更广。
| 置信度 | 日期 | 相对计划(8月21日) |
|---|---|---|
| 计划日期 | 2026年8月21日 | 约 49% 的命中概率 |
| P50 | 2026年8月24日 | 加 1 个工作日 |
| P80 | 2026年8月25日 | 加 2 个工作日 |
| P90 | 2026年8月26日 | 加 3 个工作日 |
全部 10,000 次运行的跨度,从最早 8月17日 到最晚 9月1日。
解读很明确:计划日期是一个五五开的日期。在大约一半的运行里它能守住,另一半则被突破。这是典型的发现,因为确定性计划几乎总是落在乐观的 P50 上,而不是一个可靠的交付日期。想以 90% 的把握做出承诺的人,应当沟通 8月26日,也就是大约三个工作日的缓冲。
Claude 在此公开了它自己的假设:这里,计划工期被用作最可能值,O 为 −20%、P 为 +20%,作为一个对称的 PERT-Beta 分布。若采用计划中真实、部分不对称的 三点估算,右尾会更长,P90 会更晚。离散的风险事件,即供应商缺位和结构工程师缺位,这里尚未建模;这是纯粹的工期波动。接下来的两个例子里,我们恰恰要把它们算进来。
案例 A:供应商比较
最有力的例子回答的是一个决策问题,而不只是一个预测问题。设想一项活动依赖于一次交付。供应商 A 凭经验在一部分情况下准时交付,否则会延误几天。这里分母很重要:100 次交付中有 10 次延误,与 15 次中有 10 次,是截然不同的风险。蒙特卡洛恰恰在此展现它的长处,因为它不是用凭空的假设来计算,而是把实际经历的交付历史转化为一个预测。
真正的价值在于「钱对风险」的权衡。供应商 A 更便宜,但更不可靠;供应商 B 更贵,但稳定,并且多花 4.000 €。这笔加价值得吗?管理层一下子就能理解这个问题,而蒙特卡洛用一个数字而不是一种直觉来回答它。
这样的问题,您用一句话就能问 Claude:
活动 19「材料安装」依赖于一次交付。供应商 A 凭经验在 85% 的情况下准时交付,
否则延误 10 天。请模拟这对完工日期有何影响,并将它与供应商 B 比较,
B 始终准时交付,但多花 4.000 €。
Claude 把风险开关挂在这次交付上,并用相同的随机抽样(Common Random Numbers,共同随机数)计算两家供应商,好让差异干净地只取决于交付。结果出人意料地明确(下表中的工期单位为工作日):
| 置信度 | 供应商 A(85% 准时,否则 +10 工作日) | 供应商 B(始终准时,+4.000 €) |
|---|---|---|
| P50 | 2026年8月21日 | 2026年8月21日 |
| P80 | 2026年8月25日 | 2026年8月25日 |
| P90 | 2026年8月25日 | 2026年8月25日 |
| 守住计划日期 | 50.5% | 50.5% |
| 因 A 导致的完工日期推移 | 0.00% | 基准 |
在 10,000 次运行中,没有一次是这位不可靠的供应商 A 推移了完工日期。两个分布完全重合。原因在计划里:活动 19「材料安装」依赖于两个前置活动,交付和位于 关键路径 上的屋顶。屋顶系统性地更晚完成,所以「材料安装」无论如何都在等屋顶,而不是等外立面交付。交付与安装之间的缓冲,中位数为 21 个工作日,即便在压缩得最厉害的一次运行里也还有足足 17 个。10 个工作日的延误从不会触及这条界线。
这一点在敏感性上看得最清楚:延误究竟要变得多大,才会动到完工日期?

只有超过这个缓冲边界,也就是超过约 17 到 21 个工作日,才开始有东西真正击穿:在 25 天时 7% 的运行发生推移,在 30 天时约 15%。这样,成本决策就清楚了。在这些假设下,为供应商 B 付的 4.000 € 买不到任何进度收益,预期可避免的延误为 0.0 个工作日。从纯进度的角度看,供应商 A 是理性的选择;这笔钱是为一个风险买单,而这个风险计划已经通过它的缓冲承担了。只有当某个假设发生变化时,B 才划算:当延误明显大于 10 天时(一个进口集装箱而非区域交付),当主体结构提早很多完成、缓冲随之缩小时,或者当外立面这条路径上挂着自带违约金的中间节点时。这恰恰是一个纯确定性计划永远无法显示的。
一条诚实的旁注:这两个例子是带有各自风险开关的独立模拟运行。基准日期相对上面那条 S 曲线有一天的偏差,属于正常的抽样噪声,并非矛盾。蒙特卡洛估计的是一个分布,它不是一台有固定小数位的计算器。
案例 B:资源缺位
第二个例子拧的是另一个旋钮:不是工期,而是一个离散事件。一项关键资源可能缺位,这里是结构工程师,他参与两项活动,项目早期的结构设计和后期的结构验收。他会不会缺位,如果会,何时缺位影响更大?
请为三种情形模拟我的项目:资源「结构工程师」不缺位、
在第 3 周缺位 10 天、在第 8 周缺位 10 天。请分别向我展示
P50/P80/P90,以及哪个缺位时点对完工日期影响最大。
Claude 再次用相同的随机抽样计算全部三种情形,好让差异干净地只取决于缺位:

| 情形 | P50 | P80 | P90 | 推移 |
|---|---|---|---|---|
| 不缺位 | 2026年8月21日 | 2026年8月25日 | 2026年8月25日 | 基准 |
| 早缺位(结构设计) | 2026年9月4日 | 2026年9月8日 | 2026年9月8日 | +10 工作日 |
| 晚缺位(结构验收) | 2026年9月2日 | 2026年9月4日 | 2026年9月7日 | +8 工作日 |
两种缺位都必定突破计划日期,命中概率从 50% 降到 0%。有意思的是其中的差异:早缺位影响更大。在 100% 的运行中,它把完工日期推得比晚缺位更远,平均推后 2 个工作日。原因依旧是缓冲状况,而不是时点本身。结构设计完全位于关键路径上,没有缓冲;它那十天的缺位 1:1 地传导出去,在每一次运行中都是干脆的加 10 个工作日。相比之下,结构验收能从一条并行路径中抽取一点剩余缓冲,吸收掉十天中的两天,之后它自己才成为约束性活动。剩下的是加 8 个工作日。
这就是案例 B 给出的实在教训:同样长的缺位,代价却不同,取决于受影响的活动有多少缓冲。替补、提前量和储备,首先应当用在关键路径上那些没有缓冲的资源身上。
关键路径对缓冲:共同的要点
两个例子的核心都在说同一件事:起决定作用的不是风险本身,而是它在网络图中所处的位置。同样的延误,在一个有 缓冲 的活动上不费分文,而在关键路径上则代价全失。蒙特卡洛展示的恰恰不是「延误是坏事」,而是一个风险何时会击穿、何时又被计划吸收。这就是为什么案例 A 中便宜的供应商是理性的选择,而案例 B 中的早缺位却是昂贵的:前一种情形里有缓冲接住了风险,后一种情形里缓冲缺失。如何在 Merlin Project 中有针对性地调整关键路径,请见 这份指南。
动手试一试
蒙特卡洛背后的技术已有几十年历史。新的是它变得如此简单。借助 Merlin Project 的 MCP 服务器,您的计划已经以一种 AI 能够读取和计算的形式存在。从前那个需要自行维护数据的专门插件,如今变成了对 Claude 说的一句话。
如果您已经在使用 Merlin Project,就为某个项目启用 MCP 服务器,提出您的第一个问题。设置方法见 MCP 文档。如果您还不了解 Merlin Project,可以在 产品页面 上认识它,或直接 下载试用。
您也无需手动整理结果。如有需要,Claude 会把整轮模拟汇总成一份面向相关方的完整报告。本示例项目的完整报告如下:下载蒙特卡洛报告(PDF,英文)。
如果您对这篇博客文章有任何疑问或希望参与讨论,欢迎您在我们的论坛中发帖。
常见问题
用 MCP 服务器进行蒙特卡洛模拟需要编程知识吗?
不需要。您用自然语言提出问题,Claude 会自己用代码写出模拟并运行它。前提只是一个支持代码执行的客户端,例如 Claude Code。
模拟会把更改写回我的 Merlin Project 计划吗?
不会。对于模拟,纯只读访问就足够了。AI 只读取一次计划,在 Merlin 之外进行计算,不会向实时计划写回任何内容。您的项目结构保持不受触动。
运行这次模拟需要哪种客户端?
一个支持代码执行的 MCP 客户端,例如 Claude Code。没有代码执行的纯聊天窗口无法计算这 10,000 次迭代。
我的项目数据在 MCP 服务器上安全吗?
MCP 服务器本身在您的 Mac 上本地运行,无法从远程访问;它本身不会主动上传任何内容。不过,AI 读取到的内容会在各自的服务商处处理:使用像 Claude 这样的云端客户端时,被读取的计划数据会被传输至其 API。您按项目开放 AI 可以查看的内容,并且不会有任何内容被写回计划。
入门时我的计划应该多大?
一个有意保持小巧的计划,包含 15 到 25 项活动,是理想之选:它足够大,能体现路径汇聚和一张有意义的龙卷风图;又足够小,让整段对话保持清晰易览。