关于 mikrotik-rest-mcp
mikrotik-rest-mcp 是面向编码 Agent、通过 REST 管理 RouterOS 7 设备的 stdio MCP 服务。它结合筛选式读取、需确认的变更和定时回滚保护。
主要功能
- 01精选及可发现的 REST 读取
- 02筛选、批量和精简查询
- 03需确认的配置变更
- 04PATCH 和 DELETE 定时回滚
- 05容器诊断与文件传输
- 06密钥脱敏和本地文件沙箱
适用场景
- 01盘点路由器并检查防火墙或路由状态
- 02监测接口流量并比较计数器
- 03在回滚保护下应用配置变更
- 04运行容器命令或传输文件
MCP 相关
通过 stdio 向 MCP 客户端提供 RouterOS REST 读取、写入、诊断、容器操作和文件工具。运行模式、确认门控及回滚工具用于管理变更。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
uvx mikrotik-rest-mcp-serverMIKROTIK_BASERouterOS base URL, e.g. https://192.168.88.1MIKROTIK_USERNAMERouterOS usernameMIKROTIK_PASSWORD密钥RouterOS password (or use MIKROTIK_PASSWORD_FILE)MIKROTIK_PASSWORD_FILE密钥Path to file containing the passwordMIKROTIK_MODEreadonly | careful (default) | yolo本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。
工具
63收录的工具列表 · 更新于 2 周前
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| limit | integer | 否 | 筛选和排序后返回的项目数量上限。 |
| where | object | 否 | 在任何 RouterOS .query/.proplist 请求之后应用的客户端筛选器。按字段精确匹配,或使用后缀 __contains / __in / __not / __startswith / __endswith / __gt / __gte / __lt / __lte。 |
| fields | array | 否 | 在任何 RouterOS .proplist 请求之后应用的客户端字段投影。 |
| compact | boolean | 否 | 每个项目输出紧凑的单行 JSON,而不是美化格式的输出。 |
| sort_by | string | 否 | 筛选后按字段名排序。 |
| contains | string | 否 | 在渲染后的项目内容中进行不区分大小写的子字符串搜索。 |
| proplist | any | 否 | 可选的 RouterOS .proplist,用于在 POST .../print 上进行服务器端属性选择。 |
| descending | boolean | 否 | 设置 sort_by 时反转排序顺序。 |
| query_words | array | 否 | 可选的 RouterOS .query 堆栈,用于在 POST .../print 上进行服务器端筛选。 |
详细介绍
English | Русский
MikroTik REST MCP
通过 REST API 为编码 Agent 提供对 RouterOS 7 设备的结构化访问能力的 MCP 服务——支持读取、筛选查询、受保护的写入、定时回滚保护、容器 shell 和文件传输。一个通过 stdio 运行的 MCP 服务。
专为实际运维工作打造:Agent 可以盘点路由器、比较防火墙/路由状态、操作容器、监控计数器并应用更改——所有可能造成破坏的操作都必须先经过人工确认。
功能
- 广泛的读取覆盖范围
- 为常见集合(防火墙、路由、DHCP、DNS、接口、WireGuard、容器、计划任务、日志、系统资源)精选了约 60 个
get_*工具。 - 另外还有 200 多个
get_*端点可通过同一过滤流程按名称调用——这些端点刻意不列出,以保持工具架构简洁。catalog_search可帮助发现它们。 routeros_get可直接接受任意/rest/路径,还可使用routeros_batch在一次调用中并行读取最多 16 项。
- 为常见集合(防火墙、路由、DHCP、DNS、接口、WireGuard、容器、计划任务、日志、系统资源)精选了约 60 个
- 强大的查询能力
- 客户端
where过滤器,支持__contains、__in、__not、__gt、__gte、__lt、__lte、__startswith、__endswith。 fields投影、sort_by、limit、compact(每项输出一行,可节省大量 token)。- 透传 RouterOS 原生
.proplist/.query,以便在服务端过滤。
- 客户端
- 受保护的变更操作
MIKROTIK_MODE=readonly:完全不注册变更/执行工具——协议接口本身为只读,而不只是受策略限制。MIKROTIK_MODE=careful(默认):被归类为有干扰性的操作会返回requires_confirmation——Agent 将其转告用户,并在获得批准后使用confirm: true重新运行。在支持的情况下,MCP elicitation 会显示原生对话框。确认标志只是 UX 门槛,并非安全边界——真正限制 Agent 的是 RouterOS 账户权限。- 基于方法的策略:
PUT仅可用于已知集合,PATCH/DELETE仅可用于collection/<id>项,POST仅可用于明确列出的操作白名单(ping、traceroute、fetch、file/read、script/run、dns flush、backup/save、export、容器 shell——参见catalog.py)。 MIKROTIK_STRICT_CONFIRM=1会要求每项变更操作都经过确认。MIKROTIK_MODE=yolo会移除所有门槛,并可切换到单独的完全权限账户(MIKROTIK_YOLO_USERNAME/MIKROTIK_YOLO_PASSWORD_FILE)——仅适用于有人监督的自动化时段。
- 计划回滚保护(不是 RouterOS Safe Mode——可通过普通 REST 使用)
apply_safe会对目标创建快照、启用路由器上的计划任务,然后应用变更。启用后,回滚不再依赖 MCP 进程或客户端持续运行——commit_safe可在window_seconds内将其禁用。- 支持的方法:
PATCH(恢复快照中已更改字段的值——非事务性,不检测并发编辑)和DELETE(尽力重新创建;不保留列表位置和生成的字段——响应中会说明)。拒绝PUT,因为只有在项目创建后才能知道其.id。 - 传输失败情况不明确时,会保持回滚启用,而不会静默将其禁用;如果禁用失败,
commit_safe会保留待处理记录,以便重试。 safe_status会报告当前已启用的回滚。
- 容器与诊断
container_shell可通过名称或.id在 RouterOS 容器内运行命令——默认关闭(MIKROTIK_ENABLE_CONTAINER_SHELL),在 careful 模式下需要确认,且通用的routeros_write路径无法绕过此标志。timeout_seconds可为长时间运行的命令覆盖 REST 超时。container_apply_safe/container_commit_safe——在容器内执行事务性 shell 命令:对snapshot_paths创建快照,运行变更操作,check_cmd在失败时立即回滚,并由重复运行的 RouterOS 计划任务看门狗在未及时提交时恢复快照。每个容器只能有一个活动事务。interface_traffic会在采样时间窗口内测量实时 rx/tx bps 和 pps;routeros_watch会比较多个采样点之间的数值字段——无需手动读取两次即可获得计数器增量。run_ping、run_traceroute、run_fetch、run_wifi_monitor、describe_path(在编写过滤器前检查字段)。
- 带沙盒的文件操作
- 在 RouterOS 端创建/读取/更新/重命名/删除文件,并支持分块执行
download_file/upload_file。 - 默认关闭对主机文件系统的访问;
MIKROTIK_ENABLE_LOCAL_FILES+MIKROTIK_LOCAL_ROOT会将访问限制在单个目录内;传输上限为 8 MiB,且download_file需要设置overwrite: true才能替换现有本地文件。
- 在 RouterOS 端创建/读取/更新/重命名/删除文件,并支持分块执行
- 密钥保护
- 凭据来自
MIKROTIK_PASSWORD_FILE(推荐)或MIKROTIK_PASSWORD。 - 每个响应都会经过清理器,遮蔽形如
password/secret/psk/token/private-key的字段(设置MIKROTIK_REDACT=0可禁用)。遮蔽依据字段名称进行——无法可靠检测自由格式文本(注释、脚本正文、日志行、文件内容)中嵌入的密钥。 - 每个工具都带有工具注解(
readOnlyHint、destructiveHint、idempotentHint、openWorldHint),以便客户端执行自己的策略。
- 凭据来自
要求
- Python 3.10+(基于 3.13 开发)。
- RouterOS 7.1+,且 REST 可访问(已在 7.24.5、hAP ax³ 上完成集成测试,涵盖 REST、容器、调度器回滚和文件操作)。建议通过
www-ssl使用 HTTPS;通过www使用纯 HTTP 需要 RouterOS 7.9+,且仅应在隔离网络中使用——REST 使用 Basic auth,凭据会以明文形式在网络中传输。 - 只读使用时,RouterOS 用户需要
read+api+rest-api权限。执行变更/诊断时添加write+test权限,使用文件工具(download_file、/file/read)时添加ftp权限。脚本条目有自己的policy属性——账号只需write权限即可运行脚本,且无法运行权限范围超出自身权限的脚本。
安装
pipx install mikrotik-rest-mcp-server # or: uvx mikrotik-rest-mcp-server
这会提供 mikrotik-rest-mcp-server 控制台脚本。开发时:使用 git clone,然后运行 pip install -e .
配置
将 MCP 客户端指向此服务:
{
"mcpServers": {
"mikrotik_rest": {
"command": "mikrotik-rest-mcp-server",
"env": {
"MIKROTIK_BASE": "https://192.168.88.1",
"MIKROTIK_USERNAME": "mcp-agent",
"MIKROTIK_PASSWORD_FILE": "/path/to/password-file"
}
}
}
}
完整变量列表(模式、功能标志、超时、TLS 验证)请参阅 .env.example。
推荐的 RouterOS 账号
# ops account — reads, config writes, diagnostics; no user/policy management,
# no sensitive fields, no reboot
/user group add name=agent policy=read,write,api,rest-api,test,ftp
/user add name=mcp-agent group=agent password=<random>
# monitoring-only account (pair with MIKROTIK_MODE=readonly)
/user group add name=monitor policy=read,api,rest-api,test
对于 yolo 模式,请在 full 组中创建第二个账号,并通过 MIKROTIK_YOLO_* 配置使用该账号。如果不需要文件工具,可以省略 ftp。
与 Agent 配合使用
Agent 采用的典型流程:
get_dhcp_leases {compact: true} → quick device list
routeros_batch {requests: [...]} → status in one call
describe_path {path: "/rest/interface/ethernet"} → field names before filtering
interface_traffic {name: "ether1", seconds: 2} → live throughput
routeros_watch {path: ..., diff: true} → counter deltas
routeros_write {method: "PATCH", ...} → routine config edit
routeros_write {method: "DELETE", ...} → stops for confirmation
apply_safe {method: "PATCH", path: "…/<.id>", window_seconds: 60}
→ rollback armed on router; commit_safe to keep
run_script_inline 会创建一个临时 RouterOS 脚本、运行该脚本,然后将其删除(谨慎模式下始终会确认)。container_shell 和主机文件传输需要启用相应的可选标志。
目录结构
src/mikrotik_rest_mcp/
client.py — REST transport, TLS, env config
catalog.py — endpoint/tool tables (pure data)
policy.py — risk tiers, confirmation gate, mutation allowlist
output.py — secret redaction, filters, compact serialization
files.py — local file sandbox + router file helpers
safe_apply.py — snapshot/rollback machinery
server.py — tool list, dispatch, resources, entrypoint
测试
pytest tests/
单元测试无需路由器即可运行(REST 调用均已模拟)。
安全
请参阅 SECURITY.md。不要将此工具用于你无权管理的路由器;请将 yolo 视为已上膛的枪,将 container_shell 视为远程代码执行(因为它确实如此)。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。