RouterOS AI桥接工具

一个轻量级的模型上下文协议(MCP)服务器,允许AI助手(如Claude)通过原生RouterOS API直接与MikroTik路由器交互。

  • by Mattieug
  • Python
  • 本地部署
  • 1 星标
  • 更新于
在 GitHub 查看 Mattieug/mcp-mikrotik

使用说明

🌐 MCP MikroTik——RouterOS AI网桥

一个轻量级的模型上下文协议(MCP)服务器,让AI助手喜欢 克劳德 直接与您的 MikroTik路由器 通过本机RouterOS API。

在a上测试 MikroTik RB5009 跑步 路由器操作系统7.20.6 --但与任何RouterOS 6.43+设备兼容。


✨ 这是什么?

该项目弥合了人工智能助手和网络基础设施之间的差距。与其登录Winbox或SSH来检查路由器,你可以简单地问Claude:

  • “DHCP上当前连接了哪些设备?”
  • “显示所有正在运行的界面。”
  • “路由器当前的CPU和内存使用情况如何?”
  • “跑 /ip/firewall/filter/print 并总结规则。"

服务器实现 路由器操作系统API有线协议 从头开始——不需要第三方RouterOS库,只需要Python的标准 socket 和 struct 模块。


🛠️ 可用的MCP工具

工具 说明
mikrotik_run_command 执行 任何 具有可选属性和查询筛选器的RouterOS API命令
mikrotik_get_interfaces 列出所有接口,包括名称、类型、运行状态和MTU
mikrotik_get_system_resources 获取CPU负载、RAM使用率、正常运行时间和RouterOS版本
mikrotik_get_dhcp_leases 列出活动DHCP租约(IP、MAC、主机名、状态)

mikrotik_run_command 详细地

这是电动工具。它向Claude公开了完整的RouterOS API,实现了整个路由器配置的读写操作。

# Parameters:
# command  (str)            – API path, e.g. "/ip/address/print"
# args     (dict, optional) – Attributes, e.g. {"address": "10.0.0.1/24"}
# queries  (list, optional) – Filters,    e.g. ["type=ether", "running=true"]

您可以与Claude一起使用的示例提示:

# Read firewall rules
/ip/firewall/filter/print

# Add a DNS entry
command: /ip/dns/static/add  |  args: {"name": "myserver.home", "address": "192.168.1.100"}

# Reboot the router
/system/reboot

# List only ethernet interfaces
command: /interface/print  |  queries: ["type=ether"]

📋 先决条件

  • Python 3.10+
  • MikroTik路由器正在运行 RouterOS 6.43或更高版本 (在7.x上测试)
  • RouterOS API服务已启用 在路由器上

在路由器上启用API

通过RouterOS终端或SSH:

/ip service enable api

提示: 为了增强安全性,请将API服务限制为特定的源IP:

/ip service set api address=192.168.1.0/24

🚀 安装

1.克隆存储库

git clone https://github.com/Mattieug/mcp-mikrotik.git
cd mcp-mikrotik

2.创建虚拟环境

python -m venv .venv

# Linux / macOS
source .venv/bin/activate

# Windows
.venv\Scripts\activate

3.安装依赖项

pip install mcp

服务器仅依赖于 mcp (为 FastMCP)加上Python的标准库。


⚙️ Claude桌面配置

打开您的Claude Desktop配置文件:

操作系统 路径
窗户 %APPDATA%\Claude\claude_desktop_config.json
macOS ~/Library/Application Support/Claude/claude_desktop_config.json

您也可以通过以下方式联系它 克劳德桌面版→ 设置→ 开发者→ 编辑配置.

Windows示例

{
  "mcpServers": {
    "mikrotik_manager": {
      "command": "C:\\mcp-mikrotik\\.venv\\Scripts\\python.exe",
      "args": ["C:\\mcp-mikrotik\\mcp-mikrotik.py"],
      "env": {
        "ROUTEROS_HOST": "192.168.88.1",
        "ROUTEROS_USER": "admin",
        "ROUTEROS_PASSWORD": "your_password",
        "ROUTEROS_PORT": "8728",
        "ROUTEROS_USE_SSL": "false"
      }
    }
  }
}

macOS/Linux示例

