mcpField
T
toolfactory

toolfactory

本地服务
github.com开发工具03 周前更新

关于 toolfactory

toolfactory 是用于构建和维护 Agent 工具多种发行形式的脚手架,适合希望从同一操作模块生成技能、插件、MCP 服务和包的开发者。它通过各表面的原生验证器检查产物,并用锁文件检测漂移;生成项目可独立构建和发布。

主要功能

  1. 01从操作模块生成多种发行形式
  2. 02生成 Agent 技能、插件与 MCP 服务
  3. 03提供 CLI、包及网页表面
  4. 04运行各表面原生验证器
  5. 05锁定生成文件并检测漂移

适用场景

  1. 01将一组操作发布到多个 Agent 平台
  2. 02在 CI 中检查生成产物是否漂移
  3. 03为新工具生成项目脚手架

MCP 相关

toolfactory 可作为 MCP 服务提供自身命令对应的工具,也能为项目生成 stdio 或 HTTP MCP 服务,并只列出该服务可运行的操作。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"goatinahat-toolfactory": {
"command": "npx",
"args": [
"-y",
"toolfactory"
]
}
}
}
启动命令npx -y toolfactory

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
npmtoolfactory0.4.6
ocighcr.io/goatinahat/toolfactory:0.4.6

工具

17

收录的工具列表 · 更新于 3 周前

参数类型必填说明
gitboolean否如果当前目录尚未初始化为仓库,则运行 git init,并创建首次提交
namestring是工具名称:小写字母、数字、连字符、点(Agent Plugins 规则)
repostring否要使用 gh 创建并推送到的 GitHub 仓库的 owner/name
rootstring否项目根目录(包含 dev.toolfactory/ 的目录)
setupboolean否运行 .agents/setup:生成 harness 适配器、安装 git hooks、安装依赖项
authorstring否作者姓名
dryRunboolean否打印 gh 调用命令,而不实际运行
publicboolean否将该仓库创建为公开仓库,而非私有仓库
bindingenum是核心逻辑的语言:typescript 或 pythontypescript | python
licensestring否SPDX 许可证标识符
runtimeenum否`none` 会创建仅包含指令、没有可执行载荷的 skill/Codex 插件kernel | none
keywordsarray否供依赖这些触发词的宿主使用的激活触发词(Kiro Powers、Agent Plugins);默认为 [name]
surfacesarray否要生成的接口。默认值:以 skills 为先的最小集合——skill、agent-plugins、mcp、cli 和绑定项的包注册表;每个特定于宿主的插件均为可选项。
reviewersarray否当仓库进入 live 层级时,必须批准实时运行的 GitHub 登录名
repositorystring否源代码仓库 URL(GitHub URL 可启用 MCP Registry 名称)
descriptionstring否单行描述

详细介绍

toolfactory

构建一次 Agent 工具;通过一个操作模块和一个配置文件,即可将它发布为 Agent Skill、Agent Plugins bundle、Claude Code、Codex 或 Cursor 插件、MCP 服务、CLI、npm 或 PyPI 包、MCP Registry 条目、OpenClaw 或 Hermes 原生插件,以及网页。

toolfactory 是一个脚手架生成器和同步维护工具,并非运行时。它会按每种接入方式自身工具的生成格式创建对应内容,使用该方式自己的验证器进行验证,并将所有生成的文件记录在锁文件中,以便在 CI 中检测漂移。将 toolfactory 从它生成的仓库中删除后,每种接入方式仍可安装、构建和发布。

安装

Agent Skill

  • Agent Skill — npx skills add GoatInAHat/toolfactory
  • MCP 服务 — npx -y toolfactory mcp 在 VS Code 中安装 在 Cursor 中安装
  • Claude Desktop 扩展 — 从 GitHub Release 下载 toolfactory.mcpb,然后双击安装
  • Claude Code 插件 — claude plugin marketplace add GoatInAHat/toolfactory,然后运行 claude plugin install toolfactory@toolfactory
  • Codex 插件 — codex plugin marketplace add GoatInAHat/toolfactory,然后运行 codex plugin add toolfactory@toolfactory
  • Gemini CLI 扩展 — gemini extensions install https://github.com/GoatInAHat/toolfactory
  • OpenClaw 插件 — 在检出目录中运行 openclaw plugins install --link hosts/openclaw
  • Hermes 插件 — hermes plugins install https://github.com/GoatInAHat/toolfactory#hosts/hermes/toolfactory_hermes
  • DSH 插件(实验性)— 在检出目录中运行 dsh plugin --profile <profile> add ./hosts/dsh,或使用发布包 toolfactory-dsh-0.4.6.tgz
  • Web 应用 — npx -y toolfactory mcp --http --open 会在同一端口上为操作页面和 MCP 端点提供服务,并打开页面;通过 MCP 或 skill 调用 web 操作也会执行相同操作并返回 URL。
  • npm 包 — npm install toolfactory

