MCP Server 不是万能插件:工具暴露、权限和审计边界
从 Model Context Protocol 的连接模型出发,梳理 MCP server 在工具暴露、权限控制和审计上的工程边界。
MCP 让 AI 应用连接外部数据和工具变得更标准,但这不意味着所有系统都应该无脑暴露成工具。协议解决的是“如何连接”,安全设计仍然要由应用自己负责。MCP 官方介绍把它定位为连接 AI 应用与外部系统的开放协议。[mcp-001]
工具暴露要最小化
设计 MCP server 时,最重要的不是暴露多少工具,而是每个工具是否有清晰边界:
- 工具是否只读?
- 输入参数是否可验证?
- 输出是否包含敏感字段?
- 是否有租户或用户权限隔离?
- 失败时是否返回可恢复错误?
MCP server 应该像内部 API 一样被设计、测试和审计,而不是像脚本集合一样随手添加。
一个工具清单可以先这样审查:
{
"tool": "search_customer_notes",
"risk": "sensitive_read",
"allowed_roles": ["support_agent"],
"returns_pii": true,
"requires_audit_log": true
}写操作需要额外护栏
如果工具会创建、修改或删除数据,就应该默认加入确认流程。Anthropic 的 tool use 文档说明模型可以生成工具调用请求,但并不意味着工具执行可以绕过业务权限。[mcp-002]
实践上可以分三档:
- 只读工具:允许自动调用,但记录调用日志。
- 低风险写工具:执行前让用户确认关键字段。
- 高风险写工具:要求人工审批或后端策略放行。
审计日志要记录模型上下文
传统 API 日志记录请求参数就够了,但 Agent 工具调用还应该记录:
- 用户原始请求。
- 模型选择工具的理由摘要。
- 工具输入和输出摘要。
- 调用时的权限主体。
- 是否经过人工确认。
综合 MCP 和工具调用资料可以推断:MCP 的工程价值来自标准化连接,安全价值来自你在 server 边界上做的限制、审计和确认。
参考资料
- [mcp-001] Model Context Protocol, “Introduction”, https://modelcontextprotocol.io/docs/getting-started/intro
- [mcp-002] Anthropic Docs, “Tool use overview”, https://docs.anthropic.com/en/docs/agents-and-tools/tool-use/overview