Skip to main content
@komaa/openclaw-msteams-bridge is a self-contained Teams CVI plugin for OpenClaw. It depends only on the published openclaw plugin-sdk + api.runtime - no fork, no vendored runtime.
This adds voice/video (CVI) on top of OpenClaw’s existing Microsoft Teams chat channel - run both for chat + calls.

Requirements

  • An OpenClaw install - host 2026.6.9.
  • A StandIn subscription (standin.komaa.com, free package) - the hosted media bridge that joins the Teams call and connects to this plugin. See Architecture.
  • Realtime mode: a realtime voice provider + key. Streaming mode: your openclaw-configured STT / TTS / agent (no realtime key needed).

Install

The package ships prebuilt (v0.1.10+): no build step, install and go.
Also on ClawHub: openclaw plugins install clawhub:@komaa/openclaw-msteams-bridge - OpenClaw falls back to npm automatically if the ClawHub fetch fails. See the plugin README.

Verify

Once installed, enable it in your config (plugins.entries."msteams-voice".config.enabled: true) and start the gateway:
The plugin registers a host-managed service and binds its media WebSocket (default ws://<host>:9442/voice/msteams/stream).

Expose the WebSocket (Agent voice URL)

StandIn connects to your plugin from the internet, so port 9442 must be reachable - a public host, or a tunnel. With Tailscale Funnel, put voice on the 8443 slot (this is what the installer does, and it keeps the 443 slot free for the Teams chat webhook):
Your Agent voice URL is then:
Register that URL (with a matching sharedSecret) in the StandIn sandbox or on your identity in the dashboard, then place a Teams call to your bot. Include the port - a bare host means the 443 slot, which is normally your chat webhook, not voice.
Funnel serves up to 3 external ports (443, 8443, 10000). The usual layout on one machine: 443 -> 3978 (Teams chat webhook), 8443 -> 9442 (OpenClaw voice). Running the Hermes plugin too? Put it on the remaining slot: tailscale funnel --bg --https=10000 8443wss://<machine>.<tailnet>.ts.net:10000/voice/msteams/stream, and register each runtime as its own agent with its own secret.
Next: the full configuration reference for realtime, streaming, outbound, and security keys.

Source

npm

Configuration