Skip to main content

Local MCP server for controlled AsusWRT and AsusWRT-Merlin router administration.

Project description

AsusWRT MCP Server

Python 3.11+ MIT License Project Status: Active

mcp-name: io.github.teefloo/asuswrt-mcp

Model Context Protocol (MCP) server for secure, controlled administration of AsusWRT and AsusWRT-Merlin routers via SSH.

Overview

This MCP server provides AI assistants (like Claude, Cursor, etc.) with a safe interface to monitor and manage AsusWRT routers. It operates exclusively over SSH using allowlisted operations—no arbitrary command execution, no firmware modifications, and no factory resets.

Features

Read-Only Monitoring (42 tools)

Category Tools
Identity & Health Router model, firmware version, uptime, load, memory
Network LAN/WAN details, DNS config, IPv6 status, routing table
Clients Connected clients, DHCP leases, ARP neighbors
Wireless Radio status, SSIDs, guest networks, client counts per band
Services Running processes, open ports, cron jobs
Storage USB devices, mounts, partitions, filesystem usage
Security UPnP, DDNS, Samba status, conntrack usage
VPN OpenVPN server, WireGuard, VPN client profiles
Administration Web admin ports, SSH/telnet access settings
Diagnostics SSH TCP/banner/auth diagnostics, config snapshot

Mutation Tools (with safety guards)

All mutation tools require:

  • confirm: true parameter
  • ASUSWRT_ALLOW_MUTATIONS=true environment variable
  • Support for dry_run: true to preview changes
Tool Description
asuswrt_restart_service Restart allowlisted services (httpd, firewall, wireless, dnsmasq, etc.)
asuswrt_dhcp_server Enable/disable DHCP server
asuswrt_upnp Enable/disable UPnP
asuswrt_radio Enable/disable Wi-Fi radio bands
asuswrt_guest_wifi Enable/disable guest Wi-Fi
asuswrt_guest_lan_access Toggle LAN access for guest Wi-Fi
asuswrt_port_forwarding List, add, remove, enable/disable port forwarding rules
asuswrt_vpn_server Enable/disable OpenVPN server
asuswrt_parental_access List, block, unblock, remove parental control rules
asuswrt_parental_block_all Toggle block-all mode
asuswrt_dhcp_reservation List, add, remove DHCP static reservations

Safety Model

  • No arbitrary SSH: Only allowlisted commands are executed via NVRAM and service calls
  • No firmware operations: No flash, reset, or bootloader access
  • Secret redaction: Passwords and sensitive data are never exposed in tool responses
  • Dry-run support: Every mutation can be previewed before applying
  • Confirmation required: Mutations require explicit confirm=True
  • SSH-only transport: No exposure of the router's web API

Prerequisites

  • Python 3.11+
  • An AsusWRT or AsusWRT-Merlin router with SSH access enabled
  • Network connectivity from the MCP client to the router

Installation

1. Clone and setup

git clone https://github.com/Teeflo/asuswrt-mcp.git
cd asuswrt-mcp

# Create virtual environment
python -m venv .venv

# Activate (Linux/macOS)
source .venv/bin/activate

# Activate (Windows)
.venv\Scripts\activate

# Install dependencies
pip install -e .

2. Configure environment

# Copy example configuration
cp .env.example .env

# Edit with your router credentials
# Use your favorite editor:
notepad .env        # Windows
nano .env           # Linux/macOS

3. Configure .env

# Required: Router connection
ASUSWRT_HOST=192.168.1.1
ASUSWRT_SSH_USERNAME=admin
ASUSWRT_SSH_PASSWORD=your_password

# Optional: SSH key authentication
# ASUSWRT_SSH_KEY_FILE=~/.ssh/id_rsa

# Optional: Enable mutations (disabled by default)
# ASUSWRT_ALLOW_MUTATIONS=true

# Optional: Connection settings
# ASUSWRT_SSH_PORT=22
# ASUSWRT_TIMEOUT_SECONDS=10

Usage

Run the MCP server

# Standardstdio mode
python -m asuswrt_mcp.server

# Or use the entry point
asuswrt-mcp

Configure in Claude Desktop / Cursor

Add to your claude_desktop_config.json:

{
  "mcpServers": {
    "asuswrt-mcp": {
      "command": "C:\\path\\to\\asuswrt-mcp\\.venv\\Scripts\\python.exe",
      "args": ["-m", "asuswrt_mcp.server"],
      "env": {
        "ASUSWRT_HOST": "192.168.1.1",
        "ASUSWRT_SSH_USERNAME": "admin",
        "ASUSWRT_SSH_PASSWORD": "your_password"
      }
    }
  }
}

Using with npx Inspector (development)

npx @modelcontextprotocol/inspector python -m asuswrt_mcp.server

Development

Run tests

pip install -e ".[dev]"
pytest

Run with live router integration tests

ASUSWRT_TEST_ROUTER=1 pytest

Project Structure

asuswrt-mcp/
├── src/asuswrt_mcp/
│   ├── server.py          # FastMCP entrypoint & tool definitions
│   ├── service.py         # Business logic & router operations
│   ├── config.py          # Settings management
│   ├── clients/
│   │   └── ssh.py         # SSH client wrapper
│   ├── nvram.py           # NVRAM parsing utilities
│   ├── ssh_parsers.py     # Output parsers for SSH commands
│   ├── security.py        # Mutation guards & redaction
│   ├── validators.py      # Input validation
│   ├── responses.py       # Tool response formatting
│   ├── errors.py          # Custom exceptions
│   └── serialization.py   # Safe serialization
├── tests/                 # Test suite (69 tests)
├── .env.example           # Example configuration
├── pyproject.toml         # Project metadata
└── README.md              # This file

License

MIT License - see LICENSE for details.

Acknowledgments

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

asuswrt_mcp-0.1.1.tar.gz (132.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

asuswrt_mcp-0.1.1-py3-none-any.whl (30.6 kB view details)

Uploaded Python 3

File details

Details for the file asuswrt_mcp-0.1.1.tar.gz.

File metadata

  • Download URL: asuswrt_mcp-0.1.1.tar.gz
  • Upload date:
  • Size: 132.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.5

File hashes

Hashes for asuswrt_mcp-0.1.1.tar.gz
Algorithm Hash digest
SHA256 6bd8ec28bcaa89a5c079aa400ecb793d457048cedd9a74224bbb99a1ad1d6698
MD5 f89789469dea822048070018a9f0645e
BLAKE2b-256 b625605513c9cad5896fb3a338094d8b62204ea635d29b58a51e991190463147

See more details on using hashes here.

File details

Details for the file asuswrt_mcp-0.1.1-py3-none-any.whl.

File metadata

  • Download URL: asuswrt_mcp-0.1.1-py3-none-any.whl
  • Upload date:
  • Size: 30.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.5

File hashes

Hashes for asuswrt_mcp-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 b965701800d40b928240435762b3d4a721b535b2f345cdd73481057e432b9daa
MD5 a4f72c70f28d1778a9728d570e43679c
BLAKE2b-256 1937e9aa0cbc501a730f28090017bd723eac288663a194e4dc0f2fcd672acd4d

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page