MikroCLAW
MCP server that enables Claude Code to access, monitor, and manage MikroTik RouterOS devices via its REST API, with 92 tools for read-only and optional write operations.
README
<div align="center">
<img src="docs/mikroclaw-banner.png" alt="MikroCLAW โ MikroTik + CLAW (Claude): MCP server + Pulse dashboard" width="100%">
๐ฆ MikroCLAW
MikroTik + CLAW (Claude) โ kendalikan RouterOS dari percakapan Claude Code
MCP server yang membuat Claude Code bisa mengakses, memonitor, dan mengelola perangkat MikroTik RouterOS lewat tool ber-skema โ plus dashboard monitoring live "Pulse".
</div>
MikroCLAW menjembatani Claude Code dengan RouterOS melalui REST API RouterOS v7
(HTTPS). Alih-alih Anda mengetik perintah curl/ssh manual, Claude memanggil
tool seperti dhcp_leases atau firewall_filter_rules sebagai pemanggilan ber-skema
โ aman, terstruktur, dan kredensial tidak pernah bocor ke jendela chat.
"Siapa saja klien DHCP yang aktif?" ยท "Interface mana yang down?" ยท "Blokir IP 10.0.0.5." โ cukup ketik dalam bahasa biasa, Claude memanggil tool yang tepat.
โจ Kenapa MikroCLAW?
| ๐ Read-only secara default | Aman untuk eksplorasi & monitoring tanpa risiko mengubah konfigurasi. |
| ๐ง Operasi write digerbang | Setiap tool yang mengubah config dikunci flag MIKROCLAW_ALLOW_WRITE. |
๐ Kredensial via .env |
Tidak pernah muncul di chat, tidak ikut ter-commit. |
| ๐งฉ 100 tool ber-skema | 78 read + 22 write, termasuk lima fitur cerdas (Twin/Sentinel/Chronicle/Replay/Concierge), detect_roles, & rest_get/rest_write generic untuk path apa pun. |
| ๐ง 12 Agent Skills | Playbook siap pakai: health-check, audit firewall, audit keamanan, overview jaringan, troubleshoot, backup-snapshot, deteksi-peran + 5 fitur cerdas baru. |
| ๐ค 5 fitur cerdas AI | Twin (simulator what-if paket), Sentinel (deteksi botnet/IoT terinfeksi tanpa signature), Chronicle (mesin waktu konfigurasi + deteksi intrusi), Replay (RCA retrospektif "kenapa tadi lemot"), Concierge (laporan bisnis RT-RW net). |
| ๐ MikroCLAW Pulse | Dashboard web monitoring live per-detik (read-only, via Server-Sent Events). |
| โ๏ธ Installer satu-baris | Windows (PowerShell) & macOS/Linux (bash) โ pasang uv, dependency, .env, daftar MCP. |
| ๐ Tanpa lock-in v7 | RouterOS v6 cukup ganti lapis transport ke API biner; daftar tool tetap. |
Versi terkini: v1.7.0 ยท Python 3.10+ ยท RouterOS v7.1+ ยท Lisensi Apache-2.0.
๐ Dokumen lain:
docs/FITUR.md(ikhtisar fitur ringkas) ยทMANUAL_BOOK.md(panduan tutorial langkah demi langkah).
Daftar Isi
- Bagaimana Claude Code mengakses MikroTik
- Prasyarat
- Persiapan RouterOS
- Instalasi
- Konfigurasi (.env)
- Menghubungkan ke Claude Code
- Daftar tool
- Skills (playbook orkestrasi)
- MikroCLAW Pulse โ monitoring live
- Contoh penggunaan
- Uji manual tanpa Claude
- Keamanan
- Troubleshooting
- Kompatibilitas RouterOS v6 vs v7
- Struktur proyek
- Pengembangan: menambah tool
- Riwayat versi
- Lisensi
Bagaimana Claude Code mengakses MikroTik
Claude Code tidak punya driver MikroTik bawaan. MikroCLAW berperan sebagai MCP server (Model Context Protocol): proses lokal yang mengekspos sekumpulan tool. Claude Code memanggil tool itu; MikroCLAW menerjemahkannya menjadi panggilan REST API ke RouterOS, lalu mengembalikan JSON hasilnya.
flowchart LR
subgraph local["๐ป Mesin Anda (lokal)"]
CC["Claude Code<br/>(CLI ยท IDE ยท Web)"]
MC["๐ฆ
MikroCLAW<br/>MCP server + Pulse"]
ENV[(".env<br/>host ยท user ยท pass")]
end
ROS["๐ก RouterOS<br/>(MikroTik v7)"]
BROWSER["๐ Browser<br/>(Pulse dashboard)"]
CC -- "panggil tool (stdio MCP)" --> MC
MC -- "hasil JSON" --> CC
MC -- "HTTPS /rest/... (REST API v7)" --> ROS
ROS -- "JSON" --> MC
ENV -. "dibaca saat start" .-> MC
BROWSER -- "SSE live per-detik" --> MC
classDef box fill:#10182a,stroke:#1f2d44,color:#e6edf3;
class CC,MC,ROS,BROWSER box;
Alurnya (mis. "siapa saja klien DHCP yang aktif?"):
sequenceDiagram
autonumber
participant U as ๐ค Anda
participant C as Claude Code
participant M as ๐ฆ
MikroCLAW
participant R as ๐ก RouterOS
U->>C: "siapa klien DHCP yang aktif?"
C->>M: panggil tool dhcp_leases (MCP/stdio)
M->>R: GET /rest/ip/dhcp-server/lease (Basic Auth dari .env)
R-->>M: JSON daftar lease
M-->>C: hasil terstruktur
C-->>U: ringkasan klien DHCP
Rinciannya:
- Anda menulis prompt biasa, mis. "siapa saja klien DHCP yang aktif?".
- Claude Code memilih tool
dhcp_leasesdan memanggilnya lewat protokol MCP (stdio). - MikroCLAW (
client.py) mengirimGET https://<router>/rest/ip/dhcp-server/leasedengan Basic Auth dari.env. - RouterOS membalas JSON; MikroCLAW meneruskannya ke Claude.
- Claude meringkas/menyajikan hasil untuk Anda.
RouterOS REST memetakan path konsol ke URL secara langsung, contoh:
| Perintah konsol RouterOS | Operasi REST |
|---|---|
/interface print |
GET /rest/interface |
/ip address print |
GET /rest/ip/address |
| tambah item | PUT /rest/<path> (+ body JSON) |
ubah item ber-.id |
PATCH /rest/<path>/<id> |
hapus item ber-.id |
DELETE /rest/<path>/<id> |
| command (ping, dst.) | POST /rest/<path> |
Prasyarat
| Komponen | Versi | Catatan |
|---|---|---|
| RouterOS | v7.1+ | REST API hanya ada di v7. Untuk v6 lihat kompatibilitas. |
| Python | 3.10+ | Diuji pada 3.14. |
| uv | terbaru | Pengelola environment/dependency โ https://docs.astral.sh/uv/ |
| Akses jaringan | โ | Host yang menjalankan MikroCLAW harus bisa menjangkau port 443/80 router. |
Persiapan RouterOS
Lakukan sekali di router. Disarankan HTTPS + user least-privilege.
# 1) (HTTPS) Aktifkan service www-ssl dengan sertifikat yang sudah ada di /certificate.
# Jika belum punya sertifikat, buat self-signed dulu (lihat di bawah).
/ip/service/set www-ssl certificate=<nama-sertifikat> disabled=no
# Alternatif cepat (kurang aman): pakai HTTP biasa.
# /ip/service/set www disabled=no
# 2) Buat user khusus MikroCLAW โ JANGAN pakai 'admin' penuh.
/user/add name=mikroclaw password=<password-kuat> group=read ;# read-only
# Untuk mengizinkan operasi write, gunakan group=write atau policy kustom.
# 3) Batasi sumber yang boleh mengakses service (mis. hanya subnet LAN/host admin).
/ip/service/set www-ssl address=192.168.88.0/24
Membuat sertifikat self-signed (jika belum ada):
/certificate/add name=mikroclaw-ca common-name=mikroclaw-ca key-usage=key-cert-sign,crl-sign
/certificate/sign mikroclaw-ca
/certificate/add name=mikroclaw-https common-name=<ip-atau-hostname-router>
/certificate/sign mikroclaw-https ca=mikroclaw-ca
/ip/service/set www-ssl certificate=mikroclaw-https disabled=no
Karena sertifikat self-signed, biarkan
MIKROTIK_VERIFY_TLS=falsedi.env(default). Settruehanya jika memakai sertifikat yang tepercaya.
Instalasi
Pilih jalur tercepat sesuai OS Anda โ installer mengurus uv, dependency, .env, dan registrasi MCP sekaligus:
| Jalur | OS | Kapan dipakai | Perintah |
|---|---|---|---|
| ๐ Bootstrap 1-baris | Windows | Belum punya repo, ingin clone + install sekaligus | irm .../bootstrap.ps1 | iex |
| ๐ Bootstrap 1-baris | macOS / Linux | Belum punya repo, ingin clone + install sekaligus | curl -LsSf .../bootstrap.sh | bash |
| ๐ ๏ธ Installer lokal | Windows | Sudah punya repo | .\install.ps1 (atau double-click install.bat) |
| ๐ ๏ธ Installer lokal | macOS / Linux | Sudah punya repo | ./install.sh |
| โ Manual | semua | Ingin kontrol penuh tiap langkah | cp .env.example .env lalu uv sync |
Detail tiap jalur di bawah.
Windows (installer otomatis)
Installer memasang uv, dependency (termasuk Python via uv bila perlu),
menulis .env secara interaktif, dan mendaftarkan MCP server ke Claude Code.
Opsi A โ satu baris (clone + install) di PowerShell:
irm https://raw.githubusercontent.com/Syamsuddin/MikroCLAW/main/bootstrap.ps1 | iex
Opsi B โ sudah punya repo: masuk folder MikroCLAW lalu double-click
install.bat, atau di PowerShell:
.\install.ps1
Argumen berguna: -MikrotikHost 192.168.88.1 -MikrotikUser mikroclaw,
-AllowWrite (izinkan write), -NonInteractive, -SkipMcpRegister.
Lepas instalasi: .\uninstall.ps1 (tambah -RemoveEnv / -RemoveVenv).
Jika PowerShell memblokir skrip, jalankan lewat
install.bat(sudah pakai-ExecutionPolicy Bypass) atau jalankan PowerShell sebagai:powershell -ExecutionPolicy Bypass -File .\install.ps1.
macOS / Linux (installer otomatis)
Installer memasang uv, dependency (termasuk Python via uv bila perlu), menulis
.env (mode 600), dan mendaftarkan MCP server ke Claude Code.
Opsi A โ satu baris (clone + install):
curl -LsSf https://raw.githubusercontent.com/Syamsuddin/MikroCLAW/main/bootstrap.sh | bash
Opsi B โ sudah punya repo:
cd /path/ke/MikroCLAW
./install.sh
Argumen berguna: --host 192.168.88.1 --user mikroclaw, --allow-write,
--http, --non-interactive, --skip-mcp.
Lepas instalasi: ./uninstall.sh (tambah --remove-env / --remove-venv).
Manual (Windows / macOS / Linux)
cd /path/ke/MikroCLAW
cp .env.example .env # lalu isi host + kredensial router
uv sync # pasang dependency (mcp, httpx, python-dotenv)
uv sync membuat virtualenv .venv/ dan menginstal proyek beserta dependensinya.
Konfigurasi (.env)
Semua konfigurasi lewat environment / file .env (otomatis dibaca saat server start).
| Variabel | Wajib | Default | Keterangan |
|---|---|---|---|
MIKROTIK_HOST |
โ | โ | IP/hostname router, mis. 192.168.88.1. |
MIKROTIK_USER |
โ | admin |
User RouterOS (disarankan user khusus least-privilege). |
MIKROTIK_PASSWORD |
โ | (kosong) | Password user tersebut. |
MIKROTIK_USE_TLS |
โ | true |
true โ HTTPS (www-ssl), false โ HTTP. |
MIKROTIK_PORT |
โ | 443/80 |
Port REST. Default mengikuti USE_TLS. |
MIKROTIK_VERIFY_TLS |
โ | false |
Verifikasi sertifikat TLS. false cocok untuk self-signed. |
MIKROTIK_TIMEOUT |
โ | 10 |
Timeout request (detik). |
MIKROCLAW_ALLOW_WRITE |
โ | false |
Gerbang keamanan. true mengaktifkan tool yang mengubah konfigurasi. |
Contoh .env minimal:
MIKROTIK_HOST=192.168.88.1
MIKROTIK_USER=mikroclaw
MIKROTIK_PASSWORD=rahasia-kuat
MIKROTIK_USE_TLS=true
MIKROTIK_VERIFY_TLS=false
MIKROCLAW_ALLOW_WRITE=false
Menghubungkan ke Claude Code
File .mcp.json sudah disertakan (scope project), isinya:
{
"mcpServers": {
"mikroclaw": {
"command": "uv",
"args": ["run", "--directory", "/Users/syams/PROJECTS/MikroCLAW", "mikroclaw"]
}
}
}
Server berjalan via stdio; kredensial diambil dari .env (bukan dari file
ini), jadi .mcp.json aman untuk di-commit.
Langkah di Claude Code:
/mcp # cek server "mikroclaw" muncul & status connected
Saat pertama kali, Claude Code akan meminta persetujuan untuk menjalankan MCP server project-scope โ setujui untuk mengaktifkannya.
Ingin dipakai di semua proyek, bukan cuma folder ini? Daftarkan sebagai user-scope:
claude mcp add mikroclaw -s user -- uv run --directory /Users/syams/PROJECTS/MikroCLAW mikroclaw
Daftar tool
100 tool terbagi dua kelas: READ (selalu aktif) dan WRITE (digerbang flag).
pie showData
title Distribusi 100 tool MikroCLAW
"Read (selalu aktif)" : 78
"Write (digerbang)" : 22
Cakupan domain READ (ringkas):
| Domain | Contoh tool |
|---|---|
| ๐ฅ๏ธ Sistem & perangkat | system_resource, system_health, routerboard_info, system_packages, system_license |
| ๐ Interface & L2 | list_interfaces, ethernet_ports, bridge_ports, bridge_hosts, vlans |
| ๐ IP & routing | list_ip_addresses, routing_table, arp_table, neighbors, dhcp_* |
| ๐ก๏ธ Firewall & NAT | firewall_filter_rules, firewall_nat_rules, firewall_mangle, address_lists, firewall_connections |
| ๐ถ WiFi & CAPsMAN | wifi_interfaces, wifi_registrations, wifi_radios, capsman_remote_caps |
| ๐ VPN & tunnel | wireguard_*, ppp_active, ppp_secrets, ipsec_peers, ipsec_active_peers |
| ๐ QoS & bandwidth | simple_queues, queue_tree, ppp_profiles, ip_pools |
| ๐ IPv6 | ipv6_addresses, ipv6_routes, ipv6_firewall_filter, ipv6_neighbors |
| ๐งญ Routing dinamis | bgp_sessions, ospf_neighbors |
| ๐ฅ Hotspot & AAA | hotspot_servers, hotspot_active, hotspot_users, radius_servers |
| ๐ Keamanan & audit | router_users, user_groups, active_sessions, certificates, ip_services |
| ๐ฉบ Diagnostik | ping, traceroute, interface_traffic_live, recent_logs, netwatch, check_for_updates |
| ๐งญ Deteksi peran | detect_roles (klasifikasikan fungsi router dari bukti konfigurasi) |
| ๐ค Fitur cerdas AI | simulate_packet, simulate_firewall_change (Twin) ยท analyze_client_behavior (Sentinel) ยท config_snapshot, config_diff (Chronicle) ยท explain_incident (Replay) ยท business_report (Concierge) |
Read โ selalu aktif
| Tool | Parameter | Fungsi | REST |
|---|---|---|---|
system_resource |
โ | Versi RouterOS, CPU, memori, uptime, board, arsitektur. | GET /system/resource |
system_identity |
โ | Nama/identitas perangkat. | GET /system/identity |
list_interfaces |
โ | Semua interface + status running/disabled + statistik. | GET /interface |
list_ip_addresses |
โ | Alamat IP per interface. | GET /ip/address |
dhcp_leases |
โ | Klien DHCP yang mendapat IP dari router. | GET /ip/dhcp-server/lease |
arp_table |
โ | Pemetaan IP โ MAC yang terlihat router. | GET /ip/arp |
firewall_filter_rules |
โ | Aturan firewall filter (input/forward/output). | GET /ip/firewall/filter |
firewall_nat_rules |
โ | Aturan NAT (masquerade, port forward). | GET /ip/firewall/nat |
routing_table |
โ | Tabel routing IP (route aktif & statis). | GET /ip/route |
simple_queues |
โ | Simple queue โ pembatasan bandwidth per IP/target. | GET /queue/simple |
address_lists |
โ | Isi semua firewall address-list. | GET /ip/firewall/address-list |
dns_settings |
โ | Konfigurasi DNS: server upstream, cache, allow-remote. | GET /ip/dns |
dhcp_servers |
โ | DHCP server + interface & address-pool-nya. | GET /ip/dhcp-server |
ppp_active |
โ | Sesi PPP aktif (PPPoE/L2TP/PPTP/SSTP). | GET /ppp/active |
bridge_hosts |
โ | Tabel host bridge (MAC per port). | GET /interface/bridge/host |
neighbors |
โ | Tetangga terdeteksi (MNDP/CDP/LLDP). | GET /ip/neighbor |
system_health |
โ | Sensor HW: suhu, tegangan, kipas (jika ada). | GET /system/health |
netwatch |
โ | Host yang dipantau Netwatch + status up/down. | GET /tool/netwatch |
router_users |
โ | Daftar user RouterOS + grup/hak aksesnya. | GET /user |
wifi_interfaces |
โ | Interface WiFi (auto wifiwave2/legacy). | GET /interface/wifi โป /interface/wireless |
wifi_registrations |
โ | Klien WiFi yang terhubung (auto wifiwave2/legacy). | GET .../registration-table |
wireguard_interfaces |
โ | Interface WireGuard (VPN) + public key & port. | GET /interface/wireguard |
wireguard_peers |
โ | Peer WireGuard + allowed-address & handshake. | GET /interface/wireguard/peers |
ppp_secrets |
โ | Akun PPP (PPPoE/VPN) โ name/service/profile. | GET /ppp/secret |
ip_pools |
โ | IP pool (rentang IP untuk DHCP/PPP). | GET /ip/pool |
dns_static |
โ | Entri DNS statis (A/CNAME) yang dilayani router. | GET /ip/dns/static |
ntp_client |
โ | Status & konfigurasi NTP client. | GET /system/ntp/client |
schedulers |
โ | Tugas terjadwal RouterOS. | GET /system/scheduler |
scripts |
โ | Script tersimpan di RouterOS. | GET /system/script |
vlans |
โ | Interface VLAN + vlan-id & interface induk. | GET /interface/vlan |
ip_services |
โ | Service IP (api/ssh/www/telnet/winbox) + port. | GET /ip/service |
dhcp_client |
โ | Status DHCP client (mis. IP WAN dari ISP). | GET /ip/dhcp-client |
ip_cloud |
โ | IP publik & DDNS MikroTik (remote access). | GET /ip/cloud |
system_packages |
โ | Paket RouterOS terpasang + status. | GET /system/package |
routerboard_info |
โ | Model, serial, firmware terpasang vs tersedia. | GET /system/routerboard |
active_sessions |
โ | User yang sedang login (audit keamanan). | GET /user/active |
list_files |
โ | File di router (backup/export) + ukuran & waktu. | GET /file |
firewall_connections |
โ | Connection tracking aktif (troubleshooting). | GET /ip/firewall/connection |
bridge_ports |
โ | Pemetaan port ke bridge. | GET /interface/bridge/port |
certificates |
โ | Sertifikat + masa berlaku (audit kedaluwarsa). | GET /certificate |
dns_cache |
โ | Isi cache DNS resolver router. | GET /ip/dns/cache |
dhcp_networks |
โ | Gateway/DNS/netmask yang ditawarkan DHCP. | GET /ip/dhcp-server/network |
firewall_mangle |
โ | Aturan mangle (marking QoS/policy routing). | GET /ip/firewall/mangle |
queue_tree |
โ | Queue tree (bandwidth hierarkis berbasis mark). | GET /queue/tree |
ppp_profiles |
โ | Profil PPP (rate-limit, pool, DNS). | GET /ppp/profile |
user_groups |
โ | Grup hak akses + policy (audit keamanan). | GET /user/group |
ethernet_ports |
โ | Detail port ethernet (link speed, auto-neg). | GET /interface/ethernet |
ipsec_peers |
โ | Konfigurasi peer IPsec. | GET /ip/ipsec/peer |
ipsec_active_peers |
โ | Tunnel IPsec yang sedang aktif. | GET /ip/ipsec/active-peers |
ipv6_addresses |
โ | Alamat IPv6 per interface. | GET /ipv6/address |
ipv6_routes |
โ | Tabel routing IPv6. | GET /ipv6/route |
ipv6_firewall_filter |
โ | Aturan firewall filter IPv6. | GET /ipv6/firewall/filter |
ipv6_neighbors |
โ | Tabel neighbor IPv6 (NDP). | GET /ipv6/neighbor |
hotspot_servers |
โ | Server hotspot + interface & profil. | GET /ip/hotspot |
hotspot_active |
โ | User hotspot yang sedang login. | GET /ip/hotspot/active |
hotspot_users |
โ | Akun user hotspot. | GET /ip/hotspot/user |
capsman_remote_caps |
โ | CAP/AP yang dikelola CAPsMAN (auto legacy/wifiwave2). | GET /caps-man/remote-cap โป wifiwave2 |
capsman_registrations |
โ | Klien via CAPsMAN (auto legacy/wifiwave2). | GET .../registration-table |
wifi_radios |
โ | Radio WiFi fisik (wifiwave2). | GET /interface/wifi/radio |
bgp_sessions |
โ | Sesi BGP (v7). | GET /routing/bgp/session |
ospf_neighbors |
โ | Neighbor OSPF + state adjacency (v7). | GET /routing/ospf/neighbor |
radius_servers |
โ | Server RADIUS (AAA). | GET /radius |
system_history |
โ | Riwayat perubahan config (undo). | GET /system/history |
system_license |
โ | Info lisensi (level/CHR). | GET /system/license |
recent_logs |
limit (default 50) |
Log terbaru RouterOS. | GET /log |
ping |
address, count (default 3) |
Ping dari router ke sebuah alamat (diagnostik). | POST /ping |
traceroute |
address, count (default 3) |
Traceroute (jejak hop) dari router. | POST /tool/traceroute |
interface_traffic_live |
interface |
Satu sampel throughput real-time (rx/tx bps). | POST /interface/monitor-traffic |
check_for_updates |
โ | Cek update RouterOS (tidak mengubah config). | POST /system/package/update/check-for-updates |
detect_roles |
โ | Deteksi peran perangkat (gateway NAT, firewall, BGP/OSPF, switch/AP, BRAS, VPN, DHCP/DNS, QoS, dll) + bukti & keyakinan. | multi GET (introspeksi) |
simulate_packet |
src, dst, protocol, dst_port, โฆ |
Twin โ telusuri paket hipotetis menembus mangleโdst-natโroutingโfilterโsrc-nat di atas ruleset live; lapor verdict + jejak. | multi GET (model murni) |
simulate_firewall_change |
src, dst, new_rule, โฆ |
Twin โ uji dampak satu aturan firewall baru SEBELUM diterapkan (diff verdict). | multi GET (model murni) |
analyze_client_behavior |
ip (opsional) |
Sentinel โ sidik-jari perilaku per-perangkat dari conntrack; deteksi botnet IoT/miner/scan tanpa signature, berkonteks kelas perangkat. | GET /ip/firewall/connection + lease/arp |
config_snapshot |
label |
Chronicle โ simpan snapshot konfigurasi relevan-keamanan (ber-hash) ke disk lokal. | multi GET โ file lokal |
config_diff |
simpan |
Chronicle โ diff konfigurasi live vs snapshot terakhir + penilaian risiko (user baru, port mgmt dibuka, persistensi, dll). | multi GET โ diff |
explain_incident |
mulai_menit_lalu, selesai_menit_lalu |
Replay โ rekonstruksi telemetri jendela waktu lampau (riwayat Pulse) + anomali untuk RCA "kenapa tadi lemot". | file riwayat lokal |
business_report |
plan_down_mbps, wan_interface, โฆ |
Concierge โ terjemahkan telemetri jadi sinyal bisnis RT-RW net (pelanggan, akun nganggur, pencuri bandwidth, utilisasi WAN). | multi GET (ppp/hotspot/queue) |
rest_get |
path |
GET generic ke path REST apa pun (read-only). | GET /<path> |
Contoh rest_get untuk hal yang belum punya tool khusus:
ip/dns, ppp/active, interface/wireless, system/clock, queue/simple.
Write โ perlu MIKROCLAW_ALLOW_WRITE=true
Jika flag bernilai false (default), tool ini mengembalikan error dan tidak
menyentuh router.
| Tool | Parameter | Fungsi | REST |
|---|---|---|---|
set_interface_enabled |
interface_id, enabled |
Aktif/nonaktifkan interface (by .id atau nama). |
PATCH /interface/<id> |
add_firewall_drop |
src_address, chain (default forward), comment |
Tambah aturan DROP untuk sumber tertentu. | PUT /ip/firewall/filter |
add_address_list_entry |
address, address_list, comment, timeout |
Tambah IP/subnet ke firewall address-list. | PUT /ip/firewall/address-list |
delete_firewall_rule |
rule_id |
Hapus satu aturan firewall filter by .id. |
DELETE /ip/firewall/filter/<id> |
set_firewall_rule_enabled |
rule_id, enabled |
Aktif/nonaktifkan satu aturan firewall by .id. |
PATCH /ip/firewall/filter/<id> |
add_simple_queue |
name, target, max_limit |
Tambah simple queue (batas bandwidth target). | PUT /queue/simple |
create_backup |
name (default mikroclaw) |
Buat file backup konfigurasi (.backup) di router. | POST /system/backup/save |
reboot_router |
โ | Reboot router sekarang (mengganggu koneksi). | POST /system/reboot |
add_dns_static |
name, address, ttl |
Tambah entri DNS statis (A record). | PUT /ip/dns/static |
add_ppp_secret |
name, password, service, profile |
Tambah akun PPP (PPPoE/VPN). | PUT /ppp/secret |
add_wireguard_peer |
interface, public_key, allowed_address, endpoint_address, endpoint_port |
Tambah peer WireGuard. | PUT /interface/wireguard/peers |
set_ip_service_enabled |
service_id, enabled |
Aktif/nonaktifkan IP service (mis. matikan telnet). | PATCH /ip/service/<id> |
add_nat_rule |
chain, action, +opsional (protocol, dst_port, to_addresses, to_ports, dll) |
Tambah NAT: port-forward (dstnat) / masquerade (srcnat). | PUT /ip/firewall/nat |
add_static_route |
dst_address, gateway, distance, comment |
Tambah route statis (termasuk default route). | PUT /ip/route |
add_static_dhcp_lease |
address, mac_address, server, comment |
Pin IP statis ke MAC (static lease). | PUT /ip/dhcp-server/lease |
assign_ip_address |
address, interface, comment |
Pasang IP (CIDR) ke interface. | PUT /ip/address |
set_identity |
name |
Ganti nama/identitas router. | POST /system/identity/set |
set_dns_servers |
servers, allow_remote_requests |
Set DNS upstream router. | POST /ip/dns/set |
remove_address_list_entry |
entry_id |
Hapus entri address-list by .id. |
DELETE /ip/firewall/address-list/<id> |
add_hotspot_user |
name, password, profile, comment |
Tambah akun user hotspot. | PUT /ip/hotspot/user |
add_ipv6_address |
address, interface, comment |
Pasang alamat IPv6 ke interface. | PUT /ipv6/address |
rest_write |
method (PUT/PATCH/DELETE/POST), path, body |
Write generic untuk operasi lanjutan. Gunakan hati-hati. | sesuai method |
Skills (playbook orkestrasi)
Selain 100 tool atomik, MikroCLAW menyertakan Agent Skills di
.claude/skills/ โ playbook yang mengoordinasikan banyak tool
menjadi alur kerja siap pakai. Claude Code memuatnya otomatis saat frasa pemicunya
muncul; bisa juga dipanggil eksplisit dengan /<nama-skill>.
| Skill | Fungsi | Pemicu contoh |
|---|---|---|
mikrotik-health-check |
Laporan kesehatan & maintenance (resource, suhu, firmware, update, WAN, NTP). | "cek kesehatan router", "ada update routeros?" |
mikrotik-firewall-audit |
Tinjau filter/NAT/mangle, address-list, koneksi; temuan + rekomendasi. | "audit firewall", "firewall monitoring" |
mikrotik-security-audit |
Hardening: service terbuka, user/grup, sesi, sertifikat, DNS, proteksi input. | "audit keamanan", "apakah router aman" |
mikrotik-network-overview |
Snapshot inventaris: WAN, subnet, interface/VLAN, routing, klien, tetangga. | "overview jaringan", "dokumentasi config" |
mikrotik-troubleshoot |
Diagnosa konektivitas berlapis (L1โIPโDNSโfirewall). | "internet mati", "tidak bisa browsing" |
mikrotik-backup-snapshot |
Backup biner + snapshot JSON konfigurasi kunci untuk diff/dokumentasi. | "backup mikrotik", "snapshot sebelum perubahan" |
mikrotik-role-detect |
Deteksi & jelaskan peran perangkat (gateway/firewall/BGP/AP/BRAS/VPN/โฆ) beserta bukti & keyakinan. | "deteksi peran mikrotik", "router ini berfungsi sebagai apa" |
mikrotik-twin ๐ |
Simulator what-if โ telusuri nasib paket & uji aturan firewall baru sebelum diterapkan. | "kalau klien X akses Y lolos?", "simulasikan rule ini", "uji firewall sebelum pasang" |
mikrotik-sentinel ๐ |
Deteksi perangkat terinfeksi โ botnet IoT/miner/scan dari perilaku koneksi, tanpa signature. | "ada perangkat terinfeksi?", "cek botnet", "kenapa CCTV ini aneh" |
mikrotik-chronicle ๐ |
Mesin waktu konfigurasi โ snapshot + diff berisiko untuk deteksi perubahan/intrusi. | "apa yang berubah di config?", "deteksi perubahan tak terjadwal", "ada backdoor?" |
mikrotik-replay ๐ |
RCA retrospektif โ jelaskan insiden masa lampau dari riwayat telemetri. | "kenapa tadi sore lemot?", "internet sempat putus jam berapa" |
mikrotik-concierge ๐ |
Laporan bisnis โ pelanggan, akun nganggur, pencuri bandwidth, utilisasi WAN, kapan upgrade. | "laporan bisnis RT-RW net", "ada yang nyolong bandwidth?", "perlu upgrade paket?" |
Semua skill read-only secara default; remediasi yang mengubah konfigurasi selalu
meminta konfirmasi dan tetap butuh MIKROCLAW_ALLOW_WRITE=true.
MikroCLAW Pulse โ dashboard monitoring live
Selain MCP server, MikroCLAW menyertakan Pulse: laman web monitoring yang memperbarui indikator per detik lewat Server-Sent Events.
- Fase 1 โ data plane: read-only, tanpa dependency baru (memakai Starlette +
uvicorn yang sudah ikut
mcp). Memantau RouterOS bertingkat & menyusun state live. - Fase 2 โ lapis AI (opsional): kartu ๐ง AI Analyst menarasikan kondisi
jaringan, mendeteksi anomali tanpa ambang tetap, mengkorelasikan akar masalah, dan
menyarankan remediasi โ memanggil Anthropic Messages API langsung via
httpx(tanpa SDK), output terstruktur lewat tool-use. Tetap read-only (hanya membaca snapshot). Aktif bilaANTHROPIC_API_KEYdi-set; tanpa itu Pulse tetap jalan dan kartu AI menampilkan status "nonaktif". - Fase 3 โ AI proaktif: ๐ฎ Prediksi tren deterministik (regresi linear dari
riwayat โ tren %/jam + ETA mencapai ambang untuk CPU/memori/disk โ jalan tanpa
API key), plus โก Remediasi 1-klik yang diusulkan AI dan dieksekusi dari
dashboard. Remediasi di-gate ganda: butuh
MIKROCLAW_ALLOW_WRITE=truedan hanya aksi dari allowlist sempit (blokir_ip,tambah_address_list,nonaktifkan_service) yang persis diusulkan AI โ tiap aksi diberi komentar auditadded-by-pulse-ai.
# memakai kredensial yang sama dari .env
uv run mikroclaw-web # atau: python -m mikroclaw.web
# buka http://127.0.0.1:8800
Arsitektur Pulse โ empat loop polling bertingkat โ state in-memory โ SSE โ browser:
flowchart LR
subgraph poller["poller.py โ empat loop async"]
F["โก fast ยท 1 dtk<br/>resource ยท health ยท throughput"]
M["๐ mid ยท 5 dtk<br/>klien ยท firewall ยท queue"]
S["๐ข slow ยท 30 dtk<br/>WAN ยท service ยท sertifikat"]
P["๐ก ping ยท 5 dtk<br/>RTT gateway & 8.8.8.8"]
end
ROS["๐ก RouterOS<br/>REST v7"]
STATE[("๐ง state in-memory<br/>+ ring-buffer 60 dtk")]
APP["app.py<br/>Starlette + SSE"]
UI["๐ index.html<br/>(vanilla JS, 0 dependency)"]
ROS --> F & M & S & P
F & M & S & P --> STATE
STATE -- "snapshot tiap tick" --> APP
APP -- "/api/stream (SSE)" --> UI
classDef box fill:#10182a,stroke:#1f2d44,color:#e6edf3;
class F,M,S,P,ROS,STATE,APP,UI box;
๐ก Throughput diturunkan dari delta counter rx/tx
/interface(satu request untuk semua interface), bukanmonitor-trafficper-interface โ jauh lebih ringan untuk router.
| ENV | Default | Keterangan |
|---|---|---|
MIKROCLAW_WEB_HOST |
127.0.0.1 |
Alamat bind. Set 0.0.0.0 untuk diakses dari LAN. |
MIKROCLAW_WEB_PORT |
8800 |
Port HTTP laman. |
ANTHROPIC_API_KEY |
(kosong) | Mengaktifkan lapis AI (Fase 2). Tanpa ini, kartu AI tampil "nonaktif". |
MIKROCLAW_AI_MODEL |
claude-sonnet-4-6 |
Model Claude untuk analisis. |
MIKROCLAW_AI_INTERVAL |
60 |
Detik antar-analisis otomatis. |
MIKROCLAW_AI_MAX_TOKENS |
2048 |
Batas token output analisis. |
Yang ditampilkan (semua dari tool read yang ada):
- Vitals (1 dtk): CPU, memori, disk, suhu/tegangan, jumlah klien, firewall drops/dtk, conntrack, sesi login, sertifikat terdekat kedaluwarsa.
- WAN: IP WAN/publik, DDNS, gateway, RTT ping gateway &
8.8.8.8, sparkline download/upload 60 detik. - Interface matrix (1 dtk): throughput rx/tx live (delta counter), status link, link-speed, error/drop.
- Klien: gabungan DHCP + PPPoE + hotspot + WiFi (sinyal), tebakan vendor dari OUI MAC, dan bandwidth per-klien bila ada simple queue yang cocok.
- Service terbuka: ditandai merah bila berisiko (telnet/ftp/www/api) tanpa
batasan
address. - Log Stream: tail
/logterbaru dengan pewarnaan severity (error/warning). - ๐ง AI Analyst (Fase 2): status sehat/perhatian/kritis, ringkasan naratif, daftar anomali ber-severity, dan rekomendasi โ plus tombol "Analisa sekarang".
- ๐ฎ Prediksi Tren (Fase 3): tren & ETA CPU/memori/disk (deterministik, tanpa API key).
- โก Remediasi 1-klik (Fase 3): tombol eksekusi aksi yang diusulkan AI (muncul ter-kunci bila write-gate mati).
Cadence bertingkat (1 dtk vitals/interface ยท 5 dtk klien & ping ยท 30 dtk WAN/
service/sertifikat & sampel prediksi ยท analisis AI default 60 dtk) agar tidak
membebani router. Endpoint: / (laman), /api/stream (SSE), /api/snapshot
(JSON sekali ambil), /api/analyze (POST โ picu analisis AI), /api/remediate
(POST โ eksekusi 1 aksi remediasi; butuh ALLOW_WRITE).
Contoh penggunaan
Cukup minta dalam bahasa biasa di Claude Code:
- "Tampilkan versi RouterOS dan pemakaian CPU/memori." โ
system_resource - "Siapa saja klien DHCP yang aktif sekarang?" โ
dhcp_leases - "Interface mana yang sedang down?" โ
list_interfaces - "Tunjukkan 100 baris log terakhir yang mengandung error." โ
recent_logs+ filter - "Ping 8.8.8.8 dari router." โ
ping - "Apa konfigurasi DNS router?" โ
rest_get path=ip/dns - "Blokir IP 10.0.0.5 di firewall." โ
add_firewall_drop(butuhALLOW_WRITE=true) - "Nonaktifkan interface ether5." โ
set_interface_enabled(butuhALLOW_WRITE=true)
Uji manual tanpa Claude
Memastikan REST hidup & kredensial benar sebelum menyalakan dari Claude:
source .env
curl -sk -u "$MIKROTIK_USER:$MIKROTIK_PASSWORD" \
"https://$MIKROTIK_HOST/rest/system/resource" | jq .
Uji server MCP-nya sendiri (memuat & mendaftarkan tool, tanpa konek router):
uv run python -c "
import asyncio
from mikroclaw.server import mcp
tools = asyncio.run(mcp.list_tools())
print(f'{len(tools)} tools:', ', '.join(t.name for t in tools))
"
Test suite (pytest)
Tersedia unit test untuk client REST, helper poller, prediksi/throughput, remediasi, lapis AI, dan endpoint Pulse โ semuanya offline (httpx di-mock, tanpa router/jaringan/biaya API):
uv run --extra test pytest # memasang & menjalankan pytest (extra 'test')
83 passed in 0.45s
Keamanan
- User least-privilege โ buat user khusus (mis. grup
read); jangan pakaiadminpenuh. - Pisahkan kredensial โ hanya di
.env, yang sudah masuk.gitignore. Jangan tempel password di chat atau di.mcp.json. - Gunakan TLS โ
MIKROTIK_USE_TLS=true. SetMIKROTIK_VERIFY_TLS=truesetelah memasang sertifikat tepercaya. - Batasi sumber akses di router:
/ip/service/set www-ssl address=<subnet-tepercaya>. - Write off by default โ biarkan
MIKROCLAW_ALLOW_WRITE=falsekecuali memang sedang melakukan perubahan; matikan lagi sesudahnya. - Audit โ operasi
add_firewall_dropmenyertakan komentaradded-by-mikroclawagar mudah ditelusuri/dihapus.
Troubleshooting
| Gejala | Kemungkinan sebab | Solusi |
|---|---|---|
MIKROTIK_HOST belum di-set |
.env belum dibuat/diisi |
cp .env.example .env, isi MIKROTIK_HOST. |
Gagal menghubungi RouterOS ... (timeout) |
Port REST tertutup / host salah / firewall | Cek /ip/service, ketersambungan jaringan, dan MIKROTIK_PORT. |
RouterOS membalas 401 |
User/password salah | Periksa MIKROTIK_USER/MIKROTIK_PASSWORD. |
RouterOS membalas 404 |
Path tidak ada di versi RouterOS ini | Cek nama path; sebagian fitur beda antar versi. |
| Error sertifikat / SSL | Self-signed + verify aktif | Set MIKROTIK_VERIFY_TLS=false. |
Operasi write dinonaktifkan |
Mencoba tool write saat gate off | Set MIKROCLAW_ALLOW_WRITE=true di .env, restart server. |
Server tak muncul di /mcp |
.mcp.json belum disetujui |
Jalankan /mcp, setujui server project-scope; pastikan uv ada di PATH. |
Perubahan .env tak terbaca |
Server masih pakai proses lama | Restart koneksi MCP (toggle via /mcp) agar .env dibaca ulang. |
Kompatibilitas RouterOS v6 vs v7
REST API hanya ada di RouterOS v7. Jika router Anda v6:
- Antarmuka tool di
server.pytidak perlu berubah. - Ganti lapisan transport di
client.pyke API biner (port8728/8729TLS) memakai library sepertilibrouteros. RouterOSClient.get/put/patch/deletecukup dipetakan ke perintah API biner; sisanya (config, server, daftar tool) tetap sama.
API biner juga bekerja di v7, sehingga bisa dipakai sebagai transport tunggal lintas versi bila diinginkan.
Struktur proyek
MikroCLAW/
โโโ .mcp.json # registrasi server untuk Claude Code (project-scope)
โโโ .env.example # template variabel environment
โโโ .env # kredensial nyata (di-gitignore, buat sendiri)
โโโ .gitignore
โโโ pyproject.toml # metadata + dependency + entry point `mikroclaw`
โโโ README.md
โโโ CLAUDE.md # panduan repo untuk Claude Code (arsitektur & konvensi)
โโโ LICENSE # Apache License 2.0
โโโ install.ps1 / install.sh # installer (Windows / macOS+Linux)
โโโ install.bat # launcher double-click untuk install.ps1
โโโ uninstall.ps1 / uninstall.sh# lepas registrasi MCP (opsi hapus .env/.venv)
โโโ bootstrap.ps1 / bootstrap.sh# clone + install satu baris
โโโ tests/ # unit test pytest (offline, httpx di-mock)
โโโ .claude/skills/ # Agent Skills (playbook orkestrasi tool)
โ โโโ mikrotik-health-check/SKILL.md
โ โโโ mikrotik-firewall-audit/SKILL.md
โ โโโ mikrotik-security-audit/SKILL.md
โ โโโ mikrotik-network-overview/SKILL.md
โ โโโ mikrotik-troubleshoot/SKILL.md
โ โโโ mikrotik-backup-snapshot/SKILL.md
โ โโโ mikrotik-role-detect/SKILL.md
โ โโโ mikrotik-twin/SKILL.md # ๐ simulator what-if
โ โโโ mikrotik-sentinel/SKILL.md # ๐ deteksi perangkat terinfeksi
โ โโโ mikrotik-chronicle/SKILL.md # ๐ mesin waktu konfigurasi
โ โโโ mikrotik-replay/SKILL.md # ๐ RCA retrospektif
โ โโโ mikrotik-concierge/SKILL.md # ๐ laporan bisnis
โโโ src/mikroclaw/
โโโ __init__.py # versi paket
โโโ config.py # baca .env/env โ objek Config + validasi
โโโ client.py # client REST RouterOS v7 (async httpx)
โโโ roles.py # classify_roles: deteksi peran dari bukti (murni)
โโโ storage.py # ๐ helper state dir lokal (Chronicle & Replay)
โโโ twin.py # ๐ Twin: engine simulator paket (murni)
โโโ sentinel.py # ๐ Sentinel: sidik-jari perilaku perangkat (murni)
โโโ chronicle.py # ๐ Chronicle: snapshot/diff/risiko konfigurasi (murni)
โโโ concierge.py # ๐ Concierge: telemetri โ sinyal bisnis (murni)
โโโ server.py # FastMCP + definisi 100 tool + write-gate
โโโ web/ # MikroCLAW Pulse โ dashboard monitoring live
โโโ poller.py # data plane: poll bertingkat + ring-buffer + throughput + prediksi
โโโ history.py # ๐ Replay: persistensi riwayat telemetri + ringkasan jendela
โโโ analyst.py # lapis AI (Fase 2): Anthropic Messages API via httpx
โโโ actions.py # remediasi 1-klik (Fase 3): allowlist aksi write yang aman
โโโ app.py # Starlette + SSE + endpoint analyze/remediate + entry `mikroclaw-web`
โโโ static/
โโโ index.html # dashboard vanilla JS (tanpa dependency eksternal)
Pengembangan: menambah tool
Tambahkan fungsi async di src/mikroclaw/server.py dengan dekorator @mcp.tool().
Docstring menjadi deskripsi tool yang dilihat Claude โ tulis sejelas mungkin.
Contoh menambah daftar simple queue (read):
@mcp.tool()
async def simple_queues() -> Any:
"""Daftar simple queue (pembatasan bandwidth per target)."""
return await _ros().get("/queue/simple")
Contoh tool write (selalu panggil _require_write() di awal):
@mcp.tool()
async def reboot_router() -> Any:
"""Reboot router. BUTUH MIKROCLAW_ALLOW_WRITE=true."""
_require_write()
return await _ros().post("/system/reboot")
Setelah mengubah kode, restart koneksi MCP di Claude Code (/mcp) agar tool baru
terdeteksi. Verifikasi cepat:
uv run python -c "import asyncio; from mikroclaw.server import mcp; print(len(asyncio.run(mcp.list_tools())), 'tools')"
Riwayat versi
| Versi | Sorotan |
|---|---|
| v1.7.0 | 5 fitur cerdas AI โ Twin (simulator what-if paket: simulate_packet/simulate_firewall_change), Sentinel (deteksi botnet IoT/miner/scan tanpa signature: analyze_client_behavior), Chronicle (mesin waktu konfigurasi + deteksi intrusi: config_snapshot/config_diff), Replay (RCA retrospektif: explain_incident), Concierge (laporan bisnis RT-RW net: business_report) + 5 skill baru. 100 tool ยท 12 skill ยท 151 test. |
| v1.6.0 | Deteksi peran โ tool detect_roles (introspeksi โ klasifikasi gateway/firewall/BGP/OSPF/switch/AP/BRAS/VPN/QoS/โฆ + bukti & keyakinan) & skill mikrotik-role-detect. 93 tool ยท 7 skill. |
| v1.5.0 | Pulse Fase 3 โ AI proaktif: prediksi tren deterministik (CPU/mem/disk + ETA) & remediasi 1-klik ter-gate ganda (write-flag + allowlist + cocok usulan AI) lewat POST /api/remediate. |
| v1.4.0 | Pulse Fase 2 โ lapis AI Analyst (Anthropic Messages API via httpx, read-only, output terstruktur lewat tool-use) + Log Stream dengan pewarnaan severity + endpoint POST /api/analyze. |
| v1.3.0 | MikroCLAW Pulse โ laman web monitoring live per-detik (Starlette + SSE, read-only; tanpa dependency baru). |
| v1.2.0 | Installer macOS / Linux (bash) + bootstrap satu-baris. |
| v1.1.0 | Installer Windows (PowerShell) + bootstrap satu-baris. |
| v1.0.0 | Rilis awal โ MCP server (92 tool: 70 read + 22 write) + 6 Agent Skills. |
Penomoran mengikuti urutan milestone fitur pada histori git; rincian tiap perubahan ada di
git log.
Lisensi
Dirilis di bawah Apache License 2.0 โ lihat LICENSE.
MikroCLAW dibuat untuk administrasi MikroTik yang sah pada perangkat milik/dikuasakan kepada Anda. Gunakan secara bertanggung jawab.
Recommended Servers
playwright-mcp
A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.
Magic Component Platform (MCP)
An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.
Audiense Insights MCP Server
Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.
VeyraX MCP
Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.
graphlit-mcp-server
The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.
Kagi MCP Server
An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.
E2B
Using MCP to run code via e2b.
Neon Database
MCP server for interacting with Neon Management API and databases
Exa Search
A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.
Qdrant Server
This repository is an example of how to create a MCP server for Qdrant, a vector search engine.