Skip to main content
Glama
coolexer

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.