Project

Tsunami

Network Automation for Windows · Open Source · v0.5.0

A Windows desktop tool that pushes templated Cisco IOS/IOS-XE and HPE Aruba AOS-S/AOS-CX configuration to up to 200 devices over SSH or serial console. It has a GUI for people and a local MCP server for Claude. Claude can read inventory, draft plays, render templates and run read-only checks. It never sees credentials or secret values, and changes to customer devices need approval in the GUI.

Python PySide6 Netmiko Jinja Pydantic MCP IOS-XE Aruba AOS-S/CX GitHub Actions

What it does

Built for Windows

Claude, with guardrails

The MCP server exposes 18 tools in three tiers. Tier 0 touches only the workspace: reading inventory and plays, validating, rendering with secrets masked, and writing drafts. Tier 1 contacts devices read-only, for check-mode diffs, compliance reports, and allowlisted show commands. Tier 2 requests changes.

Approval flow

  1. Claude requests a run of an approved play against chosen targets.
  2. Tsunami renders every target and runs a check-mode diff. Devices that would change are marked ready; if none would, nobody is asked to approve.
  3. The GUI shows an approval card with the play, targets, prompts, and each device's masked render and diff.
  4. A person approves or denies. Approval records their Windows username and the time.
  5. The job runs through the normal pipeline, with canary, backups, and rollback.
  6. Each device is re-rendered at run time. If the play or the render changed since approval, that device fails instead of pushing content nobody approved.

Lab customers are the exception: when the policy allows it, Claude can run plays against them without a click per run, so it can iterate against a CML lab.

Architecture

Workspace

A folder of YAML and Jinja files: inventory (customers, sites, devices), plays, snippets, and a drafts area for Claude.

Engine

Validates, renders sandboxed templates with secret placeholders, diffs, and runs jobs with canary, batches, backups and rollback. It imports no GUI or MCP code, enforced by a test.

GUI

The only place changes are approved and run. It holds the unlocked credential vault and serves Claude's tool calls.

MCP server

A stdio relay for Claude Desktop or Claude Code. It holds no credentials and contacts no device itself.

Tested platforms

HPE Aruba AOS-S (ProCurve)

2530-48G, YA.16.11

Confirmed working, including console day-0 (first-boot login, speed sense).

Cisco IOS

Catalyst 2960-X

Confirmed working.

Cisco IOS-XE

ISR C1101-4P

Confirmed working.

Cisco IOS on Linux (IOL)

CML lab

Confirmed working.

HPE Aruba AOS-CX

Not yet tested on hardware

Built and unit-tested against simulated devices. Checkpoint rollback is not yet verified on hardware.

Testing and CI

About 2,470 unit and 170 GUI tests. Every push to main runs GitHub Actions on Windows: lint, unit and GUI tests, then a frozen build with self-tests, an MCP smoke test, and the installer. Integration tests run against a CML lab or a real COM port.

Stack: Python 3.12, PySide6, Netmiko, Jinja2 (sandboxed), Pydantic v2, ruamel.yaml, keyring, the MCP Python SDK, PyInstaller, and Inno Setup.