RADKit Remote Device Access
MCP Server
- Repository: CiscoDevNet/radkit-mcp-server-community
- Transport: stdio (Python via FastMCP), SSE, or HTTPS
- Requires:
RADKIT_IDENTITY, RADKIT_DEFAULT_SERVICE_SERIAL, active RADKit service instance
- Python: 3.10+
How RADKit Works
RADKit provides a cloud-relayed path to on-premises devices:
NetClaw Agent --> RADKit Cloud --> RADKit Service (on-prem) --> Device (CLI/SNMP)
- The RADKit Service runs inside the network perimeter, onboarded with access to devices
- The RADKit Client (this MCP server) authenticates via certificate-based identity
- All communication is encrypted, relayed through Cisco's RADKit cloud infrastructure
- No direct SSH/SNMP from the agent host to the devices is needed
This is ideal for:
- Air-gapped networks where the AI agent cannot directly SSH to devices
- Cloud-hosted agents that need to reach on-premises devices
- Multi-site operations where a single RADKit service provides access to many devices
- Secure environments where certificate-based auth is required (no passwords in transit)
MCP Tools
| Tool |
Parameters |
What It Does |
get_device_inventory_names |
none |
List all onboarded device names from the RADKit service |
get_device_attributes |
target_device |
Retrieve device details in JSON: host, type, configs, SNMP/NETCONF status, capabilities |
exec_cli_commands_in_device |
target_device, commands, timeout?, max_lines? |
Execute CLI commands on a device with timeout and line-limit controls |
snmp_get |
target_device, oid(s), timeout? |
Perform SNMP GET operations without CLI execution |
exec_command |
target_device, commands |
Structured command execution — returns dict/list with status and truncation info |
Tool Details
get_device_inventory_names
Discovers all devices onboarded to the RADKit service. Call this first to know what devices are available.
Returns a set of device names, e.g.: {"edge-rtr-01", "core-sw-01", "dc-fw-01"}
get_device_attributes
Retrieves detailed JSON attributes for a specific device:
- Name and host address
- Device type (router, switch, firewall, etc.)
- Configuration capabilities (SSH, NETCONF, RESTCONF)
- SNMP status (enabled, community/v3 config)
- Platform details (model, OS, version)
Safe for parallel execution across multiple devices.
exec_cli_commands_in_device
Executes CLI commands on a device through the RADKit relay:
- timeout — maximum wait time per command (prevents hung sessions)
- max_lines — truncate output to N lines (prevents massive output from flooding context)
- Returns raw CLI output as text
Use this for standard show commands, debug captures, and configuration inspection.
snmp_get
Performs SNMP GET without executing CLI:
- Query one or more OIDs in a single call
- Useful for metric polling (uptime, interface counters, CPU utilization)
- Lower overhead than CLI for structured data retrieval
Common OIDs:
| OID |
Metric |
1.3.6.1.2.1.1.1.0 |
System Description |
1.3.6.1.2.1.1.3.0 |
System Uptime |
1.3.6.1.2.1.1.5.0 |
System Name |
1.3.6.1.2.1.2.2.1.2 |
Interface Description |
1.3.6.1.2.1.2.2.1.8 |
Interface Operational Status |
exec_command
Structured command execution that returns a dictionary or list:
- Includes status (success/failure) per command
- Includes truncation info if output exceeded limits
- Better for programmatic processing than raw CLI output
Workflow: Remote Device Discovery
When first connecting via RADKit:
- Inventory:
get_device_inventory_names — what devices are available?
- Attributes:
get_device_attributes for each device — type, platform, capabilities
- Quick health:
snmp_get with sysUpTime (1.3.6.1.2.1.1.3.0) for each device
- Report: device inventory table with type, platform, and uptime
Workflow: Remote CLI Troubleshooting
When investigating an issue on a remote device:
- Identify device:
get_device_inventory_names — find the target device name
- Check capabilities:
get_device_attributes — confirm CLI access is available
- Execute commands:
exec_cli_commands_in_device with timeout and max_lines
show ip interface brief — interface status
show ip route summary — routing table health
show processes cpu sorted — CPU utilization
show logging last 50 — recent syslog messages
- Structured output:
exec_command for commands needing programmatic parsing
- Report: troubleshooting findings with device state
Workflow: Remote SNMP Polling
When collecting metrics from remote devices:
- Inventory:
get_device_inventory_names — target devices
- System info:
snmp_get with sysDescr, sysName, sysUpTime
- Interface status:
snmp_get with ifOperStatus for key interfaces
- Counters:
snmp_get with ifInOctets, ifOutOctets for bandwidth tracking
- Report: SNMP metric summary with uptime and interface health
Workflow: Multi-Site Health Check via RADKit
When checking health across sites served by the RADKit service:
- Inventory:
get_device_inventory_names — all devices across sites
- Attributes:
get_device_attributes for each — group by type and site
- Health commands:
exec_cli_commands_in_device per device:
show version — uptime, software version
show processes cpu | include CPU utilization
show memory statistics
- SNMP baseline:
snmp_get for sysUpTime, interface counters
- Report: multi-site health dashboard with per-device status
Integration with Other Skills
| Skill |
How They Work Together |
pyats-network |
RADKit for cloud-relayed access, pyATS for direct SSH — complementary paths to devices |
pyats-health-check |
RADKit provides remote device data; pyATS health-check procedures analyze it |
pyats-troubleshoot |
RADKit CLI exec for remote devices that pyATS can't reach directly |
pyats-routing |
Use RADKit to collect routing state from remote sites, analyze with routing skill |
pyats-security |
RADKit CLI for remote security audit commands (ACLs, AAA, CoPP) |
meraki-monitoring |
Meraki for cloud-managed devices, RADKit for on-prem devices behind Meraki MX |
te-path-analysis |
ThousandEyes external path + RADKit internal CLI for end-to-end troubleshooting |
nso-device-ops |
NSO for orchestrated config, RADKit for raw CLI access to same devices |
gait-session-tracking |
Record all RADKit remote access sessions in GAIT |
servicenow-change-workflow |
Gate any config changes through RADKit with ServiceNow CRs |
Important Rules
- RADKit is read-write capable — if the onboarded user has write access, CLI commands can push configuration. Always gate config changes with ServiceNow CRs.
- Certificate security is critical — the RADKit private key must never be shared. Use strong passphrases.
- Timeout controls prevent hung sessions — always set reasonable timeouts on CLI commands (default: 30 seconds).
- max_lines prevents context overflow — use line limits for commands with potentially large output (show tech, show run on large configs).
- SNMP is lighter than CLI — prefer
snmp_get over CLI for structured metrics (uptime, counters, status).
- One RADKit service can serve many devices — the service runs on-prem and proxies to all onboarded devices.
- Record in GAIT — log all remote access sessions, commands executed, and findings.
- This is a community project — not an official Cisco product. Use for experimentation, learning, and authorized operations.
Environment Variables
RADKIT_IDENTITY — User email address for RADKit authentication
RADKIT_DEFAULT_SERVICE_SERIAL — RADKit service instance identifier
Container/CI Deployment (base64-encoded credentials)
RADKIT_CERT_B64 — Base64-encoded client certificate
RADKIT_KEY_B64 — Base64-encoded private key
RADKIT_CA_B64 — Base64-encoded CA chain
RADKIT_KEY_PASSWORD_B64 — Base64-encoded key password
Local Development
For local use, RADKit auto-detects certificates in ~/.radkit/identities/ generated during the setup onboarding wizard (bash setup.sh in the cloned repo).
1---
2name: radkit-remote-access
3description: "Cisco RADKit — cloud-relayed remote device access, CLI execution, SNMP polling, device inventory discovery, attribute inspection. Use when accessing remote network devices through a cloud relay, running CLI on air-gapped devices, polling SNMP metrics remotely, or discovering device inventory via RADKit."
4version: 1.0.0
5license: Apache-2.0
6tags: [cisco, radkit, remote-access, cli, snmp, inventory, cloud-relay]
7---
8
9# RADKit Remote Device Access
10
11## MCP Server
12
13- **Repository**: [CiscoDevNet/radkit-mcp-server-community](https://github.com/CiscoDevNet/radkit-mcp-server-community)
14- **Transport**: stdio (Python via FastMCP), SSE, or HTTPS
15- **Requires**: `RADKIT_IDENTITY`, `RADKIT_DEFAULT_SERVICE_SERIAL`, active RADKit service instance
16- **Python**: 3.10+
17
18## How RADKit Works
19
20RADKit provides a **cloud-relayed** path to on-premises devices:
21
22```
23NetClaw Agent --> RADKit Cloud --> RADKit Service (on-prem) --> Device (CLI/SNMP)
24```
25
26- The **RADKit Service** runs inside the network perimeter, onboarded with access to devices
27- The **RADKit Client** (this MCP server) authenticates via certificate-based identity
28- All communication is encrypted, relayed through Cisco's RADKit cloud infrastructure
29- No direct SSH/SNMP from the agent host to the devices is needed
30
31This is ideal for:
32- **Air-gapped networks** where the AI agent cannot directly SSH to devices
33- **Cloud-hosted agents** that need to reach on-premises devices
34- **Multi-site operations** where a single RADKit service provides access to many devices
35- **Secure environments** where certificate-based auth is required (no passwords in transit)
36
37## MCP Tools
38
39| Tool | Parameters | What It Does |
40|------|-----------|--------------|
41| `get_device_inventory_names` | none | List all onboarded device names from the RADKit service |
42| `get_device_attributes` | `target_device` | Retrieve device details in JSON: host, type, configs, SNMP/NETCONF status, capabilities |
43| `exec_cli_commands_in_device` | `target_device, commands, timeout?, max_lines?` | Execute CLI commands on a device with timeout and line-limit controls |
44| `snmp_get` | `target_device, oid(s), timeout?` | Perform SNMP GET operations without CLI execution |
45| `exec_command` | `target_device, commands` | Structured command execution — returns dict/list with status and truncation info |
46
47### Tool Details
48
49#### get_device_inventory_names
50
51Discovers all devices onboarded to the RADKit service. Call this first to know what devices are available.
52
53Returns a set of device names, e.g.: `{"edge-rtr-01", "core-sw-01", "dc-fw-01"}`
54
55#### get_device_attributes
56
57Retrieves detailed JSON attributes for a specific device:
58- **Name** and **host** address
59- **Device type** (router, switch, firewall, etc.)
60- **Configuration capabilities** (SSH, NETCONF, RESTCONF)
61- **SNMP status** (enabled, community/v3 config)
62- **Platform details** (model, OS, version)
63
64Safe for parallel execution across multiple devices.
65
66#### exec_cli_commands_in_device
67
68Executes CLI commands on a device through the RADKit relay:
69- **timeout** — maximum wait time per command (prevents hung sessions)
70- **max_lines** — truncate output to N lines (prevents massive output from flooding context)
71- Returns raw CLI output as text
72
73Use this for standard show commands, debug captures, and configuration inspection.
74
75#### snmp_get
76
77Performs SNMP GET without executing CLI:
78- Query one or more OIDs in a single call
79- Useful for metric polling (uptime, interface counters, CPU utilization)
80- Lower overhead than CLI for structured data retrieval
81
82Common OIDs:
83| OID | Metric |
84|-----|--------|
85| `1.3.6.1.2.1.1.1.0` | System Description |
86| `1.3.6.1.2.1.1.3.0` | System Uptime |
87| `1.3.6.1.2.1.1.5.0` | System Name |
88| `1.3.6.1.2.1.2.2.1.2` | Interface Description |
89| `1.3.6.1.2.1.2.2.1.8` | Interface Operational Status |
90
91#### exec_command
92
93Structured command execution that returns a dictionary or list:
94- Includes **status** (success/failure) per command
95- Includes **truncation info** if output exceeded limits
96- Better for programmatic processing than raw CLI output
97
98## Workflow: Remote Device Discovery
99
100When first connecting via RADKit:
101
1021. **Inventory**: `get_device_inventory_names` — what devices are available?
1032. **Attributes**: `get_device_attributes` for each device — type, platform, capabilities
1043. **Quick health**: `snmp_get` with sysUpTime (1.3.6.1.2.1.1.3.0) for each device
1054. **Report**: device inventory table with type, platform, and uptime
106
107## Workflow: Remote CLI Troubleshooting
108
109When investigating an issue on a remote device:
110
1111. **Identify device**: `get_device_inventory_names` — find the target device name
1122. **Check capabilities**: `get_device_attributes` — confirm CLI access is available
1133. **Execute commands**: `exec_cli_commands_in_device` with timeout and max_lines
114 - `show ip interface brief` — interface status
115 - `show ip route summary` — routing table health
116 - `show processes cpu sorted` — CPU utilization
117 - `show logging last 50` — recent syslog messages
1184. **Structured output**: `exec_command` for commands needing programmatic parsing
1195. **Report**: troubleshooting findings with device state
120
121## Workflow: Remote SNMP Polling
122
123When collecting metrics from remote devices:
124
1251. **Inventory**: `get_device_inventory_names` — target devices
1262. **System info**: `snmp_get` with sysDescr, sysName, sysUpTime
1273. **Interface status**: `snmp_get` with ifOperStatus for key interfaces
1284. **Counters**: `snmp_get` with ifInOctets, ifOutOctets for bandwidth tracking
1295. **Report**: SNMP metric summary with uptime and interface health
130
131## Workflow: Multi-Site Health Check via RADKit
132
133When checking health across sites served by the RADKit service:
134
1351. **Inventory**: `get_device_inventory_names` — all devices across sites
1362. **Attributes**: `get_device_attributes` for each — group by type and site
1373. **Health commands**: `exec_cli_commands_in_device` per device:
138 - `show version` — uptime, software version
139 - `show processes cpu | include CPU utilization`
140 - `show memory statistics`
1414. **SNMP baseline**: `snmp_get` for sysUpTime, interface counters
1425. **Report**: multi-site health dashboard with per-device status
143
144## Integration with Other Skills
145
146| Skill | How They Work Together |
147|-------|----------------------|
148| `pyats-network` | RADKit for cloud-relayed access, pyATS for direct SSH — complementary paths to devices |
149| `pyats-health-check` | RADKit provides remote device data; pyATS health-check procedures analyze it |
150| `pyats-troubleshoot` | RADKit CLI exec for remote devices that pyATS can't reach directly |
151| `pyats-routing` | Use RADKit to collect routing state from remote sites, analyze with routing skill |
152| `pyats-security` | RADKit CLI for remote security audit commands (ACLs, AAA, CoPP) |
153| `meraki-monitoring` | Meraki for cloud-managed devices, RADKit for on-prem devices behind Meraki MX |
154| `te-path-analysis` | ThousandEyes external path + RADKit internal CLI for end-to-end troubleshooting |
155| `nso-device-ops` | NSO for orchestrated config, RADKit for raw CLI access to same devices |
156| `gait-session-tracking` | Record all RADKit remote access sessions in GAIT |
157| `servicenow-change-workflow` | Gate any config changes through RADKit with ServiceNow CRs |
158
159## Important Rules
160
161- **RADKit is read-write capable** — if the onboarded user has write access, CLI commands can push configuration. Always gate config changes with ServiceNow CRs.
162- **Certificate security is critical** — the RADKit private key must never be shared. Use strong passphrases.
163- **Timeout controls prevent hung sessions** — always set reasonable timeouts on CLI commands (default: 30 seconds).
164- **max_lines prevents context overflow** — use line limits for commands with potentially large output (show tech, show run on large configs).
165- **SNMP is lighter than CLI** — prefer `snmp_get` over CLI for structured metrics (uptime, counters, status).
166- **One RADKit service can serve many devices** — the service runs on-prem and proxies to all onboarded devices.
167- **Record in GAIT** — log all remote access sessions, commands executed, and findings.
168- **This is a community project** — not an official Cisco product. Use for experimentation, learning, and authorized operations.
169
170## Environment Variables
171
172- `RADKIT_IDENTITY` — User email address for RADKit authentication
173- `RADKIT_DEFAULT_SERVICE_SERIAL` — RADKit service instance identifier
174
175### Container/CI Deployment (base64-encoded credentials)
176
177- `RADKIT_CERT_B64` — Base64-encoded client certificate
178- `RADKIT_KEY_B64` — Base64-encoded private key
179- `RADKIT_CA_B64` — Base64-encoded CA chain
180- `RADKIT_KEY_PASSWORD_B64` — Base64-encoded key password
181
182### Local Development
183
184For local use, RADKit auto-detects certificates in `~/.radkit/identities/` generated during the setup onboarding wizard (`bash setup.sh` in the cloned repo).