Dell SC Series MCP Server
by DigitainIT
README.md
# Dell SC Series MCP Server
[](https://github.com/DigitainIT/dell-sc-series-mcp/actions/workflows/ci.yml)
[](LICENSE)
[](https://www.python.org)
[](https://modelcontextprotocol.io)
A **read-only** [Model Context Protocol](https://modelcontextprotocol.io) (MCP)
server that lets AI assistants (opencode, Claude Desktop, any MCP client)
diagnose **Dell SC Series / Compellent** storage arrays (SC5020/F, SC7020/F,
SC8000, SC9000, SCv20xx/30xx, SC4020…) through the array's **own REST API**.
> Ask your AI: *"How is the SAN doing?"*, *"Any hardware alerts?"*,
> *"When will the SSD pool run out of space?"* — and get answers straight
> from the controller.
## Why this server
- **No Dell Storage Manager (DSM) required.** It talks directly to the
Storage Center controller REST API (`https://<array>:3033/api/rest`,
SCOS 7.x). If a DSM Data Collector is present, it works against that too.
- **Read-only by design.** After login it issues only `GET` requests.
It *cannot* create/modify/delete anything on your array.
- **Battle-tested diagnostics.** The tool set was built while investigating
a real production SC5020F incident (emergency write-outage caused by pool
exhaustion, dead cache batteries, broken phone-home) — the tools surface
exactly the signals that matter.
## Features
- API-version negotiation (works against SCOS 7.x, API 2.0–6.x)
- Session management with transparent re-login on expiry
- TLS verification configurable (self-signed default, CA bundle supported)
- Thread-safe client; sync tools safe for concurrent MCP calls
- Fully mocked test suite — contributors don't need an array
## Tools
| Tool | Description |
|---|---|
| `sc_health_report` | Aggregated markdown health report — the "how is the array?" one-shot |
| `sc_alerts` | Alerts with filters (`unacknowledged_only`, `category`) |
| `sc_capacity` | Disk folders/pools, thresholds, **projected full dates**, provisioned vs written totals |
| `sc_volumes` | Volumes: size, pool, folder, last UNMAP/space-reduction time |
| `sc_servers` | Hosts: connectivity, path counts, mapped volumes, OS |
| `sc_hardware` | Controllers & enclosures: status, last boot, LEDs, conditions |
| `sc_ports` | Front/back-end ports + iSCSI fault domains (IPs, MTU, CHAP) |
| `sc_storage_center` | Array identity, SCOS version, operation mode, background-task flags |
## Requirements
- Python 3.10+
- Network access to the array on **TCP 3033**
- An SCOS user account. **Important visibility note** (learned the hard way):
| Role | Sees |
|---|---|
| `Admin` | Everything (volumes, pools/capacity, all servers, alerts) |
| `Reporter` | **Filtered subset** on direct connections: alerts, controllers, enclosures — but *no* volumes, capacity pools, or servers |
For full diagnostics use an Admin account; a Reporter is fine for
alert/hardware-only monitoring.
## Installation
From source (until published to PyPI):
```bash
git clone https://github.com/DigitainIT/dell-sc-series-mcp.git
cd dell-sc-series-mcp
python -m venv .venv
.venv/Scripts/activate # Windows; use source .venv/bin/activate on Linux/macOS
pip install -e .
```
## Configuration
Environment variables (see [.env.example](.env.example)):
| Variable | Required | Default | Purpose |
|---|---|---|---|
| `SC_HOST` | ✅ | — | Storage Center management IP/hostname |
| `SC_USER` | ✅ | — | SCOS username |
| `SC_PASS` | ✅ | — | SCOS password |
| `SC_PORT` | | `3033` | REST API port |
| `SC_TLS_VERIFY` | | `false` | Verify TLS (arrays ship self-signed certs) |
| `SC_CA_BUNDLE` | | — | Path to CA bundle (overrides `SC_TLS_VERIFY`) |
## Run
Standalone (stdio transport — this is what MCP clients spawn for you):
```bash
export SC_HOST=192.0.2.10 SC_USER=reader SC_PASS=secret
dell-sc-mcp # or: python -m dell_sc_mcp
```
### opencode (`opencode.json`)
```json
{
"mcp": {
"dell-sc": {
"type": "local",
"command": ["dell-sc-mcp"],
"environment": {
"SC_HOST": "192.0.2.10",
"SC_USER": "reader",
"SC_PASS": "secret"
},
"enabled": true
}
}
}
```
### Claude Desktop (`claude_desktop_config.json`)
```json
{
"mcpServers": {
"dell-sc": {
"command": "dell-sc-mcp",
"args": [],
"env": {
"SC_HOST": "192.0.2.10",
"SC_USER": "reader",
"SC_PASS": "secret"
}
}
}
}
```
On Windows, point `command` at the console script in your venv, e.g.
`C:\\path\\to\\.venv\\Scripts\\dell-sc-mcp.exe`.
## Example conversation
> **You:** Give me a health overview of the storage array.
> **AI (via `sc_health_report`):** Status Up, mode Normal, 23 unacknowledged
> alerts — including active cache battery alerts on both controllers and
> SSD-Pool projected full 2026-12-25…
> **You:** Which hosts have degraded connectivity?
> **AI (via `sc_servers`):** `degradedConnectivity: ["esxi-02"]` — 2/4 paths.
## Troubleshooting
| Symptom | Cause / fix |
|---|---|
| `login failed … HTTP 401` | Wrong credentials. SCOS usernames are **case-sensitive** (`Admin` ≠ `admin`). |
| Login loops through all API versions | Array unreachable or port wrong — verify `Test-NetConnection <ip> -Port 3033`. |
| `sc_volumes`/`sc_capacity` return empty | You're using a `Reporter` account — see visibility table above. |
| `Method not available` on some object | Direct controller connections expose fewer objects than a DSM Data Collector (e.g. no physical disk list, no perf counters). Deploy DSM for those. |
| TLS errors with verify on | Use `SC_CA_BUNDLE` with the array's CA, or keep `SC_TLS_VERIFY=false` on a trusted management LAN. |
## Development
```bash
pip install -e ".[dev]"
pytest # fully mocked - no array needed
```
Layout:
```
src/dell_sc_mcp/
client.py # SCOS REST API client (auth, version negotiation, relogin)
server.py # FastMCP server + tools
tests/ # pytest + responses (HTTP fully mocked)
examples/ # standalone diagnostic scripts (diagnose, probe, summarize,
# MCP smoke test against a live array)
```
Live smoke test against a real array (optional):
```bash
export SC_HOST=... SC_USER=... SC_PASS=...
python examples/mcp_smoke_test.py
```
## Roadmap
- [ ] Publish to PyPI
- [ ] Optional write tools with explicit guardrails (acknowledge alerts)
- [ ] DSM Data Collector target support (historical performance stats)
- [ ] Response caching for high-frequency polling
- [ ] Streamable HTTP transport
## Contributing
Issues and PRs welcome. Please keep the server **read-only by default** and
never commit real array data (serials, IPs, hostnames) — tests use fictional
fixtures only.
## Disclaimer
This is an independent community project. It is **not affiliated with,
endorsed, or supported by Dell Technologies**. "Dell" and "Compellent" are
trademarks of Dell Inc.
## License
[MIT](LICENSE) © 2026 Gegham Simonyan
This server cannot be deployed
Maintenance
ActivityStale
ResponsivenessNo issues