<h1 align="center">โจ๐ค Cisco RADKit MCP Server<br /><br />
<div align="center">
<img src="images/radkit_mcp_logo.png" width="500"/>
</div>
<div align="center">
<img src="https://img.shields.io/badge/Cisco-RADKit-049fd9?style=flat-square&logo=cisco&logoColor=white" alt="Cisco RADKit">
<img src="https://img.shields.io/badge/MCP-Protocol-000000?style=flat-square&logo=anthropic&logoColor=white" alt="MCP">
<img src="https://img.shields.io/badge/FastMCP-Library-7B2CBF?style=flat-square&logo=python&logoColor=white" alt="FastMCP">
<img src="https://img.shields.io/badge/Python-3.10+-3776AB?style=flat-square&logo=python&logoColor=white" alt="Python">
</div>
<div align="center">
<a href="https://deepwiki.com/CiscoDevNet/radkit-mcp-server-community"><img src="https://deepwiki.com/badge.svg" alt="Ask DeepWiki"></a>
<a href="https://www.youtube.com/watch?v=lsj05owx2Q0">
<img src="https://img.shields.io/badge/Watch%20Hack%20The%20RADKit!%20Episode%20now-FF0000?style=flat-square&logo=youtube&logoColor=white" alt="Watch on YouTube">
</a>
</div>
</h1>
<div align="center">
A <strong>stand-alone MCP server</strong> built with <a href="https://github.com/modelcontextprotocol/fastmcp"><strong>FastMCP</strong></a> that exposes key functionalities of the <a href="https://radkit.cisco.com/"><strong>Cisco RADKit</strong></a> SDK as MCP tools.
</br>It is designed to be connected to any <strong>MCP client</strong> and <strong>LLM</strong> of your choice, enabling intelligent interaction with network devices through Cisco RADKit.
<br /><br />
</div>
> **Disclaimer**: This MCP Server is not an official Cisco product. It was developed for experimentation and learning purposes.
## ๐ Overview
This MCP server acts as a lightweight middleware layer between the **Cisco RADKit** service and an **MCP-compatible client**.
It allows the LLM to inspect and interact with devices onboarded in the RADKit inventory, fetch device attributes, and even execute CLI commands โ all through structured MCP tools.
## โ๏ธ Features
- ๐ **Plug-and-play MCP server** โ works with any MCP-compatible client.
- ๐ **Inventory discovery** โ list all onboarded network devices.
- ๐ง **Device introspection** โ fetch device attributes and capabilities.
- ๐ฅ๏ธ **Command execution** โ run CLI commands on network devices.
- ๐ฆ **Fully type-hinted tools** for clarity and extensibility.
## ๐ Included libraries
All required libraries are mentioned in the file `requirements.txt`, including their fixed versions.
- `cisco_radkit_client`==1.9.0
- `cisco_radkit_common`==1.9.0
- `cisco_radkit_service`==1.9.0
- `fastmcp`==2.13.1
## ๐งฐ Exposed MCP Tools
| Tool Name | Description | Inputs | Returns | Use Case |
|------------|--------------|---------|----------|-----------|
| **`get_device_inventory_names()`** | Returns a string containing the names of devices onboarded in the Cisco RADKit inventory. | *None* | `str`: List of onboarded devices (e.g. `{"p0-2e", "p1-2e"}`) | Use this first when the user asks about "devices", "network", or "all devices". |
| **`get_device_attributes(target_device: str)`** | Returns detailed information about a specific device in JSON format. | `target_device (str)`: Target device name. | `str`: JSON with attributes including name, host, type, configs, SNMP/NETCONF status, capabilities, etc. | Use this when the user asks about a specific device. |
| **`exec_cli_commands_in_device(target_device: str, cli_command: str)`** | Executes a CLI command or commands on a target device and returns the raw text result. | `target_device (str)`: Device name.<br>`cli_commands ([str])`: CLI command or commands to execute. | `str`: Raw output of the executed command. | Use this only if info is unavailable in `get_device_attributes()` or when explicitly asked to โrunโ or โexecuteโ a command. |
## ๐งฉ Requirements
- Python 3.10+
- Active Cisco RADKit service
- At least one read-only/RW user onboarded in the Cisco RADKit service
For more information about setting up a Cisco RADKit service, visit [this link](https://radkit.cisco.com/#Start).
## ๐ ๏ธ Installation
Clone the repository in your deployment environment.
```bash
git clone https://github.com/ponchotitlan/radkit-mcp-server.git
cd radkit-mcp-server
```
## โ๏ธ Setup
Execute the included assistant script in a terminal based on your type of host OS:
๐ง๐ Linux/MacOS:
```bash
chmod +x setup.sh
```
```bash
bash setup.sh
```
๐ช Windows:
```bash
setup.bat
```
The assistant will first create a virtual environment folder **radkit-mcp-server/.venv/** with all the python libraries required. Afterwards, it will trigger the following assistant:
```bash
โญโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฎ
โ ๐ Cisco RADKit MCP Server Utility Tool โ
โฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ
? Choose an option: (Use arrow keys)
ยป 1. ๐พ Onboard user to non-interactive Cisco RADKit authentication
2. ๐ Generate .env file for Cisco RADKit MCP server
Exit
```
### ๐พ 1. Non-interactive Cisco RADKit authentication setup
The MCP server makes use of certificate login to avoid asking for Web UI authentication every time a tool is used. For that, the certificates need to be generated in the host. Select the first option and follow the instructions.
```bash
โญโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฎ
โ ๐ Cisco RADKit MCP Server Utility Tool โ
โฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ
? Choose an option: 1. ๐พ Onboard user to non-interactive Cisco RADKit authentication
? Enter Cisco RADKit username: ponchotitlan@cisco.com
โญโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฎ
โ Starting Cisco RADKit onboarding for user: ponchotitlan@cisco.com โ
โฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ
A browser window was opened to continue the authentication process. Please follow the instructions there.
Authentication result received.
New private key password: ***********
Confirm: ***********
The private key is a very sensitive piece of information. DO NOT SHARE UNDER ANY CIRCUMSTANCES, and use a very strong passphrase. Please consult the documentation for more details.
<frozen radkit_client.async_.client>:891: UserWarning: The private key is a very sensitive piece of information. DO NOT SHARE UNDER ANY CIRCUMSTANCES, and use a very strong passphrase. Please consult the documentation for more details.
```
**Take note of the password provided, as it will be needed for the 2nd option!**</br>
Now, select the second option:
### ๐ 2. Generate .env file
Provide the information requested. The password is the one just setup in the first option.
```bash
? Choose an option: 2. ๐ Generate .env file for Cisco RADKit MCP server
โญโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฎ
โ Warning: Make sure Cisco RADKit certificates for this username already exist. โ
โ If not, run the onboarding process first using option 1. โ
โฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ
? Enter Cisco RADKit username: ponchotitlan@cisco.com
? Enter Cisco RADKit service code: aaaa-bbbb-cccc
? Enter non-interactive authentication password: ***********
```
This MCP server supports both `stdio` and `https` transport methods. When prompted, choose the one that you would like to use:
```bash
? Select MCP transport mode: (Use arrow keys)
ยป stdio
https
```
Default choice is `stdio`. Otherwise, if `https` is selected, you will be prompted for the following information:
```bash
? Select MCP transport mode: https
? Enter MCP host: 0.0.0.0
? Enter MCP port: 8000
โญโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฎ
โ โ
.env file generated successfully! โ
โ Saved as .env โ
โฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ
```
The file **radkit-mcp-server/.env** is generated with environment variables that the MCP Server needs.</br></br>
โ
**Your MCP server is ready for use!**
## โก๏ธ Usage example: Claude Desktop
The Claude Desktop application provides an environment which integrates the Claude LLM and a rich MCP Client compatible with this MCP Server.
To get started, download the [Claude Desktop app](https://claude.ai/download) for your host OS, and choose the LLM usage plan that best fits your needs.
Afterwards, edit the **radkit-mcp-server/claude_desktop_config.json** file included in this repository to point to the **absolute paths** of your _.venv_ and _mcp_server.py_ files:
```json
{
"mcpServers": {
"radkit-mcp-server": {
"command": "/Users/ponchotitlan/Documents/radkit-mcp-server-community/.venv/bin/python",
"args": [
"/Users/ponchotitlan/Documents/radkit-mcp-server-community/mcp_server.py"
],
"description": "Cisco RADKit MCP Server - Community"
}
}
}
```
Then, copy this file to the location of your Claude Desktop application' configurations. The directory varies depending on your host OS:
๐ MacOS:
```bash
cp claude_desktop_config.json ~/Library/Application\ Support/Claude
```
๐ช Windows:
```bash
cp claude_desktop_config.json %APPDATA%\Claude\
```
๐ง Linux:
```bash
cp claude_desktop_config.json ~/.config/Claude/
```
Now, restart your Claude Desktop app. Afterwards, if you navigate to **Configurations/Developer/**, you should see the MCP Server up and running:
<div align="center">
<img src="images/claude_mcp_okAsset 1.png" width="500"/>
</div>
### โจ Prompt examples
**๐ Show the inventory of your Cisco RADKit service**</br>
One of the MCP server tools provides a list of device names.
<div align="center">
<img src="images/radkit_mcp_demo_1_inventory.gif"/>
</div>
</br>**๐ฐ Ask specific questions about a device**</br>
Another MCP server tool provides information of the device if available directly in the Cisco RADKit SDK.
<div align="center">
<img src="images/radkit_demo_2_device_type.gif"/>
</div>
</br>Otherwise, a command is executed in the device via a MCP server tool to get the information required.
<div align="center">
<img src="images/radkit_demo_3_interfaces.gif"/>
</div>
</br>**๐บ๏ธ Complex querying using networking data**</br>
The LLM can use the information from multiple data network queries to build, for example, a topology diagram.
<div align="center">
<img src="images/radkit_demo_4_topology.gif"/>
</div>
</br>This diagram can be later refined with more information from the network as required.
<div align="center">
<img src="images/radit_demo_5_enhanced_topology.gif"/>
</div>
</br>**โฌ๏ธ Push configurations**</br>
Not everything is query information! **If the Cisco RADKit user onboarded in the MCP server is enabled with Write privileges**, commit operations can take place.
<div align="center">
<img src="images/radkit_demo_6_config_commit.gif"/>
</div>
</br>These are just some examples of what can be done with this MCP server!
---
<div align="center"><br />
Made with โ๏ธ by Poncho Sandoval - <code>Developer Advocate ๐ฅ @ DevNet - Cisco Systems ๐ต๐น</code><br /><br />
<a href="mailto:alfsando@cisco.com?subject=Question%20about%20[RADKIT%20MCP]&body=Hello,%0A%0AI%20have%20a%20question%20regarding%20your%20project.%0A%0AThanks!">
<img src="https://img.shields.io/badge/Contact%20me!-blue?style=flat&logo=gmail&labelColor=555555&logoColor=white" alt="Contact Me via Email!"/>
</a>
<a href="https://github.com/CiscoDevNet/radkit-mcp-server-community/issues/new">
<img src="https://img.shields.io/badge/Open%20Issue-2088FF?style=flat&logo=github&labelColor=555555&logoColor=white" alt="Open an Issue"/>
</a>
<a href="https://github.com/ponchotitlan/radkit-mcp-server/fork">
<img src="https://img.shields.io/badge/Fork%20Repository-000000?style=flat&logo=github&labelColor=555555&logoColor=white" alt="Fork Repository"/>
</a>
</div>