routeros-inspector-mcp
Provides tools for inspecting and auditing MikroTik RouterOS devices, including device summaries, interfaces, bridge VLANs, routes, firewall tables, DHCP/ARP state, queues, WireGuard metadata, IP services, and policy-backed audits.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@routeros-inspector-mcplist device summaries and run vlan audit"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
routeros-inspector-mcp
A constrained, read-only MCP server for MikroTik RouterOS inventory inspection and policy-backed audits.
The server is fixture-only by default. Live access requires an explicit --live flag, inventory-defined devices, read-only credentials, and fail-closed transport configuration. It does not expose arbitrary RouterOS commands or mutation tools.
Safety model
No arbitrary command execution
No mutation, reboot, restore, firmware, or user-management tools
No caller-supplied hosts or IP addresses; callers select inventory device IDs only
Fixture-only operation unless
--liveis explicitly suppliedVerified API-SSL with pinned CA trust, hostname verification, and TLS 1.2+
No plaintext downgrade when TLS is configured
Allowlisted client errors and redacted outputs
Bounded audit fan-out
Stdio by default; optional HTTP is forced to
127.0.0.1
See docs/deployment.md for the complete deployment boundary and CHANGELOG.md for release history.
Related MCP server: LimaCharlie MCP
Requirements
Python 3.11+
RouterOS 7 for live API use
ansible-vaultonly when using the included Vault credential provider
Installation
python -m venv .venv
. .venv/bin/activate
python -m pip install -e '.[test]'Fixture-first quick start
The checked-in inventory, policy, and RouterOS data are purpose-built synthetic examples. They contain no live-derived topology.
routeros-inspector list-devices --summary
routeros-inspector audit \
--devices edge-router,core-switch \
--audits vlan_consistency,wan_failover_state,snmp_scope \
--summary
python scripts/smoke_mcp_fixture.py
python -m routeros_inspector_mcp.server --transport stdioFixture mode never constructs a live RouterOS backend, even if an explicitly supplied inventory declares live transports.
Configuration
Copy the synthetic examples before configuring live access:
cp config/devices.example.yaml config/devices.yaml
cp config/policy.example.yaml config/policy.yamlconfig/devices.yaml and config/policy.yaml are ignored because real inventories and policies reveal operational details. Keep certificates and live captures outside the repository.
A verified API-SSL inventory entry looks like:
devices:
edge-router:
role: gateway
risk: critical
host: router.example.net
transport: api
credential_ref: vault_mikrotik_readonly
allowed: true
routeros_api_port: 8729
routeros_api_tls: true
routeros_api_certificate: /absolute/path/to/router-ca.pem
routeros_api_server_name: router.example.netTLS mode requires TCP/8729, a readable CA/certificate path, and a nonempty DNS name or IP SAN identity. Configuration errors fail closed and never trigger plaintext fallback.
Credential provider
The included provider resolves <credential_ref>_username and <credential_ref>_password from an Ansible Vault without logging values. Configure it with:
export ROUTEROS_INSPECTOR_VAULT_DIR="$HOME/.config/routeros-inspector-mcp"
export ROUTEROS_INSPECTOR_VAULT_FILE="vault.yml"
export ROUTEROS_INSPECTOR_VAULT_PASSWORD_FILE=".vault_pass"The two file variables may also be absolute paths. Use a dedicated RouterOS read-only identity. Do not use a personal administrator or write-capable credential.
MCP tools
The server exposes fixed collectors such as device summaries, interfaces, bridge VLANs, routes, firewall tables, DHCP/ARP state, queues, WireGuard metadata, and IP services. It also exposes named audits for firmware, SNMP scope, STP, VLAN/trunk consistency, route ownership, WAN failover, encrypted DNS, QoS/DSCP, and backup metadata.
Tool responses omit connection details and credential references. Sensitive RouterOS fields are redacted.
Private fixture capture
scripts/refresh_routeros_fixture.py can transform an existing private artifact directory without network access. Live collection additionally requires the explicit --capture-live flag and explicit Ansible root, inventory, playbook, and Vault password paths. Captures still reveal topology and policy and default to the ignored artifacts/private-fixtures/ directory. Never copy them into tests/fixtures/routeros/ or commit them. Public tests must use purpose-built synthetic fixtures.
Development
make ciEquivalent commands:
ruff check .
pytest -n auto -q
python -m compileall -q src testsSecurity
Please read SECURITY.md before enabling live mode. Report vulnerabilities privately rather than opening a public issue.
License
MIT — see LICENSE.
This server cannot be deployed
Maintenance
Related MCP Connectors
MCP server for mandates, delegation, policy-gated execution, credential grants, and audit.
Read-only MCP access to a documented IT fleet: state, changes, posture. 15 tools.
Free, read-only security scanner for remote MCP servers, before you connect them.
XFA's remote MCP server — query device posture, compliance, policies & CVEs. Read-only.
Related MCP Servers
- AlicenseAqualityAmaintenanceProduction-grade MCP server for MikroTik RouterOS with secure AI-native network automation.122210 npm66MIT
- AlicenseCqualityDmaintenanceA local MCP server for the LimaCharlie security platform that provides investigation, administration, and content-review workflows via a broad read-only tool surface with explicit organization scoping and audit logging.100MIT
- AlicenseNot gradedqualityDmaintenanceMCP server for querying connected WiFi devices from MikroTik RouterOS, enriched with DHCP leases and ARP table entries.MIT
- AlicenseBqualityAmaintenanceMCP server for managing MikroTik RouterOS devices, enabling reading device state and performing guarded write operations such as setting identity via natural language.114GPL 3.0