cisco-iosxe-mcp
Provides tools for managing Cisco IOS-XE network devices, including operational reads, configuration preview and application with revert timer safety, saving configuration, and reloading devices.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@cisco-iosxe-mcpshow interface status on core-router"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
cisco-iosxe-mcp
An MCP server that exposes Cisco IOS-XE
devices as tools an LLM client can call. Named operational reads, plus a
configuration-change path that shows the exact command list, applies it under
configure terminal revert timer, verifies the device still answers on a new
session, and only then confirms.
It speaks MCP over Streamable HTTP, so it runs as its own service on the network
rather than as a local subprocess of one client. Transport to the device is the
IOS-XE CLI over SSH, via scrapli.
Built for universal-network-director,
a chat-driven multi-vendor network manager with a human approval gate on every
write — but it is a standalone MCP server and works with any MCP client.
Not affiliated with, endorsed by, or supported by Cisco Systems, Inc. "Cisco" and "IOS-XE" are trademarks of their respective owners and are used here only to describe what this software talks to.
The safety model
Two-step, same shape as the Junos path — with one honest difference you have to understand before using it.
Step 1 — preview shows the command list, not a diff
preview_config_change returns the exact commands that would be sent, the
device they'd go to, and the current state of the lines they touch. You approve
that.
This is weaker than a Junos show | compare. Junos loads a candidate config
and the device computes the real diff; IOS-XE has no candidate configuration, so
there is nothing to ask the device to diff against. The preview here is the
change as written, checked against what's currently configured — not the
device's own account of what would result. Read the commands, not just the
summary.
Step 2 — apply under a revert timer
write_apply_config_block takes only a preview id — it cannot apply anything
that wasn't previewed. The commands go in under configure terminal revert timer <n>: live immediately, but IOS-XE rolls the configuration back
automatically unless a configure confirm arrives in time. This server then
reconnects on a new SSH session to prove the device is still reachable, and
confirms only if it is. Lock yourself out and the box undoes the change.
Device prerequisite Junos does not have: the IOS
archivefeature must be configured (archive/path ...) or the revert timer has no rollback point and the safety net silently isn't there.get_archive_statusreports this per device, andwrite_apply_config_blockrefuses when it's missing rather than applying unprotected.
There is deliberately no free-form command tool. Every operational read runs a command built from a fixed template plus validated arguments. The one place the model composes text freely — a configuration block — is gated, shown to a human verbatim, and applied under the revert timer.
Related MCP server: Itential MCP Server
Read this before you point it at production
Three of the nineteen tools change state, and this server does not ask before
executing them. The write_ prefix is a convention so your client can gate
them.
Tool | What it does | Risk |
| Applies a previewed command list | Whatever the commands say. Behind a revert timer with reachability verification — but only if |
| Copies running-config to startup-config | Writes no new configuration — it makes the current one survive a reload, including changes you were still deciding about. |
| Reboots the device, optionally after a delay | Takes the device down. Not revertible. Unsaved configuration is lost; saved configuration comes back. |
Note the asymmetry the prefix encodes: write_ means "a human must approve
this", not "this edits the configuration". write_save_config adds no
configuration at all, and is gated because making a change permanent is a
decision someone should take deliberately.
cancel_reload is ungated on purpose — it is a recovery action, and
requiring an approval round-trip to stop a pending reboot is the wrong trade.
Scope the device account read-only unless you specifically intend the writes to work. That control lives on the device, not in this code.
The MCP endpoint has no authentication
This server exposes its tools to anyone who can reach its port. There is no token, no client auth, no TLS on the MCP side.
MCP_HOST defaults to 127.0.0.1 for that reason. The container image sets
0.0.0.0 because it has to, which means publishing the container's port puts
an unauthenticated path to your routers on that interface. Keep it on an
internal network with the client, or terminate TLS and authentication in front
of it.
Device inventory
Device credentials live in a JSON file mounted read-only into the container —
never baked into the image, never committed. It holds plaintext SSH
credentials, so chmod 600 it and own it as the uid the container runs as.
Same shape as the Junos gateway's inventory, so there is one format to learn,
plus an optional enable_password:
{
"csr-lab": {
"ip": "192.0.2.53",
"port": 22,
"username": "automation",
"auth": { "type": "password", "password": "..." }
}
}enable_password is read only if a device actually needs it — an account that
is already privilege 15 lands at # and needs no secondary escalation.
Use a different file from the Junos gateway's. Separate containers holding separate credentials is the reason the servers are split at all: a bug in this one cannot reach your firewalls.
Container uid. The image creates a uid-1000 passwd entry deliberately. scrapli's
systemtransport execs thesshbinary, and OpenSSH refuses to run when the calling uid has no/etc/passwdentry — the symptom is a misleading "EOF reading from transport" rather than anything naming the cause.
Running it
docker build -t cisco-iosxe-mcp .
docker run --rm \
-v "$PWD/secrets/devices.json:/app/config/devices.json:ro" \
--user 1000:1000 \
-p 127.0.0.1:8004:8004 \
cisco-iosxe-mcpVariable | Default | Meaning |
|
| Device inventory path |
|
| Seconds a preview stays applicable |
|
| Bind address (the image sets |
|
| Bind port |
Tests
docker run --rm cisco-iosxe-mcp python test_arg_validation.py
docker run --rm cisco-iosxe-mcp python test_reload.pyBoth are offline — no device contact, no credentials needed.
test_reload.py replays the exact bytes a real IOS-XE box sent for
reload in 5, reload cancel and the confirmation prompts, including the case
where the save prompt never appears.
Tool reference
TOOLS.md has the tool-by-tool reference: arguments, what each one
returns, which need approval, and the reasoning behind the gate design.
License
Apache-2.0. See LICENSE.
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- Alicense-qualityAmaintenanceAn MCP server that allows LLMs to create, configure, validate, and explain Cisco Packet Tracer network topologies. It provides a comprehensive suite of tools for generating deployment scripts, CLI configurations, and automated network troubleshooting.129MIT

Itential MCP Serverofficial
AlicenseBqualityAmaintenanceMCP server for connecting LLMs to Itential Platform, enabling network automation, workflow orchestration, and platform monitoring.7635GPL 3.0- Alicense-qualityCmaintenanceMCP server for network operations that lets AI assistants interact with Cisco/Juniper network devices through safe, well-defined tools like compliance audits and configuration backups.MIT
- Flicense-qualityDmaintenanceMCP server for Cisco Catalyst SD-WAN Manager (vManage) that exposes REST API as tools for AI assistants to query and manage SD-WAN fabric, including device management, monitoring, templates, and policies.8
Related MCP Connectors
MCP server for AI agents to plan, verify, and deploy Cloudflare-native apps.
MCP server for Pentest-Tools.com: run scans, manage findings and reports via your preffered LLM.
MCP server providing access to the Scorecard API to evaluate and optimize LLM systems.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/anderson-jason573/cisco-iosxe-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server