@partme.ai/openclaw-stomp
v0.1.11
Published
OpenClaw STOMP channel plugin — native TCP STOMP with topic bindings, ACK/NACK and enterprise delivery controls
Downloads
215
Maintainers
Readme
OpenClaw STOMP
OpenClaw channel plugin — native STOMP TCP bridge with enterprise delivery controls
Introduction
@partme.ai/openclaw-stomp is an OpenClaw channel plugin that embeds a native STOMP TCP server (stomp-tcp) and bridges STOMP clients to OpenClaw Agents.
Compared with old drafts, this version is fully aligned with OpenClaw channel SDK entrypoints:
defineChannelPluginEntryfor full runtime registrationdefineSetupPluginEntryfor setup-only lightweight loadingopenclaw.setupEntryinpackage.json
Core capabilities
- STOMP
CONNECT/SEND/SUBSCRIBE/UNSUBSCRIBE/ACK/NACK/DISCONNECT - STOMP 1.0/1.1/1.2 handshake with
CONNECTEDresponse - ACK mode support:
auto,client,client-individual - Prefetch control (
prefetch-count) - Durable subscription behavior (
durable:true+auto-delete:false) - Multi-topic allowlist (
subscribeTopics) - Explicit
topicPattern -> agentIdbinding (topicBindings) - TLS listener support
- Status endpoint:
GET /stomp-tcp/status
Message flow
- STOMP client connects and subscribes one or more topics.
- Client sends
SENDto destination. - Plugin resolves route:
- First: explicit
topicBindings - Fallback: destination-derived agent route
- First: explicit
- Plugin dispatches inbound text to OpenClaw runtime.
- Agent reply is published to
replyDestination(bound topic or session topic). - For
client/client-individual, reply delivery waits forACKunder prefetch limits.
Session isolation (session.dmScope compatible)
The plugin does not introduce a custom session-scope setting.
It follows OpenClaw native session configuration directly:
session.dmScope: "main"session.dmScope: "per-peer"session.dmScope: "per-channel-peer"session.dmScope: "per-account-channel-peer"
Session-key partitioning is driven only by session.dmScope.
Quick start
Prerequisites
- OpenClaw
>= 2026.4.x - Node.js
22+
Install
openclaw plugins install @partme.ai/openclaw-stompMinimal config example (openclaw.json)
{
"channels": {
"stomp-tcp": {
"port": 61613,
"tlsPort": 61614,
"tls": {
"enabled": false
},
"maxConnections": 1000,
"maxFrameSize": 4194304,
"defaultAckMode": "auto",
"prefetchCount": 100,
"subscribeTopics": [
"devices/*/in",
"openclaw/agent/*/in"
],
"topicBindings": [
{
"topicPattern": "devices/*/in",
"agentId": "iot-agent",
"accountId": "default",
"replyTopic": "/topic/devices/reply"
}
],
"auth": {
"required": false
}
}
}
}Configuration reference
| Key | Type | Default | Description |
| --- | --- | --- | --- |
| port | number | 61613 | STOMP TCP listener |
| tlsPort | number | 61614 | STOMP TLS listener (0 disables TLS port) |
| tls.enabled | boolean | false | Enable TLS listener |
| tls.certFile / tls.keyFile / tls.caFile | string | - | TLS certificate files |
| heartbeat.serverMs / heartbeat.clientMs | number | 10000 | Heartbeat negotiation values |
| maxConnections | number | 1000 | TCP max connections |
| maxFrameSize | number | 4194304 | Max frame bytes |
| auth.required | boolean | true | Require auth on CONNECT |
| auth.defaultUser / auth.defaultPass | string | - | Optional default credentials |
| subscribeTopics | string[] | [] | Inbound destination allowlist |
| topicBindings | object[] | [] | Explicit topic to agent mappings |
| defaultAckMode | enum | auto | Default subscription ack mode |
| prefetchCount | number | 100 | Default subscription prefetch |
Test
Unit tests
npm testSTOMP test client
npm run test:clientEnvironment variables:
STOMP_HOST,STOMP_PORT,STOMP_TIMEOUT_MSSTOMP_TEST_SUBSCRIBE_TOPICSSTOMP_TEST_PUBLISH_CASES(JSON array)STOMP_TEST_DEST_1,STOMP_TEST_DEST_2STOMP_TEST_BODY_1,STOMP_TEST_BODY_2
Status API
GET /stomp-tcp/status returns:
- connection list
- version distribution
- snapshot counters: inbound/outbound routed, dropped messages, pending ACK
CI and release
| Workflow | Trigger | Purpose |
| --- | --- | --- |
| .github/workflows/ci.yml | push/PR to main/master | typecheck + build + test + dist artifact |
| .github/workflows/release.yml | tag v* / manual dispatch | package + test + npm publish |
Release playbook: RELEASING.md
OpenClaw plugin docs
Plugins
- https://docs.openclaw.ai/tools/plugin
- https://docs.openclaw.ai/plugins/community
- https://docs.openclaw.ai/plugins/bundles
- https://docs.openclaw.ai/plugins/voice-call
Building plugins
- https://docs.openclaw.ai/plugins/building-plugins
- https://docs.openclaw.ai/plugins/sdk-channel-plugins
- https://docs.openclaw.ai/plugins/sdk-provider-plugins
- https://docs.openclaw.ai/plugins/sdk-migration
SDK reference
- https://docs.openclaw.ai/plugins/sdk-overview
- https://docs.openclaw.ai/plugins/sdk-entrypoints
- https://docs.openclaw.ai/plugins/sdk-runtime
- https://docs.openclaw.ai/plugins/sdk-setup
- https://docs.openclaw.ai/plugins/sdk-testing
- https://docs.openclaw.ai/plugins/manifest
- https://docs.openclaw.ai/plugins/architecture
RabbitMQ STOMP reference
- https://www.rabbitmq.com/docs/stomp
License
MIT
