Skip to main content
Glama

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
OMADA_PASSNoLegacy local-user login password
OMADA_USERNoLegacy local-user login username
OMADA_SITE_IDNoSite to operate on; auto-selected if the controller manages exactly one site (legacy auth only)
OMADA_TIMEOUTNoHTTP request timeout, in seconds15
OMADA_BASE_URLYesController base URL, e.g. https://192.168.1.2:8043
OMADA_CLIENT_IDNoOpen API client ID
OMADA_LOG_LEVELNoLog level for the server process (stderr)INFO
OMADA_OMADAC_IDNoController ID; auto-discovered via GET /api/info if unset
OMADA_VERIFY_TLSNoVerify the controller's TLS certificatefalse
OMADA_CLIENT_SECRETNoOpen API client secret

Instructions

Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.

This server publishes no instructions, or was last inspected before Glama recorded them.

Capabilities

Features and capabilities supported by this server

Protocol revision2025-11-25

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

Tools

Functions exposed to the LLM to take actions

NameDescription
get_controller_infoA

Get the Omada controller's own identity: controller_version, omadac_id, configured. Unauthenticated (GET /api/info) - works regardless of which auth mode this server is configured with.

list_sitesA

List sites managed by this controller: id + name.

Requires legacy login (OMADA_USER/OMADA_PASS) - see README's auth x endpoint matrix for why the Open API path can't serve this in v0.1.

list_devicesA

List devices on a site, normalized to one consistent shape regardless of auth mode (see formatting.normalize_device): connected, uptime_seconds, per-radio wifi_2g/wifi_5g channel info, and every raw field this package knows how to normalize - fields unavailable in the active auth mode are present as null rather than omitted, so a caller never has to branch on auth mode.

site_id defaults to OMADA_SITE_ID, or auto-selects if the controller manages exactly one site (legacy auth only).

get_device_detailA

Get the richest available detail for one device by MAC address (any common separator - colon, hyphen, Cisco-dotted, or bare - is accepted and normalized).

Legacy auth: full detail (ssidOverrides, lanPortSettings, ledSetting, ...) for AP/EAP devices via /eaps/{MAC}; other device types fall back to their grid/devices summary row (no richer verified endpoint yet - see README). Open API auth: the matching (reduced-field) row from the device list.

The normalized fields (see list_devices) are included, plus the complete raw response under raw so nothing the controller returned is lost.

get_wifi_summaryA

Per-AP WiFi summary: 2.4GHz/5GHz channel (parsed from the controller's irregularly-formatted actualChannel string), client counts per band, and radio utilization. One entry per AP on the site, or just the one matching mac if given.

Requires legacy login (OMADA_USER/OMADA_PASS) - the Open API device list has no per-radio fields at all (confirmed against real hardware; see README's auth x endpoint matrix).

get_clientsA

List Insight/known clients on a site: mac, name, download/upload (bytes), duration_seconds, last_seen_ms, guest/wireless flags, vid (VLAN), and block/manager flags. This is the controller's "Insight" view (historical + known clients), not just currently-associated ones.

Requires legacy login (OMADA_USER/OMADA_PASS) - no Open API equivalent has been verified against real hardware yet.

get_alertsA

List active alerts on a site.

The pagination envelope is confirmed against real hardware; the shape of an individual alert row is NOT (no alert was active during verification) - each entry includes a best-effort module/level/ content/time guess AND the untouched raw row, so nothing is lost if the guess is wrong. See docs/api-notes.md.

Requires legacy login (OMADA_USER/OMADA_PASS) - no Open API equivalent has been verified against real hardware yet.

set_radio_channelA

Set an AP's 2.4GHz ("2g") or 5GHz ("5g") radio channel.

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

applied=True is only ever returned once a post-write re-read confirms the change (comparing freq, the one reliable round-trip value) - a bare "the controller said Success" is never trusted on its own. If the controller accepted the write but the re-read shows no change, applied=False and message explains why - see guard.set_radio_channel's docstring and docs/api-notes.md. Every call also carries a warning: changing a channel restarts the radio (clients on that band briefly disconnect and reassociate), plus, on 5GHz, the confirmed channel-persists-as-internal-index caveat.

Legacy auth only. channel is the operator-facing channel number (e.g. 11 on 2.4GHz, 149 on 5GHz) - this tool always derives the matching frequency itself (channels.py) and resends the complete current radio configuration with only channel/freq changed, so the confirmed real-hardware silent-discard gotcha (int channel, or a missing freq) can't be hit by construction - see docs/api-notes.md.

Prompts

Interactive templates invoked by user choice

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription

No resources

TDQS

A4/5.0

Scored across 8 tools

Disambiguation4/5

Most tools have clearly distinct purposes (list vs detail vs summary vs info), and get_clients/get_alerts are unambiguous. However list_devices and get_wifi_summary overlap on per-AP channel/radio data, so an agent could reasonably confuse them for WiFi-channel queries.

Naming Consistency5/5

All tool names use consistent snake_case verb_noun patterns: list_sites, list_devices, get_device_detail, get_wifi_summary, get_controller_info, get_clients, get_alerts, set_radio_channel. The verbs list/get/set are applied predictably.

Tool Count5/5

Eight tools is a well-scoped size for an Omada controller server: it covers sites, devices, clients, alerts, controller info, WiFi summaries, and one guarded write without feeling bloated or thin. Each tool maps to a distinct data need.

Completeness3/5

The read surface covers common monitoring needs but lacks broader management operations: no SSID/VLAN configuration, no client block/unblock, no device reboot, and no update/delete beyond a single radio-channel write. Notable gaps remain for a server named mcp-omada.

Maintenance

ActivityMaintained
ResponsivenessUnresponsive