Skip to content

建议:为 MCP 静态工具提供按环境/角色的启用开关,便于生产环境安全收敛 #2245

Description

@pmocker-io

背景

我们正在基于 gin-vue-admin 做项目上线准备。在调研 server/mcp/ 的 MCP 能力时,我们注意到静态工具(如 gva_executegva_analyzegva_reviewapi_creatormenu_creator、角色分配系列等)目前是启动即全量注册的。对于同时具备「面向开发」与「面向业务」两类 agent 的使用场景,我们想确认当前的开放策略是否符合预期,并向社区提出一点建议。

现状(供参考,可能不完整)

  1. server/mcp/enter.go:22:工具在 init() 中通过 RegisterTool() 注册到全局 toolRegister
  2. server/mcp/enter.go:32RegisterAllTools() 会将注册表中所有工具无条件挂载到 MCP server;
  3. server/mcp/server.go:11NewMCPServer() 依次调用 RegisterAllToolsregisterDynamicToolsregisterDynamicPrompts,未发现任何按工具粒度的启用/禁用判断;
  4. server/config/mcp.goMCP 配置目前包含 Name/Version/Path/Addr/BaseURL/UpstreamBaseURL/AuthHeader/RequestTimeout,暂无工具级开关。

我们的一点顾虑

  1. 生产环境通常不希望 agent 直接调用「代码生成」「API/菜单/角色分配」这类开发向能力,但当前静态工具对所有能连通 MCP 端点的客户端都可见;
  2. 此类工具若在生产开放,输入内容若直接进入后续 AI 提示词,理论上存在被注入指令的风险(我们对此了解有限,仅为提醒);
  3. 动态工具(绑定业务 API 生成)已有 DB 层的 enabled 开关,但静态工具缺少同样的收敛手段,两者管控粒度不一致。

以上只是我们的使用感受,也可能是项目刻意为之(比如默认信任内网环境),如有误读请指正。

建议方向(供讨论)

  1. 为工具增加「开发向 / 业务向」分类标记,或在 RegisterTool 时声明级别;
  2. MCP 配置中提供如 enabled_tools / disabled_toolsdev_tools_enabled 之类的开关,便于按 dev/prod 环境控制注册范围;
  3. 可考虑支持后台运行时动态调整工具暴露,避免改配置后重启服务;
  4. 若采纳,建议安全默认:未显式开启时不暴露开发向工具。

相关文件

  • server/mcp/enter.go
  • server/mcp/server.go
  • server/config/mcp.go
  • server/mcp/gva_execute.go 等静态工具

如社区已有相关规划或更好的方案,也欢迎指路,感谢维护团队的付出!

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions