Skip to main content
Glama

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
MIKROTIK_TIMEOUTNoFallback connect timeout (seconds) for devices without their own timeout10
MIKROTIK_LOG_LEVELNoLog level for the server process (stderr); invalid values fall back to INFO with a warningINFO
MIKROTIK_ALLOW_WRITENoEnable write tools (see Security model)false
MIKROTIK_DEVICES_FILENoPath to the devices YAML filedevices.yaml

Capabilities

Features and capabilities supported by this server

CapabilityDetails
tools
{
  "listChanged": false
}
prompts
{
  "listChanged": false
}
resources
{
  "subscribe": false,
  "listChanged": false
}
experimental
{}

Tools

Functions exposed to the LLM to take actions

NameDescription
list_devicesA

List configured MikroTik devices. Read-only; passwords are never included.

system_infoB

Get RouterOS identity + resource info (board, version, uptime, CPU/memory).

interfacesC

List network interfaces on a device.

ip_addressesC

List IPv4 addresses configured on a device.

ip_routesB

List the IPv4 routing table of a device.

limit, if given, caps the number of rows returned (capped at 500); omit it to get the full table, mirroring logs' limit parameter.

neighborsB

List neighbors discovered via RouterOS neighbor discovery (CDP/MNDP/LLDP).

logsA

Read recent RouterOS log entries (most recent last).

limit must be positive and is capped at 500. topics, if given, is matched as a plain substring against each entry's topics field - no regex, no unbounded scans - and is applied BEFORE the limit cut: the full log is filtered by topics first, then the last limit matching entries are returned (not the last limit raw entries, then filtered - that would silently drop matches).

R1: this reads the whole /log table via librouteros' path().select() and slices in Python rather than asking RouterOS for only the last limit rows. librouteros' structured API doesn't expose a clean "give me only the tail" query for /log (RouterOS's own count-only print flags aren't reachable through path().select() the way a .limit()/offset would be), so a "request fewer rows" optimization here would mean building a fragile ad-hoc workaround for a table that is small in practice (a few hundred to low thousands of rows on RouterOS's own ring buffer). Left as-is; revisit if a real device turns out to have a much larger log buffer than expected.

pingB

Ping an address from a device. address must be a valid IPv4/IPv6 address or hostname.

list_write_operationsA

List every guarded write operation and the RouterOS path/action it maps to.

Read-only: this only surfaces guard.ALLOWLIST's metadata (D3) - it does not perform or preview a write, and is not gated by MIKROTIK_ALLOW_WRITE.

set_identityA

Set a device's RouterOS identity (hostname).

WRITE tool, guarded: blocked entirely unless the server is running with MIKROTIK_ALLOW_WRITE=true. Call with confirm=False (the default) to get a before/after preview without changing anything; call again with confirm=True to actually apply it.

Prompts

Interactive templates invoked by user choice

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription

No resources

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/thalisantunes/mcp-mikrotik'

If you have feedback or need assistance with the MCP directory API, please join our Discord server