# Radkit Netops Agent

> A NetOps Agent definition for Cisco RADKit using the official MCP server and other resources

- **Type:** MCP server
- **Install:** `agentstack add mcp-cisco-radkit-radkit-netops-agent`
- **Verified:** Yes — security-reviewed for prompt injection and unsafe behavior
- **Seller:** [Cisco-RADKit](https://agentstack.voostack.com/s/cisco-radkit)
- **Installs:** 0
- **Category:** [Integrations](https://agentstack.voostack.com/c/integrations)
- **Latest version:** 0.1.0
- **License:** Apache-2.0
- **Upstream author:** [Cisco-RADKit](https://github.com/Cisco-RADKit)
- **Source:** https://github.com/Cisco-RADKit/radkit-netops-agent
- **Website:** https://radkit.cisco.com/docs/introduction.html

## Install

```sh
agentstack add mcp-cisco-radkit-radkit-netops-agent
```

Requires the [AgentStack CLI](https://agentstack.voostack.com/docs/cli). Works with Claude Code, Cursor, and any MCP-compatible agent.

## About

🛠️ RADKit NetOps Agent

  A multi-tool network housekeeping AI agent use case for your
  Cisco RADKit service.

---

## 📘 About

This repository provides a reference implementation for running MCP servers and using them as tools for an AI agent specialized in network operations.

Included components:

| Component | Purpose |
|---|---|
| 🌐 **RADKit** MCP server | Inventory access and network operations |
| 🧩 **GitHub** MCP server | Repository and issue management workflows |
| 🗺️ **DrawIO** MCP server | Diagram authoring workflows |

These three MCP servers are implemented as services in Docker Compose.

This project includes instructions on how to set up the environment, run containers that serve these MCP servers, and onboard them into the open-source [LibreChat](https://www.librechat.ai/) platform to create an AI agent with a specific persona.

## ⚙️ The official RADKit MCP server

RADKit includes an MCP server that can connect to your RADKit service and use the [Client API](https://radkit.cisco.com/docs/client_api/index.html) to enable AI-driven operations across your device inventory.

This MCP server exposes a single tool: __radkit_eval__. Its purpose is to generate and execute Python code based on the Client API, which optimizes how your agent interacts with your RADKit service. Instead of exposing one tool per activity (retrieve inventory, execute commands, and so on), the MCP server can generate a Python snippet that dynamically uses Client API features such as filters and many-to-many command execution across devices.

### Testing your RADKit MCP server

> If you want to deploy the AI Agent right away, skip to the [Running the AI Agent](#running-the-ai-agent) section.

To deploy and test your RADKit MCP server stand-alone (no Docker), follow these steps:

Ensure the following are installed on your host system:

- Python 3.12+
- uv

From repository root:

```bash
cd radkit-mcp
```

Create and activate a virtual environment:

```bash
uv venv -p 3.13
source .venv/bin/activate
```

Install the dependencies:

```bash
uv sync
```

Create your local service config from the example:

```bash
cp service.config.direct.example service.config.direct
```

Then edit your `service.config.direct` file with your RADKit connection values:

```json
{
  "type": "direct",
  "username": "your_user@your_domain.com",
  "password_base64": "your_E2EE_password_from_the_webui_in_base64",
  "host": "your_radkit_host",
  "rpc_port": your_radkit_rpc_port
}
```

> ⚠️ When choosing `direct`, your RADKit service needs to be enabled with RPC and have a RPC port assigned. This can be checked by navigating in your service's Web UI to `Settings > service.connectivity.port_direct_rpc`. Default is **8181**

> ⚠️ The **E2EE password** for your remote user can be found in the user details in the Web UI: `Remote Users >  > E2EE validation token`. **It is NOT encoded in base64** by default. Encode it before adding it to the file.

Once the file details are populated, start the RADKit MCP server with the following command:

```bash
radkit-llm \
  --setting llm.mcp_server.service_config_path "service.config.direct" \
  --setting llm.mcp_server.sandbox "SUBPROCESS" \
  --setting llm.mcp_server.mcp_log_dir "mcp-logs/" \
  --setting llm.mcp_server.prompt_override_path "radkit-mcp-prompt.txt" \
  --setting llm.mcp_server.profile_path "radkit-mcp-profile.py" \
  --setting llm.mcp_server.auto_approve True \
  --setting llm.mcp_server.port 8082 \
  --setting llm.mcp_server.listen_addresses '["0.0.0.0"]' \
  mcp-server
```

### About the `--profile` and `--prompt` MCP server options

The official RADKit MCP server supports capability expansion in both request processing and LLM behavior through profiles and prompts.

A **profile** is a Python script executed at sandbox startup (as documented by `radkit-llm mcp-server --help`).

Its purpose is to inject custom Python functions and policy controls into the runtime scope used by `radkit_eval`.

In this repository, [radkit-mcp-profile.py](./radkit-mcp/radkit-mcp-profile.py) is used to enforce command governance:

- It wraps `execute_cli_commands` with a prefix-based allow list.
- It enforces behavior based on `RADKIT_ACCESS_MODE` (`show`, `full`, `conf`, `debug`).
- It blocks disallowed commands before they are sent to target devices.

A **prompt** file (`--prompt`) appends additional instruction text to the MCP server's built-in system prompt.

In this repository, [radkit-mcp-prompt.txt](./radkit-mcp/radkit-mcp-prompt.txt) provides execution guidance for `radkit_eval`, including:

- Safety pre-checks (call `get_access_mode()` before command execution).
- Preferred helper usage patterns (single `execute_cli_commands(...)` call with full device/command sets).
- Network-specific selection guidance (for example, IOS_XE filtering) and HTTP helper usage for external APIs.
- Output-formatting expectations (clear formatting and summarization for large outputs).

## 🤖 Running the AI Agent

This workflow runs RADKit MCP, GitHub MCP, and DrawIO MCP concurrently as Docker containers, and then onboards each server into LibreChat.

### Step 1: Prepare environment

```bash
# From repository root
cp .env.example .env
```

Update `.env` with at least the following:

- `GITHUB_PAT` (required for GitHub MCP)
- RADKit settings if defaults were modified (`RADKIT_SERVICE_CONFIG`, `RADKIT_PROFILE`, `RADKIT_PROMPT_FILE`)

If RADKit files remain at their default repository paths, setting `GITHUB_PAT` is typically sufficient.

Default ports:

- RADKit MCP: `8082`
- GitHub MCP: `8083`
- DrawIO MCP: `8084`

### Step 2: Start all servers

```bash
docker compose up -d --build
docker compose ps
```

Expected result: three running services (`radkit-mcp`, `github-mcp`, `drawio-mcp`) available in the following URLs:

| MCP Server | Endpoint |
|---|---|
| 🌐 RADKit MCP | `http://localhost:8082/mcp` |
| 🧩 GitHub MCP | `http://localhost:8083/mcp` |
| 🗺️ DrawIO MCP | `http://localhost:8084/mcp` |

### Step 3: Onboard MCP Servers in LibreChat

In LibreChat, register each MCP server using **Streamable HTTP** transport.

> ⚠️ If LibreChat runs in a container with a different network namespace, use `host.docker.internal` instead of `localhost`.

### Step 4: Create the AI Agent

In LibreChat, navigate to the left menu and click `Agent Builder`. Then populate the required information:

In the `Instructions` section, copy and paste the contents of [AGENT.md](AGENT.md). This defines the agent persona and guides how it interacts with MCP servers, users, and incoming requests.

In the section `MCP server tools`, select the servers that you just onboarded:

### Step 5: Test!

Click on the `New Chat` icon and in the drop-down list of `Select Model`, look for your agent:

## 🧪 Usage examples

💬 _"Please show me the devices in my inventory"_

---

💬 _"Please create a new loopback interface 300 name OOB address 2.2.2.2/32 on device iosv-l2"_

The AI Agent validates all intents against current configurations before proceeding. If there are conflicts, these are highlighted. If not, explicit approval is requested before proceeding to commit.

---

💬 _"Please check compliance of all my IOSXE devices against the best practices of this hardening guide: `https://sec.cloudapps.cisco.com/security/center/resources/IOS_XE_hardening`"_

---

💬 _"Please create a detailed report with these findings and save it in our repository"_

The AI agent uses the GitHub MCP server for committing [this report with the findings of the compliance audit](https://github.com/ponchotitlan/radkit-netops-agent/blob/main/reports/iosxe-hardening-compliance-report.md).

---

💬 _"Please create an issue per device"_

[This](https://github.com/ponchotitlan/radkit-netops-agent/issues/1) and [this](https://github.com/ponchotitlan/radkit-netops-agent/issues/2) issues are generated on GitHub with an action plan to address the findings of the compliance audit.

---

💬 _"Please generate a diagram showing the L2 connectivity between the devices in my inventory. Display the interfaces name on it"_

The requested diagram is generated using the DrawIO MCP, and by default the AI Agent displays the _Mermaid_ code in the chat, which is compatible with LibreChat, therefore the diagram is rendered as part of the conversation.

---

Made with ☕️ by Poncho Sandoval - `Developer Advocate 🥑 @ DevNet - Cisco Systems 🇵🇹`

[](https://www.linkedin.com/in/asandovalros/)

## Source & license

This open-source MCP server is cataloged on AgentStack and links to its original source — we do not rehost the code.

- **Author:** [Cisco-RADKit](https://github.com/Cisco-RADKit)
- **Source:** [Cisco-RADKit/radkit-netops-agent](https://github.com/Cisco-RADKit/radkit-netops-agent)
- **License:** Apache-2.0
- **Homepage:** https://radkit.cisco.com/docs/introduction.html

Install and usage instructions live in the source repository linked above.

## Pricing

- **Free** — Free

## Security capabilities

Automated source analysis of v0.1.0 — what this tool can access:

- **Network access:** no
- **Filesystem access:** no
- **Shell / process execution:** yes
- **Environment & secrets:** yes
- **Dynamic code execution:** no

*"Yes" means the capability is present in the source — more access means more to trust, not that it is unsafe.*


## Versions

- **0.1.0** — security scan: passed — Imported from the upstream source.

## Links

- Listing page: https://agentstack.voostack.com/l/mcp-cisco-radkit-radkit-netops-agent
- Seller: https://agentstack.voostack.com/s/cisco-radkit
- Browse the marketplace: https://agentstack.voostack.com/browse

---
Listed on AgentStack — the marketplace for AI agent skills and MCP servers. Every listing is security-reviewed. Creators keep 70%.