快速开始

mkdir hello && cd hello
npx toolfactory init --name hello --binding typescript --surfaces skill,agent-plugins,claude,mcp,cli,npm

init 会创建 plugin.json(身份信息)、dev.toolfactory/tool.json(接入方式、绑定、配置)、内核脚手架、.agents/ Agent 配置规范(skills、MCP 服务、sync.py、setup 和各类宿主的钩子载体,使工具可在任何宿主中开发),以及首次构建。它还会执行接下来人们通常会做的事:运行 git init 并创建首次提交,然后运行 bash .agents/setup,以生成宿主适配器、安装用于保持同步的 git 钩子,并安装依赖项。nextSteps 最后会给出当前运行所在宿主唯一需要的一条重新加载命令,因为仓库无法自动完成重新加载。

添加 --repo <owner>/<name> 后,它会通过 gh 创建对应的 GitHub 仓库并推送到该仓库——除非传入 --public,否则仓库为私有——为每种选定的接入方式添加一个主题,并在存在 .env 文件时准备实时测试环境。--dryRun 会打印 gh 命令调用。以上操作都不是必需的:即使没有 GitHub,只使用普通 git,或者完全不使用 git,下面的所有功能仍然可用。

仅含指令的 Codex 插件

如果插件仅包含供 Codex 使用的 SKILL.md 指令,请使用 --runtime none --surfaces skill,codex。此时,ToolFactory 不会生成 MCP 服务、操作快照、语言脚手架或使用方的运行时依赖。为兼容配置,仍需提供 binding,但在此模式下不会用到。从 ToolFactory 0.1.1 开始,已发布的 npm 包支持此功能。

  1. 在 src/ops.ts(TypeScript)或 src/<pkg>/ops.py(Python)中编写操作。每个操作包含名称、描述、输入架构、可选的输出架构、可选的 requires 列表,以及一个处理函数。
  2. npx toolfactory introspect 会启动内核 MCP 服务,并将 tools/list 快照保存到 dev.toolfactory/ops.json。
  3. npx toolfactory build 会在项目树中重新生成所有已选表面。
  4. npx toolfactory gate 会运行 CI 执行的检查,在此包括:构建、差异检查、每个表面的上游验证器、自有检查和测试,以及无需凭据的主机端到端测试。
  5. 提交所有内容。npx toolfactory package 会将发布资源构建到 dist/release/;CI 会运行相同的检查,并在 v* 标签上发布前运行相同的打包任务。

一个 TypeScript 操作:

operation({
  name: "echo",
  description: "Echo text back.",
  input: z.object({ text: z.string() }),
  output: z.object({ text: z.string() }),
  annotations: { readOnlyHint: true },
  handler: async ({ text }) => ({ text }),
})

命令

每个命令既是 CLI 子命令,也是 MCP 工具(toolfactory mcp),因为 toolfactory 本身就是用 toolfactory 构建的。

命令说明
init新建工具:身份文件(keywords 默认为 [name],即 Kiro Powers/Agent Plugins 的激活触发词;可用 --keywords 覆盖)、tool.json、内核脚手架、首次构建、git init + 首次提交、.agents/setup;--repo <owner>/<name> 会创建 GitHub 仓库(私有;可用 --public 设为公开)并推送到该仓库
introspect将内核的 tools/list 快照保存到 ops.json
build重新生成所有已选表面;删除孤立文件;写入锁文件
check如果操作快照或任何生成文件与代码不一致,则失败(CI 检查)
validate [--surface]运行每个表面的上游验证器
coverage操作 × 表面判定矩阵
gate运行 CI 执行的检查,在此包括:构建、差异检查、验证器、自有检查和测试、主机端到端测试——遇到第一个失败时停止
package将所有发布资源构建到 dist/release/(npm 压缩包、发行包、插件压缩包和 bundle zip、Web 构建、覆盖率)
adopt / unadopt / eject接管 toolfactory 管理的文件(或整个表面),或将其交还
doctor查看此计算机可委托给哪些上游 CLI
secrets项目所需的全部凭据——自身的敏感配置键和发布注册表令牌——包括每项凭据的生成位置、其是否存在于本地和 GitHub,以及注册表是否接受该凭据(--action check);绝不显示凭据值
bootstrap-repo通过 gh 将 .env 推送到 GitHub(配置键推送到 live-tests 环境,发布令牌推送到仓库),启用 Pages,在软件包创建后配置 npm 可信发布,并列出剩余的一次性步骤
unpublish从上一个已发布标签以来,对所有已移除某表面的注册表撤回该表面;发布流程会运行此命令,--dryRun 可预览操作

