Ciscou 2385 Radkit MCP
Source code of the session CISCOU-2385: Chatting With My Network via Cisco RADKit and FastMCP
Ask AI about Ciscou 2385 Radkit MCP
Powered by Claude ยท Grounded in docs
I know everything about Ciscou 2385 Radkit MCP. Ask me about installation, configuration, usage, or troubleshooting.
0/500
Reviews
Documentation
โจCISCOU-2385โจ
Chatting With My Network via Cisco RADKit and FastMCP
This is a stand-alone MCP server built with FastMCP that exposes key functionalities of the Cisco RADKit SDK as MCP tools.
It is designed to be connected to any MCP client and LLM of your choice, enabling intelligent interaction with network devices through Cisco RADKit.
โ ๏ธ Disclaimer: This MCP Server is not an official Cisco product. It was developed for learning purposes as part of Cisco U.
๐ 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.
The following diagram shows how this MCP works with your favourite LLM and your Cisco RADKit onboarded network:
Only CLI operations are supported by this experimental MCP server
๐งฐ 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_command_in_device(target_device: str, cli_commands: [str]) | Executes a CLI command on a target device and returns the raw text result. | target_device (str): Device name.cli_commands ([str]): CLI command 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+
- uv Python package manager
- Active Cisco RADKit service
- At least one remote user onboarded in the Cisco RADKit service
๐ ๏ธ Installation
Clone the repository in your deployment environment.
git clone https://github.com/ponchotitlan/ciscou-2385-radkit-mcp
cd ciscou-2385-radkit-mcp
โ๏ธ Setup
Execute the included assistant script in a terminal:
uv sync
uv run ciscou-radkit-onboarding
The following assistant will be triggered:
โญโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฎ
โ ๐ 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.
โญโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฎ
โ ๐ 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!
Now, select the second option:
๐ 2. Generate .env file
Provide the information requested. The password is the one just setup in the first option.
? 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: ***********
โญโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฎ
โ โ
.env file generated successfully! โ
โ Saved as .env โ
โฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ
The file .env is generated with environment variables that the MCP Server needs.
โ
Your MCP server is ready for use!
To run it, simply use the following command in your terminal:
uv run ciscou-radkit-mcp
You should see the following screen. The URL will change depending on the kind of transport that you setup in your .env file (stdio, http, sse):
2026-01-06 08:43:21,374 - ciscou_radkit_mcp.radkit_mcp_server - INFO - Starting MCP server with sse transport on 0.0.0.0:8000
โญโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฎ
โ โ
โ โโโ โโโ โโโ โโโ โโโโโ โโโ โโโ โ
โ โโ โโโ โโโ โ โ โ โ โโโ โโโ โ
โ โ
โ FastMCP 2.13.1 โ
โ โ
โ โ
โ ๐ฅ Server name: CiscoURADKitMCP โ
โ โ
โ ๐ฆ Transport: SSE โ
โ ๐ Server URL: http://0.0.0.0:8000/sse โ
โ โ
โ ๐ Docs: https://gofastmcp.com โ
โ ๐ Hosting: https://fastmcp.cloud โ
โ โ
โฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ
[01/06/26 08:43:21] INFO Starting MCP server 'CiscoURADKitMCP' with transport 'sse' on http://0.0.0.0:8000/sse server.py:2055
INFO: Started server process [55969]
INFO: Waiting for application startup.
INFO: Application startup complete.
INFO: Uvicorn running on http://0.0.0.0:8000 (Press CTRL+C to quit)
INFO: 127.0.0.1:54860 - "GET /sse HTTP/1.1" 200 OK
โก๏ธ Usage example: LibreChat app
LibreChat is an open-source app for all your AI conversations, fully customizable and compatible with any AI provider and MCP server, including ours.
For this demo, we will use the Docker version of this app for a local deployment.
You need to have Docker installed in your host environment to run this deployment.
Prerequisites
- Docker and Docker Compose installed
- LibreChat v0.7.0 or later
- CiscoU RADKit MCP Server running in SSE mode (configured in previous steps)
Setup Steps
1. Clone and Setup LibreChat
Clone the LibreChat repository and copy the default environment file:
git clone https://github.com/danny-avila/LibreChat.git
cd LibreChat
cp .env.example .env
2. Configure LibreChat for RADKit MCP
Copy the pre-configured files from this repository into your LibreChat directory:
# From the ciscou-2385-radkit-mcp directory
# Replace /path/to/LibreChat with your actual LibreChat local repository path
cp librechat_setup/librechat.yaml /path/to/LibreChat/librechat.yaml
cp librechat_setup/docker-compose.override.yml /path/to/LibreChat/docker-compose.override.yml
Note: The
librechat.yamlfile already includes the RADKit MCP server configuration athttp://host.docker.internal:8000/sse
3. Start Your MCP Server
In a separate terminal, ensure your RADKit MCP server is running in SSE mode:
# From the ciscou-2385-radkit-mcp directory
# Make sure your .env has: MCP_TRANSPORT=sse
uv run ciscou-radkit-mcp
You should see output confirming SSE transport:
๐ Server URL: http://0.0.0.0:8000/sse
4. Start LibreChat
Now start all containers using Docker Compose:
# From the LibreChat directory
docker compose up -d
5. Connect MCP Server in LibreChat
- Open LibreChat in your browser:
http://localhost:3080/ - Create an account and log in
- Navigate to the left sidebar and click the + button next to Filter MCP servers by name
- The MCP server should already be configured from the
librechat.yamlfile - Verify the connection is active (green indicator)
Important: The MCP server URL in the configuration is
http://host.docker.internal:8000/sseto allow the Docker container to access your host machine's MCP server.
6. Create an agent (optional)
For enforcing additional guardrails and a more defined persona for network automation, you can create a custom agent in the LibreChat UI.
On the main screen, navigate to the right menu and click on Agent Builder > Create New Agent.
In the Instructions box, copy/paste the text of the AGENT.md file included in this repository.
Finally, scroll down and select the RADKit MCP server which should be available in the options.
You can now use this agent for interactions with your RADKit network.
Usage Examples
Once connected, you can interact with your network devices through natural language.
Example conversations:
User: "Show me all my devices"
User: "What are the details of device p0-2e?"
User: "Check the interface status on p0-2e"
User: "Show me the running config for all devices"
Troubleshooting
MCP server not connecting:
- Verify the MCP server is running:
uv run ciscou-radkit-mcp - Check the server is using SSE transport on port 8000
- Ensure
MCP_TRANSPORT=ssein your.envfile - For Linux users:
host.docker.internalmay not work. Use your host's IP address instead inlibrechat.yaml:mcpServers: ciscou-radkit: url: http://192.168.1.XXX:8000/sse # Replace with your host IP - Find your host IP:
# Linux ip addr show | grep "inet " | grep -v 127.0.0.1 # macOS ipconfig getifaddr en0
Agent not appearing:
- Verify the agents directory was created and the file was copied before starting Docker Compose
- Check the container has the volume mounted:
docker exec librechat-api ls -la /app/agents/ - Check LibreChat logs for configuration errors:
docker compose logs api | grep -i agent - If you added the agent after starting containers, restart LibreChat:
docker compose restart api
Volume mount issues:
- Ensure
docker-compose.override.ymlis in the LibreChat root directory - Verify the file has correct YAML syntax (indentation matters!)
- Check Docker Compose reads the override file:
docker compose config | grep -A 5 volumes
Security Considerations
โ ๏ธ Important:
- Never commit your
.envfile with real credentials - Restrict LibreChat access to authorized personnel
- The MCP server includes safety guardrails to prevent destructive operations
- Monitor MCP server logs for suspicious activity
- Use strong passwords for RADKit authentication
