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 等静态工具

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

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

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