Skip to main content
Glama
WLAN-Pi
by WLAN-Pi

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
LOG_LEVELNoLogging levelINFO
WLANPI_CORE_CANoCA bundle for verifying wlanpi-core's TLS listener/etc/nginx/ssl/self-signed-wlanpi.cert
WLANPI_CORE_URLNowlanpi-core API base URLhttps://localhost:31415
WLANPI_MCP_HOSTNoDaemon bind host (loopback-only; nginx fronts the public 8766/8767)127.0.0.1
WLANPI_MCP_PORTNoDaemon bind port (loopback-only upstream)8768
WLANPI_CORE_TOKENNoFallback JWT for stdio mode only; leave empty in daemon mode
ALLOW_POWER_CONTROLNoSet false to disable the reboot_device/shutdown_device toolstrue

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_device_infoA

Get WLAN Pi device identity: model, hostname, software version, and current operating mode.

get_device_statsA

Get WLAN Pi live system metrics: IP address, CPU usage, RAM usage, disk usage, CPU temperature, and uptime.

list_allowed_servicesA

List all services that can be managed on this WLAN Pi (started, stopped, or queried).

get_service_statusA

Get the running status of a WLAN Pi service.

Args: name: Service name (use list_allowed_services to see valid names)

start_serviceB

Start a WLAN Pi service.

Args: name: Service name (use list_allowed_services to see valid names)

stop_serviceA

Stop a WLAN Pi service.

Args: name: Service name (use list_allowed_services to see valid names)

restart_serviceB

Restart a WLAN Pi service.

Args: name: Service name (use list_allowed_services to see valid names)

get_device_modelA

Get the WLAN Pi hardware model (e.g. WLAN Pi Pro, R4, M4).

get_datetimeA

Get the WLAN Pi's current local date, time, and timezone.

get_timezoneA

Get the WLAN Pi's current system timezone.

list_timezonesA

List all timezones available on the WLAN Pi (for use with set_timezone).

set_timezoneA

Set the WLAN Pi system timezone.

Args: timezone: Timezone name, e.g. 'America/Denver' (use list_timezones for valid values)

enable_auto_timezoneA

Enable NTP automatic time synchronization on the WLAN Pi.

reboot_deviceA

Reboot the WLAN Pi immediately.

Active sessions and captures will be interrupted. Can be disabled via ALLOW_POWER_CONTROL=false in the server config.

shutdown_deviceA

Shut down the WLAN Pi immediately.

The device must be powered back on manually. Can be disabled via ALLOW_POWER_CONTROL=false in the server config.

get_hotspot_clientsA

Get the connected client count in hotspot mode.

Returns an error if the device is not in hotspot mode.

Args: iface: Optional AP interface name; auto-detected if omitted.

get_hotspot_ssid_passphraseA

Get the hotspot SSID and WPA passphrase.

Read from the hostapd configuration. Returns an error if the device is not in hotspot mode.

get_network_interfacesA

Get network interface details including IP addresses, flags, MTU, and link state.

Args: interface: Optional interface name (e.g. 'eth0'). If omitted, returns all interfaces.

get_network_infoA

Get a full network snapshot.

Covers all interfaces, WLAN details, ethernet IP config, VLAN info, LLDP/CDP neighbours, and public IP address. Best starting point for network diagnostics.

get_public_ipv6A

Get the WLAN Pi's public IPv6 address and related details.

get_ethernet_interfaceA

Get ethernet interface details for a specific interface.

Args: interface: Ethernet interface name (e.g. 'eth0'), or 'all' for every interface

get_routing_tableA

Get the structured IP routing table.

Args: namespace: Optional network namespace to query (default: root namespace)

get_tcp_connectionsA

Get active TCP sockets/connections on the WLAN Pi.

Args: namespace: Optional network namespace to query (default: root namespace)

get_udp_connectionsA

Get active UDP sockets on the WLAN Pi.

Args: namespace: Optional network namespace to query (default: root namespace)

get_dhcp_leasesA

Get DHCP leases held by the WLAN Pi (parsed from dhclient lease files).

get_interface_link_statsB

Get per-interface link statistics (via ethtool): speed, duplex, errors, drops.

Args: interface: Interface name (e.g. 'eth0')

renew_dhcp_leaseA

Renew the DHCP lease for an interface.

The renewal happens in the interface's current namespace, and the interface IP address may change as a result.

Args: interface: Interface name (e.g. 'eth0')

get_wlan_usb_driversA

List USB-attached WLAN adapters and their bound drivers.

