审慎选择传输方式
本地 stdio 服务器和远程 HTTP 服务的部署需求不同。使用受支持的远程传输、TLS 和经过身份验证的路由。检查客户端和服务器版本,不要假设每个实现都支持相同的能力。
将每个工具视为一个 API
验证参数,强制执行用户特定的授权并限制资源。不要将任意 shell 执行作为便利工具暴露。在工具获取 URL 时限制出站目标,并让机密信息远离描述和响应。
保持身份收集适度
无 KYC 主机可以尽量减少提供商注册数据,但 MCP 服务可能仍需要自己的用户、会话安全和滥用控制。说明它记录哪些内容,并避免在没有明确目的的情况下保留工具输入。
为运营清晰度而部署
在专用用户下运行,使用健康检查,限制请求时间,并保持反向代理的缓冲和超时与协议兼容。在授予写入权限之前,测试身份验证、撤销、断开连接和重试。
使身份验证与受支持的协议保持一致
对于基于 HTTP 的 MCP 部署,请审查该协议当前的授权要求以及客户端支持的版本。基于 OAuth 的资源访问涉及令牌受众、发现和范围,而不仅仅是首页上的密码。使用 HTTPS,为目标资源验证令牌,并将持有者凭据排除在查询字符串之外。stdio 服务器使用不同的本地凭据边界。
- 测试未认证请求
- 测试超出其范围的已认证请求
- 撤销凭据并验证其停止工作
官方文档:MCP 授权规范
发布有限的首批工具集
从返回有限数据量的只读工具开始。只有在理解其权限和重复行为之后,才添加文件写入、服务器生命周期操作或外部消息。将返回的网页和文档视为不可信输入;它们不得悄然扩大工具服务器的权限。
在编写代理规则之前固定协议行为
记录服务器 SDK 版本和客户端将使用的 MCP 修订版。在 2026-07-28 Streamable HTTP 修订版中,请求使用 POST 端点;依赖协议会话或独立 GET 流的旧示例属于不同修订版。在明确您支持哪个客户端之前,不要移除表面上的兼容性要求。反向代理必须为该版本保留所需的标头、HTTP 状态和响应流式传输行为。
- 先在回环监听器上使用只读工具,然后将预期的 HTTPS/身份验证边界置于其前方。
- 通过公共代理测试正常结果、流式结果、超时和断开连接的客户端。
- 按传输要求验证允许的 Origin 值;Origin 检查不能替代对调用方的身份验证。
- 如果事件仅在结束时到达,请在更改工具代码之前检查代理缓冲和超时行为。
像测试成功一样刻意测试授权失败
对于受 OAuth 保护的 HTTP 访问,MCP 服务器是受保护资源。测试元数据发现、预期的签发者和令牌受众,以及特定操作所需的作用域。将授权令牌排除在 URL 查询字符串之外,切勿将其原样转发给无关的下游服务。面向客户端的身份验证失败必须保留适当的 HTTP 质询,以便客户端能通过其支持的流程恢复。
- 无令牌或令牌已过期:受保护的端点拒绝访问,而不是返回私有工具数据。
- 令牌有效但权限不足:所请求的资源仍不可访问。
- 面向其他受众的令牌:即使其签名在其他方面有效,也应拒绝。
- 意外的外部 URL 或文件路径:在获取或写入之前,请根据工具的权威来源进行验证。
- 日志和错误追踪:保留操作标识符和结果,同时移除令牌和私有工具输入。
官方文档:MCP 2026-07-28:HTTP 授权 · MCP:安全最佳实践