The full upstream README, mirrored here for reference. Install config, tool schemas, adoption signals, and an original overview live on the Slack ↔ WxO MCP Gateway listing page.
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
| 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 | @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.
One package / one image — pick a mode (see docs/PUBLISH-MODES.md):
| 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 |
Deep guides: docs/local-ngrok/ · docs/code-engine/ · docs/ide/
Index: docs/README.md · Setup: SETUP.md
Copy-paste IDE JSON: examples/mcp/
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 |
Requires Node 18+ and Python 3.10+. Env template: .env.example. Guides: local-ngrok · code-engine.
Multi-channel routing:
Message path (reply_mode: gateway_thread):
Same host also serves MCP at /mcp and the admin UI at /.
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).
| 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 |
Protects / and /api/*. Public: /health, /mcp, /slack/events.
Register the toolkit:
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.yaml → slack_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
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.
See docs/ide/ for each client. Quick remote bridge:
Package identity:
@markusvankempen/slack-wxo-mcp-gatewayio.github.markusvankempen/slack-wxo-mcp-gatewayApache-2.0 — © Markus van Kempen
https://markusvankempen.github.io/ · https://github.com/markusvankempen