raidcom-mcp 0.0.0-stage → 0.1.2

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/CHANGELOG.md ADDED
@@ -0,0 +1,57 @@
1
+ # Changelog
2
+
3
+ ## Unreleased
4
+
5
+ ## 0.1.2 — 2026-10-27
6
+
7
+ 0.1.0 and 0.1.1 were withdrawn from npm and can't be published again there; this is the first version on npm since. 0.1.1's GitHub release and Docker image stay available.
8
+
9
+ ### Security
10
+
11
+ - **Script text could carry shell commands through two global options.** `global.pair_type` was written into scripts without a check (`"pair_type": "$(id)"` produced `run raidcom lock resource -I$(id)0`), and `global.instance` was only checked when a step produced at least one command (`"instance": "0;id"` produced `export HORCMINST=0;id`). All global options are now checked once, before anything is written: `pair_type` must be H, M, TC or SI, `instance` and `unit` whole numbers from 0 to 9999, and unknown global options are refused.
12
+ - **A value starting with `#` was written unquoted,** so the shell treated the rest of the line as a comment and dropped options after it, including `-checkmode precheck`. Values containing `#` are now always quoted.
13
+ - **Values that start with `-` and a letter are refused,** so a value such as `"CL1-A-0 -IH9"` can't add options of its own.
14
+ - **LDEV IDs that aren't numbers** (`abc`, `1e+308`) are now errors rather than warnings.
15
+
16
+ ### Fixed
17
+
18
+ - **A request could stop or slow the HTTP server.** A range with numbers above 2^53 made range expansion loop until the process ran out of memory; very long command names took seconds of CPU; large `foreach` and `zip` lists were expanded before the 500-command limit was checked. Ranges now only use exact numbers, lists stop at the limit while they are expanded, and names longer than 64 characters are refused before any matching.
19
+ - **Slow clients could take every HTTP slot.** Clients now have 10 seconds to send headers and 15 to send the whole request, and one address may have at most 8 requests in progress.
20
+ - **Behind a trusted proxy, the rate limit used the client-supplied X-Forwarded-For entry.** `RAIDCOM_HTTP_TRUST_PROXY` now takes the number of proxies in front of the server (`true` still means one), and the client address is the entry that many places from the right, as Express does it. With proxies configured, `/healthz` shows the address the server takes as the caller's, to check the number. The limiter remembers at most 10,000 addresses.
21
+ - **Empty `foreach` or `zip` lists, or a script with no commands,** are errors instead of an empty script reported as success.
22
+ - **`raidcom_check_command`:** the two words after `-login` are always dropped, even when the password starts with `-`; a bare `-I` and a repeated option are reported.
23
+ - **Names such as `constructor` or `__proto__`** in queries, recipe IDs, parameters and option names no longer crash a tool or slip past checks.
24
+ - **`create-dp-pool`:** giving only one of the two thresholds is an error instead of being ignored.
25
+ - **Search confidence:** a tie between the top results is now rated low, and the search evaluation checks that high-confidence results are right at least 85% of the time.
26
+ - **Release pipeline:**
27
+ - the MCP Registry rejected `server.json` (description over 100 characters);
28
+ - the plugin bump never started after automatic releases; Release now starts it once npm has the version;
29
+ - plugin releases no longer become the repository's "latest" release;
30
+ - the CHANGELOG heading checks match the exact version;
31
+ - rebuilding an older release no longer moves the Docker `latest` tag back;
32
+ - the Windows test uses the smoke test from the tag;
33
+ - the Windows package tests run again (the job was missing from 0.1.1's Release workflow);
34
+ - the plugin's lockfile is audited and watched by Dependabot.
35
+
36
+ ## 0.1.1 — 2026-10-26
37
+
38
+ ### Added
39
+
40
+ - **More release packages.** Every release now also has a Claude Desktop extension (`.mcpb`), standalone packages for macOS, Linux and Windows (x64 and arm64) with a Node.js runtime bundled, and a zip of the `raidcom-command-builder` skill, besides the npm package and the Docker image. `SHA256SUMS` covers them all. The Windows packages are tested on Windows x64 and arm64 machines. CI builds the Desktop extension, the skill zip and the Linux x64 standalone package on every pull request and smoke-tests them. INSTALL.md has a section for each.
41
+ - **Claude Code plugin `raidcom-community`** (`plugin/`, listed by `.claude-plugin/marketplace.json`; see README.plugin.md). It installs the server from a pinned npm version and adds the `raidcom-command-builder` skill. It needs no settings. The Plugin release workflow opens a pull request that moves the plugin to each new server release (including the lockfile), and tags `plugin-v<version>` and creates a GitHub release with the plugin zip when that pull request is merged.
42
+ - **Security scanning in CI.** CodeQL (security-extended queries) runs on every pull request, push to `main` and weekly. Dependency review fails a pull request that adds a vulnerable dependency. A Security audit workflow runs `npm audit` on the runtime dependencies and a Trivy scan of the Docker image on pull requests that touch dependencies or the Dockerfile, and weekly.
43
+ - **Recipe `create-mainframe-pool`:** creates a mainframe parity group (always `-emulation 3390-V`, not a parameter), assigns an SSID, creates and quick-formats 3390 LDEVs and makes them a DP pool, with `HORCC_DRIVEOPERATION=1` exported at the top of the script. Recipes can now export environment variables (`env`).
44
+ - **CU:LDEV notation** (`dd:0f`) is accepted for LDEV IDs and range-checked, and ranges such as `dd:00-dd:0f` expand in recipes and scripts.
45
+ - `add parity_grp` accepts `-emulation`, which the manual's syntax line leaves out but mainframe-capable systems use. The generator records it as an addition.
46
+ - **The Release workflow also pushes the image to Docker Hub** (`subramaniamv/raidcom-mcp`) when the `DOCKERHUB_USERNAME` and `DOCKERHUB_TOKEN` repository secrets are set; otherwise it pushes to ghcr.io only.
47
+ - **Build, CI and release pipeline.** CI now also builds the npm package and installs it into an empty folder to check it starts over stdio and HTTP (`npm run package`, `npm run smoke`). Merging a pull request that bumps `version` in `package.json` tags the commit (the Tag release workflow, which requires a matching `CHANGELOG.md` section) and starts the Release workflow: it re-runs the tests, attaches the package and `SHA256SUMS` to a GitHub release, publishes to npm with provenance, lists the version in the MCP Registry and pushes a multi-arch image to ghcr.io.
48
+
49
+ ## 0.1.0
50
+
51
+ First version.
52
+
53
+ - Eight read-only MCP tools: `raidcom_list_commands`, `raidcom_describe_command`, `raidcom_build_command`, `raidcom_check_command`, `raidcom_build_script`, `raidcom_list_recipes`, `raidcom_build_recipe`, `raidcom_model_limits`.
54
+ - A catalogue of 178 commands (218 syntax forms, 562 examples) generated from the Command Reference, with per-model limits for VSP One Block 24/26/28, VSP 5000 series and VSP E series.
55
+ - Thirteen recipes: FC, iSCSI and NVMe/TCP provisioning, DP pools, extending and deleting volumes, command devices, zero-page reclaim, inventory, copy groups.
56
+ - Stdio and stateless Streamable HTTP transports (bearer token, TLS or proxy, host and origin checks, rate limit).
57
+ - Build-only by design: no tool connects to a storage system or runs a command.
package/INSTALL.md ADDED
@@ -0,0 +1,169 @@
1
+ # Installing raidcom-mcp
2
+
3
+ raidcom-mcp only builds command text. It needs no access to a storage system, no credentials and no CCI installation.
4
+
5
+ ## Choose an install method
6
+
7
+ Every release on GitHub has these files, with `SHA256SUMS` to check them:
8
+
9
+ | You use | Install with | Needs Node.js? |
10
+ |---|---|---|
11
+ | Claude Desktop | the [`.mcpb` extension](#claude-desktop-extension-mcpb) | No (Claude Desktop brings its own) |
12
+ | Claude Code | the [plugin](#claude-code-plugin) | Yes, 22.19 or later |
13
+ | Any MCP client, no Node.js installed | a [standalone package](#standalone-package) | No |
14
+ | Any MCP client, with Node.js | the [npm package](#from-the-npm-package) or [from source](#from-source) | Yes, 22.19 or later |
15
+ | A server for others to use | [Docker](#docker) or [HTTP](#run-over-http) | No |
16
+
17
+ ### Verify your download
18
+
19
+ ```bash
20
+ sha256sum -c SHA256SUMS --ignore-missing
21
+ ```
22
+
23
+ On macOS, use `shasum -a 256 -c SHA256SUMS --ignore-missing`; on Windows, compare `Get-FileHash <file>` with the line in `SHA256SUMS`.
24
+
25
+ ## Claude Desktop extension (.mcpb)
26
+
27
+ 1. Download `raidcom-mcp-<version>.mcpb`.
28
+ 2. Open it, either by double-clicking it or by dragging it onto Claude Desktop.
29
+ 3. Click **Install**, then enable the extension. There are no settings to fill in.
30
+
31
+ The extension runs with the Node.js built into Claude Desktop. To remove it, go to **Settings → Extensions**.
32
+
33
+ ### Add the command-builder skill (optional)
34
+
35
+ The `raidcom-command-builder` skill guides Claude through finding a command, building it, and showing it with its warnings. The Claude Code plugin includes it. For Claude Desktop or claude.ai, download `raidcom-command-builder-<version>.zip` from the same release (don't unzip it) and upload it under **Settings → Capabilities → Skills**. Skills need a Pro, Max, Team or Enterprise plan with code execution turned on.
36
+
37
+ ## Standalone package
38
+
39
+ Each standalone package contains the server and its own Node.js runtime:
40
+
41
+ | System | Package |
42
+ |---|---|
43
+ | macOS, Apple silicon | `raidcom-mcp-<version>-darwin-arm64.tar.gz` |
44
+ | macOS, Intel | `raidcom-mcp-<version>-darwin-x64.tar.gz` |
45
+ | Linux, x64 | `raidcom-mcp-<version>-linux-x64.tar.gz` |
46
+ | Linux, arm64 | `raidcom-mcp-<version>-linux-arm64.tar.gz` |
47
+ | Windows, x64 | `raidcom-mcp-<version>-win-x64.zip` |
48
+ | Windows, arm64 | `raidcom-mcp-<version>-win-arm64.zip` |
49
+
50
+ The Linux packages need glibc 2.28 or later (RHEL/Rocky 8+, Debian 10+, Ubuntu 20.04+). On Alpine Linux, use [Docker](#docker) or the npm package.
51
+
52
+ ### macOS and Linux
53
+
54
+ ```bash
55
+ sudo tar -xzf raidcom-mcp-<version>-linux-x64.tar.gz -C /opt
56
+ sudo ln -sf /opt/raidcom-mcp-<version>-linux-x64/bin/raidcom-mcp /usr/local/bin/raidcom-mcp
57
+ ```
58
+
59
+ The server command is then `/usr/local/bin/raidcom-mcp`. The launcher follows the symlink to find its runtime.
60
+
61
+ ### Windows
62
+
63
+ Unzip the archive to a folder such as `C:\Program Files\raidcom-mcp`. The server is started by its bundled `runtime\node.exe` running `dist\index.js`:
64
+
65
+ ```powershell
66
+ & "C:\Program Files\raidcom-mcp\raidcom-mcp-<version>-win-x64\runtime\node.exe" "C:\Program Files\raidcom-mcp\raidcom-mcp-<version>-win-x64\dist\index.js"
67
+ ```
68
+
69
+ From a Command Prompt you can also run `bin\raidcom-mcp.cmd`. In MCP client configs use `node.exe` and `index.js` as shown above, because clients often can't start `.cmd` files directly.
70
+
71
+ ## Claude Code plugin
72
+
73
+ ```
74
+ /plugin install raidcom-community --marketplace visubramaniam/raidcom-mcp
75
+ ```
76
+
77
+ See [README.plugin.md](README.plugin.md).
78
+
79
+ ## From the npm package
80
+
81
+ ```bash
82
+ npm install -g raidcom-mcp
83
+ raidcom-mcp # MCP over stdio
84
+ ```
85
+
86
+ Requires Node.js 22.19 or later (`node --version`).
87
+
88
+ ## From source
89
+
90
+ ```
91
+ git clone https://github.com/visubramaniam/raidcom-mcp.git
92
+ cd raidcom-mcp
93
+ npm ci
94
+ npm test
95
+ ```
96
+
97
+ `npm test` builds the server, runs the unit tests and the search evaluation.
98
+
99
+ ## Connect it to Claude
100
+
101
+ ### Claude Code
102
+
103
+ ```
104
+ claude mcp add raidcom -- node /absolute/path/to/raidcom-mcp/dist/index.js
105
+ ```
106
+
107
+ ### Claude Desktop
108
+
109
+ Add this to `claude_desktop_config.json` (Settings → Developer → Edit config) and restart Claude Desktop:
110
+
111
+ ```json
112
+ {
113
+ "mcpServers": {
114
+ "raidcom": { "command": "node", "args": ["/absolute/path/to/raidcom-mcp/dist/index.js"] }
115
+ }
116
+ }
117
+ ```
118
+
119
+ ### Other MCP clients
120
+
121
+ Any client that starts a stdio server can run `node dist/index.js`. Clients that speak Streamable HTTP can use the hosted mode below.
122
+
123
+ ## Docker
124
+
125
+ ```
126
+ docker build -t raidcom-mcp .
127
+ docker run -i --rm raidcom-mcp # MCP over stdio
128
+ ```
129
+
130
+ See [README.docker.md](README.docker.md) for hosting.
131
+
132
+ ## Run over HTTP
133
+
134
+ ```
135
+ export RAIDCOM_TRANSPORT=http
136
+ export RAIDCOM_HTTP_TOKEN=$(openssl rand -hex 32)
137
+ node dist/index.js
138
+ # [raidcom-mcp] ready: ... listening on http://127.0.0.1:8361/mcp
139
+ ```
140
+
141
+ The transport is stateless: every request is independent, so any number of instances can sit behind a load balancer. Clients send `Authorization: Bearer <token>`.
142
+
143
+ Which settings are required depends on where it listens:
144
+
145
+ - **Loopback only** (the default `127.0.0.1`): a token, or `RAIDCOM_HTTP_OPEN=true`.
146
+ - **Reachable by other machines**: also TLS. Either give the server a certificate (`RAIDCOM_HTTP_TLS_CERT`, `RAIDCOM_HTTP_TLS_KEY`) or put it behind a reverse proxy or load balancer that ends TLS and set `RAIDCOM_HTTP_BEHIND_TLS_PROXY=true`.
147
+ - **A public name**: list it in `RAIDCOM_HTTP_ALLOWED_HOSTS` (for example `raidcom.example.com`), or requests are refused with 403 to defend against DNS rebinding.
148
+ - **Behind a proxy**: set `RAIDCOM_HTTP_TRUST_PROXY` to the number of proxies in front of the server (`true` means one), so the rate limits apply per user. Each proxy adds an entry to `X-Forwarded-For`; the server takes the entry that many places from the right, and ignores entries further left, which the client could have written. Too low a number makes every user look like the same proxy (they then share one rate limit); too high lets a client choose its own address. To check the number, open `/healthz`: behind proxies it shows `client`, which should be your own public address (compare with `curl https://ifconfig.me`). Hosting platforms often have more than one proxy; on Render, try `3` and check `/healthz`.
149
+
150
+ A public service that anyone may use can run with `RAIDCOM_HTTP_OPEN=true`: the server holds no secrets and cannot reach any array, so the risk is limited to load, which the rate limit and the 256 KB body limit bound.
151
+
152
+ ### Check that it works
153
+
154
+ ```
155
+ curl http://127.0.0.1:8361/healthz
156
+ curl -s http://127.0.0.1:8361/mcp -H "Authorization: Bearer $RAIDCOM_HTTP_TOKEN" \
157
+ -H "content-type: application/json" -H "accept: application/json, text/event-stream" \
158
+ -d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'
159
+ ```
160
+
161
+ You can also explore it with the MCP Inspector: `npm run inspect`.
162
+
163
+ ## Running the commands it builds
164
+
165
+ raidcom-mcp does not run them. On a host with CCI installed and a running HORCM instance (see the `raidcom://notes/horcm-setup` resource), review the command or script and run it there. Scripts read credentials from `$RAIDCOM_USER` and `$RAIDCOM_PASSWORD` in your shell when built with `login: true`; they are never written into the script.
166
+
167
+ ## Upgrading and uninstalling
168
+
169
+ `git pull && npm ci && npm test`. To uninstall, remove the MCP entry from your client and delete the folder.
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Vinod Subramaniam
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,50 @@
1
+ # Running raidcom-mcp with Docker
2
+
3
+ ## Build
4
+
5
+ ```
6
+ docker build -t raidcom-mcp .
7
+ ```
8
+
9
+ ## Stdio (a local client)
10
+
11
+ ```
12
+ docker run -i --rm raidcom-mcp
13
+ ```
14
+
15
+ ## Hosted over HTTP
16
+
17
+ ```
18
+ docker run -d --name raidcom-mcp -p 8361:8361 \
19
+ -e RAIDCOM_TRANSPORT=http \
20
+ -e RAIDCOM_HTTP_HOST=0.0.0.0 \
21
+ -e RAIDCOM_HTTP_TOKEN="$(openssl rand -hex 32)" \
22
+ -e RAIDCOM_HTTP_BEHIND_TLS_PROXY=true \
23
+ -e RAIDCOM_HTTP_ALLOWED_HOSTS=raidcom.example.com \
24
+ -e RAIDCOM_HTTP_TRUST_PROXY=true \
25
+ raidcom-mcp
26
+ curl http://127.0.0.1:8361/healthz
27
+ ```
28
+
29
+ Put a reverse proxy or load balancer in front that ends TLS and forwards `/mcp` and `/healthz` to port 8361. Leave out `RAIDCOM_HTTP_TOKEN` and set `RAIDCOM_HTTP_OPEN=true` for a public service without authentication. The container runs as the unprivileged `node` user, needs no volumes, and needs no outbound network access.
30
+
31
+ Example `docker-compose.yml`:
32
+
33
+ ```yaml
34
+ services:
35
+ raidcom-mcp:
36
+ build: .
37
+ restart: unless-stopped
38
+ ports: ["127.0.0.1:8361:8361"]
39
+ read_only: true
40
+ environment:
41
+ RAIDCOM_TRANSPORT: http
42
+ RAIDCOM_HTTP_HOST: 0.0.0.0
43
+ RAIDCOM_HTTP_BEHIND_TLS_PROXY: "true"
44
+ RAIDCOM_HTTP_ALLOWED_HOSTS: raidcom.example.com
45
+ RAIDCOM_HTTP_TRUST_PROXY: "true"
46
+ RAIDCOM_HTTP_TOKEN: ${RAIDCOM_HTTP_TOKEN:?set a token}
47
+ healthcheck:
48
+ test: ["CMD", "wget", "-qO-", "http://127.0.0.1:8361/healthz"]
49
+ interval: 30s
50
+ ```
package/README.md CHANGED
@@ -1,3 +1,118 @@
1
- # Temporary Holding Version
1
+ # raidcom-mcp: build Hitachi raidcom commands from plain-language requests
2
2
 
3
- This version is a temporary placeholder for this package. An operational version to replace this has been submitted for review and is awaiting a staged release.
3
+ A community MCP server that turns a request such as *"present four 100 GB volumes from pool 0 to host esx01 on CL1-A and CL2-A"* into validated `raidcom` commands. It is **build-only**: it never connects to a storage system, never runs a command and holds no credentials. It returns command text (or a shell script) for a person to review and run on a host with CCI installed. That makes it safe to host online for anyone to use.
4
+
5
+ It is an independent project, not an official Hitachi Vantara product.
6
+
7
+ ## What it does
8
+
9
+ - **Finds the right command.** `raidcom_list_commands` ranks the 178 commands in the catalogue against a question (BM25 with synonyms and verb intent) and says how confident it is.
10
+ - **Builds one command.** `raidcom_build_command` takes a command name and options as structured data, checks them against the manual's syntax and the storage model's limits, and returns the command line.
11
+ - **Builds many.** `raidcom_build_script` repeats steps over ranges (`foreach`, `zip`), adds `get command_status` after asynchronous commands, optionally locks the resource group, and returns a script that stops at the first failure.
12
+ - **Ready-made workflows.** `raidcom_list_recipes` and `raidcom_build_recipe` cover 14 common jobs: FC, iSCSI and NVMe/TCP provisioning, DP pools, mainframe (3390) pools, extending and deleting volumes, command devices, zero-page reclaim, inventory, copy groups.
13
+ - **Checks an existing command.** `raidcom_check_command` parses a pasted command line (never executing it; shell operators are refused) and reports every problem.
14
+ - **Knows the model limits.** `raidcom_model_limits` gives the LDEV, LUN, pool, serial and port ranges of VSP One Block 24/26/28, VSP 5000 series and VSP E series.
15
+
16
+ All eight tools are marked read-only. There is no tool that executes anything.
17
+
18
+ ## How the catalogue is made
19
+
20
+ `spec/raidcom-catalog.json` is generated by `scripts/generate-catalog.mjs` from the text of the *Command Control Interface Command Reference* (MK-90RD7009). For every command it keeps the name, supported models, a one-line summary, each syntax form (as a small grammar), each option's value shape and a short description, and the command lines of the manual's examples. Hitachi's prose, tables and output samples are not copied. The manuals themselves are not part of this repository; to regenerate the catalogue with your own copy:
21
+
22
+ ```
23
+ pdftotext -layout CCI_Command_Reference.pdf cci-reference.txt
24
+ npm run generate-catalog -- cci-reference.txt
25
+ ```
26
+
27
+ `tests/unit/catalog.test.mjs` replays every example in the manual through the parser and validator (about 96% pass; the rest are places where the manual's syntax line and its examples disagree).
28
+
29
+ ## Validation
30
+
31
+ - Unknown options, wrong number of values, values outside an option's allowed words, and missing required options (checked against the syntax grammar) are errors with a suggested fix.
32
+ - LDEV IDs, LUN IDs, pool IDs, serial numbers and port names (`CL1-A`, `CL3-B-12`) are checked against the model you give, or the widest range of any model.
33
+ - Values that a shell could misread (`; | & $ \` > < ' "` and so on) are refused, and names with spaces are quoted.
34
+ - Because the manual's syntax lines are occasionally incomplete, `strict: false` turns *missing option* errors into warnings. Unknown options and out-of-range values stay errors.
35
+ - Out of scope: the `pair*` commands (paircreate, pairdisplay, ...) from the Quick Reference, and `raidcom -login`/`-logout` lines as commands of their own (scripts can add them with `login: true`, reading `$RAIDCOM_USER` and `$RAIDCOM_PASSWORD` from the shell).
36
+
37
+ ## Setup
38
+
39
+ You need Node.js 22.19 or later.
40
+
41
+ ```
42
+ git clone https://github.com/visubramaniam/raidcom-mcp.git
43
+ cd raidcom-mcp
44
+ npm ci
45
+ npm run build
46
+ ```
47
+
48
+ ### Claude Code
49
+
50
+ ```
51
+ claude mcp add raidcom -- node /path/to/raidcom-mcp/dist/index.js
52
+ ```
53
+
54
+ ### Claude Desktop
55
+
56
+ Add to `claude_desktop_config.json`:
57
+
58
+ ```json
59
+ {
60
+ "mcpServers": {
61
+ "raidcom": { "command": "node", "args": ["/path/to/raidcom-mcp/dist/index.js"] }
62
+ }
63
+ }
64
+ ```
65
+
66
+ ### Claude Desktop, standalone packages
67
+
68
+ Each [release](https://github.com/visubramaniam/raidcom-mcp/releases) has a Claude Desktop extension (`.mcpb`), standalone packages for macOS, Linux and Windows with Node.js bundled, the npm package, and a skill zip. See [INSTALL.md](INSTALL.md).
69
+
70
+ ### Claude Code plugin
71
+
72
+ ```
73
+ /plugin install raidcom-community --marketplace visubramaniam/raidcom-mcp
74
+ ```
75
+
76
+ See [README.plugin.md](README.plugin.md).
77
+
78
+ ### Hosted over HTTP
79
+
80
+ ```
81
+ RAIDCOM_TRANSPORT=http RAIDCOM_HTTP_HOST=0.0.0.0 RAIDCOM_HTTP_TOKEN=$(openssl rand -hex 32) \
82
+ RAIDCOM_HTTP_BEHIND_TLS_PROXY=true RAIDCOM_HTTP_ALLOWED_HOSTS=raidcom.example.com node dist/index.js
83
+ ```
84
+
85
+ The endpoint is `/mcp` (stateless Streamable HTTP); `/healthz` reports liveness. See [INSTALL.md](INSTALL.md) and [README.docker.md](README.docker.md).
86
+
87
+ ## Configuration
88
+
89
+ | Variable | Default | Meaning |
90
+ |---|---|---|
91
+ | `RAIDCOM_TRANSPORT` | `stdio` | `stdio` or `http` |
92
+ | `RAIDCOM_HTTP_HOST` | `127.0.0.1` | Address to listen on |
93
+ | `RAIDCOM_HTTP_PORT` | `8361` | Port (`0` picks a free one) |
94
+ | `RAIDCOM_HTTP_TOKEN` | none | Bearer token, at least 32 characters. Required unless `RAIDCOM_HTTP_OPEN=true` |
95
+ | `RAIDCOM_HTTP_OPEN` | `false` | Serve anyone who can reach the port, without a token |
96
+ | `RAIDCOM_HTTP_TLS_CERT`, `RAIDCOM_HTTP_TLS_KEY` | none | PEM files; the server then speaks HTTPS |
97
+ | `RAIDCOM_HTTP_BEHIND_TLS_PROXY` | `false` | A proxy or load balancer ends TLS. Needed for non-loopback addresses without TLS |
98
+ | `RAIDCOM_HTTP_ALLOWED_HOSTS` | none | Extra `Host` values to accept (`*` for any) |
99
+ | `RAIDCOM_HTTP_ALLOWED_ORIGINS` | none | `Origin` values to accept (`*` for any) |
100
+ | `RAIDCOM_HTTP_RATE_LIMIT` | `120` | Requests per minute per client (`0` for none) |
101
+ | `RAIDCOM_HTTP_TRUST_PROXY` | `false` | Take the client address from `X-Forwarded-For`: `true` for one proxy in front, or the number of proxies (see [INSTALL.md](INSTALL.md#run-over-http)) |
102
+ | `RAIDCOM_CATALOG`, `RAIDCOM_LIMITS`, `RAIDCOM_RECIPES`, `RAIDCOM_EXAMPLES` | bundled | Use another spec file (an empty `RAIDCOM_EXAMPLES` turns the example questions off) |
103
+
104
+ ## Tests
105
+
106
+ ```
107
+ npm test
108
+ ```
109
+
110
+ runs the unit tests (`tests/unit`) and the search evaluation (`tests/search-eval.mjs`: 40 tuning and 30 held-out requests, each with a minimum top-1 and top-3 score that may only go up).
111
+
112
+ ## Contributing
113
+
114
+ See [CONTRIBUTING.md](CONTRIBUTING.md). Security problems: [SECURITY.md](SECURITY.md).
115
+
116
+ ## License
117
+
118
+ MIT, see [LICENSE](LICENSE). "Hitachi", "raidcom" and "VSP" are trademarks of their owners; this project is not affiliated with or endorsed by Hitachi.
@@ -0,0 +1,56 @@
1
+ # The raidcom-community Claude plugin
2
+
3
+ **raidcom-community** is a Claude plugin that installs the [raidcom-mcp](README.md) server, so Claude can turn a storage task into validated Hitachi `raidcom` commands and scripts. It also adds a skill, `raidcom-command-builder`, that guides Claude through the work.
4
+
5
+ > Not an official Hitachi Vantara product: raidcom-mcp and this plugin are an independent community project, not supported by or affiliated with Hitachi Vantara.
6
+
7
+ It is **build-only**. It needs no credentials and no access to a storage system, and it never runs a command. Claude shows you the command or script; you review it and run it on a host with CCI installed.
8
+
9
+ ## Where it works
10
+
11
+ | Where | Works? |
12
+ |---|---|
13
+ | **Claude Code**: terminal, IDE extensions, and the desktop app's Code tab | Yes |
14
+ | **Claude chat** (claude.ai, desktop and mobile chat) | No: chat doesn't run plugins' local servers. Use the hosted HTTP server instead, if one is available to you ([INSTALL.md](INSTALL.md#run-over-http)) |
15
+
16
+ ## Install
17
+
18
+ Requires Node.js 22.19 or later, with npm. In a Claude Code session:
19
+
20
+ ```
21
+ /plugin install raidcom-community --marketplace visubramaniam/raidcom-mcp
22
+ ```
23
+
24
+ Or from your shell:
25
+
26
+ ```bash
27
+ claude plugin marketplace add visubramaniam/raidcom-mcp
28
+ claude plugin install raidcom-community@raidcom-community
29
+ ```
30
+
31
+ Claude Code installs the server from the plugin's `package.json` (pinned to an exact version of the `raidcom-mcp` npm package, and to a lockfile with integrity hashes once the release workflow has added it). There are no settings to fill in.
32
+
33
+ ## Use
34
+
35
+ Ask in plain language:
36
+
37
+ - *"Present four 100 GB volumes from pool 0 to host esx01 on CL1-A and CL2-A on a VSP One Block 28."*
38
+ - *"Write the commands to create a mainframe pool from these drives."*
39
+ - *"Check this command: raidcom add lun -port CL1-A-0 -ldev_id 200 -lun_id 1"*
40
+ - *"Which raidcom command shows free LDEV IDs?"*
41
+
42
+ Start the skill by name with `/raidcom-community:raidcom-command-builder`.
43
+
44
+ ## Update, disable and uninstall
45
+
46
+ ```bash
47
+ claude plugin update raidcom-community@raidcom-community
48
+ claude plugin disable raidcom-community@raidcom-community
49
+ claude plugin uninstall raidcom-community@raidcom-community
50
+ ```
51
+
52
+ Each plugin version installs a matching `raidcom-mcp` version; [CHANGELOG.md](CHANGELOG.md) lists what changed.
53
+
54
+ ## Privacy
55
+
56
+ The server runs on your computer, makes no network requests and stores nothing. Requests you make to Claude go to Anthropic as usual; the plugin adds nothing to them beyond the tool results.