If 'adapters' is empty but interfaces_scanned > 0, the radios are PCI/on-board — use get_wlan_pci_drivers instead.

get_wlan_pci_driversA

List PCI/platform wireless devices and their bound WLAN drivers.

Comes from lspci, covering built-in Wi-Fi radios.

get_reachabilityA

Test WLAN Pi network reachability.

Pings the default gateway, checks DNS resolution, and verifies internet access. Use this to diagnose connectivity problems.

get_usb_interfacesA

List USB network adapters currently plugged into the WLAN Pi.

get_ufw_statusA

Get the current UFW firewall status and active rules on the WLAN Pi.

run_speedtestA

Run an internet speed test from the WLAN Pi.

Uses LibreSpeed CLI; slow, typically taking 30-90 seconds to complete. Returns download/upload speed, ping, IP address, and the test server used.

start_blinkerA

Start the Ethernet port blinker.

This is a cable finder: it flashes the port LED so the cable can be located at the switch end.

Args: interface: Ethernet interface to blink (default 'eth0')

stop_blinkerA

Stop the Ethernet port blinker.

get_blinker_statusA

Check whether the Ethernet port blinker is currently running.

scan_wlanA

Scan for Wi-Fi networks.

Namespace-aware, with automatic monitor adapter selection. If multiple monitor adapters exist and no interface is given, returns 'needsSelection' with candidates instead of scanning — call again with one of the candidate interfaces.

To connect to a network found by this scan, create and activate a network configuration (create_network_config / activate_network_config).

Args: interface: WLAN interface to scan with (e.g. 'wlan0'); auto-selected if omitted namespace: Optional network namespace the interface lives in include_hidden: Include hidden SSIDs in results detail: 'short' for list-friendly fields plus RF extensions, 'full' for everything

revert_wlanA

Revert a WLAN interface from its namespace back to the root namespace.

Args: interface: WLAN interface name (e.g. 'wlan0') namespace: Network namespace to revert from (default: 'testns') delete_namespace: Delete the namespace after reverting

get_vlansA

Get VLAN interfaces on the WLAN Pi.

Args: interface: Ethernet interface to filter by (e.g. 'eth0'). If omitted, returns all interfaces. vlan_id: VLAN ID to filter by. If omitted, returns all VLANs.

create_vlanA

Create (or replace) a VLAN on an ethernet interface.

Args: interface: Ethernet interface (e.g. 'eth0'). Cannot be 'all'. vlan_id: VLAN ID (1-4094) addresses: Optional list of IP addresses to assign, each a dict with 'family' (4 or 6), 'local' (IP string), and 'prefixlen' (int). Example: [{"family": 4, "local": "192.168.10.1", "prefixlen": 24}]

delete_vlanA

Delete a VLAN from an ethernet interface.

Args: interface: Ethernet interface (e.g. 'eth0'). Cannot be 'all'. vlan_id: VLAN ID to delete allow_missing: If True, don't error if the VLAN doesn't exist

get_profiler_statusA

Get the current status of the wlanpi-profiler.

Returns whether the profiler is running, its SSID, channel, and interface.

start_profilerA

Start the wlanpi-profiler to capture 802.11 client capability information.

The profiler brings up a fake AP and captures association frames from clients to determine their 802.11 capabilities (PHY support, spatial streams, etc.).

Args: interface: WLAN interface to use (e.g. 'wlan0') channel: 802.11 channel number to operate on frequency: Frequency in MHz (alternative to channel) ssid: SSID for the fake AP (default chosen by profiler) no11r: Disable 802.11r (Fast BSS Transition) support no11ax: Disable 802.11ax (Wi-Fi 6) support no11be: Disable 802.11be (Wi-Fi 7) support wpa3_personal: Enable WPA3-Personal only mode wpa3_personal_transition: Enable WPA3-Personal Transition mode noAP: Run without bringing up an AP (passive capture only) debug: Enable debug logging in profiler

stop_profilerA

Stop the wlanpi-profiler and return summary results.

get_bluetooth_statusA

Get Bluetooth adapter status.

Includes the adapter name, address, power state, and list of paired devices.

set_bluetooth_powerA

Turn Bluetooth on or off.

Args: action: 'on' to enable Bluetooth, 'off' to disable it

start_bluetooth_pairingA

Put the WLAN Pi into Bluetooth discoverable pairing mode.

Starts bt-timedpair so a phone or laptop can pair with it.

get_network_config_statusA

Get the status of all saved network configurations, showing which is active.

list_network_configsA

