MikroTik设备管理服务器

通过AI助手管理MikroTik RouterOS设备的多设备支持服务器,提供BGP管理、防火墙规则配置等功能。

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

使用说明

MikroTik MCP

叉子 杰夫·纳斯里/mikrotik 具有扩展功能。

用于通过AI助手(Claude Desktop、Claude Code等)管理MikroTik RouterOS设备的MCP服务器

发生了什么变化(与上游相比)

新模块

  • devices.py + scope/devices.py --多设备支持:服务器不再绑定到单个路由器。保留设备注册表,并在运行时在它们之间切换——请参阅 多设备支持
  • scope/routing.py --完整的BGP管理(会话、连接、模板、实例、广告、路由过滤器、路由表)
  • scope/mangle.py --防火墙修改规则(列出、添加、删除、启用/禁用,并支持完整参数)

新工具

工具 模块 说明
list_devices devices 列出所有已配置的设备;活动的标记为 *
use_device devices 切换活动设备——所有后续工具都以它为目标
add_device devices 在运行时注册设备(可选地持久化到设备文件)
remove_device devices 从注册表中删除设备
test_device_connection devices 测试SSH连接,显示身份/版本(不切换)
run_command system 执行 任何 RouterOS CLI命令(无需专用工具)
list_bgp_sessions routing 列出BGP会话及其状态
list_bgp_connections routing 列出BGP连接配置
list_bgp_templates routing 列出BGP模板
list_bgp_instances routing 列出BGP实例
get_bgp_advertisements routing 列出BGP广告(前缀)
add_bgp_connection routing 创建BGP对等端(AS、路由表、多跳、保持时间等)
remove_bgp_connection routing 按名称删除BGP连接
enable_bgp_connection routing 启用BGP连接
disable_bgp_connection routing 禁用BGP连接
add_bgp_template routing 创建BGP模板(AS、过滤器、计时器)
remove_bgp_template routing 删除BGP模板
list_routing_filters routing 列出路由过滤规则(按链)
add_routing_filter routing 添加路由筛选规则
remove_routing_filters routing 删除筛选器链中的所有规则
list_routing_tables routing 列出路由表
add_routing_table routing 创建路由表
list_mangle_rules mangle 列出损坏规则(按链/操作筛选)
list_mangle_rules_detail mangle 列出混乱的规则及其全部细节
add_mangle_rule mangle 创建损坏规则(标记路由、标记连接等)
remove_mangle_rule mangle 按ID删除损坏规则
enable_mangle_rule mangle 启用损坏规则
disable_mangle_rule mangle 禁用损坏规则

架构更改

  • devices.py --具有“活动设备”概念的设备注册表;从JSON设备文件加载, MIKROTIK_DEVICES env/CLI JSON和旧版 --host/--username 标志(注册为设备 default)
  • connector.py --所有命令都从注册表中对活动设备运行;添加了SFTP读/写支持(sftp_read_file, sftp_write_file)用于设备上的文件操作
  • app.py --添加了工具注释常量(READ, WRITE, WRITE_IDEMPOTENT, DESTRUCTIVE, DANGEROUS)MCP工具提示;添加 /health 端点
  • mikrotik_ssh_client.py --已添加 sftp_read() 和 sftp_write() SSH客户端的方法
  • 所有范围模块都已更新,以使用工具注释

现有工具(来自上游)

类别 工具
系统 get_system_info, run_command
防火墙 list_filter_rules, get_filter_rule, create_filter_rule, update_filter_rule, remove_filter_rule, enable_filter_rule, disable_filter_rule, move_filter_rule, create_basic_firewall_setup
网络地址转换 list_nat_rules, get_nat_rule, create_nat_rule, update_nat_rule, remove_nat_rule, enable_nat_rule, disable_nat_rule, move_nat_rule
域名系统 get_dns_settings, set_dns_servers, list_dns_static, get_dns_static, add_dns_static, update_dns_static, remove_dns_static, enable_dns_static, disable_dns_static, add_dns_regexp, flush_dns_cache, get_dns_cache, get_dns_cache_statistics, test_dns_query, export_dns_config
动态主机配置协议 list_dhcp_servers, get_dhcp_server, create_dhcp_server, remove_dhcp_server, create_dhcp_pool, create_dhcp_network
路线 list_routes, get_route, add_route, add_default_route, add_blackhole_route, update_route, remove_route, enable_route, disable_route, get_route_statistics, get_route_cache, flush_route_cache, check_route_path
IP地址 list_ip_addresses, get_ip_address, add_ip_address, remove_ip_address
专利联盟 list_ip_pools, get_ip_pool, create_ip_pool, update_ip_pool, remove_ip_pool, expand_ip_pool, list_ip_pool_used
虚拟局域网 list_vlan_interfaces, get_vlan_interface, create_vlan_interface, update_vlan_interface, remove_vlan_interface
无线 check_wireless_support, list_wireless_interfaces, get_wireless_interface, create_wireless_interface, update_wireless_interface, remove_wireless_interface, enable_wireless_interface, disable_wireless_interface, list_wireless_security_profiles, get_wireless_security_profile, create_wireless_security_profile, set_wireless_security_profile, remove_wireless_security_profile, list_wireless_access_list, create_wireless_access_list, remove_wireless_access_list_entry, get_wireless_registration_table, scan_wireless_networks
用户 list_users, get_user, add_user, update_user, remove_user, enable_user, disable_user, disconnect_user, get_active_users, list_user_groups, get_user_group, add_user_group, update_user_group, remove_user_group, list_user_ssh_keys, set_user_ssh_keys, remove_user_ssh_key, export_user_config
备份 create_backup, create_export, list_backups, backup_info, restore_backup, download_file, upload_file, remove_file, import_configuration, export_section, run_script
日志 get_logs, get_logs_by_severity, get_logs_by_topic, search_logs, get_security_logs, get_system_events, get_log_statistics, export_logs, clear_logs, monitor_logs