表面

优先选择 Skills。init 会选取已能服务所有运行环境的最小集合——skill、agent-plugins、mcp、cli 和绑定对应的软件包注册表——因为任何支持插件的地方也都支持 skill 加 MCP 服务,而 skill 只有一个文件,无需跟踪上游。以下特定于主机的插件均为可选项:只有当该主机需要 skill 和 MCP 服务无法提供的功能(网关标签页、浏览器功能、商店列表)时,才添加对应插件。

SurfaceEmitsValidated by
skillskills/<name>/SKILL.md(frontmatter + operations 块;正文由你编写),以及指向它的符号链接 .agents/skills/<name>,让 Copilot、Codex、Hermes、DSH 和 .agents/sync.py 使用同一个技能agentskills validate
agent-plugins根目录下的 plugin.json + mcp.json(由 OpenClaw、Hermes、Copilot、Cursor、Codex 使用)使用 Ajv 根据 1.0.0 架构验证
claude.claude-plugin/plugin.jsonclaude plugin validate
codex.codex-plugin/plugin.json + .agents/plugins/marketplace.json(codex plugin marketplace add <owner>/<repo>)真实的 Codex CLI:marketplace add、plugin add、plugin list
cursor.cursor-plugin/ 清单符合架构格式
gemini根目录下的 gemini-extension.json——可直接从仓库安装的 Gemini CLI 扩展,会读取你的 AGENTS.md 和 skills/gemini extensions validate
mcp、cli内核 MCP 服务(stdio 或 --http)以及用于执行操作的 CLI;每个只列出其可运行的操作MCP Inspector、--help
npm、pypi合并到 package.json / pyproject.toml 中的包元数据npm pack、uv build
cargo、nuget、maven-central、rubygems、packagist、go-module与工具一同发布的、由作者拥有的原生包;元数据保持原生格式Cargo、.NET、Maven、RubyGems、Composer、Go
homebrew、winget、scoop、chocolatey、apt、rpm适用于相应操作系统的原生打包和目录/仓库分发管理器自带的工具
mcp-registryserver.jsonmcp-publisher
mcpbhosts/mcpb/manifest.json,以及从 npm tarball 打包的 .mcpb 发布资源——Claude Desktop 用于一键安装的包mcpb validate
openclaw-nativehosts/openclaw/,仿照 openclaw plugins init --type toolopenclaw plugins build --check、validate、plugin-inspector
hermes-nativehosts/hermes/,一个 manifest v2 插件hermes plugins doctor --ci
webweb/,一个 shadcn/ui(Vite、React、Tailwind)应用,每个操作都有对应的表单;你自己的页面可与它并列放在 App.tsx 中vite build、Playwright
browser-extensionhosts/browser/,一个适用于 Chromium、Firefox 和 Safari 的 WXT 扩展:worker 通过 loopback MCP 调用你的内核,popup 是 web 应用,而需要页面的操作由你在 entrypoints/ 中编写wxt build、web-ext lint、针对真实 Chromium 运行的 Playwright
vscode-extensionhosts/vscode/,一个原生 TypeScript 扩展,包含 MCP 发现、命令面板操作、设置和 SecretStorage;激活逻辑和原生贡献由你实现与 Microsoft generator-code 脚手架比较、vsce package、真实的 Extension Development Host
dsh(实验性)hosts/dsh/,一个零代码 DSH(DeepSeek Harness)捆绑包:通过 @deepseek-ai/dsh-mcp-client 挂接你的 MCP 服务的一行 Cordis 补丁无需密钥即可启动的 dsh --profile headless
workflows(始终包含)ci.yml、release.yml(gate → package → publish 步骤 → GitHub Release,另含 Pages)、compose.toolfactory.yaml、.env.example、renovate.json;每个步骤都可通过一次 toolfactory gate / toolfactory package 运行,无需 GitHub工作流自身
readme(始终包含)README.md 的 Install 部分(带标记的区域):每个选定的 surface 对应一条安装命令,另附静态 Agent Skill 徽章—
选择 vscode-extension,并同时选择 mcp、cli 和运行时注册表(TypeScript 使用 npm,Python 使用 pypi)。在 dev.toolfactory/tool.json 中设置 vscode.publisher,然后构建。
打开 hosts/vscode 并按 F5,即可使用此检出版本的运行时;也可以在该目录中运行 npm run vsix 进行打包。原生命令、视图、Webview、语言服务、聊天参与者和语言模型工具可在你自己的 src/extension.ts 中使用完整的 VS Code API。直接将贡献点添加到其 package.json;重新构建时会保留作者条目以及生成条目上的其他字段。注册发布者后,Marketplace 和 Open VSX 发布任务会使用 VSCE_PAT 和 OVSX_PAT。两者都可以在 tool.json 中单独禁用。

