iStoreOS MCP Server
# iStoreOS MCP Server
[English](#english) | [中文](#中文)
---
<a id="中文"></a>
iStoreOS/OpenWRT 路由器只读监控 [MCP](https://modelcontextprotocol.io/) 服务器。
通过 SSH 或 HTTP/ubus API 连接路由器,为 AI 助手提供路由器状态数据的读取能力。可对接 Claude Desktop、Claude Code、小龙虾等 MCP 客户端,实现在手机/电脑上通过自然语言查看路由器状态、分析日志、排查网络问题。
## 功能特性
- **31 个只读工具**,覆盖系统、网络、日志、服务、常见插件
- **双连接模式**:SSH(全功能)+ HTTP/ubus API
- **插件感知**:自动检测 OpenClash、Passwall、AdGuardHome、Samba、DDNS、FRP 等常见插件状态
- **安全设计**:只读操作,不修改路由器配置;输入参数经过校验和转义
- **兼容性好**:支持 iStoreOS、OpenWRT 21.02+ 及其他基于 OpenWRT 的系统
## 快速开始
### 安装
```bash
git clone https://github.com/beck-8/istoreos-mcp.git
cd istoreos-mcp
pip install -e .
```
### 配置
通过环境变量配置连接参数:
| 变量 | 默认值 | 说明 |
|------|--------|------|
| `ISTOREOS_HOST` | `192.168.1.1` | 路由器 IP 地址 |
| `ISTOREOS_CONNECTION_TYPE` | `ssh` | 连接方式:`ssh` 或 `http` |
| `ISTOREOS_SSH_PORT` | `22` | SSH 端口 |
| `ISTOREOS_SSH_USER` | `root` | SSH 用户名 |
| `ISTOREOS_SSH_PASSWORD` | - | SSH 密码 |
| `ISTOREOS_SSH_KEY` | - | SSH 私钥文件路径 |
| `ISTOREOS_HTTP_PORT` | `80` | HTTP 端口 |
| `ISTOREOS_HTTP_PASSWORD` | - | rpcd/LuCI 密码 |
### Claude Desktop / Claude Code
在 `claude_desktop_config.json` 中添加:
```json
{
"mcpServers": {
"istoreos": {
"command": "istoreos-mcp",
"env": {
"ISTOREOS_HOST": "192.168.1.1",
"ISTOREOS_CONNECTION_TYPE": "ssh",
"ISTOREOS_SSH_PASSWORD": "your-password"
}
}
}
}
```
### Claude Code (CLI)
```bash
claude mcp add istoreos -- env ISTOREOS_HOST=192.168.1.1 ISTOREOS_SSH_PASSWORD=your-password istoreos-mcp
```
### 直接运行
```bash
export ISTOREOS_HOST=192.168.1.1
export ISTOREOS_SSH_PASSWORD=your-password
istoreos-mcp
```
## 可用工具 (31 个)
### 系统状态 (6)
| 工具 | 说明 |
|------|------|
| `get_system_info` | 固件版本、板型、内核、架构 |
| `get_cpu_usage` | CPU 使用率、负载均值、核心数 |
| `get_memory_usage` | 内存总量/已用/可用/缓存 |
| `get_storage_usage` | 磁盘/闪存各分区使用率 |
| `get_system_uptime` | 系统运行时间 |
| `get_cpu_temperature` | CPU/SoC 温度 |
### 网络信息 (6)
| 工具 | 说明 |
|------|------|
| `get_network_interfaces` | 所有网络接口状态和流量计数 |
| `get_wan_status` | WAN 接口:IP、网关、DNS、连接类型 |
| `get_connected_devices` | 已连接设备列表 (ARP + DHCP 合并) |
| `get_dhcp_leases` | DHCP 租约:MAC、IP、主机名、过期时间 |
| `get_dns_config` | DNS 上游服务器、域名配置 |
| `get_wifi_status` | WiFi 状态:SSID、信道、已连客户端 |
### 日志与流量 (5)
| 工具 | 说明 |
|------|------|
| `get_system_log` | 系统日志,支持 `lines` 参数限制行数 |
| `get_kernel_log` | 内核日志 (dmesg) |
| `get_traffic_stats` | 各接口 rx/tx 字节、包数、错误、丢包 |
| `get_active_connections` | 活跃连接追踪 (conntrack),支持 `limit` 参数 |
| `get_firewall_rules` | 防火墙规则 (nftables/iptables) |
### 服务与系统管理 (8)
| 工具 | 说明 |
|------|------|
| `get_installed_packages` | 已安装软件包,支持 `filter_str` 过滤 |
| `get_service_status` | 所有 init.d 服务的启用/运行状态 |
| `get_docker_status` | Docker 版本、容器列表、磁盘占用 |
| `get_block_devices` | 块设备、挂载点、文件系统、RAID 状态 |
| `get_process_list` | 运行中进程 (PID/用户/内存/CPU) |
| `get_port_forwards` | 端口转发 / NAT redirect 规则 |
| `get_crontab` | 定时任务列表 |
| `get_istoreos_mode` | iStoreOS 专属:固件版本、iStore 插件、overlay 空间 |
### 常见插件状态 (6)
| 工具 | 说明 |
|------|------|
| `get_openclash_status` | OpenClash:运行状态、代理模式、实时流量、连接数、日志 |
| `get_passwall_status` | Passwall/Passwall2:代理模式、DNS 模式、节点列表 |
| `get_adguardhome_status` | AdGuardHome:查询总数/拦截数/拦截率、热门域名 Top10 |
| `get_samba_status` | Samba:共享目录列表、已连接客户端 |
| `get_ddns_status` | DDNS:配置的服务、域名、更新状态 |
| `get_frp_status` | FRP:frpc/frps 运行状态、服务器配置、代理隧道 |
## 连接方式说明
### SSH (推荐)
所有 31 个工具均可用。OpenWRT 默认开启 SSH,无需额外配置。
支持密码和私钥两种认证方式:
```bash
# 密码认证
export ISTOREOS_SSH_PASSWORD=your-password
# 私钥认证
export ISTOREOS_SSH_KEY=~/.ssh/id_rsa
```
### HTTP/ubus
通过 rpcd JSON-RPC 接口连接。仅以下工具可用:
- `get_system_info`
- `get_network_interfaces`
- `get_wan_status`
- `get_wifi_status`
其他依赖 shell 命令的工具会返回提示信息,建议改用 SSH 连接。
## 使用示例
配置好 MCP 后,可以用自然语言向 AI 助手提问:
- "路由器的 CPU 和内存使用率怎么样?"
- "有多少设备连接了 WiFi?"
- "OpenClash 运行正常吗?有多少活跃连接?"
- "看看最近的系统日志,有没有异常?"
- "哪个设备的流量最大?"
- "AdGuardHome 今天拦截了多少广告?"
- "Docker 上跑了哪些容器?"
- "检查一下 DDNS 有没有更新成功"
## 项目结构
```
src/istoreos_mcp/
├── server.py # MCP 服务入口,注册所有工具
├── config.py # 环境变量配置
├── connection/
│ ├── base.py # 连接抽象接口
│ ├── ssh.py # SSH 连接 (asyncssh)
│ ├── http.py # HTTP/ubus JSON-RPC 连接 (httpx)
│ └── factory.py # 连接工厂
└── tools/
├── system.py # 系统状态工具
├── network.py # 网络信息工具
├── logs.py # 日志与流量工具
├── services.py # 服务管理工具
└── plugins.py # 常见插件状态工具
```
## 兼容性
| 系统 | 支持状态 |
|------|----------|
| iStoreOS (所有版本) | 完全支持 |
| OpenWRT 21.02+ | 完全支持 |
| OpenWRT 19.07 | 基本支持 (部分 nftables 工具不可用) |
| 其他基于 OpenWRT 的系统 | 基本支持 |
## License
[MIT](LICENSE)
---
<a id="english"></a>
## English
A read-only [MCP](https://modelcontextprotocol.io/) server for monitoring iStoreOS/OpenWRT routers.
Connects to your router via SSH or HTTP/ubus API, providing 31 read-only tools for AI assistants to query system status, network info, logs, traffic, services, and common plugin status (OpenClash, Passwall, AdGuardHome, Samba, DDNS, FRP).
### Quick Start
```bash
pip install -e .
export ISTOREOS_HOST=192.168.1.1
export ISTOREOS_SSH_PASSWORD=your-password
istoreos-mcp
```
### Claude Desktop Config
```json
{
"mcpServers": {
"istoreos": {
"command": "istoreos-mcp",
"env": {
"ISTOREOS_HOST": "192.168.1.1",
"ISTOREOS_CONNECTION_TYPE": "ssh",
"ISTOREOS_SSH_PASSWORD": "your-password"
}
}
}
}
```
### Compatibility
- iStoreOS (all versions)
- OpenWRT 21.02+
- Other OpenWRT-based distributions
TDQS
Scored across 31 tools
All 31 tools have distinct, specific noun phrases (e.g., cpu_usage, memory_usage, firewall_rules) with no overlapping purposes. Each tool clearly targets a unique system resource, so an agent can easily differentiate them.
Every tool follows the exact pattern get_<resource>_<detail> in snake_case, with no deviations or mixed conventions. The naming is perfectly consistent and predictable.
31 tools is beyond the typical well-scoped range of 3-15 for a server. While the tools are logically grouped for a comprehensive system monitor, the count feels heavy and could be pruned or organized into subdomains.
The tool set covers a wide range of system statuses: CPU, memory, storage, network, services, security, and applications. It is comprehensive for a read-only monitoring server but lacks any action-oriented tools, leaving minor gaps in lifecycle coverage.