Hitachi raidcom command builder (Community)

io.github.visubramaniam由 GitHub 帳號 visubramaniam 發布v0.1.8更新於 Oct 30, 2026

Builds and checks Hitachi raidcom commands and scripts. Build-only: never contacts a storage system.

概覽

AI 產生的概覽

依自然語言請求產生並驗證 Hitachi raidcom(CCI)指令與 shell 腳本,過程中完全不連線儲存系統。

可以做什麼
  • 尋找與說明指令:用日常用語檢索 raidcom 指令目錄,並取得單一指令的語法、選項、支援機型與範例
  • 建構與檢查指令:把結構化參數產生並驗證為指令列,或解析貼上的指令列並回報問題
  • 建構腳本:以 foreach 或 zip 依範圍展開步驟,附加狀態檢查與可選的資源群組鎖定
  • 使用現成配方:列出並產生佈建、集區、磁碟區變更、命令裝置與盤點等常用作業腳本
  • 查詢機型限制:依 VSP 機型提供 LDEV、LUN、集區、序號與連接埠名稱的合法範圍
適用情境
適合在草擬 Hitachi VSP 儲存操作時取得正確的 raidcom 語法、經過驗證的 ID 與連接埠,或一份可審閱的腳本,而非手寫指令。也適合撰寫 runbook,以及在有人於已安裝 CCI 的主機上執行前檢查貼上的指令。
執行需求
以 npm 套件 raidcom-mcp 透過 npx 在本機執行,需要 Node.js 22.19 或更新版本;僅產生指令時不需連線儲存系統或安裝 CCI。可選的 HTTP 模式使用 RAIDCOM_TRANSPORT,除非對所有人開放,否則需要至少 32 個字元的 bearer 權杖 RAIDCOM_HTTP_TOKEN。
安裝前請注意
僅產生文字:產出的指令需由人審閱並在別處執行,錯誤只有在有人執行腳本時才會作用到陣列。變更類指令應在 raidcom lock resource 下執行,最好先以 -checkmode precheck 試跑。腳本可加入登入列,從 shell 讀取 RAIDCOM_USER 與 RAIDCOM_PASSWORD。若以 HTTP 方式在不設 RAIDCOM_HTTP_TOKEN(RAIDCOM_HTTP_OPEN)的情況下提供服務,任何能連到該連接埠的人都能使用。

安裝

在 SourceWeft 中

  1. 開啟 儀表板中的 Hitachi raidcom command builder (Community),將其新增到工作區。
  2. 為需要使用其工具的對話啟用該服務。

Desktop only,透過 STDIO。 STDIO 服務會啟動本機處理程序,因此需要 SourceWeft 桌面主機。

其他 MCP 客戶端

參照 儲存庫 中的啟動說明。

README

raidcom-mcp: build Hitachi raidcom commands from plain-language requests

[npm] [Release] [CI]

[Hitachi raidcom command builder (Community) MCP server]

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.

It is an independent project, not an official Hitachi Vantara product.

What it does

  • 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.
  • 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.
  • 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.
  • 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.
  • Checks an existing command. raidcom_check_command parses a pasted command line (never executing it; shell operators are refused) and reports every problem.
  • 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.

All eight tools are marked read-only. There is no tool that executes anything.

Use the hosted server

A public instance runs at https://raidcom-mcp.onrender.com/mcp. It needs no sign-in.

  • Claude (desktop or web): Settings → Connectors → Add custom connector, paste the URL, leave the advanced (OAuth) settings empty.
  • Claude Code: claude mcp add --transport http raidcom https://raidcom-mcp.onrender.com/mcp
  • Microsoft 365 Copilot (Copilot Studio): your agent → Tools → Add a tool → New tool → Model Context Protocol; paste the URL, authentication None.
  • GitHub Copilot (VS Code): add { "servers": { "raidcom": { "type": "http", "url": "https://raidcom-mcp.onrender.com/mcp" } } } to .vscode/mcp.json, then use Copilot Chat in Agent mode.

To run it yourself instead, see Setup.

How the catalogue is made

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:

pdftotext -layout CCI_Command_Reference.pdf cci-reference.txtnpm run generate-catalog -- cci-reference.txt

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).