同一条原生自定义规则也适用于其他界面:JSON、TOML 和 YAML 清单仅合并投影字段,宿主入口点则会保留标记区域之外的代码。OpenClaw、Hermes、DSH 和浏览器 shim 可以使用其宿主的完整原生 API。完全替换生成的集成时,仍可使用 adopt 和 eject。

包分发为可选项。PyPI 支持 pip install 和 uv add;pip 使用同一个已发布的 wheel/sdist。其他生态系统使用作者提供的真实原生包和元数据。配置和注册表设置请参阅原生包发布和系统包发布。 Toolfactory 本身仍使用 npm 作为包注册表。

通过 Agent 驱动 toolfactory

同时选择 skill 和 openclaw-native,默认会将该工具自带的 skill 与原生插件一同发布。openclaw.skills 是精确覆盖项:[] 表示不发布;["my-tool", "custom"] 会发布生成的自带 skill 和 .agents/skills/custom/。仅自定义 skill 的显式列表会继续只发布这些 skill。自带 skill 的生成区域会在同一次构建中刷新;作者撰写的文本和 UTF-8 文本资源会保留。原生清单会声明 skills: ["./skills"],npm 打包也会包含该目录。如果不存在独立的 skill 界面,则不会推断原生插件 skill。

每个命令都是 MCP 工具,因此宿主可以不使用 shell 驱动整个流程,而且无需手动注册任何内容。每个生成的项目都包含 .agents/ 规范,因此 toolfactory 和该工具自己的内核已列入 .agents/mcp/servers.json;运行 bash .agents/setup 会将其渲染到机器上可用的各类工具中(.mcp.json、.cursor/mcp.json、.codex/config.toml 等),并从其中任意一处保持同步。每个工具都将 root 作为参数,因此一次注册即可服务于机器上的所有代码库;在宿主工作树内使用时,请显式传入该参数。

仓库无法自动化的唯一环节是重新加载,因此 init 会打印与其所运行的工具相匹配的命令行,而生成的 AGENTS.md 会包含对应的表格。在 OpenClaw 内,使用 openclaw plugins install --link <repo>/hosts/openclaw --force 安装正在构建的工具;在 Hermes 内,提交更改并运行 hermes plugins install file://<repo>#hosts/hermes/<pkg> — 每次运行 hermes 都会启动一个新进程,hermes gateway restart 仅适用于消息网关。

GSD 使用相同的 skill、CLI 和 MCP 服务;无需 GSD 专属界面。在生成的项目中,运行 bash .agents/setup --all,以便即使在仅安装 GSD 的机器上也能生成 .mcp.json,然后在交互式 GSD 会话中发现该服务,再进行无人值守使用。由 OpenClaw 或 Hermes 启动的 GSD 会与外层 Agent 分别加载子项目的配置。有关设置、运行时边界和可重复的冒烟测试,请参阅 GSD 兼容性。

边界

核心逻辑是 JSON 参数、环境/配置和文件系统的纯函数。操作会从一组封闭词汇中声明其所需能力:net、fs、shell、secret 可移植;browser、model、user-input、channel 则不可移植。每个操作在每个表面上都会在 COVERAGE.md 中获得一个判定(native、bridged、degraded、excluded,并附带原因),而被排除的操作不会出现在该表面的工具列表中,也不会用存根代替。需要浏览器的工具会拆分为两个操作:一个将页面内容作为参数,能够在任何地方运行;另一个声明 browser,仅在有浏览器的环境中运行。

规范性设计请参阅 docs/spec.md。

仓库

toolfactory 自身的仓库由 toolfactory build 根据其 dev.toolfactory/tool.json 生成。pnpm check、pnpm test、pnpm toolfactory check 和 pnpm toolfactory validate 是必过检查。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。