- 人工智能
- AI 应用
- AI Agent
- 代码智能体
- MCP 服务
- 逆向工程
- 桌面应用
- 开发工具
【免费下载链接】craft-anything
Craft Anything: understand how any software works, and craft your own.
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 一键添加与刷新工具列表
三种添加方式任选其一:
- 界面:Settings → Plugins → Add a plugin(见 crates/ui-egui/src/settings_ui.rs)。
- 工具/CLI:
plugins_add或craft-anything-cli plugins-add --id notes --command notes-mcp --args '["--stdio"]' - 直接编辑
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.wasmwasm-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.
相关推荐
Craft服务器插件:Python扩展与事件系统全解析
Craft服务器插件:Python扩展与事件系统全解析 引言:突破游戏开发瓶颈 你是否还在为游戏服务器功能扩展繁琐而烦恼?是否希望通过简单的Python脚本就能
游戏开发3D渲染使用Gradio构建MCP服务器:为LLM扩展工具能力
使用Gradio构建MCP服务器:为LLM扩展工具能力 引言 在现代人工智能应用中,大型语言模型 LLM 虽然功能强大,但在某些特定任务上仍存在局限性。通过Mo
AI 应用前端后端Bisheng插件体系:MCP协议与工具扩展机制
Bisheng插件体系:MCP协议与工具扩展机制 引言:企业级AI应用的工具生态挑战 在企业级AI应用开发中,工具扩展能力是决定平台灵活性和实用性的关键因素。传
人工智能大模型LLMOpsRAGAI Agent工作流自动化后端前端
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考