内容
# cli2mcp.app
将任何 macOS 命令行工具转换为模型上下文协议服务器 — 无需 Node、无需 Python,也无需 `npx` 启动。cli2mcp 是一个原生 SwiftUI 应用,它检查 CLI 的 `--help`,推断出输入模式,并为您提供一个可以直接粘贴到 Claude Desktop 或任何其他 MCP 客户端的 MCP 代码片段。一个捆绑的 stdio 助手在运行时执行实际的包装,并包含在同一个 `.app` 中。
<img width="2204" height="1708" alt="screenshot2026-05-26_15 39 22@2x" src="https://github.com/user-attachments/assets/d96d667f-b883-4507-8e44-1f744d6be749" />
## 为什么选择 cli2mcp
- **选取、复制、粘贴。** 选择一个预设(`jq`、`rg`、`pandoc`、`sed`、`curl`、`ffmpeg`、`yt-dlp` 或您自己的),复制生成的 JSON,然后将其粘贴到您的 MCP 客户端中。代码片段直接指向捆绑包中的助手:`Cli2MCP.app/Contents/MacOS/cli2mcp-server`。
- **在信任前验证。** 内置的健康探测启动与您的客户端将使用的相同的助手,交换 `initialize` 和 `tools/list`,并显示完整的 stdio 记录 — 这样您就可以看到 MCP 客户端将看到的内容。
- **自包含。** 纯 Swift,单个捆绑包。无需包管理器,无需注册表,无需脚本运行时,无需安装后下载。如果您有 Swift 工具链,您可以离线构建它。
- **安全。**
- 工具调用的位置参数在 POSIX `--` 选项结束标记后追加,因此用户提供的字符串永远不会被重新解释为被包装的 CLI 的标志。
- 子进程通过 `Foundation.Process` 启动,带有可执行文件和参数数组 — 永远不会是 shell 命令文本。
- `--env-passthrough safe` 仅转发必要的内容(`PATH`、`HOME`、`LANG`、`TERM` 和标准 XDG 目录变量);`all` 和 `none` 仍然是显式的,并且 `--inherit-shell-env` 可以选择登录 shell 环境,当预设需要它时。
- 每次调用的超时默认为 60 秒;`--max-concurrent N` 限制同时进行的调用。
它已获得 notarized 以让 Apple 满意。从 GitHub 发布页面获取它。将其放入 /Applications 目录中。就这样。
## 代码片段示例
从应用中复制的代码片段使用助手的绝对命令路径:
```json
{
"mcpServers": {
"jq": {
"command": "/Applications/Cli2MCP.app/Contents/MacOS/cli2mcp-server",
"args": ["jq", "--env-passthrough", "safe", "--max-concurrent", "4", "--timeout", "60000"]
}
}
}
```
如果您移动了应用,请从新位置重新打开它,并再次复制代码片段,以便绝对助手路径保持最新。
## 自己构建
```sh
cd mac && make test
make app
make sign-distribution SIGN_IDENTITY="Developer ID Application: Example, Inc. (TEAMID)"
make install
make reinstall
make run-app
```
`make app` 生成 `mac/build/Cli2MCP.app`,其中包含 SwiftUI 可执行文件和 `cli2mcp-server`,均复制到 `Contents/MacOS/` 中。
参见 [`mac/README.md`](mac/README.md) 以获取 macOS 应用的详细信息。
## 许可证
GNU Affero 通用公共许可证 v3.0 仅 (`AGPL-3.0-only`)。参见 [`LICENSE`](LICENSE)。