Nokia SR OS NETCONF MCP Server
by coolexer
README.md
# Nokia SR OS NETCONF MCP Server
MCP server for managing Nokia SR OS devices via NETCONF from Claude Desktop.
## Features
- **MD-CLI commands** — execute show commands via Nokia-specific NETCONF RPC
- **get-config / get-state** — retrieve configuration and operational state with subtree filters
- **edit-config** — modify configuration with merge/replace/delete operations
- **Candidate workflow** — edit → compare → commit/rollback for safe changes
- **Runtime credentials** — no passwords in config files; connect via tool call
- **Multi-device** — manage multiple SR OS devices simultaneously
## Installation
### Prerequisites
- Python 3.10+
- [uv](https://docs.astral.sh/uv/getting-started/installation/) (recommended) or pip
### Setup
```bash
# Clone or copy the project
cd nokia-netconf-mcp
# Option A: uv (recommended for Claude Desktop)
uv sync
# Option B: pip
pip install -e .
```
### Test locally
```bash
# With uv
uv run nokia-netconf-mcp
# With pip
nokia-netconf-mcp
```
The server communicates via stdio — it will wait for MCP protocol messages on stdin.
## Claude Desktop Configuration
Edit your Claude Desktop config file:
- **Windows**: `%APPDATA%\Claude\claude_desktop_config.json`
- **macOS**: `~/Library/Application Support/Claude/claude_desktop_config.json`
### Using uv (recommended)
```json
{
"mcpServers": {
"nokia-netconf": {
"command": "uv",
"args": [
"--directory",
"C:\\Users\\YourUser\\nokia-netconf-mcp",
"run",
"nokia-netconf-mcp"
]
}
}
}
```
### Using Python directly
```json
{
"mcpServers": {
"nokia-netconf": {
"command": "python",
"args": [
"-m",
"nokia_netconf_mcp.server"
],
"env": {
"PYTHONPATH": "C:\\Users\\YourUser\\nokia-netconf-mcp\\src"
}
}
}
}
```
## Usage
Once configured, restart Claude Desktop. The tools will appear automatically.
### 1. Connect to a device
> "Connect to my SR OS router at 192.168.1.1 with username admin and password Nokia123, call it pe1"
Claude will call `sros_connect` with your credentials.
### 2. Show commands
> "Show me the router interfaces on pe1"
> "Show BGP summary on pe1"
> "Show service id 100 base on pe1"
### 3. Get configuration
> "Get the running VPRN configuration from pe1"
> "Show me the port config on pe1"
### 4. Edit configuration (safe candidate workflow)
> "Create a loopback interface lo5 with IP 10.10.10.5/32 on pe1"
Claude will:
1. `sros_edit_config` → write to candidate
2. `sros_compare` → show the diff
3. Ask for confirmation
4. `sros_commit` or `sros_rollback`
### 5. Manage sessions
> "List all my SROS sessions"
> "Disconnect from pe1"
## Tools Reference
| Tool | Description |
|------|-------------|
| `sros_connect` | Connect to device (host, port, username, password) |
| `sros_disconnect` | Close NETCONF session |
| `sros_cli_command` | Execute MD-CLI show commands |
| `sros_get_config` | NETCONF get-config (running/candidate) with subtree filter |
| `sros_get_state` | NETCONF get (operational state) with subtree filter |
| `sros_edit_config` | NETCONF edit-config (merge/replace/delete) |
| `sros_commit` | Commit candidate → running |
| `sros_rollback` | Discard candidate changes |
| `sros_compare` | Diff candidate vs running |
| `sros_list_sessions` | List active sessions |
## Nokia-Specific Notes
- Uses `device_params={"name": "alu"}` for ncclient (Nokia/ALU NETCONF dialect)
- MD-CLI commands go through `md-cli-raw-command` RPC (`urn:nokia.com:sros:ns:yang:sr:oper-global`)
- Configuration namespace: `urn:nokia.com:sros:ns:yang:sr:conf`
- State namespace: `urn:nokia.com:sros:ns:yang:sr:state`
- Subtree filters follow Nokia YANG model structure
## Troubleshooting
**Connection refused**: Ensure NETCONF is enabled on the SR OS device:
```
configure system management-interface netconf admin-state enable
configure system management-interface netconf auto-config-save
configure system security user-params local-user user "admin" access netconf
```
**Timeout**: Increase timeout in `sros_connect` (default 60s). Large get-config responses may need more time.
**Capabilities mismatch**: The server uses `device_params={"name": "alu"}`. If your SR OS version has issues, check ncclient compatibility.
This server cannot be deployed
Maintenance
ActivityInactive
ResponsivenessNo issues