{"id":50172719,"url":"https://github.com/thomaschristory/catalyst-sdwan-super-mcp","last_synced_at":"2026-06-11T16:00:16.640Z","repository":{"id":359798269,"uuid":"1247091560","full_name":"thomaschristory/catalyst-sdwan-super-mcp","owner":"thomaschristory","description":"FastMCP server for Cisco Catalyst SD-WAN Manager (vManage), driven by the official OpenAPI specs. Dynamic tool generation, read-only by default, JWT + session auth.","archived":false,"fork":false,"pushed_at":"2026-06-11T13:48:11.000Z","size":3050,"stargazers_count":2,"open_issues_count":2,"forks_count":2,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-11T14:19:12.266Z","etag":null,"topics":["cisco","claude","fastmcp","llm","mcp","network-automation","openapi","python","sd-wan","vmanage"],"latest_commit_sha":null,"homepage":"https://thomaschristory.github.io/catalyst-sdwan-super-mcp/","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/thomaschristory.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"docs/contributing/development.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null}},"created_at":"2026-05-22T22:27:57.000Z","updated_at":"2026-06-11T13:55:28.000Z","dependencies_parsed_at":"2026-05-28T03:00:57.466Z","dependency_job_id":null,"html_url":"https://github.com/thomaschristory/catalyst-sdwan-super-mcp","commit_stats":null,"previous_names":["thomaschristory/catalyst-sdwan-super-mcp"],"tags_count":4,"template":false,"template_full_name":null,"purl":"pkg:github/thomaschristory/catalyst-sdwan-super-mcp","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thomaschristory%2Fcatalyst-sdwan-super-mcp","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thomaschristory%2Fcatalyst-sdwan-super-mcp/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thomaschristory%2Fcatalyst-sdwan-super-mcp/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thomaschristory%2Fcatalyst-sdwan-super-mcp/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/thomaschristory","download_url":"https://codeload.github.com/thomaschristory/catalyst-sdwan-super-mcp/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thomaschristory%2Fcatalyst-sdwan-super-mcp/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34206492,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-11T02:00:06.485Z","response_time":57,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cisco","claude","fastmcp","llm","mcp","network-automation","openapi","python","sd-wan","vmanage"],"created_at":"2026-05-25T00:12:22.715Z","updated_at":"2026-06-11T16:00:16.629Z","avatar_url":"https://github.com/thomaschristory.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# catalyst-sdwan-super-mcp\n\n[![lint](https://github.com/thomaschristory/catalyst-sdwan-super-mcp/actions/workflows/lint.yml/badge.svg)](https://github.com/thomaschristory/catalyst-sdwan-super-mcp/actions/workflows/lint.yml)\n[![test](https://github.com/thomaschristory/catalyst-sdwan-super-mcp/actions/workflows/test.yml/badge.svg)](https://github.com/thomaschristory/catalyst-sdwan-super-mcp/actions/workflows/test.yml)\n[![docs](https://github.com/thomaschristory/catalyst-sdwan-super-mcp/actions/workflows/docs.yml/badge.svg)](https://thomaschristory.github.io/catalyst-sdwan-super-mcp/)\n[![PyPI](https://img.shields.io/pypi/v/catalyst-sdwan-super-mcp.svg)](https://pypi.org/project/catalyst-sdwan-super-mcp/)\n[![License: Apache 2.0](https://img.shields.io/badge/License-Apache_2.0-blue.svg)](LICENSE)\n\nA [FastMCP](https://gofastmcp.com) 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.\n\nTools are **generated dynamically from the official OpenAPI specs** — drop in a new spec, the tools rebuild themselves. No per-version Python.\n\n**Documentation:** \u003chttps://thomaschristory.github.io/catalyst-sdwan-super-mcp/\u003e\n\n---\n\n## Try it in 60 seconds against the Cisco DevNet sandbox\n\n```bash\ngit clone https://github.com/thomaschristory/catalyst-sdwan-super-mcp.git\ncd catalyst-sdwan-super-mcp\nuv sync\n\n# Credentials for Cisco's public always-on SD-WAN sandbox\ncat \u003e .env \u003c\u003c'EOF'\nVMANAGE_USERNAME=devnetuser\nVMANAGE_PASSWORD=RG!_Yw919_83\nEOF\n\nuv run sdwan-mcp        # stdio, read-only, adaptive tool splitting (default)\n```\n\nThe shipped `sdwan-mcp.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.\n\n**Supported vManage versions: 20.15+.** Older releases are out of scope — see [issue #13](https://github.com/thomaschristory/catalyst-sdwan-super-mcp/issues/13).\n\n### Install from PyPI\n\n```bash\nuv tool install catalyst-sdwan-super-mcp\nsdwan-mcp --help\n```\n\nThe PyPI package ships the server only — no bundled specs. On first run the loader auto-fetches the spec for `sdwan.active_version` from `developer.cisco.com` and writes it under `sdwan.specs_dir` (set `sdwan.auto_fetch: false` to opt out, e.g. for air-gapped deployments). For predictable behaviour you can pre-warm with `sdwan-mcp fetch --version 20.18`. Full instructions: [docs/getting-started/install.md](docs/getting-started/install.md).\n\n---\n\n## What you get\n\n- **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](docs/guides/tool-splitting.md).\n- **Read-only by default.** `--read-write` registers POST/PUT/DELETE/PATCH explicitly.\n- **Two auth modes to vManage:** JWT (vManage 20.18.1+) and JSESSIONID + XSRF (older).\n- **Three transports:** stdio, SSE, streamable-HTTP. The HTTP transports ship with first-class **bearer-token auth** (`transport.auth.type: bearer`) and auto-demote non-loopback binds to `127.0.0.1` when no auth is configured. See [docs/guides/mcp-clients.md](docs/guides/mcp-clients.md).\n- **Response pagination** for bulk endpoints. The dispatcher auto-follows scroll and offset endpoints up to a configurable cap and returns a stitched payload with a resumable cursor. See [docs/guides/pagination.md](docs/guides/pagination.md).\n- **Configurable retry + timeout** on the httpx client. Transient `5xx` and connection errors retry with exponential backoff + jitter; mutating verbs are skipped by default. See [docs/reference/configuration.md](docs/reference/configuration.md).\n- **Auto-fetch specs.** Bump `sdwan.active_version` and the loader pulls the matching spec from `developer.cisco.com` on startup. Pre-warm explicitly with `sdwan-mcp fetch --version \u003cV\u003e` or list known versions with `sdwan-mcp list-versions`. See [docs/guides/spec-versions.md](docs/guides/spec-versions.md).\n- **Version diff:** `sdwan-mcp --diff 20.15 20.18` shows added/removed/changed operations before upgrade.\n- **Docker:** multi-stage image, specs mounted as a volume so versions ship without rebuilding.\n\n---\n\n## Project layout\n\n```\nsdwan_mcp/          source package\n  server.py         entrypoint, CLI, subcommands (fetch, list-versions)\n  config.py         YAML + env interpolation\n  loader.py         spec loading, adaptive splitting, indexing\n  auth.py           JWT + session login to vManage\n  transport_auth.py bearer-token middleware for SSE / streamable-HTTP\n  dispatcher.py     httpx client, retry + timeout, param routing\n  pagination.py     scroll + offset auto-follow\n  fetcher/          live spec ingestion from developer.cisco.com (20.16+)\n  tools.py          dynamic MCP tool registration\n  diff.py           version diff utility\ntests/              pytest suite (respx for HTTP)\ndocs/               mkdocs-material site, deployed to GitHub Pages\nspecs/{version}/    OpenAPI YAML/JSON, one folder per vManage version\n.github/workflows/  lint, test, docker, docs, release\n```\n\n---\n\n## Architecture quick look\n\nSee [docs/architecture/overview.md](docs/architecture/overview.md). At a glance:\n\n```\nLLM ──(MCP)──► FastMCP ──► tools.py ──► dispatcher.py ──► httpx ──► vManage\n                  ▲                           │\n                  │           auth.py ◄───────┘\n              loader.py\n                  ▲\n              specs/{version}/*.{yaml,json}\n```\n\n---\n\n## Status\n\nPre-1.0. Read-only is the safe default and the recommended starting posture; `--read-write` opt-in is exercised against the DevNet sandbox. Released versions are tagged on [PyPI](https://pypi.org/project/catalyst-sdwan-super-mcp/) and tracked in [CHANGELOG.md](CHANGELOG.md). Open work is on the [issue tracker](https://github.com/thomaschristory/catalyst-sdwan-super-mcp/issues).\n\nLicense: Apache 2.0.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fthomaschristory%2Fcatalyst-sdwan-super-mcp","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fthomaschristory%2Fcatalyst-sdwan-super-mcp","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fthomaschristory%2Fcatalyst-sdwan-super-mcp/lists"}