ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

Craft Anything 插件系统完全教程:用 MCP 服务器与 WASM 组件为 AI 工具链扩展新工具

Craft Anything 插件系统完全教程:用 MCP 服务器与 WASM 组件为 AI 工具链扩展新工具
  • 人工智能
  • AI 应用
  • AI Agent
  • 代码智能体
  • MCP 服务
  • 逆向工程
  • 桌面应用
  • 开发工具

【免费下载链接】craft-anything

Craft Anything: understand how any software works, and craft your own.

项目地址:https://gitcode.com/gh_mirrors/cr/craft-anything
点击查看免费下载

Craft Anything是一款用纯 Rust 编写的开源 AI 逆向工程引擎:指向任意网站、App 或游戏,它会用 314 个内置工具研究原版、让编码智能体构建你的版本、再逐项比对打磨。而它的插件系统正是这套 AI 工具链的扩展口——你可以用MCP 服务器(外部工具进程)或WASM 组件(沙盒代码)为它添加工具,无需改动一行核心代码。本教程面向新手,带你完整走通两条扩展路线:从添加一个 MCP 服务器,到编译并注册一个 WASM 插件。

一、插件能做什么:314 个工具只是起点 ⚙️

Craft Anything 的每个工具同时是 CLI 子命令、MCP 工具和应用内工具,Agent 可以直接调用。插件的意义在于:把"别人写的工具"变成引擎自己的工具。

高级工作台:左侧函数列表、中间伪 C 与 Agent 对话、右侧证据账本。插件添加工具后,会像这里的一切工具一样出现在工具集里。

插件添加工具后,它会在四个地方同时可用:

使用场景体验
桌面应用出现在工具集(toolset)中,可被 Agent 调用
CLI变成子命令,如craft-anything-cli notes-list-notes
MCP 服务器通过craft-anything-cli mcp暴露给任意 MCP 客户端
AI 构建流程参与构建轮次的检查(仅 WASM checks)

工具 id 的规则很简单:<插件id>_<工具名>,全部小写、非字母数字转为_。例如插件 id 为notes、服务器里的工具叫list_notes,最终 id 就是notes_list_notes。

二、路线一:添加外部 MCP 服务器(最简单)

任何 MCP 服务器——本地(stdio)或远程(Streamable HTTP)——都能不改代码地添加工具。适合想把现成 MCP 生态(笔记、文档、搜索等)接进 AI 工具链的用户。

2.1 两种连接方式:本地命令 vs 远程地址

  • 本地服务器:填写command+args,Craft Anything 在首次调用时启动它,会话期间保持运行,退出会自动重启。
  • 远程服务器:填写url(https://…,或指向本机的http://)+ 可选headers(如Authorization),会话 id 会随每次请求回传。

配置写在config.toml的[[plugins.mcp]]段(见 crates/engine/src/plugins.rs 的注释与 crates/engines/src/mcp_client.rs):

[[plugins.mcp]] id = "notes" # 工具集 id;工具 id 变成 notes_<tool> name = "Notes" # 展示名称(默认用 id) command = "notes-mcp" args = ["--stdio"] consent = true # 每次调用前询问(默认值):它运行的是别人的代码 # enabled = false # 保留配置但暂时关闭 # env = { NOTES_DIR = "/home/me/notes" } [[plugins.mcp]] id = "docs" # 远程服务器:用 url 代替 command url = "https://mcp.example.com/mcp" headers = { Authorization = "Bearer …" }

⚠️安全提示:env与headers的值是敏感信息,settings_show和plugins_list永远不会显示它们。

2.2 一键添加与刷新工具列表

三种添加方式任选其一:

  1. 界面:Settings → Plugins → Add a plugin(见 crates/ui-egui/src/settings_ui.rs)。
  2. 工具/CLI:plugins_add或craft-anything-cli plugins-add --id notes --command notes-mcp --args '["--stdio"]'
  3. 直接编辑config.toml。

添加后执行一次刷新,服务器会被启动一次并缓存工具列表,之后的启动不再逐个拉起服务器:

craft-anything-cli plugins-refresh --allow-run # 启动服务器并缓存工具列表 craft-anything-cli plugins-list # 查看已配置与缓存情况 craft-anything-cli plugins-remove --id notes # 移除插件

几个值得知道的行为(详见 docs/extending.md):

  • 通过工具或应用添加的插件每次调用都会先询问;
  • 服务器标注了readOnlyHint、destructiveHint、openWorldHint等 MCP 注解,引擎会据此标记工具影响面;
  • 单个服务器最多代理 500 个工具;工具 id 冲突时该工具被跳过并记录日志;
  • 调用结果会作为外部服务的证据记录(engine: plugin:<id>)入账。

三、路线二:编译并注册 WASM 组件(最强沙盒)

MCP 服务器运行的是"别人的进程",能力强大但需要信任;而WASM 组件插件导入任何东西都不行——没有文件、网络、环境变量和时钟,每次调用都在全新实例中运行,且有明确上限:

限制数值
单次调用工作量(fuel)约 20 亿条指令
内存上限256 MiB
组件文件大小64 MiB
返回 JSON 大小16 MiB

超限的插件会被直接停掉并报错。因为"什么也给不了它、它也碰不到你的系统",WASM 工具运行时无需询问——这是它相对 MCP 的安全优势。

📌 WASM 插件需要以--features wasm-plugins编译(会编译 wasmtime,所以默认关闭);未启用该特性时,已配置的 WASM 插件会被跳过并记录日志。

3.1 插件接口:只有两个函数

接口定义在 crates/engines/wit/plugin.wit,按 semver 版本管理(当前craft-anything:plugin@0.1.0):

  • tools接口:describe()以 JSON 返回工具清单(name、title、description、input_schema),call(name, input)回答{"ok": …}或{"error": "…"};
  • checks接口(可选):添加"评判构建好坏"的检查,在每轮内置检查之后运行。检查收到构建的 JSON(每个文件的路径与大小,加上你声明想读取的扩展名文件内容),回答 passed、可选的 0–100 相似度和 summary;失败的检查会展示给构建智能体去修复。

插件可以只导出tools、只导出checks,或两者都导出。

3.2 跟着示例走:一个统计词数的插件

仓库里有一个完整的 Rust 示例:examples/wasm-plugin-wordcount(源码 src/lib.rs),它实现了describe/call,提供一个count_words工具,统计文本的词数、行数和字符数。构建三步:

rustup target add wasm32-unknown-unknown cargo build --release --target wasm32-unknown-unknown wasm-tools component new target/wasm32-unknown-unknown/release/wasm_plugin_wordcount.wasm -o wordcount.wasm

wasm-tools负责把核心模块包装成 component(可用wasm-tools component wit wordcount.wasm查看导出)。然后在config.toml注册:

[[plugins.wasm]] id = "wordcount" path = "/full/path/to/wordcount.wasm"

注册后,工具wordcount_count_words就在所有地方可用了,包括 CLI:

craft-anything-cli wordcount-count-words --text "one two"

另一个示例 examples/wasm-plugin-readme-check 演示checks 接口:检查"README 是否写明了如何运行构建",只在每轮检查后运行,失败信息直接交给构建者修复。

3.3 版本兼容:0.1.x 才互相认识

插件 API 版本规则(见 docs/extending.md 的 "Plugin API versions" 与 crates/engines/src/wasm_plugin.rs 的compatible):

  • 兼容 = 相同的 major;在 0.x 阶段还要求相同的 minor(0.1.0 与 0.1.7 兼容,0.2.0 不兼容);
  • 不兼容时不会静默跳过,而是明确报错,例如:The plugin exports craft-anything:plugin/tools for API 0.2.0; this Craft Anything speaks 0.1.0,并提示用当前plugin.wit重新构建;
  • patch 版本只允许新增可选 JSON 字段,双方都必须忽略不认识的字段。

四、MCP 还是 WASM?一张表看懂怎么选 🧭

维度MCP 服务器WASM 组件
编写成本现成生态,接上即用需按 WIT 接口编译
能力上限可访问文件/网络/系统零导入,纯计算
安全模型每次调用询问(默认)沙盒 + fuel/内存限额,免询问
生效条件默认支持需--features wasm-plugins编译
可加 checks否是
生命周期首调启动、会话内保活每次调用全新实例

经验法则:接现成工具选 MCP;写小而纯的逻辑(格式化、统计、校验、自定义检查)选 WASM。

五、常见问题速查(FAQ)❓

  • 插件不生效?用plugins-list看配置与缓存;id 冲突的工具、无法加载的插件都会被跳过并写日志;WASM 还需确认编译时开启了wasm-plugins特性,且path是.wasm的绝对路径。
  • 如何临时停用?每个插件都有enabled开关(默认为 true),关闭后保留配置。
  • MCP 服务器启动失败怎么办?本地服务器首次调用时启动,会话内退出会重启;plugins-refresh --allow-run会把它启动一次并缓存工具表,报错信息会直接指出问题。
  • 想支持更多传输层?实现engines::mcp_client::Transport并传给McpClient::with_transport(见 crates/engines/src/mcp_client.rs)。
  • 运行时动态定义工具?面向 WASM host 或协议代理的高级场景可用registry::RuntimeTool+Engine::shared_with。

六、延伸阅读 📚

资料路径
扩展指南(插件两章)docs/extending.md
工具总览docs/tools.md
工具 id 规范docs/tool-ids.md
MCP 客户端实现crates/engines/src/mcp_client.rs
WASM 插件宿主实现crates/engines/src/wasm_plugin.rs
插件配置与装载crates/engine/src/plugins.rs、crates/engine/src/wasm_plugins.rs
WIT 接口定义crates/engines/wit/plugin.wit
完整示例:词数工具examples/wasm-plugin-wordcount
完整示例:README 检查examples/wasm-plugin-readme-check
应用内插件设置页crates/ui-egui/src/settings_ui.rs

小结:MCP 服务器负责"接入外部世界",WASM 组件负责"安全地长出新能力"。两条路线殊途同归——插件工具最终都以<插件id>_<工具名>的身份,与 Craft Anything 的 314 个内置工具平起平坐,出现在应用、CLI、MCP 与 AI 构建流程的每一处。

  • 人工智能
  • AI 应用
  • AI Agent
  • 代码智能体
  • MCP 服务
  • 逆向工程
  • 桌面应用
  • 开发工具

【免费下载链接】craft-anything

Craft Anything: understand how any software works, and craft your own.

项目地址:https://gitcode.com/gh_mirrors/cr/craft-anything
点击查看免费下载

相关推荐

上一篇:TiXL 编辑器内手动测试运行器(Manual Test Runner):从 Markdown 测试集到 Pick / Run / Summary 三态工作流
下一篇:@civitai/auth 统一认证包实战指南:Civitai 多应用 spoke 接入、JWT 会话验证与吊销

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进