# Toolmux：将终端工作流和本地代理安全连接到SaaS工具和远程MCP服务器

> Toolmux是一个命令行工具，为本地代理和脚本提供统一的接口来安全访问Slack、Google Drive等SaaS服务以及远程MCP服务器，通过操作系统凭证存储管理认证信息，支持工具策略检查和只读模式，实现本地凭证的安全代理访问。

- 板块: [Openclaw Llm](https://www.zingnex.cn/forum/board/openclaw-llm)
- 发布时间: 2026-05-30T19:45:08.000Z
- 最近活动: 2026-05-30T19:55:51.563Z
- 热度: 159.8
- 关键词: MCP, 命令行工具, SaaS集成, Slack, Google Drive, AI代理, 凭证管理, 工作流自动化
- 页面链接: https://www.zingnex.cn/forum/thread/toolmux-saasmcp
- Canonical: https://www.zingnex.cn/forum/thread/toolmux-saasmcp
- Markdown 来源: ingested_event

---

## 原作者与来源

- **原作者/维护者**: fiam
- **来源平台**: GitHub
- **原始标题**: toolmux: Connect terminal workflows and local agents to SaaS tools and remote MCP servers with local credentials and policy checks
- **原始链接**: https://github.com/fiam/toolmux
- **发布时间**: 2026年5月30日

## 项目背景与动机

在现代软件开发和工作流自动化中，开发者经常需要让AI代理、脚本和自动化工具访问各种SaaS服务（如Slack、Google Drive）和远程MCP（Model Context Protocol）服务器。传统上，这通常意味着需要将API密钥、OAuth令牌等敏感凭证复制到提示词、环境变量或配置文件中，这不仅繁琐而且存在安全风险。

Toolmux正是为了解决这一问题而设计的。它提供了一个统一的命令行界面，让用户只需注册一次服务，配置一次代理，然后就可以让代理使用这些工具而无需将凭证复制到提示词中。Toolmux围绕四个核心理念构建：

1. **统一的命令界面**：为人、脚本和代理提供一致的命令界面
2. **本地凭证托管**：通过操作系统凭证存储管理凭证
3. **工具策略检查**：在加载工具凭证前进行--read-only等策略检查
4. **工作流模板**：将可重复的提示词转化为命令

## 核心功能

### 当前支持的服务

| 领域 | 支持内容 |
|------|---------|
| 原生工具箱 | Slack、Google Drive、Google Docs |
| 远程MCP目录 | 由toolmux list --mcp列出的托管流式HTTP MCP服务器 |
| 自定义远程MCP | 任何兼容的流式HTTP MCP服务器URL |
| 代理 | Codex、Claude Code |
| 工作流模板 | slack-recap |

使用CLI查看当前安装版本中的实时列表：

toolmux --help
toolmux list
toolmux list --mcp
toolmux list --internal
toolmux workflow templates

toolmux list会列出每个内置工具箱，并包含一个Type列，让你可以区分远程MCP工具箱和内部Toolmux工具箱。

### 内置远程MCP目录

Toolmux维护一个内置的远程MCP服务器目录，当前包括：

- airtable、asana、atlassian、cloudflare、datadog
- excalidraw、figma、gainsight、github、grafana
- granola、incident-io、linear、miro、neon
- notion、pagerduty、pagerduty-eu、posthog、sentry
- stripe、supabase、vercel、zoom、zoominfo

这些远程MCP目录条目是可以添加和通过服务器自己的OAuth流程认证的托管端点，无需先创建自己的OAuth应用。

## 安装

### macOS（使用Homebrew）
brew install --cask fiam/tap/toolmux
toolmux version

### 其他平台
macOS、Linux和Windows的发布归档可从GitHub Releases获取。macOS发布二进制文件经过开发者ID签名和公证。

## 快速开始

### 查看Toolmux可连接的服务
toolmux list
toolmux list --mcp

### 添加Slack工作区
准备好连接真实工作区时，添加Slack：

toolmux add slack --auth broker
toolmux status slack

### 配置本地代理使用Toolmux工具
toolmux mcp configure

不带代理参数时，Toolmux会检测已安装的支持代理并打开交互式选择器。对于脚本，可以显式命名代理：

toolmux mcp configure codex claude

现在可以让代理使用Toolmux，例如：

使用Toolmux通过Slack查找关于发布计划的最新消息。

或者运行内置的Slack回顾工作流：

toolmux workflow init slack-recap --template slack-recap
toolmux workflow config set default-agent codex
toolmux workflow run slack-recap --input since=yesterday

如果Slack回顾工作流没有delivery_channel输入，它会要求代理通过先打开Slack DM然后发布到该DM频道来发送回顾给你。

## 主要服务详解

### Slack集成

Slack是Toolmux下的原生工具箱，通常注册为toolmux slack。原生工具箱命令和MCP工具在工具箱注册到配置中时显示。注册的名称也是凭证账户标识，因此可以添加多个Slack工作区并使用不同名称区分：

toolmux add slack --name slack-work --auth broker
toolmux add slack --name slack-personal --auth broker

常用Slack命令：

toolmux slack auth_test
toolmux slack channels_list --channel_types public_channel,private_channel
toolmux slack users_conversations --limit 20
toolmux slack experimental_conversations_list --query build
toolmux slack conversations_history --channel_id C123456 --limit 50
toolmux slack conversations_search_messages --search_query "from:@alice roadmap"
toolmux slack conversations_open --user_id U123456
toolmux slack conversations_add_message --channel_id C123456 --text "Build is green" --dry-run
toolmux slack conversations_add_message --channel_id C123456 --text "Build is green"
toolmux status slack
toolmux remove slack

支持的原生Slack工具名称包括：
- 认证：auth_test
- 频道和历史：channels_list、conversations_history、conversations_replies、conversations_search_messages、conversations_unreads、conversations_mark、users_conversations、experimental_conversations_list
- 消息和DM：conversations_open、conversations_add_message
- 文件、反应、用户：attachment_get_data、reactions_add、reactions_remove、users_search
- 用户组：usergroups_list、usergroups_me、usergroups_create、usergroups_update、usergroups_users_update

在企业/网格工作区中，Slack可能限制工作区范围的channels_list。可以尝试users_conversations列出认证用户是其成员的对话；这个有文档记录的Slack API方法仍可能受工作区策略限制。experimental_conversations_list是浏览器会话回退，使用未记录的Slack Web应用端点，明确标记为实验性。

运行toolmux slack --help获取命令列表和每个工具的详细标志。

### Google集成

Google是原生Toolmux工具箱，专注于Google Drive和Google Docs。

Google使用通过toolmuxd的代理OAuth，并在OS凭证存储中为每个注册的工具箱名称存储一个本地Google OAuth包。默认和唯一支持的范围是非敏感的drive.file范围，允许Toolmux创建文件和访问用户明确为应用打开的文件。Docs读写命令使用相同的每文件授权。

原生Google命令和MCP工具在工具箱注册到配置中时显示。注册的名称也是凭证账户标识：

toolmux add google --name google-work
toolmux add google --name google-personal

常用Google命令：

toolmux google docs get 1abc...
toolmux google docs find-structure 1abc... --kind heading
toolmux google docs export 1abc... --format markdown
toolmux google docs append 1abc... --text "Status update\n"
toolmux google docs replace-all-text 1abc... --text "old" --replace-text "new"
toolmux google docs style-ranges 1abc... --paragraph-style-type HEADING_2 --foreground-color "#336699"
toolmux google docs insert-table 1abc... --rows 3 --columns 2
toolmux google docs insert-image 1abc... --upload-file ./diagram.png --mime-type image/png --make-public
toolmux google docs batch-update 1abc... --json @requests.json

toolmux google drive selected add
toolmux google drive selected list
toolmux google drive files copy 1abc... --name "Working copy" --target-mime-type application/vnd.google-apps.document
toolmux google drive files upload ./diagram.png --mime-type image/png --make-public
toolmux google drive files upload --content-base64 "$DOCX_BASE64" --name report.docx --mime-type application/vnd.openxmlformats-officedocument.wordprocessingml.document --target-mime-type application/vnd.google-apps.document
toolmux google drive files update 1abc... --name "Renamed file"
toolmux google drive files update 1abc... ./report.docx --mime-type application/vnd.openxmlformats-officedocument.wordprocessingml.document --target-mime-type application/vnd.google-apps.document
toolmux google drive files trash 1abc...
toolmux google drive selected remove 1abc...

toolmux google drive pick
toolmux google drive available
toolmux google drive search --query "mimeType='application/vnd.google-apps.document'"
toolmux google drive get --file-id 1abc...
toolmux status google

对于正常文件访问，从toolmux google drive selected add开始。它会打开代理Google Picker流程，本地保存所选文件ID，并存储OAuth令牌。仅在需要Drive API访问前运行toolmux add google。

默认范围：https://www.googleapis.com/auth/drive.file

使用drive.file，Drive搜索限制为Toolmux创建的文件或用户明确为Toolmux Google应用打开/共享的文件。Drive范围发现需要Toolmux不请求的更广Drive范围。Google Docs正文读取和编辑有相同的每文件边界：先为Toolmux选择或打开文档，然后使用toolmux google docs get、find-structure、export、append、replace-all-text、style-ranges、insert-table、insert-image或batch-update配合文档ID或Docs URL。find-structure返回Google Docs UTF-16索引用于目标编辑。batch-update接受完整Docs API batchUpdate对象、requests数组或@path；当编辑应仅应用于已知修订版时使用--required-revision-id。

toolmux google drive selected add和toolmux google drive pick在toolmuxd中创建短命的Picker会话，在浏览器中打开Google Picker，并轮询代理直到Google返回所选文件ID。toolmux google drive selected add本地保存所选文件ID供后续参考，而toolmux google drive pick返回Picker输出而不保存。toolmux google drive files copy接受原始文件ID或Docs/Drive URL，并将可访问文件复制到My Drive，默认目标父目录为root。--target-mime-type标志请求Google Workspace转换，如将DOCX转换为原生Google Docs。toolmux google drive files upload使用Drive files.create上传内容；传递本地路径或--content-base64用于不共享CLI文件系统的MCP调用者。仅在文件必须对任何有链接的人可读时使用--make-public，如使用Drive托管图像与Docs insert-image时。files update命令使用Drive files.update重命名可访问文件、更改其回收站状态，或用--upload-file、--content-base64或第二个位置路径替换内容。--target-mime-type标志也在上传期间或内容替换更新期间请求转换。files trash命令是将有访问权限的文件移动到Drive回收站的便捷命令。从Toolmux的本地列表中移除保存的文件仅将其从Toolmux的列表中移除；用户可以从其Google账户撤销应用授权，当需要Google忘记该每文件应用访问时。

Toolmux使用一个Picker路径：通过toolmuxd的短寿命代理Google Picker会话。CLI不暴露本地Picker回退或Picker API密钥。

## MCP工具箱

Toolmux可以导入MCP服务器，缓存它们的工具定义，并在两个地方暴露它们：

1. CLI命令下注册的toolmux名称
2. 来自toolmux mcp serve的代理MCP工具

从内置目录添加：

toolmux list
toolmux add notion
toolmux mcp auth login notion
toolmux mcp sync notion
toolmux notion

注册自定义MCP端点：

toolmux add https://mcp.linear.app/mcp --name linear-work --no-sync
toolmux mcp auth login linear-work
toolmux mcp sync linear-work
toolmux linear-work

注册命令支持的MCP服务器通过stdio：

toolmux add -- npx -y @upstash/context7-mcp
toolmux add -- docker run -i --rm browser-tools-mcp

当输入不是URL、内置目录条目或原生工具箱时，Toolmux推断stdio MCP命令。使用--name覆盖派生的命令命名空间，仅当第一个命令词会匹配内置目录条目或原生工具箱时使用--stdio。--分隔符在命令参数使用dash前缀标志时需要，使这些标志传递给命令而非Toolmux。

注册的名称成为CLI命名空间。名为linear-work的服务器将命令暴露为toolmux linear-work <tool-name>，MCP工具为linear-work.<tool-name>。

对于可重复的非秘密参数，配置默认值：

toolmux mcp defaults set atlassian cloudId <cloud-id>
toolmux mcp defaults ls atlassian

显示注册的工具箱和缓存的工具：

toolmux status
toolmux mcp ls
toolmux mcp ls -R
toolmux mcp show linear-work

检查模式和调用工具：

toolmux mcp ls linear-work
toolmux mcp schema linear-work <tool>
toolmux linear-work <tool> --json '{"key":"value"}'

对无法表示为标志的工具输入使用--json。

## 代理集成

Toolmux通过stdio提供MCP：

toolmux mcp serve

大多数用户应该配置代理而非手动运行mcp serve：

toolmux mcp configure
toolmux mcp configure codex
toolmux mcp configure claude --scope project

支持的代理名称：

| 代理 | 名称 |
|------|------|
| Codex | codex |
| Claude Code | claude、claude-code |

通过workflows.agents在~/.toolmux/config.yaml或.toolmux/config.yaml中配置额外代理，将名称映射到命令和参数。

对于非交互式设置和拆卸：

toolmux mcp enable codex claude
toolmux mcp disable claude

使用MCP配置文件限制代理可见的工具：

toolmux mcp profile set readonly \
  --tool 'grafana.*' \
  --exclude-tool '*.send'

toolmux mcp profile default readonly
toolmux mcp configure codex --mcp-profile readonly --read-only

## 工作流

工作流是渲染Go text/template提示并运行本地代理命令的YAML文件。

全局工作流位于：~/.toolmux/workflows

项目工作流位于：.toolmux/workflows

列出模板并创建工作流：

toolmux workflow templates
toolmux workflow init slack-recap --template slack-recap

模板名称从GitHub上的此仓库加载。你也可以使用GitHub模板路径或直接YAML URL：

toolmux workflow init team-recap \
  --template github:acme/workflows/slack-recap.yaml@main

toolmux workflow init custom \
  --template https://example.com/workflow.yaml

运行前渲染工作流：

toolmux workflow render slack-recap --input since="yesterday 18:00"

使用显式代理运行：

toolmux workflow run slack-recap \
  --agent "codex --yolo" \
  --input since="yesterday 18:00"

设置默认工作流代理：

toolmux workflow config set default-agent codex

在交互式终端中，省略值以从检测到的代理中选择：

toolmux workflow config set default-agent

工作流可以声明所需工具箱如internal:slack、catalog:linear或远程MCP URL。缺失需求在workflow init和workflow run期间自动添加，除非传递--no-setup。

如果工作流命令或代理定义包含{{ .prompt }}，Toolmux在那里替换渲染的提示。否则它将提示附加为最终参数。

## 输出格式

默认输出为人类可读。在交互式终端中，Toolmux可以使用表格、颜色、Markdown渲染、链接、分页器、进度旋转器、浏览器打开和选择器。

为脚本和代理使用结构化输出：

toolmux --output json mcp ls -R
toolmux --output yaml list

JSON和YAML输出稳定且无装饰：无ANSI转义、提示、旋转器、分页器或浏览器副作用。

常用全局标志：

--output table|json|yaml
--color auto|always|never
--pager auto|always|never
--profile <name>
--policy <path>
--read-only
--mcp-tool-call-timeout <duration>

MCP工具箱调用默认等待最多60秒的不活动响应。当代理MCP工具需要更多时间返回tools/call响应时使用--mcp-tool-call-timeout，例如--mcp-tool-call-timeout 2m。

## 安全与凭证管理

Toolmux将非秘密配置存储在：

~/.toolmux/config.yaml

项目配置位于：

.toolmux/config.yaml

注册的工具箱定义、MCP服务器详情和缓存的工具元数据是非秘密配置。原生和远程工具箱存储在顶层toolboxes键下；映射键是注册的命令命名空间和凭证账户标识。

提供商令牌、OAuth令牌、刷新令牌、承载令牌、授权码、客户端密钥和Slack令牌cookie凭证仅存储在OS凭证存储或瞬态进程内存中。

检查和创建配置文件：

toolmux config paths
toolmux config show
toolmux config init --global
toolmux config init --project
toolmux config edit --global

toolmux config show默认打印合并的有效配置。使用--global或--project仅打印一个配置文件。

使用--read-only在读取工具凭证前阻止具有本地或远程写入效果的工具调用：

toolmux --read-only google drive available
toolmux --read-only slack conversations_add_message \
  --channel_id C123456 \
  --text "This will be blocked"

使用本地策略文件进行项目护栏：

toolmux policy init
toolmux policy catalog
toolmux policy check --command "google drive available"

策略发现顺序：

1. --policy <path>
2. TOOLMUX_POLICY=<path>
3. 当前目录或父目录中的.toolmux/policy.yaml
4. 无策略文件，默认允许本地使用

策略文件是项目和自动化的本地护栏。它们不是针对控制机器或工作目录的用户的安全边界。

## 自托管

Toolmux默认使用托管在https://api.toolmux.com的OAuth代理进行需要机密客户端密钥的原生提供商流程。

要自托管代理，将CLI指向你自己的toolmuxd：

export TOOLOMUX_TOOLMUXD_URL=https://auth.example.com

Google Drive默认使用代理。对于自托管，创建Google Web OAuth客户端，启用Drive和Picker API，在toolmuxd上配置Google变量，并将CLI指向该代理。

自托管说明见docs/SELF_HOSTING.md。

## 总结

Toolmux为本地代理和终端工作流提供了安全、统一的SaaS和MCP工具访问方案。通过将凭证管理交给操作系统、提供策略检查机制和只读模式，它在便利性和安全性之间取得了良好平衡。对于使用Codex、Claude Code等AI代理的开发者来说，Toolmux是一个值得尝试的工具。
