摘要
当智能体反复处理同一个多步骤任务时,它可以通过 code_propose_tool 提议一个可复用的代码工具。提议本身不会运行任何内容,也不会授予任何权限;管理员在 AI Skills 中审阅程序后,一键即可创建工具,该工具为只读,并使用调用者自己的权限。以下是 AnythingMCP 中的具体工作方式,逐步说明。
TL;DR: 如果智能体每周回答“按渠道统计的月收入”时都要重写同一个程序,那它不应该每次都重写,但也不应该能自行创建工具。在 AnythingMCP 的代码模式中,它采取折中的做法:调用 code_propose_tool,并提供名称、描述、程序以及值得保留的理由。这只会记录一条提议,不会做其他任何事:不运行任何代码,也不会出现任何工具。管理员在 AI Skills → Suggested 中找到它,阅读程序,然后点击 Create tool。新工具为只读,并以每个调用者自己的权限运行;任何额外权限都需要另行、有意识地编辑。自托管 AnythingMCP 自 v0.52.0 起可用,AnythingMCP Cloud 即将推出。
为什么是提议,而不是自行创建工具
智能体很擅长发现某个任务是机械重复的:同样的三次调用、同样的关联、同样的求和。把它变成已保存的工具,可以让下一次回答更快、更省成本、更一致。但工具同时也是你工作区中的一项长期能力,而其背后的程序是由可能读取过不可信内容的模型编写的。因此,智能体只能建议,由人来决定。这与 AnythingMCP 处理 AI 客户端提议的技能和公司记忆时采用的原则相同:智能体起草,管理员批准。
你需要准备什么
- 自托管 AnythingMCP v0.52.1 或更高版本,并已配置代码运行器(设置方法见此处的步骤 1)。
- MCP 服务器的代码模式设为
inline。只有inline才会提供code_execute和code_propose_tool;tools仅提供已保存的代码工具。在服务器的设置页面中设置(Code mode → Saved code tools + inline code,自 v0.52.1 起提供);参见代码工具教程的步骤 2。 - 用户角色具备内联代码权限。工作区管理员默认拥有该权限。
- 如 v0.52 发布时所宣布,内联代码和提议功能属于 Team 和 Enterprise 套餐。
步骤 1 — 智能体以内联方式完成任务
用户提出一个需要多次调用才能回答的问题,例如“10 月的收入,商店和 B2B 发票”。开启内联代码后,智能体会编写一个程序,并通过 code_execute 运行:只读,使用用户自己的权限,覆盖该服务器上用户有权访问的连接器。此类程序的样子请参见收入示例。
步骤 2 — 智能体提议保留它
当智能体发现这个模式值得保留时(自行判断,或因为用户说“把它保存为工具”),它会调用 code_propose_tool,并填写:
| 字段 | 智能体填写的内容 |
|---|---|
name | 简短的工具名称,例如 monthly_revenue_by_channel |
description | 工具的功能和返回内容,面向管理员和未来的调用者 |
code | 程序,与 code_execute 使用的程序主体类型相同 |
rationale | 值得保存的理由,例如“本月被询问四次;可替代约 20 次工具调用” |
inputSchema | 可选:工具自身的参数,例如格式为 YYYY-MM 的 month |
返回给智能体的答复很简单:提议已记录并等待审核,在管理员批准之前不会运行,也不会成为工具。同样的内容也可以告知用户。
步骤 3 — 管理员审阅
在侧边栏(Intelligence 下)打开 AI Skills,切换到 Suggested。提议会显示为标有 Code tool proposal 的卡片,其中包含:
- 范围,以及一条说明:它由智能体提议,只读,以调用者的权限运行;
- **Why:**智能体给出的理由;
- **Does:**描述;
- Program 及其字符数,可完整阅读;
- 一条说明,指出工具将创建在哪个连接器上,以及写入权限或作者权限只能稍后在该连接器的工具页面中添加。

像审阅一个小型 pull request 那样阅读这个程序:
- 它调用了哪些工具? 查看每一个
amcp.run('…')。它们是否与描述所承诺的一致,并且都是读取操作? - 它返回什么? 只返回问题所需的内容,还是包含个人数据的完整记录?
- 循环是否合理? 分页能否结束、并行调用是否分批、是否无必要地对大表的每一行都发起调用。单次运行在 10 秒或 500 次工具调用后停止。
- 名称和描述是否足够清晰,使 AI 能在合适的时机调用它,并正确解释结果(含税还是不含税、哪个时间段、哪些系统)?
步骤 4 — 创建工具,或忽略提议
Create tool 会执行常规的工具创建检查:连接器必须属于同一工作区,并且适用套餐对已保存代码工具数量的限制。工具会创建在卡片中指明的连接器上:
- 只读(只能调用不会修改数据的工具);
- 以调用者身份运行(每次内部调用都会按调用者自己的角色进行检查);
- 使用提议者在该服务器上的连接器。之后请打开该工具,把 Uses 缩小到它实际调用的连接器和工具。
Dismiss 会把提议移到 Dismissed 标签页。如果智能体不断提议你不想要的内容,请在服务器的指令中说明。
步骤 5 — 仅在需要时:有意识地增加权限
已创建的工具可以像其他代码工具一样,在该连接器的 MCP Tools 页面中编辑。有两项设置完全无法通过提议获得:
- Allow write tools,即允许程序调用会修改数据的工具。需要 Enterprise。
- Run as definer,即程序以作者的策展范围运行,而不是以调用者的权限运行。仅限管理员。
两者都会在你保存时重新检查。这正是该设计的要点:智能体永远无法提升自己的权限,因为提议始终是只读的、始终以调用者身份运行,并且仅限于提议用户本来就能访问的连接器。
为什么这样做是安全的
- 提议是惰性的。
code_propose_tool不会执行代码,也不会创建任何东西。 - 没有权限提升。 被提议的工具只能引用提议者自己的连接器,并且初始为只读、以调用者身份运行。
- 由人来决定。 只有管理员才能把提议变成工具,并且要经过与手写工具相同的检查。
- 运行受控且可审计。 工具一旦创建,每次运行都会通过隔离的代码运行器,并连同每次内部工具调用一起记录。参见AI 智能体的安全代码执行。
FAQ
普通用户可以提议工具吗?
在代码模式为 inline 的服务器上,任何角色具备内联代码权限的用户都可以。没有该权限的用户既看不到 code_execute,也看不到 code_propose_tool。
智能体能看到它的提议是否被接受吗? 工具创建后,智能体会像看到其他工具一样,在服务器的工具列表中看到这个新工具,此后即可调用它。
我可以在创建工具之前编辑程序吗? 先创建,再像编辑其他代码工具一样,在该连接器的 MCP Tools 页面中编辑:程序、描述、参数、Uses。
相关阅读
这份指南对你有帮助吗?