{
  "mcpServers": {
    "mikrotik_manager": {
      "command": "/path/to/mcp-mikrotik/.venv/bin/python",
      "args": ["/path/to/mcp-mikrotik/mcp-mikrotik.py"],
      "env": {
        "ROUTEROS_HOST": "192.168.88.1",
        "ROUTEROS_USER": "admin",
        "ROUTEROS_PASSWORD": "your_password",
        "ROUTEROS_PORT": "8728",
        "ROUTEROS_USE_SSL": "false"
      }
    }
  }
}

中提供了一个可编辑的模板 mcp-mikrotik.json.


🔧 环境变量

变量 默认值 描述
ROUTEROS_HOST 192.168.88.1 路由器IP地址或主机名
ROUTEROS_USER admin RouterOS API用户名
ROUTEROS_PASSWORD (空) RouterOS API密码
ROUTEROS_PORT 8728 API端口(8728 平原, 8729 SSL)
ROUTEROS_USE_SSL false 设置为 true 使用加密的SSL连接

🔒 安全最佳实践

切勿提交凭据。 始终通过环境变量传递它们(如上所示),永远不要在源文件中硬编码它们。

创建专用只读用户 在路由器上而不是使用 admin 账户

/user group add name=mcp-readonly policy=read,api,test
/user add name=mcp-claude group=mcp-readonly password=strong_random_password

按源IP限制API访问 为了限制攻击面:

/ip service set api address=127.0.0.1/32

使用ssl 如果您通过不受信任的网络连接:

ROUTEROS_PORT=8729
ROUTEROS_USE_SSL=true

🏗️ 建筑

服务器是一个Python文件,实现了两件事:

1. RouterOSAPI --本地有线协议客户端

一个纯Python实现的 路由器操作系统API协议,处理:

  • 带有可选SSL封装的TCP连接
  • 长度编码字帧 (1-5字节可变长度前缀)
  • 基于句子的请求/响应模型(!re, !done, !trap, !fatal)
  • 纯文本认证(RouterOS≥6.43)

这意味着有 无外部RouterOS库依赖关系 --该协议直接在Python之上实现 socket 模块。

2.MCP工具——FastMCP服务器

建于 FastMCP,这些工具是薄薄的包装 RouterOSAPI.call()每个工具都会打开一个连接,执行其命令,然后关闭连接——使服务器保持无状态。

Claude (AI Assistant)
       │  MCP protocol (stdio)
       ▼
 FastMCP Server  (mcp-mikrotik.py)
       │  RouterOS API protocol (TCP/8728 or TCP/8729)
       ▼
 MikroTik RouterOS

💡 交互示例

连接后,您可以进行以下对话:

你: “现在哪些设备连接到我的路由器?”

克劳德: (电话 mikrotik_get_dhcp_leases) “我可以看到7个活动租约:您的NAS位于192.168.1.10,您的Proxmox服务器位于192.168.1.20…”

你: “路由器有负载吗?”

克劳德: (电话 mikrotik_get_system_resources) “CPU为3%,512 MB RAM可用,正常运行时间为14天。一切看起来都很健康。”

你: “列出接受端口443流量的所有防火墙规则。”

克劳德: (电话 mikrotik_run_command 随着 /ip/firewall/filter/print) “我找到了3条匹配的规则…”


📁 存储库结构

mcp-mikrotik/
├── mcp-mikrotik.py       # MCP server — RouterOS protocol + tool definitions
├── mcp-mikrotik.json     # Claude Desktop config template
└── README.md             # This file

🗺️ 路线图

未来工具的想法:

  • [ ] mikrotik_get_firewall_rules --列出并过滤防火墙规则
  • [ ] mikrotik_get_routes --显示路由表
  • [ ] mikrotik_get_wireless_clients --列出已连接的Wi-Fi客户端
  • [ ] mikrotik_get_logs --检索最近的系统日志
  • [ ] mikrotik_get_vlan_interfaces --列出VLAN接口
  • [ ] mikrotik_ping --从路由器触发ping并返回结果

欢迎投稿——欢迎随时打开PR或问题!


📄 许可证

该项目根据 MIT许可证 --免费使用、修改和分发。 看 许可证 了解全部细节。


🙏 致谢