FastMCP server for the Cisco Catalyst SD-WAN Manager (vManage) API, generated dynamically from the official OpenAPI specs.
Project description
catalyst-sdwan-super-mcp
A FastMCP server that exposes the Cisco Catalyst SD-WAN Manager (vManage) REST API as MCP tools, so any MCP-compatible LLM client (Claude Desktop, Claude Code, Cursor, …) can query and manage your SD-WAN overlay.
Tools are generated dynamically from the official OpenAPI specs — drop in a new spec, the tools rebuild themselves. No per-version Python.
Documentation: https://thomaschristory.github.io/catalyst-sdwan-super-mcp/
Try it in 60 seconds against the Cisco DevNet sandbox
git clone https://github.com/thomaschristory/catalyst-sdwan-super-mcp.git
cd catalyst-sdwan-super-mcp
uv sync
# Credentials for Cisco's public always-on SD-WAN sandbox
cat > .env <<'EOF'
VMANAGE_USERNAME=devnetuser
VMANAGE_PASSWORD=RG!_Yw919_83
EOF
uv run sdwan-mcp # stdio, read-only, adaptive tool splitting (default)
The shipped config.yaml points at sandbox-sdwan-2.cisco.com and ships specs for vManage 20.15, 20.16, and 20.18 in specs/. 20.18 is the default. You don't need a vManage of your own to try it.
Supported vManage versions: 20.15+. Older releases are out of scope — see issue #13.
Already have specs? Install from PyPI
uv tool install catalyst-sdwan-super-mcp
sdwan-mcp --help
The PyPI package ships the server only — point sdwan.specs_dir in your config.yaml at a directory containing the OpenAPI specs (the specs/ folder from this repo works as-is). Full instructions: docs/getting-started/install.md.
What you get
- Adaptive tool splitting. A size-driven splitter (
max_actions_per_tool, default 150) chops huge OpenAPI sections into right-sized tools — 360 tools on 20.18 RW out of the box, all under the cap. See docs/guides/tool-splitting.md. - Read-only by default.
--read-writeregisters POST/PUT/DELETE/PATCH explicitly. - Two auth modes: JWT (vManage 20.18.1+) and JSESSIONID + XSRF (older).
- Three transports: stdio, SSE, streamable-HTTP.
- Version diff:
sdwan-mcp --diff 20.15 20.18shows added/removed/changed operations before upgrade. - Docker: multi-stage image, specs mounted as a volume so versions ship without rebuilding.
Project layout
sdwan_mcp/ source package
server.py entrypoint, CLI
config.py YAML + env interpolation
loader.py spec loading, adaptive splitting, indexing
auth.py JWT + session login
dispatcher.py httpx client, param routing
tools.py dynamic MCP tool registration
diff.py version diff utility
tests/ pytest suite (respx for HTTP)
docs/ mkdocs-material site, deployed to GitHub Pages
specs/{version}/ OpenAPI YAML/JSON, one folder per vManage version
.github/workflows/ lint, test, docker, docs, release
Architecture quick look
See docs/architecture/overview.md. At a glance:
LLM ──(MCP)──► FastMCP ──► tools.py ──► dispatcher.py ──► httpx ──► vManage
▲ │
│ auth.py ◄───────┘
loader.py
▲
specs/{version}/*.{yaml,json}
Status
v0.0.1 — alpha. Works against the DevNet sandbox; read-only mode is the safe default. Known gaps tracked as GitHub issues.
License: Apache 2.0.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file catalyst_sdwan_super_mcp-0.2.0.tar.gz.
File metadata
- Download URL: catalyst_sdwan_super_mcp-0.2.0.tar.gz
- Upload date:
- Size: 3.9 MB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4d63336b3f4ea8bde22e3657212db8ac21ddbd20e140525986520d8658b1ba9d
|
|
| MD5 |
d4d7e7a6bb0593822aa8f8a54e3896e1
|
|
| BLAKE2b-256 |
b9f2dd8339cecb7bd9ac23e7f8e49c42cee3f6ee8be870bec61a373604923d22
|
Provenance
The following attestation bundles were made for catalyst_sdwan_super_mcp-0.2.0.tar.gz:
Publisher:
release.yml on thomaschristory/catalyst-sdwan-super-mcp
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
catalyst_sdwan_super_mcp-0.2.0.tar.gz -
Subject digest:
4d63336b3f4ea8bde22e3657212db8ac21ddbd20e140525986520d8658b1ba9d - Sigstore transparency entry: 1625642396
- Sigstore integration time:
-
Permalink:
thomaschristory/catalyst-sdwan-super-mcp@c5f5221d9b49e22a24d55ebc86979b8b834c859b -
Branch / Tag:
refs/tags/v0.2.0 - Owner: https://github.com/thomaschristory
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@c5f5221d9b49e22a24d55ebc86979b8b834c859b -
Trigger Event:
push
-
Statement type:
File details
Details for the file catalyst_sdwan_super_mcp-0.2.0-py3-none-any.whl.
File metadata
- Download URL: catalyst_sdwan_super_mcp-0.2.0-py3-none-any.whl
- Upload date:
- Size: 48.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1f466228034a8bee07da5907db18dd325a4d948311ddbc30dc3c962bab756e88
|
|
| MD5 |
6d5d59d6eff4149f8d532adf06d56bfa
|
|
| BLAKE2b-256 |
ee40f22ec5b7b3b632a6f2cf24ebdb0b0f6558fd7f06ff96b2f3852cb2af5500
|
Provenance
The following attestation bundles were made for catalyst_sdwan_super_mcp-0.2.0-py3-none-any.whl:
Publisher:
release.yml on thomaschristory/catalyst-sdwan-super-mcp
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
catalyst_sdwan_super_mcp-0.2.0-py3-none-any.whl -
Subject digest:
1f466228034a8bee07da5907db18dd325a4d948311ddbc30dc3c962bab756e88 - Sigstore transparency entry: 1625642406
- Sigstore integration time:
-
Permalink:
thomaschristory/catalyst-sdwan-super-mcp@c5f5221d9b49e22a24d55ebc86979b8b834c859b -
Branch / Tag:
refs/tags/v0.2.0 - Owner: https://github.com/thomaschristory
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@c5f5221d9b49e22a24d55ebc86979b8b834c859b -
Trigger Event:
push
-
Statement type: