Docker¶
Build¶
The image is multi-stage and uses uv for fast deterministic installs.
Run — stdio (for Claude Desktop)¶
docker run -i --rm \
-e VMANAGE_HOST=sandbox-sdwan-2.cisco.com \
-e VMANAGE_USERNAME=devnetuser \
-e VMANAGE_PASSWORD='RG!_Yw919_83' \
-v "$(pwd)/specs:/app/specs" \
catalyst-sdwan-super-mcp
The -i keeps stdin open so the MCP client can talk to the server over its standard streams.
Run — SSE (network-accessible)¶
docker run -p 8000:8000 \
-e VMANAGE_HOST=sandbox-sdwan-2.cisco.com \
-e VMANAGE_USERNAME=devnetuser \
-e VMANAGE_PASSWORD='RG!_Yw919_83' \
-v "$(pwd)/specs:/app/specs" \
catalyst-sdwan-super-mcp \
--transport sse --host 0.0.0.0 --port 8000
Run — streamable-http (network-accessible)¶
docker run -p 8000:8000 \
-e VMANAGE_HOST=sandbox-sdwan-2.cisco.com \
-e VMANAGE_USERNAME=devnetuser \
-e VMANAGE_PASSWORD='RG!_Yw919_83' \
-v "$(pwd)/specs:/app/specs" \
catalyst-sdwan-super-mcp \
--transport streamable-http --host 0.0.0.0 --port 8000
Same shape as SSE — only the --transport value changes. As with SSE, binding a
non-loopback host (0.0.0.0) requires transport.auth to be configured, or the
server demotes the bind to loopback at startup.
docker-compose¶
Specs are mounted, not baked in¶
Specs live in a volume so you can upgrade vManage versions without rebuilding the image: