MCP 文件系统服务器:目录白名单如何设计
限制读写范围并处理符号链接和路径穿越。本文给出适用场景、实施顺序、风险边界和来源核验方法,帮助读者形成可复查的MCP 生态决策。
MCP 文件系统服务器:目录白名单如何设计
先给结论
使用解析后的绝对路径校验允许根目录,区分只读和写入工具,并对危险操作保留人工批准。
判断起点
限制读写范围并处理符号链接和路径穿越。MCP 解决的是客户端发现并调用外部能力的连接问题,不替代服务本身的鉴权、安全和业务校验。协议能够连接成功,只说明消息可以往返,不能证明返回数据正确或工具值得信任。
推荐做法
文件与目录相关能力应使用解析后的绝对路径做边界判断,同时处理符号链接、大小写和相似前缀。读取、创建、覆盖和删除设置不同权限,写入使用临时文件或可回滚方式。仅在提示词中要求不要越界不构成技术限制。
核验重点
- 服务声明的工具与实际权限是否一致
- 传输方式和凭据存储是否适合部署环境
- 失败、超时和返回数据是否可追踪
把检查结果写成可复测记录,至少包含日期、版本、环境、输入样例和结果。这样项目升级或需求变化后,团队可以判断原结论是否仍然成立。
进一步验证
长内容处理应先返回目录、统计和匹配位置,再按需分页读取原文。摘要必须保留来源标识,让使用者能够回到证据。一次返回完整日志或文档看似省步骤,实际上会占满上下文并降低模型定位真正相关信息的能力。
常见误区
只检查字符串前缀可能被相似目录名或符号链接绕过。同时不要把“能够运行”直接解释为“适合生产”,个人试验与长期服务对权限、稳定性、监控和维护的要求不同。
如何形成自己的结论
围绕本文主题准备一个代表性样例,先记录当前方案的基线,再使用候选方案重复同一任务。比较最终正确性、人工修正、耗时、资源或调用成本以及失败恢复情况;如果结果会影响重要数据或线上服务,应先在隔离环境验证。
留下可复查记录
超时设计必须考虑请求可能已经执行。只读操作可以有限重试;创建或发送类操作使用幂等键,并提供状态查询。长任务返回任务标识、进度和取消入口。客户端不应在未知结果时自动重复具有副作用的调用。
参考来源
本文根据以上公开项目整理,不复制 README 全文。仓库功能、许可证和维护状态可能变化,使用或分发前请再次查看原始页面。