Validation

  • 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.
  • 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.
  • Values that a shell could misread (; | & $ \ > < ' "and so on) are refused, values containing spaces or#are quoted, and values starting with- are refused so they can't add options. Global options (instance, pair_type, serial`, ...) are checked before anything is written. See SECURITY.md.
  • LDEV IDs can be decimal, 0x hex or mainframe CU:LDEV (dd:0f); recipes and scripts expand ranges such as 100-109 and dd:00-dd:0f.
  • 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.
  • 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).

Setup

You need Node.js 22.19 or later. The server is on npm, so most clients can start it with npx:

Claude Code

claude mcp add raidcom -- npx -y raidcom-mcp

Claude Desktop

Add to claude_desktop_config.json:

json
{  "mcpServers": {    "raidcom": { "command": "npx", "args": ["-y", "raidcom-mcp"] }  }}

From source

git clone https://github.com/visubramaniam/raidcom-mcp.gitcd raidcom-mcpnpm cinpm run build

Then use node /path/to/raidcom-mcp/dist/index.js as the command in the examples above.

Claude Desktop, standalone packages

Each release 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.

Claude Code plugin

/plugin install raidcom-community --marketplace visubramaniam/raidcom-mcp

See README.plugin.md.

Hosted over HTTP

RAIDCOM_TRANSPORT=http RAIDCOM_HTTP_HOST=0.0.0.0 RAIDCOM_HTTP_TOKEN=$(openssl rand -hex 32) \RAIDCOM_HTTP_BEHIND_TLS_PROXY=true RAIDCOM_HTTP_ALLOWED_HOSTS=raidcom.example.com node dist/index.js

The endpoint is /mcp (stateless Streamable HTTP). /healthz reports the version and, behind a proxy, the address the server takes as the caller's, to check the proxy settings.

Clients that add servers as connectors (Claude, Microsoft 365 Copilot) can't send a fixed bearer token: they connect without authentication or through OAuth, which this server doesn't implement. For them, run without a token and with RAIDCOM_HTTP_OPEN=true, as the public instance does. Behind Cloudflare (Render, for example), set RAIDCOM_HTTP_CLIENT_IP_HEADER=cf-connecting-ip so the rate limits apply per user. See INSTALL.md and README.docker.md.

Configuration

VariableDefaultMeaning
RAIDCOM_TRANSPORTstdiostdio or http
RAIDCOM_HTTP_HOST127.0.0.1Address to listen on
RAIDCOM_HTTP_PORT8361Port (0 picks a free one)
RAIDCOM_HTTP_TOKENnoneBearer token, at least 32 characters. Required unless RAIDCOM_HTTP_OPEN=true
RAIDCOM_HTTP_OPENfalseServe anyone who can reach the port, without a token
RAIDCOM_HTTP_TLS_CERT, RAIDCOM_HTTP_TLS_KEYnonePEM files; the server then speaks HTTPS
RAIDCOM_HTTP_BEHIND_TLS_PROXYfalseA proxy or load balancer ends TLS. Needed for non-loopback addresses without TLS
RAIDCOM_HTTP_ALLOWED_HOSTSnoneExtra Host values to accept (* for any)
RAIDCOM_HTTP_ALLOWED_ORIGINSnoneOrigin values to accept (* for any)
RAIDCOM_HTTP_RATE_LIMIT120Requests per minute per client (0 for none)
RAIDCOM_HTTP_CLIENT_IP_HEADERnoneA header your proxy sets to the client's address, e.g. cf-connecting-ip behind Cloudflare (Render uses Cloudflare). Takes precedence over X-Forwarded-For
RAIDCOM_HTTP_DEBUG_CLIENTtrue/healthz also shows the forwarding headers it received (the caller's own request), to choose the two settings above. Set to false to turn it off
RAIDCOM_HTTP_TRUST_PROXYfalseTake the client address from X-Forwarded-For: true for one proxy in front, or the number of proxies (see INSTALL.md)
MCPRUSH_TOKENnoneToken issued by the mcprush marketplace. Adds a second endpoint (below) that answers only requests carrying it in x-mcprush-token; /mcp is unchanged
RAIDCOM_HTTP_MCPRUSH_PATH/mcprushPath of that endpoint
RAIDCOM_CATALOG, RAIDCOM_LIMITS, RAIDCOM_RECIPES, RAIDCOM_EXAMPLESbundledUse another spec file (an empty RAIDCOM_EXAMPLES turns the example questions off)

Values are trimmed, and true/false settings accept any case; any other value for them stops the server with a message. At startup the server warns about RAIDCOM_ variables it doesn't recognise (a misspelt name, or one with a stray space), and over HTTP logs one line with its effective settings.

Tests

npm test

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, and a check that results rated high-confidence are right at least 85% of the time). npm run package builds the release packages and npm run smoke tests the npm package as installed.

Documentation

The wiki has a quick start, deployment guide, tools and recipe reference, troubleshooting and more.

Contributing

See CONTRIBUTING.md. Security problems: SECURITY.md. Privacy: PRIVACY.md.

License

MIT, see LICENSE. "Hitachi", "raidcom" and "VSP" are trademarks of their owners; this project is not affiliated with or endorsed by Hitachi.

來源:README.md,提交 80eba41

工具

8

raidcom_list_commands

Find raidcom commands

Find raidcom commands. Use this first when you do not know the exact command name. With no arguments, lists every object (ldev, lun, host_grp, pool, ...) with the actions available on it. With `query` (plain words, e.g. "map a volume to a host group", "grow a pool", "show free ldev ids"), ranks matching commands and rates the confidence of the top result. With `action` and/or `object`, lists exactly those commands. Then call raidcom_describe_command, or raidcom_build_command if you already know the options.

輸入參數limitqueryactionobject

raidcom_describe_command

Describe a raidcom command

Everything needed to build one raidcom command: what it does, which models support it, whether it is read-only, destructive or asynchronous, each syntax form, every option with the number and kind of values it takes (and the words it accepts, where it accepts only a few), and examples. Call it before raidcom_build_command when you are unsure which options a command needs or which of its syntax forms fits the request.

輸入參數optioncommand必填

raidcom_build_command

Build a raidcom command

Build one raidcom command from structured arguments and validate it. Nothing is executed and no storage system is contacted: you get command text to review and run elsewhere. Unknown options, wrong value counts, missing required options, bad port names and out-of-range LDEV, LUN, pool and serial numbers are reported as errors with a fix. Example: {"command": "add ldev", "options": {"-pool": 0, "-ldev_id": 256, "-capacity": "100G"}, "model": "vsp-one-b28", "global": {"instance": 0}} → `raidcom add ldev -pool 0 -ldev_id 256 -capacity 100G -I0`. For many similar commands use raidcom_build_script, not repeated calls. When the user asks for a command, show them the `command` from the result.

輸入參數modelglobalstrictcommand必填options

raidcom_check_command

Check a raidcom command line

Validate and explain a raidcom command line the user already has (for example one pasted from a runbook). It is parsed, not executed: shell operators such as ; | & > are refused. Returns the normalised command, what each option means, and every problem found. Credentials after -login are dropped.

輸入參數modelstrictcommand_line必填

raidcom_build_script

Build a raidcom script

Build a shell script of raidcom commands from steps. Each step is a command with options, optionally repeated with `foreach` (every combination) or `zip` (values advance together), so "create LDEVs 100 to 109 in pool 0, then map each to port CL1-A" is two steps. Every expanded command is validated; the script is returned only if all of them are valid, otherwise you get the errors per step. The script checks each command's exit status, adds `raidcom get command_status` after asynchronous commands, and can lock the resource group and log in (credentials are read from RAIDCOM_USER and RAIDCOM_PASSWORD in the user's shell, never written into the script). Nothing is executed.

輸入參數loginmodelsteps必填globalstrictdescriptionlock_resource

raidcom_list_recipes

List raidcom recipes

Ready-made workflows: provision volumes to an FC, iSCSI or NVMe/TCP host, create or grow a pool, create a mainframe (3390) pool, extend or delete volumes, create a command device, reclaim zero pages, read-only inventory, copy groups. With no arguments lists them. With `recipe`, shows its parameters and steps. With `query`, ranks recipes by keyword. Use raidcom_build_recipe to turn one into a script.

輸入參數queryrecipe

raidcom_build_recipe

Build a raidcom recipe script

Build the script for a recipe from its parameters (see raidcom_list_recipes). Lists such as ldev_ids accept ranges: ["100-109"]. Example: recipe provision-fc-volumes with {"pool": 0, "ldev_ids": ["100-103"], "capacity": "100G", "ports": ["CL1-A", "CL2-A"], "host_grp": "esx01", "host_mode": "VMWARE_EX", "wwns": ["210000e08b0256f8"]}. Returns the script and the individual commands. Nothing is executed.

輸入參數loginmodelglobalparams必填recipe必填strictlock_resource

raidcom_model_limits

Show storage model limits

Valid parameter ranges for a storage model (serial number, LDEV ID, pool ID, LU number, port names), taken from the Command Reference appendices. Without `model`, lists the models.

輸入參數model

版本歷史

1
  1. v0.1.8最新Oct 29, 2026

評分

已滿足適用檢查項的 90%

該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。

  • 近 30 天內可連通25 分
  • 已宣告認證方式10 分

    請在註冊中心條目中宣告憑證請求標頭,或保持端點能夠回應探測,以便判定其認證方式。

  • 已列出工具必需15 分
  • 描述必需15 分
  • 圖示10 分
  • 文件15 分
  • 授權條款10 分