MCP 是把双刃剑
MCP 给了模型访问外部系统的能力——能力越大,责任越大。一个没做好安全与错误处理的 Server,可能让模型在业务系统里乱来,或把错误信息糊一脸。
这一节,把安全与错误处理做扎实。
安全:先回答三个问题
任何一个 MCP Server 上线前,问自己:
- 它能碰什么? 权限边界清不清楚
- 凭据安全吗? 密钥有没有泄漏风险
- 会被误用吗? 模型会不会触发不该触发的操作
三个问题答清楚,安全才有底。
对 mcp-hub 来说,这三个问题要写进 mcp-hub 的校验流程——每次 /mcp-hub add 一个新服务,就自动过这三关,而不是靠每个成员自觉。
安全实践清单
- 最小权限:只暴露完成任务必要的工具,其余藏起来
- 只读优先:默认提供只读能力(查询),写操作(改、删)要严格把关
- 敏感操作确认:删除、改数据这类操作,在 Server 端也做二次确认或限制
- 凭据不入库:密钥放环境变量/密钥管理,别硬编码进明文文件
- 输入校验:模型传进来的参数要校验,防止恶意/异常输入打到你的服务
把这条清单做成 mcp-hub 的「接入门槛」:服务登记时逐条检查,不满足就拦下,让负责人先补上再接入。
错误处理:别让模型「一脸懵」
模型调你的服务失败了,你希望它能理解发生了什么,而不是得到一堆乱码。
好的错误处理:
- 返回可读的错误:说明「为什么失败、参数对不对、怎么修」
- 区分错误类型:是「服务不可用」「参数错误」还是「没权限」
- 提供修复建议:让模型能自己纠正后重试
示例对比:
❌ 返回
500 - {"err": "null pointer"}→ 模型看不懂 ✅ 返回查询失败:缺少 start_date 参数,请带上后重试→ 模型能修正
对 mcp-hub 意义更大:它是团队共享的,错误信息要能被模型读懂、被同事看懂。一条「缺少参数、请补上」比一屏堆栈有用得多。
异常场景要覆盖
写 Server 时,主动覆盖这些场景:
| 场景 | 处理 |
|---|---|
| 服务超时 | 设超时,返回「服务响应超时」 |
| 被限流 | 返回「请求过快,稍后重试」 |
| 参数非法 | 校验并返回「参数 X 不符合要求」 |
| 凭据失效 | 返回「认证失败」而非堆栈 |
每一个异常都给出「可理解、可行动」的返回。
把这套异常覆盖做成 mcp-hub 里每个 Server 的统一模板,团队写新 Server 时直接套用,保证所有服务的报错风格一致。
一个可复制的错误返回模板
给 Server 的错误处理定一个统一结构,mcp-hub 团队内通用:
{
"ok": false,
"error": {
"type": "invalid_params",
"message": "缺少 start_date 参数",
"hint": "请带上 start_date(格式 YYYY-MM-DD)后重试"
}
}
结构统一后,模型和同事都能一眼看懂「哪里错、怎么修」,而不是面对一堆裸错误码。
测试你的 Server
别写完就上线。做这几件事:
- 正常路径:正确参数,返回正确结果
- 异常路径:非法参数、超时、无权限,返回可读错误
- 安全边界:尝试访问它不该碰的东西,确认被拦
安全与错误处理,靠测试来兜底。
对 mcp-hub:把这三类测试做成 mcp-hub 的接入门槛——新服务要能过这三关才允许正式上线给团队用。
落地练习:给 mcp-hub 定安全与错误基线
这一节,把「安全 + 错误处理」固化成 mcp-hub 的标准。
跟着这三步走:
- 用「安全实践清单」逐条检查你 mcp-hub 已接入的服务,标出哪些不达标
- 给 mcp-hub 的 Server 套上统一的「错误返回模板」(参考上面的 JSON)
- 按「正常 / 异常 / 安全边界」三类,给已接入的服务各测一遍
你会怎么判断做对了?——每个服务都过了安全清单、报错都是可读的 JSON(含 type/message/hint)、三类测试都覆盖到,就算过关。
卡住了怎么办? 不想测试每个服务?至少把一个服务的三类测试完整做一遍,其余套用同样方法。错误模板拿不准?就用上面的 JSON 结构,先统一起来,后面再调。
常见坑:只做了「安全」或「错误处理」的其中一个
新手常偏科:要么狂堆权限控制,报错时却糊一屏堆栈;要么报错写得很好,权限却敞开着。安全和错误处理是一体两面——安全决定「能不能进来」,错误处理决定「进来后出事能不能看懂」。
mcp-hub 要同时抓好:接入门槛(安全)和统一报错(可读性)双管齐下。只抓一头,生产环境迟早出事。 把两者都做成 mcp-hub 的默认基线,而不是二选一。
小结
- MCP 能力大、责任大,安全第一
- 安全实践:最小权限、只读优先、敏感操作把关、凭据不泄露、输入校验
- 错误处理:返回可读、可行动的提示,让模型能纠正
- 覆盖异常场景 + 主动测试
- mcp-hub 把安全与错误处理做成团队默认基线
下一模块进入「性能与成本优化」。