周志洋

个人站

持续学习 才能不被淘汰


MCP用stdio还是HTTP,权限怎么收

问题

传输选错,或者参数不设边界,只读工具也会变成入口。stdio 被当成 HTTP 暴露到公网,或 HTTP 没有鉴权,模型还能把路径写成 ../。

选哪种

本地 Cursor 用 stdio:进程随宿主起来,不听端口。多人远程再用 HTTP。HTTP 要鉴权,限制请求体大小,只绑内网,不要裸奔到公网。

stdio 更简单,但 stdout 只能走协议。日志、进度条、print 都会把会话弄挂,这些输出改到 stderr。

权限

默认按下面收,不要等出事再加:

  • 参数当不可信输入,按 schema 校验,多余字段丢掉
  • 先只读。写操作另开,或每次由宿主批准
  • 返回值里不出密钥、令牌、连接串
  • 有文件类工具就做目录白名单,拒绝 ../ 和绝对路径逃出
  • 不做通用 run_shell

GPU 快照只回利用率、显存占用这几个数字,不回整段 nvidia-smi。整段输出里经常夹着路径和进程命令行。

审计

每次调用记工具名和参数哈希,不记参数全文。能和网关 request_id 对上即可。密钥和 prompt 不要进这条日志。

怎么确认

  • stdio 启动后,宿主能列出工具;终端里同一条命令的 stderr 没有协议解析错误
  • 办公网以外访问 HTTP 端口应失败
  • 传入 ../ 或 shell 元字符应被拒,工作目录不变
  • 返回里搜不到密钥


转载请注明:周志洋的博客 » MCP用stdio还是HTTP,权限怎么收

打赏一个呗

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