List all saved network configuration profiles.

Returns a dict mapping config ID to active state (True/False).

get_network_configA

Get the full details of a saved network configuration by ID.

Args: id: Configuration profile ID (use list_network_configs to see available IDs)

create_network_configA

Create a new saved network configuration profile.

The config dict must include:

  • id (str): Unique profile name (cannot be 'root' or 'default')

  • namespaces (list, optional): Namespace-based interface configs

  • roots (list, optional): Root namespace interface configs

Each interface config in namespaces/roots needs:

  • mode: 'managed' or 'monitor'

  • iface_display_name: Human-readable name

  • phy: PHY device (e.g. 'phy0')

  • interface: Interface name (e.g. 'wlan0')

  • namespace (namespaces only): Namespace name (e.g. 'testns')

  • security (optional): {ssid, security, psk} for WPA2-PSK/WPA3-PSK networks

Args: config: Network configuration dict matching the NetConfig schema

update_network_configB

Update an existing network configuration profile.

The config_update dict may include:

  • namespaces (list, optional): Updated namespace interface configs

  • roots (list, optional): Updated root namespace interface configs

Args: id: Configuration profile ID to update config_update: Partial config update (namespaces and/or roots)

activate_network_configB

Activate a saved network configuration profile.

Args: id: Configuration profile ID to activate override_active: If True, force activation even if another profile is active

deactivate_network_configA

Deactivate a currently active network configuration profile.

Args: id: Configuration profile ID to deactivate override_active: If True, force deactivation even if flagged as active

delete_network_configA

Delete a saved network configuration profile.

Args: id: Configuration profile ID to delete force: If True, delete even if the profile is currently active

get_wifi_capabilitiesA

Get Wi-Fi adapter capabilities.

Returns 'iw phy' capability dumps for each PHY, including supported bands, channels, HT/VHT/HE features, and interface modes.

get_wifi_regulatoryB

Get Wi-Fi regulatory domain information reported by the kernel.

get_hotspot_stationsA

List stations connected to the hotspot AP interface.

Returns an error if the device is not in hotspot mode.

Args: iface: Optional AP interface name; auto-detected if omitted.

get_hotspot_link_statsA

Get per-station link statistics for hotspot AP clients.

Reports signal, rates, and retries. Returns an error if the device is not in hotspot mode.

Args: iface: Optional AP interface name; auto-detected if omitted.

get_device_modeA

Get the current WLAN Pi operating mode (classic, wconsole, hotspot, wiperf, server, bridge).

get_regulatory_domainB

Get the current Wi-Fi regulatory domain.

Returns 'country' as an ISO 3166-1 alpha-2 code.

set_regulatory_domainA

Set the Wi-Fi regulatory domain (country code) on the WLAN Pi.

This controls which channels and transmit power levels are permitted. Use a valid ISO 3166-1 alpha-2 country code (e.g. 'US', 'GB', 'DE').

Args: country_code: Two-letter ISO 3166-1 alpha-2 country code

get_battery_statusA

Get battery status on WLAN Pi models with a battery (e.g. WLAN Pi Pro).

Returns 'present': false on hardware without a battery, otherwise capacity percentage and charging status.

capture_scanA

Run a live streaming Wi-Fi packet capture and return what was on the air.

This is a streaming capture: it captures real 802.11 frames off the air (unlike scan_wlan, which asks the driver for a scan), so it reports what is actually being transmitted. The call blocks for duration_s seconds and returns a dissected summary. The raw pcapng is also saved on the device and its path returned in 'pcap_path' (fetch it with fetch_pcap_file to verify the summary against the frames). For a capture longer than the 60 s window, use the non-streaming file-capture tools (start_pcap_file/fetch_pcap_file) instead.

The result has two parts:

  • 'aps': one row per BSSID from beacons/probe-responses, with SSID, channel, signal, 802.11 amendments, advertised TX power, full security detail — the compact 'security' label plus 'akm' (the AKM suite list), 'pairwise_ciphers', 'group_cipher' and 'pmf' — and, when the AP advertises a QBSS/BSS Load element, 'stations' (the associated client count) and 'channel_utilization' (percent).

  • 'frames' / 'frame_types': every frame's named type/subtype counted exactly in 'frame_types', plus up to max_frames per-frame records in 'frames'. Each record has the source/destination addresses (addr1..addr4), a full radiotap decode, and — for the frames that carry one — a decoded 'result': authentication algorithm+status, association status+AID, deauth/disassoc reason, or probe/assoc SSID.

