关于 Slack ↔ WxO MCP Gateway
Slack ↔ WxO MCP Gateway 将 Slack 消息路由给 Watson Orchestrate Agent,并为运维及其他客户端提供 MCP 工具集。它支持消息触发、频道到 Agent 的绑定,以及线程回复。
主要功能
- 01每条用户消息都可唤醒 Agent
- 02将多个频道路由到 Agent
- 03读取线程回复和上下文
- 04发布线程答案并过滤噪声
- 05管理界面、诊断与日志
适用场景
- 01通过频道消息触发 WxO Agent
- 02将支持和运维频道分配给不同 Agent
- 03检查网关状态和路由配置
MCP 相关
在 `/mcp` 提供 Streamable HTTP MCP 工具集,涵盖 Slack、WxO、路由、轮询、状态、日志和诊断。WxO 及 IDE 客户端等 MCP 客户端可连接使用。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
npx -y @markusvankempen/slack-wxo-mcp-gatewaySLACK_BOT_TOKEN密钥Slack Bot User OAuth Token (xoxb-…)WXO_INSTANCE_URLwatsonx Orchestrate instance base URLWXO_API_KEY密钥watsonx Orchestrate / MCSP API keyWXO_AGENT_IDDefault WxO agent id for bindingsGATEWAY_TRANSPORTstdio (IDE) or streamable-http (hosted). Default for npx IDE use: stdioSLACK_SIGNING_SECRET密钥Slack signing secret (Events mode)本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
Slack ↔ WxO MCP 网关
作者: Markus van Kempen
邮箱: [email protected] · [email protected]
网站: https://markusvankempen.github.io/ · GitHub
npm: @markusvankempen/slack-wxo-mcp-gateway · MCP: io.github.markusvankempen/slack-wxo-mcp-gateway
此 GitHub 仓库包含文档和注册表元数据。 不包含可运行的应用程序源代码。
通过 npm 安装 / 运行:npx -y @markusvankempen/slack-wxo-mcp-gateway· 网站:https://markusvankempen.github.io/
简介: MCP 网关,突破 watsonx Orchestrate 的 Slack 限制——每条消息唤醒、多频道→多 Agent 路由、整洁的线程内回复,以及适用于 WxO + Cursor / VS Code / Bob / Antigravity 的可流式传输 HTTP 工具包——同时无需替换你的 Agent。
tags: wxo-limitations · byo-slack · every-message · multi-channel · multi-agent · thread-followups · gateway-thread · no-done-noise · mcp-toolkit · streamable-http · poller · code-engine · ngrok · agentic-ai
一个配置站点: 将多个 Slack 频道映射到多个 WxO Agent。
轮询器(以及可选的 Slack Events)会唤醒 Agent。
同一主机还提供用于 WxO / Cursor / 其他客户端的 MCP 工具包(/mcp)。
架构概览
flowchart LR
subgraph Slack
C1["#support"]
C2["#orders"]
C3["#ops"]
end
subgraph Gateway["Slack ↔ WxO MCP Gateway"]
Bind["config.yaml bindings"]
Poll["Poller / Events"]
MCP["/mcp streamable-http"]
UI["Admin UI /"]
end
subgraph WxO["watsonx Orchestrate"]
A1["Agent A"]
A2["Agent B"]
A3["Agent C"]
end
subgraph Clients["MCP clients"]
IDE["Cursor / VS Code / Bob / …"]
TK["WxO toolkits"]
end
C1 & C2 & C3 --> Poll
Poll --> Bind
Bind --> A1 & A2 & A3
A1 & A2 & A3 -.->|gateway_thread reply| Poll
IDE & TK --> MCP
UI --> Bind
为什么采用这种方案(突破 WxO 限制)
| WxO / Slack 限制 | 标签 | 网关的改进 |
|---|---|---|
byo_slack ≈ 仅支持 @提及 / 私信 | every-message | 轮询器 / Events 会在每条人工消息到达时唤醒 Agent |
| 难以让多个频道对应多个 Agent | multi-channel multi-agent | 一个绑定表 + 管理界面 |
| 线程后续回复容易遗漏 | thread-followups | 读取线程回复和上下文 |
Slack 中会出现嘈杂的最终消息(done 等) | gateway-thread no-done-noise | 网关发布答案并过滤噪声 |
| Agent 需要使用具备真实 DNS 的远程工具 | mcp-toolkit streamable-http | 为 Orchestrate 工具包托管 /mcp |
| 运维人员只能通过克隆轮询器来部署 | ops-self-serve | MCP 工具 + 诊断 + 日志 |
| Slack 运维仅能在 Slack / WxO UI 中进行 | ide-parity | 在 Cursor、VS Code、Bob、Antigravity、Claude 中使用相同工具 |
WxO 仍是大脑(大模型、技能、流程)。此网关是 Slack + 路由 + MCP 边缘层。
自带 Agent 框架:docs/frameworks/(LangGraph、LlamaIndex、OpenAI Agents)。
npm / MCP 标识
| npm | @markusvankempen/slack-wxo-mcp-gateway |
| MCP 名称 | io.github.markusvankempen/slack-wxo-mcp-gateway |
| 主题 | mcp · mcp-server · slack · watsonx · watsonx-orchestrate · ibm · wxo · byo-slack · multi-channel · code-engine · streamable-http · cursor · agentic-ai |
完整关键词列表见 package.json,方便用户在 npm 上发现此项目。
发布与运行模式(A–D)
一个包 / 一个镜像 — 选择一种模式(参见 docs/PUBLISH-MODES.md):
flowchart TB
PKG["npm @markusvankempen/slack-wxo-mcp-gateway<br/>+ optional container image"]
PKG --> A["A Local HTTP<br/>:3100 UI + /mcp + poller"]
PKG --> B["B Podman / Docker<br/>:8080"]
PKG --> C["C Code Engine<br/>HTTPS always-on"]
PKG --> D["D IDE stdio<br/>Cursor / VS Code / Bob"]
A --> N["ngrok demo tunnel"]
A & B & C --> R["Remote /mcp clients"]
D --> L["Local MCP session"]
| 模式 | 命令 | 用途 |
|---|---|---|
| A 本地 HTTP | ./scripts/run.sh --mode http | 笔记本电脑上的 UI + /mcp + 轮询器 |
| B Podman/Docker | ./scripts/run.sh --mode podman | 在容器中运行相同的应用 |
| C Code Engine | ./scripts/run.sh --mode ce | 始终在线的 HTTPS |
| D IDE MCP | ./scripts/run.sh --mode ide | Cursor / VS Code stdio 代码片段(+ --exec) |
| Ngrok 演示 | ./scripts/run.sh --mode ngrok | A + 隧道 + WxO 工具包 |
./scripts/run.sh --mode ide # print Cursor + VS Code mcp.json
./scripts/run.sh --mode http # local host :3100
./scripts/run.sh --mode podman # container :8080
./scripts/run.sh --mode ce # IBM Code Engine
详细指南:docs/local-ngrok/ · docs/code-engine/ · docs/ide/
索引:docs/README.md · 设置:SETUP.md
可直接复制粘贴的 IDE JSON:examples/mcp/
Agent 框架(LangGraph · LlamaIndex · OpenAI Agents)
将框架连接到此 MCP — 不要将它们嵌入网关。
| 指南 | 重点 |
|---|---|
docs/frameworks/ | 索引 + 检查清单 |
docs/frameworks/langgraph.md | LangGraph / LangChain |
docs/frameworks/llamaindex.md | LlamaIndex |
docs/frameworks/openai-agents.md | OpenAI Agents SDK |
安装(npm / npx)— 不从此仓库安装
# Hosted HTTP + admin UI (default)
npx -y @markusvankempen/slack-wxo-mcp-gateway
# IDE / stdio MCP
npx -y @markusvankempen/slack-wxo-mcp-gateway --stdio
需要 Node 18+ 和 Python 3.10+。环境变量模板: .env.example。指南:local-ngrok · code-engine。
心智模型
多通道路由:
flowchart LR
S1["#support"] --> G["Gateway bindings"]
S2["#orders"] --> G
S3["#ops"] --> G
G --> WA["WxO agent A"]
G --> WB["WxO agent B"]
G --> WC["WxO agent C"]
消息路径(reply_mode: gateway_thread):
sequenceDiagram
participant U as Slack user
participant Ch as Channel / thread
participant GW as Gateway poller
participant Wx as WxO Runs API
participant Bot as Slack bot reply
U->>Ch: Human message
GW->>Ch: Read new messages / replies
GW->>Wx: Start bound agent run
Wx-->>GW: Agent answer text
GW->>Bot: chat.postMessage in thread
Bot-->>Ch: Clean reply (no done noise)
同一主机还在 /mcp 提供 MCP,并在 / 提供管理 UI。
配置(config.yaml)
| 字段 | 含义 |
|---|---|
slack_channel_id | 例如 C0BHWEZ7NLC |
wxo.agent_id | 目标 Orchestrate Agent |
mode | poll | events | both |
reply_mode | gateway_thread = Runs API 调用后由网关在 Slack 线程中发帖;agent_tools = 仅启动 Agent |
poll_sec / lookback_sec | 轮询器时间设置 |
密钥:使用 ${ENV_VAR}(从 .env 加载)。
端点
| 路径 | 作用 |
|---|---|
/ | 管理 UI |
/mcp | MCP 流式 HTTP |
/slack/events | Slack 事件订阅 |
/health | 存活状态 |
/api/logs | 日志环形缓冲区 |
/api/tools | MCP 工具目录 |
/api/diagnostics | Slack + WxO 检查 |
/api/poll | 执行一次轮询 |
/api/config | 脱敏 JSON / 原始 YAML |
管理仪表板身份验证
GATEWAY_ADMIN_USER=admin
GATEWAY_ADMIN_PASSWORD=choose-a-strong-password
保护 / 和 /api/*。公开: /health、/mcp、/slack/events。
IBM Code Engine
./deploy_code_engine.sh
./test_code_engine.sh
注册工具包:
orchestrate toolkits add -k mcp -n slack_wxo_gateway \
--url "https://YOUR-HOST/mcp" \
--transport streamable_http \
--tools "*"
MCP 工具(14 个)
配置: list_bindings、upsert_binding
Slack: list_slack_channels、list_recent_messages、list_thread_replies、get_message_context、post_thread_reply、set_typing_indicator
WxO: list_wxo_agents、invoke_wxo_agent
运维: poll_once、get_gateway_status、get_recent_logs、run_diagnostics_tool
Bot 权限范围:channels:read、groups:read、reactions:write(添加权限后重新安装 Slack 应用)。
Agent:
| Agent | 作用 |
|---|---|
agent.yaml → slack_gateway_test_agent | 全工具包冒烟测试 |
agents/slack_gateway_ops_agent.yaml | 日常运维 / 路由 |
agents/slack_gateway_answer_agent.yaml | 频道回答(gateway_thread) |
设置(Slack + WxO): SETUP.md — 管理 UI → Setup 中也提供
用例 + 测试计划: USE_CASES.md
发布(npm / GitHub): PUBLISH.md
回复模式
gateway_thread(默认) — 轮询器/Events → Runs API → 网关通过 chat.postMessage 在线程中发帖。使用仅负责回答的 Agent(不包含 done)。
agent_tools — 网关只启动 Agent;Agent 使用自己的 Slack 工具。
Cursor / VS Code / Bob / Antigravity / Claude
See docs/ide/ for each client. Quick remote bridge:
{
"mcpServers": {
"slack-wxo-gateway": {
"command": "npx",
"args": ["-y", "mcp-remote", "https://YOUR-HOST/mcp"]
}
}
}
Package identity:
- npm:
@markusvankempen/slack-wxo-mcp-gateway - MCP:
io.github.markusvankempen/slack-wxo-mcp-gateway - Site: https://markusvankempen.github.io/
License
Apache-2.0 — © Markus van Kempen
https://markusvankempen.github.io/ · https://github.com/markusvankempen
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。