unraidclaw 0.1.15 → 0.1.16

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 CHANGED
@@ -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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "unraidclaw",
3
- "version": "0.1.15",
3
+ "version": "0.1.16",
4
4
  "description": "OpenClaw plugin to manage your Unraid server: Docker, Community Applications, plugins, VMs, array, shares, system, and more.",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",