Slack ↔ WxO MCP Gateway

Slack ↔ WxO MCP Gateway

MCP gateway that lifts watsonx Orchestrate Slack limitations — every-message wake-up, multi-channel→multi-agent routing, clean in-thread replies, and a streamable-http toolkit for WxO + Cursor / VS Code / Bob / Antigravity — without replacing your agents.

Category
访问服务器

README

Slack ↔ WxO MCP Gateway

Author: Markus van Kempen
Email: mvankempen@ca.ibm.com · markus.van.kempen@gmail.com
Web: https://markusvankempen.github.io/ · GitHub

npm: @markusvankempen/slack-wxo-mcp-gateway · MCP: io.github.markusvankempen/slack-wxo-mcp-gateway

This GitHub repo is documentation + registry metadata. It does not include the runnable application source.
Install / run via npm: npx -y @markusvankempen/slack-wxo-mcp-gateway · Site: https://markusvankempen.github.io/

Pitch: MCP gateway that lifts watsonx Orchestrate Slack limitations — every-message wake-up, multi-channel→multi-agent routing, clean in-thread replies, and a streamable-http toolkit for WxO + Cursor / VS Code / Bob / Antigravity — without replacing your agents.

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

One config site: map many Slack channels → many WxO agents.
Poller (and optional Slack Events) wake agents.
Same host exposes an MCP toolkit (/mcp) for WxO / Cursor / other clients.

Deep dive: Why this MCP — lifting WxO limits

Architecture at a glance

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

Why this approach (WxO limits → lift)

WxO / Slack limit Tag Gateway lift
byo_slack ≈ @mention / DM only every-message Poller / Events wake agents on every human message
Hard to run many channels → many agents multi-channel multi-agent One bindings table + admin UI
Thread follow-ups easy to drop thread-followups Reads thread replies + context
Noisy finals (done, etc.) in Slack gateway-thread no-done-noise Gateway posts answers; filters noise
Agents need remote tools with real DNS mcp-toolkit streamable-http Hosted /mcp for Orchestrate toolkits
Ops stuck cloning pollers ops-self-serve MCP tools + diagnostics + logs
Slack ops only inside Slack/WxO UI ide-parity Same tools in Cursor, VS Code, Bob, Antigravity, Claude

WxO stays the brain (LLMs, skills, flows). This gateway is the Slack + routing + MCP edge.
Bring-your-own agent frameworks: docs/frameworks/ (LangGraph, LlamaIndex, OpenAI Agents).


npm / MCP identity

npm @markusvankempen/slack-wxo-mcp-gateway
MCP name io.github.markusvankempen/slack-wxo-mcp-gateway
Topics mcp · mcp-server · slack · watsonx · watsonx-orchestrate · ibm · wxo · byo-slack · multi-channel · code-engine · streamable-http · cursor · agentic-ai

Full keyword list lives in package.json for npm discoverability.


Publish & run modes (A–D)

One package / one image — pick a mode (see 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"]
Mode Command Use
A Local HTTP ./scripts/run.sh --mode http UI + /mcp + poller on laptop
B Podman/Docker ./scripts/run.sh --mode podman Same app in a container
C Code Engine ./scripts/run.sh --mode ce Always-on HTTPS
D IDE MCP ./scripts/run.sh --mode ide Cursor / VS Code stdio snippets (+ --exec)
Ngrok demo ./scripts/run.sh --mode ngrok A + tunnel + WxO toolkit
./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

Deep guides: docs/local-ngrok/ · docs/code-engine/ · docs/ide/
Index: docs/README.md · Setup: SETUP.md

Copy-paste IDE JSON: examples/mcp/

Agent frameworks (LangGraph · LlamaIndex · OpenAI Agents)

Connect frameworks to this MCP — do not embed them in the gateway.

Guide Focus
docs/frameworks/ Index + checklist
docs/frameworks/langgraph.md LangGraph / LangChain
docs/frameworks/llamaindex.md LlamaIndex
docs/frameworks/openai-agents.md OpenAI Agents SDK

Install (npm / npx) — not from this repo

# Hosted HTTP + admin UI (default)
npx -y @markusvankempen/slack-wxo-mcp-gateway

# IDE / stdio MCP
npx -y @markusvankempen/slack-wxo-mcp-gateway --stdio

Requires Node 18+ and Python 3.10+. Env template: .env.example. Guides: local-ngrok · code-engine.


Mental model

Multi-channel routing:

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"]

Message path (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)

Same host also serves MCP at /mcp and the admin UI at /.


Config (config.yaml)

Field Meaning
slack_channel_id e.g. C0BHWEZ7NLC
wxo.agent_id Target Orchestrate agent
mode poll | events | both
reply_mode gateway_thread = gateway posts Slack thread after Runs API; agent_tools = only start agent
poll_sec / lookback_sec Poller timing

Secrets: use ${ENV_VAR} (loaded from .env).


Endpoints

Path Role
/ Admin UI
/mcp MCP streamable HTTP
/slack/events Slack Event Subscriptions
/health Liveness
/api/logs Log ring buffer
/api/tools MCP tool catalog
/api/diagnostics Slack + WxO checks
/api/poll One poll cycle
/api/config Masked JSON / raw YAML

Admin dashboard auth

GATEWAY_ADMIN_USER=admin
GATEWAY_ADMIN_PASSWORD=choose-a-strong-password

Protects / and /api/*. Public: /health, /mcp, /slack/events.

IBM Code Engine

./deploy_code_engine.sh
./test_code_engine.sh

Register the toolkit:

orchestrate toolkits add -k mcp -n slack_wxo_gateway \
  --url "https://YOUR-HOST/mcp" \
  --transport streamable_http \
  --tools "*"

MCP tools (14)

Config: 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
Ops: poll_once, get_gateway_status, get_recent_logs, run_diagnostics_tool

Bot scopes: channels:read, groups:read, reactions:write (reinstall Slack app after adding).

Agents:

Agent Role
agent.yamlslack_gateway_test_agent Full-toolkit smoke
agents/slack_gateway_ops_agent.yaml Day-2 ops / routing
agents/slack_gateway_answer_agent.yaml Channel answers (gateway_thread)

Setup (Slack + WxO): SETUP.md — also live in admin UI → Setup
Use cases + test plan: USE_CASES.md
Publish (npm / GitHub): PUBLISH.md


Reply modes

gateway_thread (default) — poller/Events → Runs API → gateway chat.postMessage in thread. Use the answer-only agent (no done).

agent_tools — gateway only starts the agent; agent uses its own Slack tools.


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:


License

Apache-2.0 — © Markus van Kempen
https://markusvankempen.github.io/ · https://github.com/markusvankempen

推荐服务器

Baidu Map

Baidu Map

百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。

官方
精选
JavaScript
Playwright MCP Server

Playwright MCP Server

一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。

官方
精选
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。

官方
精选
本地
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。

官方
精选
本地
TypeScript
VeyraX

VeyraX

一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。

官方
精选
本地
graphlit-mcp-server

graphlit-mcp-server

模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。

官方
精选
TypeScript
Kagi MCP Server

Kagi MCP Server

一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。

官方
精选
Python
e2b-mcp-server

e2b-mcp-server

使用 MCP 通过 e2b 运行代码。

官方
精选
Neon MCP Server

Neon MCP Server

用于与 Neon 管理 API 和数据库交互的 MCP 服务器

官方
精选
Exa MCP Server

Exa MCP Server

模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。

官方
精选