想去哪里?

首页 页面 关于 页面 项目 页面 简历 页面 技术 页面 随笔 页面 联系 页面 隐私政策 页面 Terminal Spike 隐私政策 页面 用 Astro 构建文档与职业个人网站 技术 通过 tmux、Mosh、Termius 与 Tailscale 随处使用 Codex 技术 用 Langfuse 观察 Codex 的 MCP 工具调用 技术 产品应用中的本地化 技术 把 MCP 作为安全的 AI 集成边界 技术 用 Zod、OpenAPI 与 Swagger 维护 API 契约 技术 用 pg-boss 运行持久后台任务 技术 通过真实知识工作流理解 pgvector 与 RAG 技术 Pi Edge:让 Pi 待在 Obsidian 笔记旁 技术 为真实排序任务设计拖放交互 技术 Prisma 与 PostgreSQL:产品状态的事实来源 技术 把 Ralph Loop 当作计划队列 技术 用 React Router 组织全栈产品工作流 技术 把 shadcn 风格组件变成自己的产品系统 技术 用表格与编辑器承载密集业务操作 技术 Terminal Spike:原生 Android 终端 技术 在 Linux 上用 fcitx 输入带声调的拼音 技术 在 Linux 上配置 DEFT Pro 轨迹球 技术 在 KOReader 上使用 Pocket 稍后读 技术 为 Vercel AI SDK 设置明确的工具边界 技术 垂直切片架构与 dependency-cruiser 技术 用 Vitest 与 Playwright 测试产品工作流 技术 我的随处工作流:Herdr、code-server、Obsidian 与 Pi Edge 技术 Zod 不只是校验 技术 《卡拉马佐夫兄弟》是我看过最好的小说 随笔 基督徒口述1960劳改历史 随笔 圣经中的“道”与言语 随笔 我们爱,因为神先爱我们,而不是空洞的“自爱” 随笔 妈妈,让我来承担爸爸的过错吧 随笔 我与神的故事 随笔 世界远离上帝,接近中国 随笔 “爱的五种语言”和内外向,只存在于语言中 随笔 人格类型不存在,你在世界而非概念中生活 随笔 危险的词语:为什么心理学是不可能的 随笔 2000 年,一个深圳打工者的故事 随笔 阿联酋Ras al Khaimah见闻录 随笔 沙甸:1975 年的一场冲突 随笔 关于中国的纪录片 随笔
← 技术/工程实践

把 MCP 作为安全的 AI 集成边界

将模型工具设计为狭窄、明确的产品接口,而不是对应用的隐式访问。

MCP 有意思的地方,在于它让 AI 集成更像明确的软件边界,而不只是提示词技巧。

模型不应获得含糊的应用访问权,而应得到少量具有名称、结构、权限检查和可预期结果的工具。边界需要清楚到工程师可以审查,用户也能理解助手被允许做什么。

安全的工具可以很小:

const GetJobStatusInput = z.object({
  jobId: z.string(),
});

它只读取用户有权查看的任务状态,不修改记录、不绕过权限,也不从私人数据推断隐藏状态。这种朴素的结构很有用。

我喜欢从只读工具开始 AI 集成。它们能帮助用户提问,同时不必过早赋予助手修改数据的能力。如果只读工具都没有用,更强大的修改工具也不会因此变得安全。

工具确实需要修改数据时,应用应明确回答:谁能调用、接收什么输入、什么状态会改变、是否需要用户确认、执行后记录什么日志,以及如何报告失败。

MCP 本身不会解决这些问题,只是提供表达边界的位置。产品仍然需要权限检查、确认状态、审计日志和准确文案。

风险在于工具名称看似安全,实现却太宽泛。updateRecord 只是含糊的遥控器。更好的工具应描述具体动作,输入狭窄,结果明确。

过于宽泛:updateRecord
更好:draftStatusChange
更好:confirmStatusChange

准备修改和真正应用修改是两回事。助手可以安全地先准备,应用前则可能需要用户审阅确认。

代价是速度。设计狭窄工具集,比直接给助手通用 API 客户端更费功夫。但产品涉及重要数据时,这份投入值得。助手应简化工作流,而不是另开一条绕过产品规则的路。

希望 AI 边界清晰、可审查时,我会使用 MCP。普通路由和 API 背后的产品规则,也应同样适用于工具。模型可以选择工具,服务器仍须决定什么被允许。