The capture is owned by this call and is stopped before it returns. If another application is already capturing on the interface, this tool subscribes to that capture read-only instead of failing; the result always says whether the role was 'owner' or 'subscriber' and reports the running config.

Single-radio caveat: where the capture interface shares a radio with the managed wlan0, channel changes fail while wlan0 scans. Any such failures come back in 'channel_issues' — treat those results as partial rather than complete.

Args: interface: Monitor-mode capture interface, always named 'wlanpiN' (e.g. 'wlanpi0'), not 'wlan0'. Use get_network_interfaces or get_capture_channels to see what exists on this device. channels: Channel numbers to hop (e.g. [1, 6, 11, 36]); 6 GHz can be given as explicit frequencies in MHz. Omit to hop every channel the adapter supports. width: Channel width in MHz: 20, 40, 80 or 160. dwell_ms: Milliseconds to dwell on each channel (50-60000). duration_s: How long to capture, 1-60 seconds. The tool call blocks for this whole window. pcap_filter: Optional BPF/pcap filter, e.g. 'type mgt subtype beacon'. max_frames: Cap on per-frame records returned in 'frames'; per-kind counts in 'frame_types' are always exact. Set 0 to skip the per-frame records and get only the AP table and counts, or a negative value for no cap (every frame — a busy capture can then return tens of thousands of records, so use the file-capture tools for a full pcap instead). Beacons dominate a busy capture, so a pcap_filter such as 'not type mgt subtype beacon' makes the record list focus on the control/data/auth exchanges.

capture_observeA

Watch a streaming capture another application is already running, read-only.

Use this streaming subscriber to see what a capture started elsewhere (the WebUI, a lab controller, another agent) is receiving, without taking control of it. This never starts, reconfigures or stops a capture; the role in the result is always 'subscriber'. The result includes the owner's running config (channels, width, dwell, filter), so it is clear what the summary does and does not cover.

Returns the same dissected summary as capture_scan (an 'aps' table with full security detail, plus per-frame 'frames'/'frame_types' with addresses, radiotap and decoded results). The raw pcapng is also saved on the device and its path returned in 'pcap_path' (fetch it with fetch_pcap_file). Use list_capture_sessions first if you want to see what is running.

Single-radio caveat: the owner's channel hopping can fail on devices where the capture interface shares a radio with the managed wlan0, so an observed capture may cover fewer channels than its config lists.

Args: session_id: Session to attach to (from list_capture_sessions). interface: Instead of a session id, the monitor-mode capture interface ('wlanpiN', e.g. 'wlanpi0') whose capture to watch. duration_s: How long to listen, 1-60 seconds. The tool call blocks for this whole window. max_frames: Cap on per-frame records in 'frames'; the 'frame_types' counts are always exact. Set 0 for AP table and counts only, or a negative value for no cap (every frame).

list_capture_sessionsA

List the packet captures currently running on this WLAN Pi.

Each session reports its session_id, the owning principal, the monitor-mode interfaces ('wlanpiN') it holds, its network namespace, and the running config (channels, width, dwell, pcap filter). A session's interface cannot be captured on by anyone else — use capture_observe to watch it read-only.

get_capture_channelsA

List the channels each capture adapter on this WLAN Pi can tune to.

Capture adapters are the monitor-mode interfaces named 'wlanpiN'; the answer is namespace-aware and comes from the adapter's own radio, so it reflects the regulatory domain in force. Use it to pick the 'interface' and 'channels' arguments for capture_scan.

Each entry gives the frequency in MHz plus its channel number (6 GHz frequencies may have no channel number, in which case pass the frequency to capture_scan directly).

start_pcap_fileA

Start a background, non-streaming packet capture to a pcapng file.

This is the non-streaming counterpart to capture_scan: unlike that streaming tool, it does not block and does not return a dissected summary. It starts a capture, keeps the core WebSocket open in the background, and writes the raw pcapng bytes to a file under a managed directory on the device. Because nothing is held in memory or returned inline, the capture can run far longer than the 60 s capture_scan window — up to the server's configured maximum. The call returns immediately with the capture_id and file path; the capture then runs on its own until duration_s elapses or you call stop_pcap_file. Retrieve the file with fetch_pcap_file(capture_id=...) (a pcapng blob) once it has stopped.

This tool always owns the interface. If a capture is already running on it, this returns an error rather than taking it over — watch that one with capture_observe instead.

