Metadata-Version: 2.4
Name: mccimc
Version: 2026.6.13.1
Summary: MCP server for Cisco UCS CIMC (3.x/4.x firmware) — multi-CIMC registry over HTTP
Project-URL: Homepage, https://github.com/supported-systems/mccimc
Project-URL: Source, https://github.com/supported-systems/mccimc
Author-email: Ryan Malloy <ryan@supported.systems>
License-Expression: MIT
Keywords: cimc,cisco,mcp,model-context-protocol,ucs
Classifier: Development Status :: 4 - Beta
Classifier: Intended Audience :: System Administrators
Classifier: License :: OSI Approved :: MIT License
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Topic :: System :: Hardware
Classifier: Topic :: System :: Systems Administration
Requires-Python: >=3.11
Requires-Dist: fastmcp>=0.4
Description-Content-Type: text/markdown

# mccimc

MCP server for **Cisco UCS C-series CIMC** management. Drive multiple CIMCs from one
HTTP-served MCP endpoint, configurable as a list of known boxes.

## What it does

Exposes the CIMC XML API as 20-ish typed MCP tools:

- **Discovery** — `cimc_list`, `cimc_ping`
- **Info / inventory** — `cimc_info`, `cimc_inventory`, `cimc_nics`
- **Sensors** — `cimc_sensors` (temperature, power)
- **Power** — `cimc_power_status`, `cimc_power` (on/off/cycle/reset/soft-off/bmc-reset)
- **Virtual media** — `cimc_vmedia_list`, `cimc_vmedia_mount`, `cimc_vmedia_unmount`
- **SoL** — `cimc_sol_status`, `cimc_sol_enable`, `cimc_sol_disable`
- **Convenience** — `cimc_locator_led` (front-panel LED on/off)
- **KVM** — `cimc_kvm_jnlp` (fetch JNLP for the Java viewer)
- **Escape hatches** — `cimc_get_mo`, `cimc_get_children`, `cimc_modify_mo` for things no specific tool covers

## Install

```bash
uvx mccimc                              # one-shot run
# or
uv tool install mccimc                  # persistent install
```

## Configure

Create `~/.config/mccimc/cimcs.toml`:

```toml
[[cimcs]]
name = "cimc01"
host = "cimc01.example.net"
password_env = "CIMC01_PASS"
cert_path = "~/cimc-certs/cimc01.pem"
description = "Lab box"
```

Then export the password env vars:

```bash
export CIMC01_PASS='...'
```

See `cimcs.example.toml` for the full schema.

## Run

```bash
mccimc                                  # HTTP on 127.0.0.1:7902/mcp
mccimc --transport stdio                # for local Claude Code embedding
mccimc --host 0.0.0.0 --port 8080       # LAN-accessible
mccimc --check                          # validate config and exit
```

## Connect

Add to your Claude Code MCP config:

```bash
claude mcp add cimc --transport http http://127.0.0.1:7902/mcp
```

Or for stdio (no need to start `mccimc` separately):

```bash
claude mcp add cimc --scope user -- uvx mccimc --transport stdio
```

## Example session (LLM-driven)

```
> Which CIMCs do I have?
[cimc_list] → [{"name": "cimc01", ...}, {"name": "cimc02", ...}]

> Is cimc01 powered on?
[cimc_power_status cimc="cimc01"] → {"operPower": "on", "adminPower": "policy"}

> What's it drawing?
[cimc_sensors cimc="cimc01"] → {"power": {"consumedPower": "144", ...}}

> Mount the installer
[cimc_vmedia_mount cimc="cimc01" url="http://198.51.100.10/install.iso" name="install"]
```

## CIMC firmware compatibility

Tested against **CIMC 3.0(4s)** (UCSC-C220-M3S). The MO schema is largely stable
across 3.x and 4.x C-series firmware — most tools should work unchanged.
M5/M6 (4.x firmware) adds more sensors and exposes per-port NIC link state;
tools that read these will just have more data.

Known firmware quirks documented in tool docstrings:
- `commVMediaMap.adminAction` enum only accepts `save-unmapped-volume`
  (so `mount_vmedia` omits `adminAction`, `unmount_vmedia` uses `status="deleted"`)
- WWW vMedia URLs **must omit explicit ports** on 3.0(4s) (use port 80 or 443
  implicitly, not `:8888`).
- Java KVM tokens are session-scoped — `cimc_kvm_jnlp` deliberately leaves
  the XML session open.

## Author

Ryan Malloy <ryan@supported.systems>

## License

MIT