安装

git clone https://github.com/Korotkov113/mikrotik-mcp.git
cd mikrotik-mcp
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
pip install -e .

配置

单设备(克劳德桌面/Claude代码)

添加到MCP配置(claude_desktop_config.json 或 .claude/settings.json):

{
  "mcpServers": {
    "mikrotik": {
      "command": "/path/to/mikrotik-mcp/.venv/bin/mcp-server-mikrotik",
      "args": [
        "--host", "192.168.0.1",
        "--username", "admin",
        "--key-filename", "/path/to/ssh/key",
        "--port", "22"
      ]
    }
  }
}

环境变量

或者,通过环境进行配置:

export MIKROTIK_HOST=192.168.0.1
export MIKROTIK_USERNAME=admin
export MIKROTIK_PASSWORD=your_password
export MIKROTIK_PORT=22

多设备支持

服务器保持 设备注册表 和a 有源器件每个工具 (防火墙、DNS、路由、备份等)以活动设备为目标;开关 设备随时可用 use_device --无需重新启动服务器。

注册表由三个来源构建(后来获胜):

  1. 设备文件 --JSON文件位于 --devices-file / MIKROTIK_DEVICES_FILE (默认值: ~/.config/mikrotik-mcp/devices.json)
  2. MIKROTIK_DEVICES 环境变量(或 --devices)使用内联JSON
  3. 传统旗帜 --host/--username/--password/--port/--key-filename, 已注册为设备 default (现有的单设备设置保持不变)

设备文件

{
  "default_device": "home",
  "devices": {
    "home": {
      "host": "192.168.88.1",
      "username": "admin",
      "password": "secret",
      "port": 22,
      "description": "home router"
    },
    "office": {
      "host": "10.0.0.1",
      "username": "admin",
      "key_filename": "/path/to/ssh/key",
      "port": 2222,
      "description": "office edge router"
    }
  }
}

多设备设置的MCP配置:

{
  "mcpServers": {
    "mikrotik": {
      "command": "/path/to/mikrotik-mcp/.venv/bin/mcp-server-mikrotik",
      "args": ["--devices-file", "/path/to/devices.json"]
    }
  }
}

通过环境内联JSON

export MIKROTIK_DEVICES='{"home": {"host": "192.168.88.1", "username": "admin", "password": "secret"}, "office": {"host": "10.0.0.1", "username": "admin", "key_filename": "/path/to/key"}}'
export MIKROTIK_DEFAULT_DEVICE=home

运行时管理设备

> What routers do I have?
Tool: list_devices()
* home: admin@192.168.88.1:22 [password] — home router
  office: admin@10.0.0.1:2222 [ssh-key] — office edge router

> Switch to the office router
Tool: use_device(name="office")

> Add the lab router and remember it
Tool: add_device(name="lab", host="172.16.0.1", username="admin", password="...", make_active=true, save=true)

> Check if the office router is reachable
Tool: test_device_connection(name="office")

add_device(..., save=true) 将注册表持久化到设备文件 (创建于 0600 权限,因为它可能包含密码)。更喜欢 key_filename 在可能的情况下使用密码。

用法示例

运行任意命令

> Show me BGP session status
Tool: run_command("/routing bgp session print")

BGP管理

> Create a BGP connection to antifilter service
Tool: add_bgp_connection(name="antifilter", remote_address="45.148.244.55/32", remote_as=65444, ...)

杂乱的规则

> Mark traffic from FreeInternet_list users to routing table to_proxy
Tool: add_mangle_rule(chain="prerouting", action="mark-routing", new_routing_mark="to_proxy", src_address_list="FreeInternet_list")

许可证

MIT许可证。看 许可证.