Args: interface: Monitor-mode capture interface, always 'wlanpiN' (e.g. 'wlanpi0'), not 'wlan0'. See get_capture_channels. channels: Channel numbers to hop (e.g. [1, 6, 11, 36]); 6 GHz can be given as explicit frequencies in MHz. Omit to hop every channel the adapter supports. width: Channel width in MHz: 20, 40, 80 or 160. dwell_ms: Milliseconds to dwell on each channel (50-60000). duration_s: How long the background capture runs, in seconds, from 1 up to the server maximum (default max 3600). The call itself returns immediately. pcap_filter: Optional BPF/pcap filter, e.g. 'type mgt subtype beacon'.

stop_pcap_fileA

Stop a running non-streaming file capture before its duration elapses.

Signals the background capture to stop, waits for it to flush and close its file, and returns the final path, status and size. A capture that has already ended on its own is returned as-is. Fetch the file with fetch_pcap_file.

Args: capture_id: The capture_id returned by start_pcap_file (also shown by list_pcap_files). session_id: Deprecated alias for capture_id.

list_pcap_filesA

List the non-streaming, file-backed captures this server has started.

Includes captures that are running or done. Each entry gives the capture_id, interface, on-device pcapng path, status (running/completed/stopped/error), current size and configured duration. Use stop_pcap_file to end a running one and fetch_pcap_file to retrieve the file. Files left on disk from an earlier server run are also listed, with status 'on_disk' — they can still be fetched.

fetch_pcap_fileA

Fetch a non-streaming capture's pcapng file as a binary blob.

Returns the raw pcapng file (mime application/vnd.tcpdump.pcapng) for the capture named by capture_id (preferred) or by an explicit on-device path. Open it in Wireshark/tshark for analysis. Fetch after the capture has stopped for a complete file; fetching a still-running capture returns only the bytes written so far.

For safety this reads only files under the server's managed capture directory; any other path is refused.

Args: capture_id: The capture_id from start_pcap_file/list_pcap_files. path: Alternatively, the on-device file path (must be inside the managed capture directory). session_id: Deprecated alias for capture_id.

Prompts

Interactive templates invoked by user choice

NameDescription
diagnose_connectivityRun a full connectivity diagnostic on the WLAN Pi.
troubleshoot_serviceDiagnose why a WLAN Pi service is not working as expected.
health_checkQuick health check of the WLAN Pi device.
service_managerInteractive service start/stop assistant.

Resources

Contextual data attached and managed by the client

NameDescription
device_infoWLAN Pi device identity: model, hostname, software version, and operating mode.
device_statsWLAN Pi live system metrics: CPU, RAM, disk, temperature, uptime, IP.
network_interfacesAll WLAN Pi network interfaces with addresses, flags, MTU, and link state.
network_infoFull WLAN Pi network snapshot: interfaces, WLAN details, LLDP/CDP neighbours, public IP.
bluetooth_statusWLAN Pi Bluetooth adapter status, name, address, power state, and paired devices.
profiler_statusWLAN Pi profiler running state, SSID, channel, and interface.
netconfig_listAll saved WLAN Pi network configuration profiles and their active status.
netconfig_statusStatus of the currently active network configuration profile.
device_modeReport the current WLAN Pi operating mode from wlanpi-core.

TDQS

B3.4/5.0

Scored across 71 tools

Disambiguation2/5

Several tool pairs overlap heavily: get_device_info/get_device_model/get_device_mode, get_wifi_regulatory/get_regulatory_domain, get_hotspot_clients/get_hotspot_stations, get_network_config_status/list_network_configs, and get_network_info/get_network_interfaces/get_ethernet_interface all cover similar ground. An agent can easily call the wrong one when these near-duplicates exist.

Naming Consistency4/5

The vast majority of tools follow a consistent get_/list_/set_/create_/delete_/start_/stop verb_noun pattern. Minor deviations like get_wifi_regulatory vs get_regulatory_domain, get_network_config_status vs list_network_configs, and the awkward get_hotspot_ssid_passphrase keep it from being perfect.

Tool Count1/5

71 tools is far beyond the 25+ 'too many' threshold and well into the extreme range. Even for a broad network diagnostics device, the surface is unwieldy and could be significantly consolidated without losing capability.

Completeness4/5

The set covers device info, services, network diagnostics, Wi-Fi, hotspot, VLANs, Bluetooth, profiler, and packet capture with full CRUD/lifecycle support in most areas. Minor gaps exist: there is no way to change device mode, configure hotspot settings, or directly set interface IPs outside saved profiles.

Maintenance

ActivityMaintained
ResponsivenessWithin a week