unraidclaw 0.1.15 → 0.1.17
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +4 -2
- package/dist/index.js +20 -1
- package/dist/registry.js +20 -1
- package/openclaw.plugin.json +2 -12
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -95,7 +95,7 @@ You don't have to hard-code the key in `openclaw.json`. Two options:
|
|
|
95
95
|
"apiKey": { "source": "file", "provider": "default", "id": "/unraidclaw_key" }
|
|
96
96
|
```
|
|
97
97
|
|
|
98
|
-
`source` is
|
|
98
|
+
`source` is any source your OpenClaw version supports (`env`, `file`, `exec`, and `store` on OpenClaw 2026.9 or later); `provider` names a provider from your `secrets.providers` config; `id` is the lookup key. Both forms also work per-server on `servers[].apiKey`. (Requires unraidclaw 0.1.12+; the `store` source requires 0.1.17+.)
|
|
99
99
|
|
|
100
100
|
## Usage
|
|
101
101
|
|
|
@@ -135,6 +135,8 @@ Once installed and configured, ask your agent:
|
|
|
135
135
|
|
|
136
136
|
`unraid_ca_update` and `unraid_ca_remove` act on an installed app, so their `name` is the container's name from the Docker tab, not the app's name in the catalog. Update keeps the configuration saved on the server and restores the running or stopped state; remove deletes the container and leaves appdata, volumes, the image and the template alone. Both take `dryRun`.
|
|
137
137
|
|
|
138
|
+
`unraid_docker_create` takes `image` plus optional `name`, `ports`, `volumes`, `env`, `restart` and `network`, and the advanced settings of Unraid's container form: `extraArgs` (Extra Parameters, docker run options such as `--gpus all` or `--memory=8g`), `postArgs` (Post Arguments, the container command), `staticIp` (a fixed IPv4 or IPv6 address, which needs a macvlan, ipvlan or custom bridge network), `privileged`, `cpuset` and `devices`. Each is saved to the matching field of the container's template. The two free-form fields accept only letters, digits, `: . , / + = _ -` and single spaces, because Unraid passes them to the shell unescaped when it rebuilds a container. A container created with any of these settings in effect cannot be rebuilt by `unraid_ca_update`, which refuses settings it does not reproduce exactly; use the Docker tab for it.
|
|
139
|
+
|
|
138
140
|
The six plugin tools manage Unraid `.plg` plugins through Unraid's own plugin manager. Installing one runs vendor code as root, checking for an update downloads a plugin file and stages it, and removing one runs the plugin's removal script, which may take its data with it. All four mutating tools take `dryRun`.
|
|
139
141
|
|
|
140
142
|
Tools use the gateway's 30-key `resource:action` permission matrix configured from the Unraid WebGUI. Health requires no permission.
|
|
@@ -147,7 +149,7 @@ Tools use the gateway's 30-key `resource:action` permission matrix configured fr
|
|
|
147
149
|
|
|
148
150
|
## Gateway MCP mode
|
|
149
151
|
|
|
150
|
-
The gateway has an optional MCP endpoint at `/mcp` that serves the same 55 tools to MCP clients. It is off by default and is switched on with **Enable MCP** in the gateway's Settings tab. This plugin does not use it: OpenClaw keeps calling `/api/*` whether MCP is on or off. The tool definitions in this package are shared with the gateway through the `unraidclaw/tools` export, so OpenClaw, MCP and the standalone CLI use the same tools and the `READ_ONLY` set exported by `src/registry.ts`. The CLI, command `unraidclaw`, is attached to each [GitHub release](https://github.com/emaspa/unraidclaw/releases/latest) as `unraidclaw-cli-<version>.tar.gz`; see the [CLI guide](https://github.com/emaspa/unraidclaw/blob/main/packages/cli/README.md). See the [repository README](https://github.com/emaspa/unraidclaw#mcp) for MCP client setup.
|
|
152
|
+
The gateway has an optional MCP endpoint at `/mcp` that serves the same 55 tools to MCP clients. It is off by default and is switched on with **Enable MCP** in the gateway's Settings tab. This plugin does not use it: OpenClaw keeps calling `/api/*` whether MCP is on or off. The tool definitions in this package are shared with the gateway through the `unraidclaw/tools` export, so OpenClaw, MCP and the standalone CLI use the same tools and the `READ_ONLY` set exported by `src/registry.ts`. The CLI, command `unraidclaw`, is published to npm as `unraidclaw-cli` and attached to each [GitHub release](https://github.com/emaspa/unraidclaw/releases/latest) as `unraidclaw-cli-<version>.tar.gz`; see the [CLI guide](https://github.com/emaspa/unraidclaw/blob/main/packages/cli/README.md). See the [repository README](https://github.com/emaspa/unraidclaw#mcp) for MCP client setup.
|
|
151
153
|
|
|
152
154
|
## License
|
|
153
155
|
|
package/dist/index.js
CHANGED
|
@@ -264,7 +264,7 @@ function registerDockerTools(api, getClient) {
|
|
|
264
264
|
});
|
|
265
265
|
api.registerTool({
|
|
266
266
|
name: "unraid_docker_create",
|
|
267
|
-
description: "Create and start a new Docker container on the Unraid server. Specify image, optional name, port mappings, volume mounts, environment variables, restart policy, and network.",
|
|
267
|
+
description: "Create and start a new Docker container on the Unraid server. Specify image, optional name, port mappings, volume mounts, environment variables, restart policy, network, and Unraid's advanced settings: extra docker run options, post arguments, a fixed IP on a custom network, privileged mode, CPU pinning and host devices.",
|
|
268
268
|
parameters: {
|
|
269
269
|
type: "object",
|
|
270
270
|
properties: {
|
|
@@ -291,6 +291,25 @@ function registerDockerTools(api, getClient) {
|
|
|
291
291
|
description: "Restart policy (default: unless-stopped)"
|
|
292
292
|
},
|
|
293
293
|
network: { type: "string", description: "Network to attach the container to" },
|
|
294
|
+
extraArgs: {
|
|
295
|
+
type: "string",
|
|
296
|
+
description: "Extra docker run options, space separated, as Unraid's Extra Parameters field (e.g. '--gpus all', '--cap-add=SYS_ADMIN --memory=8g', '--hostname=media'). Must start with an option. Only letters, digits, : . , / + = _ - and single spaces; no quotes or shell characters."
|
|
297
|
+
},
|
|
298
|
+
postArgs: {
|
|
299
|
+
type: "string",
|
|
300
|
+
description: "Arguments appended after the image as the container command, space separated, as Unraid's Post Arguments field (e.g. '--config /config/app.yml'). Same character rules as extraArgs."
|
|
301
|
+
},
|
|
302
|
+
staticIp: {
|
|
303
|
+
type: "string",
|
|
304
|
+
description: "Fixed IPv4 or IPv6 address for the container (Unraid's Fixed IP field). Needs a user-defined network such as a macvlan, ipvlan or custom bridge; docker refuses it on bridge, host and none."
|
|
305
|
+
},
|
|
306
|
+
privileged: { type: "boolean", description: "Run the container privileged, with full host access (default: false)" },
|
|
307
|
+
cpuset: { type: "string", description: "CPUs the container may run on, as docker --cpuset-cpus reads it (e.g. '0-3,8')" },
|
|
308
|
+
devices: {
|
|
309
|
+
type: "array",
|
|
310
|
+
items: { type: "string" },
|
|
311
|
+
description: "Host devices to pass through, as docker --device reads them (e.g. ['/dev/dri', '/dev/ttyUSB0:/dev/ttyUSB0:rwm'])"
|
|
312
|
+
},
|
|
294
313
|
server: { type: "string", description: "Target server name (optional, uses default server)" }
|
|
295
314
|
},
|
|
296
315
|
required: ["image"]
|
package/dist/registry.js
CHANGED
|
@@ -160,7 +160,7 @@ function registerDockerTools(api, getClient) {
|
|
|
160
160
|
});
|
|
161
161
|
api.registerTool({
|
|
162
162
|
name: "unraid_docker_create",
|
|
163
|
-
description: "Create and start a new Docker container on the Unraid server. Specify image, optional name, port mappings, volume mounts, environment variables, restart policy, and network.",
|
|
163
|
+
description: "Create and start a new Docker container on the Unraid server. Specify image, optional name, port mappings, volume mounts, environment variables, restart policy, network, and Unraid's advanced settings: extra docker run options, post arguments, a fixed IP on a custom network, privileged mode, CPU pinning and host devices.",
|
|
164
164
|
parameters: {
|
|
165
165
|
type: "object",
|
|
166
166
|
properties: {
|
|
@@ -187,6 +187,25 @@ function registerDockerTools(api, getClient) {
|
|
|
187
187
|
description: "Restart policy (default: unless-stopped)"
|
|
188
188
|
},
|
|
189
189
|
network: { type: "string", description: "Network to attach the container to" },
|
|
190
|
+
extraArgs: {
|
|
191
|
+
type: "string",
|
|
192
|
+
description: "Extra docker run options, space separated, as Unraid's Extra Parameters field (e.g. '--gpus all', '--cap-add=SYS_ADMIN --memory=8g', '--hostname=media'). Must start with an option. Only letters, digits, : . , / + = _ - and single spaces; no quotes or shell characters."
|
|
193
|
+
},
|
|
194
|
+
postArgs: {
|
|
195
|
+
type: "string",
|
|
196
|
+
description: "Arguments appended after the image as the container command, space separated, as Unraid's Post Arguments field (e.g. '--config /config/app.yml'). Same character rules as extraArgs."
|
|
197
|
+
},
|
|
198
|
+
staticIp: {
|
|
199
|
+
type: "string",
|
|
200
|
+
description: "Fixed IPv4 or IPv6 address for the container (Unraid's Fixed IP field). Needs a user-defined network such as a macvlan, ipvlan or custom bridge; docker refuses it on bridge, host and none."
|
|
201
|
+
},
|
|
202
|
+
privileged: { type: "boolean", description: "Run the container privileged, with full host access (default: false)" },
|
|
203
|
+
cpuset: { type: "string", description: "CPUs the container may run on, as docker --cpuset-cpus reads it (e.g. '0-3,8')" },
|
|
204
|
+
devices: {
|
|
205
|
+
type: "array",
|
|
206
|
+
items: { type: "string" },
|
|
207
|
+
description: "Host devices to pass through, as docker --device reads them (e.g. ['/dev/dri', '/dev/ttyUSB0:/dev/ttyUSB0:rwm'])"
|
|
208
|
+
},
|
|
190
209
|
server: { type: "string", description: "Target server name (optional, uses default server)" }
|
|
191
210
|
},
|
|
192
211
|
required: ["image"]
|
package/openclaw.plugin.json
CHANGED
|
@@ -97,12 +97,7 @@
|
|
|
97
97
|
],
|
|
98
98
|
"properties": {
|
|
99
99
|
"source": {
|
|
100
|
-
"type": "string"
|
|
101
|
-
"enum": [
|
|
102
|
-
"env",
|
|
103
|
-
"file",
|
|
104
|
-
"exec"
|
|
105
|
-
]
|
|
100
|
+
"type": "string"
|
|
106
101
|
},
|
|
107
102
|
"provider": {
|
|
108
103
|
"type": "string"
|
|
@@ -149,12 +144,7 @@
|
|
|
149
144
|
],
|
|
150
145
|
"properties": {
|
|
151
146
|
"source": {
|
|
152
|
-
"type": "string"
|
|
153
|
-
"enum": [
|
|
154
|
-
"env",
|
|
155
|
-
"file",
|
|
156
|
-
"exec"
|
|
157
|
-
]
|
|
147
|
+
"type": "string"
|
|
158
148
|
},
|
|
159
149
|
"provider": {
|
|
160
150
|
"type": "string"
|
package/package.json
CHANGED