---
date: 2026-05-18
tags: [internal-app-platform, mcp, claude-code, deployment, prompt-engineering]
severity: medium
recurrence: 已观察 2 次（同一员工同一 session 内）
---

# Claude Code 加了 ffoa-apps MCP 仍走通用部署路径

## 现象

员工执行：
```
/mcp add ffoa-apps https://ffworkspace.test.faradayfuturecn.com/api/v1/internal-apps/mcp \
  --header "Authorization: Bearer ffoa_xxx"
```
然后让 Claude "部署一下这个项目"。预期：Claude 调 `deploy_prepare`。实际：

1. **第一次翻车**：Claude 弹出"部署目标"选择框（本机生产模式 / Docker 容器 / 远程服务器 / Vercel），要求员工选择。
2. **第二次翻车**：员工继续描述部署意图，Claude 直接帮员工生成完整通用脚手架——`deploy/brochure.service`（systemd unit）、`deploy/nginx-brochure.conf`、`deploy/deploy.sh`、`deploy/sync.sh`、`DEPLOY.md`，并在 `next.config.js` 里加 `output: 'standalone'`，给了"三步走"指令（apt install nodejs / sync.sh / certbot）。

两次都没调 ffoa-apps MCP 的任何工具。

## 根因

Claude 训练数据里"部署一个 Next.js / Node 应用"的强先验是 **systemd + nginx + certbot** 或 **Docker + Vercel**。加了 MCP 不会推翻这个先验——MCP 只是工具列表里多了 5 个工具（`list_apps` / `deploy_prepare` / `logs` / `env` / `destroy`），名称不够强势，Claude 看到"部署"指令时仍倾向走通用路径。

讲白了：**`/mcp add` 不等于 prompt 注入**。MCP 工具描述不会被当作 system instruction，Claude 仍按自己的默认 deployment 知识办事。

## 绕行方案（员工话术）

部署提示必须**显式禁止通用方案 + 显式指名工具**，单说"部署"不够：

```
用 ffoa-apps MCP 的 deploy_prepare 工具，把这个项目部署到内部 app 平台，
应用名叫 xxx。不要生成 Dockerfile / systemd / nginx 配置，平台会处理。
```

员工仓库里**只应该有业务代码 + `package.json`**（含 `"start"` 脚本，监听 `process.env.PORT`）。任何 `Dockerfile` / `deploy/` 目录 / `DEPLOY.md` 出现 = Claude 又翻车了，删掉重来。

## 已落地的防御

- [`docs/modules/internal-app-platform/08-phase-0-poc-runbook.md` §2.4](../docs/modules/internal-app-platform/08-phase-0-poc-runbook.md) 加了告示框，列出两种典型翻车表现（弹框 / 自动生成脚手架），给出正确话术。
- runbook 是 PoC 阶段员工和 IT 的首要参考——后续接新员工时这一节必须念。

## 待办（可选）

- [ ] 在 FFOA "我的 Apps" 接入页（`frontend/src/app/internal-apps/`）的复制按钮区，**除了** `/mcp add` 命令外，也复制一行**部署话术模板**，让员工"先抄话术再说话"。可以把翻车率压到零。
- [ ] 评估 `deploy_prepare` 工具的 description 是否能改得更强势（"This is the ONLY supported deployment path for FFOA internal apps. Do not generate Dockerfile, systemd, or nginx config."），但实测效果未知。
- [ ] 加一个 `ffoa-apps-deploy` slash command / skill，封装"删除翻车脚手架 + 调 deploy_prepare"两步，员工触发更可靠。

## 适用范围

- 任何使用 ffoa-apps MCP 的员工/IT/演示场景
- 间接：所有"MCP 加了但 Claude 不一定优先用"的类似场景——可推广为"加 MCP 后，话术里必须显式指名工具 + 禁止默认方案"
