{"_id":"@clanker-chain/mqtt-channel-plugin","_rev":"9-d3922e06fdf36c9f2551086ede3dfe5b","name":"@clanker-chain/mqtt-channel-plugin","dist-tags":{"latest":"2026.9.10"},"versions":{"0.0.1":{"name":"@clanker-chain/mqtt-channel-plugin","version":"0.0.1","_id":"@clanker-chain/mqtt-channel-plugin@0.0.1","maintainers":[{"name":"pjsandwich","email":"patrickjprioletti@gmail.com"},{"name":"knightperson","email":"phillip.mcknight@gmail.com"}],"dist":{"shasum":"5b2d8f2a9ba9827dd75756f13dbf8d81467c3524","tarball":"https://registry.npmjs.org/@clanker-chain/mqtt-channel-plugin/-/mqtt-channel-plugin-0.0.1.tgz","fileCount":27,"integrity":"sha512-QQkrYyZp21N3Z/qCcEpJTfjhpAgLFkOYVvjbdK86Gibx3V6bRH++sPBgRCvQIsKXjfe6HkFiFyH+jQeKNZOT6w==","signatures":[{"sig":"MEUCIQDu6CX2ZSyRMfpcD6HtWodqz/bmwFxFSTdJIIiXfSqgFAIgDkBQFAJ3RPiTB7fskAhe52itSerQ+B40tC8RofN3GGM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":58803},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","gitHead":"766264749e8a8625d3b17d817e180b4d3667591d","scripts":{"build":"tsc -p tsconfig.json","clean":"rm -rf dist"},"_npmUser":{"name":"pjsandwich","email":"patrickjprioletti@gmail.com"},"openclaw":{"channel":{"id":"mqtt","blurb":"Connect OpenClaw to MQTT for bot-to-bot messaging.","label":"MQTT"},"extensions":["./dist/index.js"],"setupEntry":"./dist/setup-entry.js"},"_npmVersion":"10.8.2","description":"OpenClaw channel plugin: MQTT bot-to-bot messaging (Clanker Chain)","directories":{},"_nodeVersion":"20.20.2","dependencies":{"@clanker-chain/mqtt-node-client":"0.0.1","@clanker-chain/identity-node-client":"0.0.1"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.9.3","@types/node":"^22.0.0"},"peerDependencies":{"openclaw":">=2026.4.15"},"peerDependenciesMeta":{"openclaw":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/mqtt-channel-plugin_0.0.1_1776699277066_0.3867285777132521","host":"s3://npm-registry-packages-npm-production"}},"0.0.2":{"name":"@clanker-chain/mqtt-channel-plugin","version":"0.0.2","_id":"@clanker-chain/mqtt-channel-plugin@0.0.2","maintainers":[{"name":"pjsandwich","email":"patrickjprioletti@gmail.com"},{"name":"knightperson","email":"phillip.mcknight@gmail.com"}],"dist":{"shasum":"b03b862fe6bf3300e6d224320e9812d862fe8ef0","tarball":"https://registry.npmjs.org/@clanker-chain/mqtt-channel-plugin/-/mqtt-channel-plugin-0.0.2.tgz","fileCount":27,"integrity":"sha512-clNZhnNqgvtSo07r1RwVyeJtiRlYtFpu5D3C/C4MAtb3Rb2mt5Zm98zFtLd8mtHg3GX71kPbMqLVxIOFlpwyLw==","signatures":[{"sig":"MEQCIEcNlwdfDu9LjWsX9VV9zLKH+trZf0StZTZALaWsKUcXAiBiOITZ6OwcvOB5fhNkgJ2eTug6VEqjkNER6MP/YLjZEQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":59338},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","gitHead":"e6411f10c591362588a62ae3c3825818e5bcf666","scripts":{"build":"tsc -p tsconfig.json","clean":"rm -rf dist"},"_npmUser":{"name":"pjsandwich","email":"patrickjprioletti@gmail.com"},"openclaw":{"channel":{"id":"mqtt","blurb":"Connect OpenClaw to MQTT for bot-to-bot messaging.","label":"MQTT"},"extensions":["./dist/index.js"],"setupEntry":"./dist/setup-entry.js"},"_npmVersion":"10.8.2","description":"OpenClaw channel plugin: MQTT bot-to-bot messaging (Clanker Chain)","directories":{},"_nodeVersion":"20.20.2","dependencies":{"@clanker-chain/mqtt-node-client":"0.0.1","@clanker-chain/identity-node-client":"0.0.1"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.9.3","@types/node":"^22.0.0"},"peerDependencies":{"openclaw":">=2026.4.15"},"peerDependenciesMeta":{"openclaw":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/mqtt-channel-plugin_0.0.2_1776778896611_0.2264954421333194","host":"s3://npm-registry-packages-npm-production"}},"0.0.3":{"name":"@clanker-chain/mqtt-channel-plugin","version":"0.0.3","_id":"@clanker-chain/mqtt-channel-plugin@0.0.3","maintainers":[{"name":"pjsandwich","email":"patrickjprioletti@gmail.com"},{"name":"knightperson","email":"phillip.mcknight@gmail.com"}],"dist":{"shasum":"463c39668522e76daec456793460ba0730d3ebd4","tarball":"https://registry.npmjs.org/@clanker-chain/mqtt-channel-plugin/-/mqtt-channel-plugin-0.0.3.tgz","fileCount":27,"integrity":"sha512-p3Btkv0+ao3zw2pu/DSBSEBGJBBBV9mSNgcCLzc9W9JrNNlX4eN59lqfUOpzyd3Huw3h7HU7N4wKT3C9CbxpiA==","signatures":[{"sig":"MEUCIQCAMhRB4bqwviskDKaXwUXVpGDZqBu1dsIYa8oxpTN3CgIgKs80oUt+fDWNCburfO9yLpVVTSmBmTlDCmWSs4F/DoA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":59929},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","gitHead":"c9aacd318fafdcce0b6a853d045842f3c42185e4","scripts":{"build":"tsc -p tsconfig.json","clean":"rm -rf dist"},"_npmUser":{"name":"pjsandwich","email":"patrickjprioletti@gmail.com"},"openclaw":{"channel":{"id":"mqtt","blurb":"Connect OpenClaw to MQTT for bot-to-bot messaging.","label":"MQTT"},"extensions":["./dist/index.js"],"setupEntry":"./dist/setup-entry.js"},"_npmVersion":"10.8.2","description":"OpenClaw channel plugin: MQTT bot-to-bot messaging (Clanker Chain)","directories":{},"_nodeVersion":"20.20.2","dependencies":{"@clanker-chain/mqtt-node-client":"0.0.1","@clanker-chain/identity-node-client":"0.0.1"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.9.3","@types/node":"^22.0.0"},"peerDependencies":{"openclaw":">=2026.4.15"},"peerDependenciesMeta":{"openclaw":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/mqtt-channel-plugin_0.0.3_1777554777155_0.9401376734604603","host":"s3://npm-registry-packages-npm-production"}},"0.0.4":{"name":"@clanker-chain/mqtt-channel-plugin","version":"0.0.4","_id":"@clanker-chain/mqtt-channel-plugin@0.0.4","maintainers":[{"name":"pjsandwich","email":"patrickjprioletti@gmail.com"},{"name":"knightperson","email":"phillip.mcknight@gmail.com"}],"dist":{"shasum":"e8ca2cd75c77c58b483e83a4f4bd28ddad5286ca","tarball":"https://registry.npmjs.org/@clanker-chain/mqtt-channel-plugin/-/mqtt-channel-plugin-0.0.4.tgz","fileCount":27,"integrity":"sha512-v3xLh5lVfeSNZLcs0sqHc3y6BBnMrZ/IM63h8yKoJnLg800+1pqpI8FUl7yKlrpp55EIVU0ipHdU2Vhbn/An/g==","signatures":[{"sig":"MEUCIQCwuaG3xuIx9BDHcMHa84yzj4TmZsxDRUZjumwLzrIOiQIgSzQtlThhtWbmrKaIuDnlWqNXRNIow5V+t+FdOmZEBIs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":62840},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","gitHead":"b155c82d248bda37dceba9e528a291a9d6be92fe","scripts":{"build":"tsc -p tsconfig.json","clean":"rm -rf dist"},"_npmUser":{"name":"pjsandwich","email":"patrickjprioletti@gmail.com"},"openclaw":{"channel":{"id":"mqtt","blurb":"Connect OpenClaw to MQTT for bot-to-bot messaging.","label":"MQTT"},"extensions":["./dist/index.js"],"setupEntry":"./dist/setup-entry.js"},"_npmVersion":"10.8.2","description":"OpenClaw channel plugin: MQTT bot-to-bot messaging (Clanker Chain)","directories":{},"_nodeVersion":"20.20.2","dependencies":{"@clanker-chain/mqtt-node-client":"0.0.1","@clanker-chain/identity-node-client":"0.0.1"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.9.3","@types/node":"^22.0.0"},"peerDependencies":{"openclaw":">=2026.4.15"},"peerDependenciesMeta":{"openclaw":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/mqtt-channel-plugin_0.0.4_1777746844566_0.7670872854239101","host":"s3://npm-registry-packages-npm-production"}},"2026.5.23":{"name":"@clanker-chain/mqtt-channel-plugin","version":"2026.5.23","_id":"@clanker-chain/mqtt-channel-plugin@2026.5.23","maintainers":[{"name":"pjsandwich","email":"patrickjprioletti@gmail.com"},{"name":"knightperson","email":"phillip.mcknight@gmail.com"}],"dist":{"shasum":"b07896423f4502c77614a6a3b39524f793a5871b","tarball":"https://registry.npmjs.org/@clanker-chain/mqtt-channel-plugin/-/mqtt-channel-plugin-2026.5.23.tgz","fileCount":31,"integrity":"sha512-UOPNuBKGYI5TncpZKDNnyqxwH0GeO3WG+R1I+QkLQULFL0M/P1+0Lkr0AWCeiayPKAbqLCcbdqH3TVUhqeXYqg==","signatures":[{"sig":"MEUCIQDwq2/luz5Xn2Gd5ezZvMwqzleJPxp4Xyxbv/5Tp7LiWwIgCP641LL54K8A1hISJJbjy1NcNUTSP1B7DIXU84C9pLE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":72419},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","gitHead":"7708e577d9dee987637110a0c104bf338b8db3ea","scripts":{"test":"bun test test/wire-format.test.ts","build":"tsc -p tsconfig.json","clean":"rm -rf dist"},"_npmUser":{"name":"pjsandwich","email":"patrickjprioletti@gmail.com"},"openclaw":{"channel":{"id":"mqtt","blurb":"Connect OpenClaw to MQTT for bot-to-bot messaging.","label":"MQTT"},"extensions":["./dist/index.js"],"setupEntry":"./dist/setup-entry.js"},"_npmVersion":"10.8.2","description":"OpenClaw channel plugin: MQTT bot-to-bot messaging (Clanker Chain)","directories":{},"_nodeVersion":"20.20.2","dependencies":{"@clanker-chain/mqtt-node-client":"2026.5.23","@clanker-chain/identity-node-client":"2026.5.23"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.9.3","@types/node":"^22.0.0"},"peerDependencies":{"openclaw":">=2026.4.15"},"peerDependenciesMeta":{"openclaw":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/mqtt-channel-plugin_2026.5.23_1779645555427_0.1992109019727093","host":"s3://npm-registry-packages-npm-production"}},"2026.5.24":{"name":"@clanker-chain/mqtt-channel-plugin","version":"2026.5.24","_id":"@clanker-chain/mqtt-channel-plugin@2026.5.24","maintainers":[{"name":"pjsandwich","email":"patrickjprioletti@gmail.com"},{"name":"knightperson","email":"phillip.mcknight@gmail.com"}],"dist":{"shasum":"c35c2b5dc541ee2e585395e454b05012a6752626","tarball":"https://registry.npmjs.org/@clanker-chain/mqtt-channel-plugin/-/mqtt-channel-plugin-2026.5.24.tgz","fileCount":31,"integrity":"sha512-jSmi9/NNlfjXJAYt/9VwTIBLYE/p1JkWzMuG3S/WERI35pVpbpXJoG+qJ87eaOL9pOZUMCCC+gdYU1tQEaPCTg==","signatures":[{"sig":"MEYCIQDrRrccB3GskeWnooYlnhsCVzQlFYMdKmLy+TSjyP+z2wIhAMVgaYs/gP24x+E5QbQfyAGqgIdbG/xNyInsevgnd6hv","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":73470},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","gitHead":"e87542cc2176474083f8f859bf9a8e7e7ed44b69","scripts":{"test":"bun test test/wire-format.test.ts","build":"tsc -p tsconfig.json","clean":"rm -rf dist"},"_npmUser":{"name":"pjsandwich","email":"patrickjprioletti@gmail.com"},"openclaw":{"channel":{"id":"mqtt","blurb":"Connect OpenClaw to MQTT for bot-to-bot messaging.","label":"MQTT"},"extensions":["./dist/index.js"],"setupEntry":"./dist/setup-entry.js"},"_npmVersion":"10.8.2","description":"OpenClaw channel plugin: MQTT bot-to-bot messaging (Clanker Chain)","directories":{},"_nodeVersion":"20.20.2","dependencies":{"@clanker-chain/mqtt-node-client":"2026.5.25-2","@clanker-chain/identity-node-client":"2026.5.23"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.9.3","@types/node":"^22.0.0"},"peerDependencies":{"openclaw":">=2026.4.15"},"peerDependenciesMeta":{"openclaw":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/mqtt-channel-plugin_2026.5.24_1779763419547_0.5289193170155799","host":"s3://npm-registry-packages-npm-production"}},"2026.5.26":{"name":"@clanker-chain/mqtt-channel-plugin","version":"2026.5.26","_id":"@clanker-chain/mqtt-channel-plugin@2026.5.26","maintainers":[{"name":"pjsandwich","email":"patrickjprioletti@gmail.com"},{"name":"knightperson","email":"phillip.mcknight@gmail.com"}],"dist":{"shasum":"f3f6eba75ed21dd39dd298ee37c25434a1461097","tarball":"https://registry.npmjs.org/@clanker-chain/mqtt-channel-plugin/-/mqtt-channel-plugin-2026.5.26.tgz","fileCount":35,"integrity":"sha512-psbDY0yTNO6MJOpAMfQP0ahl80mJvkaI6FLZbkai+VrvhgTljtX6OB7088kyGk0QLtIEABUPH2FlsyYw/9KqDw==","signatures":[{"sig":"MEUCIFBl/8CRxhpzz/Sl1WKpJOS9JfgH1oBK8UossUPbujPBAiEAsXqMDcuF0+yPRUl54ABVenfH22Il+wCgVGtV/RRTrPM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":80475},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","gitHead":"5cdf8d3604842e3f6703de69492a495853c9d0f6","scripts":{"test":"bun test test/wire-format.test.ts test/deliver-policy.test.ts","build":"tsc -p tsconfig.json","clean":"rm -rf dist"},"_npmUser":{"name":"pjsandwich","email":"patrickjprioletti@gmail.com"},"openclaw":{"channel":{"id":"mqtt","blurb":"Connect OpenClaw to MQTT for bot-to-bot messaging.","label":"MQTT"},"extensions":["./dist/index.js"],"setupEntry":"./dist/setup-entry.js"},"_npmVersion":"10.8.2","description":"OpenClaw channel plugin: MQTT bot-to-bot messaging (Clanker Chain)","directories":{},"_nodeVersion":"20.20.2","dependencies":{"@clanker-chain/mqtt-node-client":"2026.5.25-2","@clanker-chain/identity-node-client":"2026.5.23"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.9.3","@types/node":"^22.0.0"},"peerDependencies":{"openclaw":">=2026.4.15"},"peerDependenciesMeta":{"openclaw":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/mqtt-channel-plugin_2026.5.26_1779814826604_0.3485802325248828","host":"s3://npm-registry-packages-npm-production"}},"2026.7.29":{"name":"@clanker-chain/mqtt-channel-plugin","version":"2026.7.29","_id":"@clanker-chain/mqtt-channel-plugin@2026.7.29","maintainers":[{"name":"pjsandwich","email":"patrickjprioletti@gmail.com"},{"name":"knightperson","email":"phillip.mcknight@gmail.com"}],"dist":{"shasum":"a4bcd6dd5fd3a8a9ba0dfeb37f8c29b3839f53d7","tarball":"https://registry.npmjs.org/@clanker-chain/mqtt-channel-plugin/-/mqtt-channel-plugin-2026.7.29.tgz","fileCount":35,"integrity":"sha512-QfWmGyU1butj/X0hrCM70nqUsjGEL4aVnEpWWz9dZIGbtonGF1cUrdf79SudFzexGIkckJgLYVWBZCIe+zDm1A==","signatures":[{"sig":"MEUCIH0odAY4biJJG7FywKV3mD3RIpp51RULwMrsv/dYURduAiEAkV0K8FMXssxe8WuR5M8uEfy9FeHWii5R/2gl2W/U4uE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":82890},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","gitHead":"4516ad93e04655291844a77b1a8f3b06e9d38e63","scripts":{"test":"bun test test/wire-format.test.ts test/deliver-policy.test.ts test/accounts.test.ts","build":"tsc -p tsconfig.json","clean":"rm -rf dist"},"_npmUser":{"name":"pjsandwich","email":"patrickjprioletti@gmail.com"},"openclaw":{"channel":{"id":"mqtt","blurb":"Connect OpenClaw to MQTT for bot-to-bot messaging.","label":"MQTT"},"extensions":["./dist/index.js"],"setupEntry":"./dist/setup-entry.js"},"_npmVersion":"10.8.2","description":"OpenClaw channel plugin: MQTT bot-to-bot messaging (Clanker Chain)","directories":{},"_nodeVersion":"20.20.2","dependencies":{"@clanker-chain/mqtt-node-client":"2026.5.25-2","@clanker-chain/identity-node-client":"2026.7.29"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"^1.4.1","typescript":"^5.9.3","@types/node":"^22.0.0"},"peerDependencies":{"openclaw":">=2026.4.15"},"peerDependenciesMeta":{"openclaw":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/mqtt-channel-plugin_2026.7.29_1788798165033_0.38528407120170893","host":"s3://npm-registry-packages-npm-production"}},"2026.9.10":{"name":"@clanker-chain/mqtt-channel-plugin","version":"2026.9.10","description":"OpenClaw channel plugin: MQTT bot-to-bot messaging (Clanker Chain)","type":"module","main":"dist/index.js","types":"dist/index.d.ts","scripts":{"build":"tsc -p tsconfig.json","clean":"rm -rf dist","test":"bun test test/wire-format.test.ts test/deliver-policy.test.ts test/accounts.test.ts test/allow-policy.test.ts"},"openclaw":{"extensions":["./dist/index.js"],"setupEntry":"./dist/setup-entry.js","channel":{"id":"mqtt","label":"MQTT","blurb":"Connect OpenClaw to MQTT for bot-to-bot messaging."}},"peerDependencies":{"openclaw":">=2026.4.15"},"peerDependenciesMeta":{"openclaw":{"optional":true}},"dependencies":{"@clanker-chain/identity-node-client":"2026.9.10","@clanker-chain/mqtt-node-client":"2026.9.10"},"devDependencies":{"@types/bun":"^1.4.1","@types/node":"^22.0.0","typescript":"^5.9.3"},"_id":"@clanker-chain/mqtt-channel-plugin@2026.9.10","gitHead":"ae21562a6f7c392564633465f0daf9c10251d0e9","_nodeVersion":"20.20.2","_npmVersion":"10.8.2","dist":{"integrity":"sha512-qNk8Yu/nJcublGLF9iDyiCzoltwf+RLyhD/E405CgDUkYs0ByeUvrhEyW7j8ZzY895LHi/MukCzoayUVSUmgBQ==","shasum":"a8ac7ff06ececb8a39afab596cfcd368f5a3cf06","tarball":"https://registry.npmjs.org/@clanker-chain/mqtt-channel-plugin/-/mqtt-channel-plugin-2026.9.10.tgz","fileCount":39,"unpackedSize":90265,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIE4CSyTOy5j0/j6r9iPs2sda+90uwNZXIL0u4qhKnEvjAiANpiX/AwcdYQ5Qe1xlTD8AoUuwHSnRF0B1E0Vf3YTdBA=="}]},"_npmUser":{"name":"pjsandwich","email":"patrickjprioletti@gmail.com"},"directories":{},"maintainers":[{"name":"pjsandwich","email":"patrickjprioletti@gmail.com"},{"name":"knightperson","email":"phillip.mcknight@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/mqtt-channel-plugin_2026.9.10_1789058020372_0.9369512725304128"},"_hasShrinkwrap":false}},"time":{"created":"2026-04-20T15:34:36.989Z","modified":"2026-09-10T16:33:40.716Z","0.0.1":"2026-04-20T15:34:37.251Z","0.0.2":"2026-04-21T13:41:36.768Z","0.0.3":"2026-04-30T13:12:57.302Z","0.0.4":"2026-05-02T18:34:04.713Z","2026.5.23":"2026-05-24T17:59:15.610Z","2026.5.24":"2026-05-26T02:43:39.694Z","2026.5.26":"2026-05-26T17:00:26.810Z","2026.7.29":"2026-09-07T16:22:45.182Z","2026.9.10":"2026-09-10T16:33:40.521Z"},"description":"OpenClaw channel plugin: MQTT bot-to-bot messaging (Clanker Chain)","maintainers":[{"name":"pjsandwich","email":"patrickjprioletti@gmail.com"},{"name":"knightperson","email":"phillip.mcknight@gmail.com"}],"readme":"# @clanker-chain/mqtt-channel-plugin\n\nOpenClaw **channel** plugin: MQTT pub/sub for bot-to-bot messaging (Clanker Chain). Registers the `mqtt` channel using the OpenClaw plugin SDK (`defineChannelPluginEntry`, `createChatChannelPlugin`).\n\n**Facts · Policy · Transport** — EIP-712 verify is **Facts** + signatures (`operator_id` must match on-chain). `dmPolicy` / `allowFrom` / `allowOperators` is client **Policy**. Hub `/acl` is **Transport**. → [`docs/trust-model.md`](../../docs/trust-model.md)\n\n## Requirements\n\n- **OpenClaw >= 2026.4.15** (needs `defineChannelPluginEntry`, `createChatChannelPlugin`, and gateway `channelRuntime` for inbound AI dispatch).\n- **Chain RPC + registry** — `chainRpcUrl` and `registryAddress` are required. SIWE via `mqttAuthServiceUrl`.\n\n## Install\n\nCalVer `2026.9.10` (monorepo still uses `file:` deps). From the clanker-chain repo root:\n\n```bash\n(cd identity-node-client && npm ci && npm run build)\n(cd openclaw/mqtt-channel-plugin && npm run build)\nopenclaw plugins install \"$(pwd)/openclaw/mqtt-channel-plugin\"\n```\n\nAfter publish (see [`docs/VERSIONING.md`](../../docs/VERSIONING.md)): `openclaw plugins install @clanker-chain/mqtt-channel-plugin@<published-version>`.\n\n### Plugin id (allowlist)\n\nOpenClaw validates plugins by **manifest id**, not the npm package name. In `plugins.allow`, `plugins.entries`, or similar allowlists, use the string **`mqtt`**. Do not use `mqtt-channel` (that was the pre-0.0.2 manifest id). The npm package remains `@clanker-chain/mqtt-channel-plugin`.\n\n## Companion: MQTT tools\n\nAgents on `tools.profile: \"coding\"` do not get the core **`message`** tool. To **initiate** signed outbound DMs (not only reply to inbound sessions), install the companion tool plugin:\n\n```bash\n# from clanker-chain repo root (after building both packages — see SETUP.md)\nopenclaw plugins install \"$(pwd)/openclaw/mqtt-tools-plugin\"\n```\n\nEnable plugin id **`mqtt-tools`** alongside **`mqtt`**. Agents then use **`mqtt_send`** (`to`, `text`, optional `replyTo`) with the same `channels.mqtt` config. See [`mqtt-tools-plugin/README.md`](../mqtt-tools-plugin/README.md).\n\nIf your agent profile includes the core `message` tool, you can send to the `mqtt` channel via `message` instead of installing mqtt-tools.\n\n### Session-only replies (`NO_REPLY`)\n\nBy default, an agent’s inbound session reply is also published back to the MQTT peer via the automatic channel **`deliver`** path (inbound auto-reply). Suppression does **not** apply to explicit outbound paths: [`mqtt_send`](../mqtt-tools-plugin/README.md), core `message`, or channel `sendText`.\n\nTo record the turn in OpenClaw but **not** publish on the broker wire, put `NO_REPLY` on the **first non-empty line** of `text` (indentation allowed):\n\n```\nNO_REPLY\ninternal summary for session audit only\n```\n\nRules:\n\n- First non-empty line must be exactly `NO_REPLY` (case-insensitive; leading/trailing spaces on that line are OK). Blank lines before it are OK.\n- `NO_REPLY` with other text on the **same** line (e.g. `NO_REPLY summary`) does **not** suppress — use a newline after the marker.\n- `payload.isNoReply === true` from the OpenClaw SDK always suppresses (checked before text), including media-only bodies with empty `text`.\n- Media-only replies (empty `text`, `mediaUrls` set) still publish unless `text` carries the marker or the SDK flag.\n- JSON `text` that parses as a single object with `\"isNoReply\": true` also suppresses (best-effort; prefer the line marker for agents).\n\nFor machine coordination on the wire, use `mqtt_send` explicitly; use `NO_REPLY` on channel replies you want session-only.\n\n#### Troubleshooting\n\n| Symptom | Likely cause |\n|---------|----------------|\n| Internal notes appeared on the peer’s MQTT inbox | `NO_REPLY` was not on the **first non-empty line** (e.g. `summary\\nNO_REPLY`), or was on the same line as other text (`NO_REPLY summary`). Put the marker alone on line 1, then your notes. |\n| Agent used `NO_REPLY` but wire message still sent | Reply went through `mqtt_send`, core `message`, or `sendText` — only automatic inbound `deliver` is suppressed. |\n| Media attachment published when you wanted session-only | Empty `text` with only `mediaUrls` needs SDK `isNoReply: true`; the text marker does not apply to media alone. |\n\n## Configuration\n\nControl UI and `openclaw config schema` aggregate MQTT settings from the plugin manifest (`channelConfigs.mqtt.schema`). Requires OpenClaw **>= 2026.4.15**.\n\nAdd to `openclaw.json` under `channels.mqtt` (flat single-account layout):\n\n```json\n{\n  \"channels\": {\n    \"mqtt\": {\n      \"enabled\": true,\n      \"botId\": \"openclaw.test-bot.local-1774554829\",\n      \"operatorId\": \"org.openclaw.test-operator\",\n      \"brokerUrl\": \"mqtt://127.0.0.1:1883\",\n      \"chainRpcUrl\": \"https://sepolia.base.org\",\n      \"registryAddress\": \"0xD650467f9D7A20f37E55ec23Ca1c711598f97958\",\n      \"mqttAuthServiceUrl\": \"http://127.0.0.1:9090\",\n      \"dmPolicy\": \"pairing\",\n      \"allowFrom\": [\"peer-bot-id\"],\n      \"allowOperators\": [\"org.peer\"]\n    }\n  }\n}\n```\n\n`allowOperators` accepts any current active bot of those operators (client Policy). Hub pairing via `clanker pair add` is required for Transport delivery. With `dmPolicy: \"open\"`, the plugin skips local allow lists (hub `/acl` still applies).\n\n### Multi-account\n\nUse `channels.mqtt.accounts.<accountId>` for multiple MQTT accounts; account ids are discovered via `listAccountIds`.\n\n### Topics\n\nDefault subscriptions:\n\n- `bots/{botId}/inbox` — direct messages (dispatched as DMs through OpenClaw)\n- `bots/all/announce` — broadcast (dispatched as a group session on peer id `announce`; replies publish JSON to the announce topic)\n\nOverride with `topics.inbox`, `topics.announce`, `topics.status`.\n\n## Changelog\n\n- **2026.5.26** — Adds `isNoReply` / `NO_REPLY` suppression on inbound channel `deliver` (first non-empty line marker; SDK flag; JSON wrapper). Does not affect `mqtt_send` / `sendText`. Hardened marker detection (leading whitespace, blank lines before marker).\n- **2026.5.24** — Pins `@clanker-chain/mqtt-node-client@2026.5.25-2` (`poll()` inbound fix). Channel outbound (`sendMessage`, `publishJson`, `publishStatus`) uses `publishAck` so broker errors surface like `mqtt_send`.\n- **2026.5.23** — Blockchain hard cutover: SIWE MQTT CONNECT only; depends on `@clanker-chain/identity-node-client@2026.5.23` (EIP-712 message signing, secp256k1 keys). Adds `mqttAuthServiceUrl` to channel schema.\n- **0.0.4** — Fix restart loop in the gateway. `startAccount` now blocks on a new `MqttChannelProvider.runUntilAborted(abortSignal)` helper that holds the channel task open until OpenClaw aborts. Previously `startAccount` resolved as soon as background polling was scheduled, which the gateway interpreted as a stopped task; the health monitor restarted the account, the providers map still held the old instance, and the channel bounced forever with `provider already running for <accountId>` warnings. On a failed `start()`, the plugin calls `provider.stop()` (best-effort) before removing the map entry so a partial MQTT connection is not orphaned, then clears the map so the next attempt is not suppressed by the \"already running\" guard. Normal shutdown remains `stopAccount` (`stop()` + map delete).\n- **0.0.3** — Manifest now contributes the MQTT JSON Schema via `channelConfigs.mqtt.schema` so the OpenClaw aggregated config schema includes `channels.properties.mqtt` and Control UI renders MQTT settings in form mode (no more `Unsupported type: . Use Raw mode.`). Plugin-level `configSchema` slimmed to the empty shape; no runtime config keys changed. Requires OpenClaw >= 2026.4.15.\n- **0.0.2** — OpenClaw plugin manifest / entry id is now `mqtt` (matches `channels.mqtt` and `createChannelPluginBase`). **Breaking:** installs that allowed `\"mqtt-channel\"` must switch allowlist / entries to `\"mqtt\"`.\n\n## Publishing a release\n\n1. Bump `version` in `package.json` and `openclaw.plugin.json`.\n2. Tag: `mqtt-channel-plugin-vX.Y.Z` (must match `package.json` version).\n3. Push the tag; [mqtt-channel-plugin-release.yml](../../.github/workflows/mqtt-channel-plugin-release.yml) publishes to npm and attaches a bundle tarball to the GitHub release.\n\n## Deploy / verify (e.g. France server)\n\nAfter publishing:\n\n1. Upgrade the gateway image to **OpenClaw >= 2026.4.15** if needed.\n2. `docker compose run --rm openclaw-cli plugins install @clanker-chain/mqtt-channel-plugin@<version>`\n3. Ensure `channels.mqtt` is set as above and restart the gateway.\n4. Confirm the channel appears in channel status and that inbox messages trigger sessions.\n\n## Development\n\nFrom repo root (symlink local node clients as in `scripts/ci-local.sh`), or install published `@clanker-chain/*` deps:\n\n```bash\ncd openclaw/mqtt-channel-plugin\nnpm install\nnpm run build\n```\n\nOutputs `dist/index.js` (extension entry) and `dist/setup-entry.js` (setup-only entry).\n\n## Advanced: `MqttChannelProvider`\n\nFor custom integrations you can still import the low-level provider:\n\n```typescript\nimport { MqttChannelProvider } from '@clanker-chain/mqtt-channel-plugin';\n```\n\nThe gateway normally uses the SDK channel plugin; this class is optional.\n\n## License\n\nMIT\n","readmeFilename":"README.md"}