Skip to content
SZ-MCP
Get Support

Namespaces and helpers

SZ-MCP’s one MCP tool, code_mode, gives Claude 147 functions on 12 namespaces. This page lists every one, with the first sentence of the description Claude reads, and the organisation role it needs. You don’t call these yourself: you ask in plain language, and Claude picks them.

NamespaceFunctionsWhat it covers
wifi20The SmartZone WSG (wireless) API
switches22The SmartZone SwitchM (ICX switch) API
stream3Data the controller pushes to SZ-MCP by Northbound streaming, which is not available on the hosted service yet
inventory14Your organisation’s map of the controller
metrics12Time series queried with PromQL, weekly baselines, availability reports, capacity forecasts, synthetic reachability checks and the polling switch
alerts23Alert rules, current problems, acknowledgements, downtime, history, notification channels, and the context, post-mortem and quality reports
boards11Live boards
history13Who changed what
notes5What your team knows about its own site, as notes on devices, locations or the whole organisation
mop16Methods of procedure
lint6The best-practice config linter over the daily config snapshot, its waivers, and fixes turned into a MOP
org2Your organisation’s setup as one YAML document, exported and imported with a plan

The Role column is the lowest organisation role that may use the function. Roles rank owner > admin > engineer > operator > viewer, and any means every role, viewers included. A function refused for your role returns write_blocked with a message naming the role that can.

  • “to apply” means the function is a dry run by default (a plan or a preview), which every role can see; only applying it needs the role shown.
  • Any request that writes to your controller — call, switches.backup, switches.restore, history.undo, a MOP run with writes — also needs the engineer role and goes through the write guard.
  • Primitives are the eight functions wifi and switches share for finding and calling API endpoints. They are documented in full in Code mode primitives. Everything else is a task helper: a shortcut that does the joins, pagination and known quirks for one job.

The SmartZone WSG (wireless) API: the eight primitives, plus task helpers for zones, APs, clients, alarms, events, AP ping and traceroute, and the SmartZone guides.

FunctionWhat it doesRole
wifi.list_tags (primitive)List SmartZone WSG (wireless) API tags (endpoint categories).any
wifi.search_endpoints (primitive)Keyword-search the SmartZone WSG (wireless) API OpenAPI spec.any
wifi.list_endpoints_by_tag (primitive)List all SmartZone WSG (wireless) API endpoints under a given tag.any
wifi.get_endpoint_details (primitive)Fetch full OpenAPI details (parameters, request body schema, responses) for a specific SmartZone WSG (wireless) API endpoint.any
wifi.save_endpoint_note (primitive)Save a short note on a SmartZone WSG (wireless) API endpoint (operator and up): a quirk you proved by calling it that the spec, its caveats and the guides don’t say (a field the spec omits, a filter that is refused, a…operator
wifi.remove_endpoint_note (primitive)Remove an endpoint note by its id (from get_endpoint_details notes): your own, or any of the organisation’s if you are an org admin.the note’s author, or admin
wifi.call (primitive)Execute an authenticated SmartZone WSG (wireless) API call.engineer for a write
wifi.await_approval (primitive)Wait (up to 15 s) for the user to approve or deny a dangerous action on the dashboard, given the approvalId from an approval_required response.any
wifi.list_allFetch every item of a list endpoint, paging in whatever style that endpoint uses (listSize/index, body page/limit, query page/limit).any
wifi.query (not in TASK HELPERS)Search APs, clients, WLANs, wired clients or recent ended client sessions through the Query API, paging for you.any
wifi.overviewOne-call controller health: nodes and cluster state, firmware, AP/switch counts and capacity, per-zone AP and client counts, alarm counts by severity, licences, and upgrade state.any
wifi.alarmsList controller alarms, newest first, optionally within the last N hours, by severity/category/zone/AP, or outstanding only.any
wifi.eventsList controller events from the REST event log, newest first, by time window, severity, category, zone or AP.any
wifi.zone_treeMap the wireless hierarchy: zones (optionally in one domain) with their AP and client counts, WLANs (name, SSID), AP groups and WLAN groups.any
wifi.client_journeyOne client’s story, oldest first: joins, authorisations, roams (a band steer on one AP counts as a roam; summary.bandSteers says how many), IP (DHCP) updates, authentication and connection failures (with the 802.11…any
wifi.ap_pingPing an IP address from an AP (GET /tool/ping: 5 packets from the AP itself, so it tests the AP’s own path, e.g. to its gateway, DHCP or RADIUS server).any
wifi.ap_tracerouteTraceroute from an AP to an IP address (GET /tool/traceRoute: up to 30 hops).any
wifi.get_referenceRead a bundled SmartZone reference note: query-api, pagination, alarms-events, switch-config, data-sources.any
wifi.search_docsFull-text search over the SmartZone 7.2.0 guides (no controller call): how a feature works, where it is in the web UI, requirements and limits, CLI commands, SNMP MIB objects, the GPB/MQTT streaming schema, upgrade…any
wifi.read_docRead one guide section found by search_docs: { id, doc, docTitle, title, path, page, text, totalChars, nextOffset?, prevId?, nextId? }.any

The SmartZone SwitchM (ICX switch) API: the same eight primitives, plus task helpers for the switch fleet, config backups and restore, port lookup, routing tables, ping and traceroute.

FunctionWhat it doesRole
switches.list_tags (primitive)List SmartZone SwitchM (switch) API tags (endpoint categories).any
switches.search_endpoints (primitive)Keyword-search the SmartZone SwitchM (switch) API OpenAPI spec.any
switches.list_endpoints_by_tag (primitive)List all SmartZone SwitchM (switch) API endpoints under a given tag.any
switches.get_endpoint_details (primitive)Fetch full OpenAPI details (parameters, request body schema, responses) for a specific SmartZone SwitchM (switch) API endpoint.any
switches.save_endpoint_note (primitive)Save a short note on a SmartZone SwitchM (switch) API endpoint (operator and up): a quirk you proved by calling it that the spec, its caveats and the guides don’t say (a field the spec omits, a filter that is refused, a…operator
switches.remove_endpoint_note (primitive)Remove an endpoint note by its id (from get_endpoint_details notes): your own, or any of the organisation’s if you are an org admin.the note’s author, or admin
switches.call (primitive)Execute an authenticated SmartZone SwitchM (switch) API call.engineer for a write
switches.await_approval (primitive)Wait (up to 15 s) for the user to approve or deny a dangerous action on the dashboard, given the approvalId from an approval_required response.any
switches.list_allFetch every item of a list endpoint, paging in whatever style that endpoint uses (listSize/index, body page/limit, query page/limit).any
switches.overviewOne-call ICX fleet summary: switch counts by status, model, firmware and group, the offline switches, health (online/flagged/offline), and port counts by speed.any
switches.config_diffDiff two ICX config backups: give a switchId (its MAC) to compare that switch’s two newest successful backups, or configIds [older, newer].any
switches.backupsICX config backups per switch, newest first: { switches: [{ mac, switchName, latest (newest successful), ageHours, master, latestDiffFromMaster, failedSince (failed backups newer than latest), lastRestore, backups (up…any
switches.configOne ICX config backup as text, secrets shown as <secret>: give backupId, or switchId (its MAC) for that switch’s newest successful backup.any
switches.backupTake a config backup of up to 50 switches now (POST /switchconfig/backup).engineer
switches.restoreRestore an ICX config backup to its switch.engineer to apply
switches.port_lookupWhere a device plugs into the switches, and everything about that port.any
switches.routing_tableAn ICX switch’s IP routing table (sh ip route on the switch, via GET /switch/troubleshooting/routingtable/{serialNumber}; ~6 s).any
switches.pingPing an IP address from an ICX switch (the UI’s switch ping, POST /switch/troubleshooting/ping: 5 packets from the switch’s management interface; ~8 s, run one per code_mode call).any
switches.tracerouteTraceroute from an ICX switch to an IP address (the UI’s switch traceroute, POST /switch/troubleshooting/traceroute: up to 30 hops; 5–8 s to the internet on vsz36, run one per code_mode call).any
switches.get_referenceRead a bundled SmartZone reference note: query-api, pagination, alarms-events, switch-config, data-sources.any
switches.search_docsFull-text search over the SmartZone 7.2.0 guides (no controller call): how a feature works, where it is in the web UI, requirements and limits, CLI commands, SNMP MIB objects, the GPB/MQTT streaming schema, upgrade…any
switches.read_docRead one guide section found by search_docs: { id, doc, docTitle, title, path, page, text, totalChars, nextOffset?, prevId?, nextId? }.any

Data the controller pushes to SZ-MCP by Northbound streaming, which is not available on the hosted service yet. alarm, rogue and audit rows also come from metric polling.

FunctionWhat it doesRole
stream.statusStreaming health: whether the controller is connected, last message age, row counts per kind, payload types and MQTT topics seen, recent connections, decode failures and pre-auth diagnostics.any
stream.kindsList the queryable stream kinds with a one-line description of each.any
stream.queryQuery data the controller streamed to us (near-real-time, no controller API call).any

Your organisation’s map of the controller: every zone, AP group, AP, switch, port and client, with tags, locations, links and a change feed.

FunctionWhat it doesRole
inventory.syncRefresh the inventory from the controller: cluster and nodes, domains, zones, AP groups, APs and radios, switch groups, switches, ports, LLDP links (port → AP, port → port, port → other device) and, unless clients…any
inventory.status (not in TASK HELPERS)Inventory size by entity type, link counts, tagged entities, and how the last sync went (when, counts, errors, what was complete).any
inventory.findFind entities by type, container (within), tags, text, or status.any
inventory.describeEverything known about one entity: its path (cluster → domain → zone → AP group → AP), effective location and tags (with where each came from), attributes, children by type, links, upstream (what it physically depends…any
inventory.neighborsThe entities around one: its container, its children (up to 100 each) and its links, out to depth hops (1–3).any
inventory.diagramDraw the network as a Mermaid flowchart from the inventory: switches and APs (grouped by domain → zone → AP group and switch group, or by location), LLDP neighbours, and one edge per pair of linked devices labelled with…any
inventory.changesThe inventory change feed, newest first: added, removed, returned, renamed, moved (new container), changed (model/serial/ip/firmware), linked/unlinked (topology), tagged, located, labelled.any
inventory.locationsThe location tree (campus → building → hall → room → rack, or whatever levels the org uses), with how many entities are placed in each and their tags.any
inventory.add_locationCreate a location, optionally under a parent location.engineer
inventory.remove_locationDelete an empty location (no sub-locations).engineer
inventory.set_locationPlace entities in a location (location: null unplaces them).engineer
inventory.tagSet tags (key → value) on entities, or clear one with null.engineer
inventory.add_deviceRegister a critical device (badge reader, camera, BMS controller…) by MAC, with a name, tags and location.engineer
inventory.remove_deviceUnregister a device added with add_device.engineer

Time series queried with PromQL, weekly baselines, availability reports, capacity forecasts, synthetic reachability checks and the polling switch.

FunctionWhat it doesRole
metrics.catalogThe metrics you can query: name, kind (gauge or counter: use rate()/increase() on counters), unit, entity type, sources (stream, api), meaning, and baseline: true when a weekly baseline is kept (see query).any
metrics.query (not in TASK HELPERS)Run PromQL over the org’s metrics.any
metrics.baselineIs it normal for this hour of the week? An entity’s metrics now against their weekly baselines: for an AP, switch or controller node each of its (and its radios’) baseline metrics per series; for a zone, AP group…any
metrics.availabilityAn availability (SLA) report: how much of a period each cluster / node / ap / switch / port / probe was up, from its up gauge (cluster_in_service, node_in_service, ap_up, switch_up, port_up, probe_up) rolled up per hour…any
metrics.forecastCapacity forecasts: when something fills up at its current trend (“full in N weeks”).any
metrics.status (not in TASK HELPERS)What the metric store holds: per family (ap, switch, cluster) the last sample and its age, reports in the last hour by source, the hourly and daily rollups, retention; plus the stream freshness and the API polling…any
metrics.pollTake one sample from the controller API now (reads only): cluster state, every AP and radio (POST /query/ap), every switch, and the outstanding alarms (which alarm rules in alerts.* then see); plus ports and controller…any
metrics.probesSynthetic reachability checks: the targets chosen APs ping on a schedule (a gateway, a badge server, a BMS head end), and each one’s last run.any
metrics.set_probeAdd or change a synthetic check target (engineer and up): chosen APs ping targetIp every intervalMinutes (GET /tool/ping from the AP: a read, ~7 s, ~15 s when nothing answers) and the results become probe_* metrics.engineer
metrics.remove_probeRemove a synthetic check target (engineer and up).engineer
metrics.run_probesRun a synthetic check target now (operator and up): its APs ping it (at most 4 here, 4 at a time, 7–15 s), the results are stored as a scheduled run’s would be, and returned: { name, targetIp, at, results: [{ ap, name…operator
metrics.set_pollingTurn background API polling on or off for the organisation (metrics, and the outstanding alarms for alarm rules): every 5 min (15 min for ports and controller statistics), slower if the controller is slow, and skipped…admin

Alert rules, current problems, acknowledgements, downtime, history, notification channels, and the context, post-mortem and quality reports.

FunctionWhat it doesRole
alerts.status (not in TASK HELPERS)The tactical overview: rule counts (and failing rules), a summary (critical, warning, unknown, soft, unhandled = HARD problems not acknowledged, in downtime or unreachable; acknowledged, inDowntime, flapping…any
alerts.rulesEvery rule with its full definition, version, current problem counts, last run, last error and next run.any
alerts.get_ruleOne rule; versions: true adds its change history (each version, who, when, and the rule as it was).any
alerts.create_ruleCreate an alert rule.engineer to apply
alerts.update_ruleChange a rule: changes are merged into the current definition (set a field to null to drop it back to its default), or give the whole rule.engineer to apply
alerts.delete_ruleDelete a rule and its current problems (engineer or admin).engineer
alerts.export_rulesEvery rule (or the named ones) as one YAML document, each rule in its shortest form (defaults left out) with a fixed field order, so it diffs cleanly in git.any
alerts.import_rulesRules as code: make the org’s rules match a YAML document (as export_rules writes it: version: 1 and rules:; a bare list works too).engineer to apply
alerts.starter_packThe SmartZone starter checks (controller cluster/node down, CPU/memory/disk, controller and stream silent, Critical and Major SZ alarms, AP offline and flapping, AP CPU/memory, radio airtime and noise, switch offline…engineer to apply
alerts.backtestReplay a rule (a saved rule’s name, or a definition) over stored history without saving anything: threshold rules over the metrics (each step one check; default step 5m), event rules over the stream’s log.any
alerts.ackAcknowledge current problems (operator and up): a rule and an instance, a rule and an entity, or every problem on an entity.operator
alerts.unackRemove acknowledgements (operator and up), selected as for ack.operator
alerts.downtimeSchedule downtime (operator and up): problems it covers are still tracked but not notified.operator
alerts.downtimesScheduled and active downtime; includeEnded adds the last 200 including ended and cancelled ones.any
alerts.cancel_downtimeCancel a downtime by id (operator and up).operator
alerts.historyThe alert log, newest first: state changes (kind ‘state’, with the transition and any suppression), flapping, acknowledgements, downtime and rule changes (who and what).any
alerts.channelsWhere the organisation’s alert notifications go (one contact list per org): email addresses (emailStatus per address: member = an org member’s sign-in email, confirmed, pending/expired = a confirmation email was sent…any
alerts.healthIs the monitoring itself working (not the network)? { status: ‘OK’ | ‘WARNING’ | ‘CRITICAL’, summary, checks: [{ name, state, message }] } over: rules (enabled, none overdue, none failing), data (a stream or API polling…any
alerts.contextThe investigation bundle for a problem (the same context pack its notifications carry), with no model: for each current problem matching rule/instance/entity, { rule, instance, entity, name, state, since, runbook?…any
alerts.postmortemOne alert episode written up for a review, with no model: { title, postmortem: { rule, ruleDescription?, instance, entity, name, worst, firstSign (the first non-OK state, SOFT included), start (HARD), end (recovery…any
alerts.qualityHow well each rule’s alerts work, from the engine’s own history (no model, no controller call): over the HARD problem episodes that began in the period, per rule { rule, verdict (‘noisy’ | ‘ignored’ (nobody…any
alerts.explainWhat SmartZone alarm and event codes mean, from the 7.2.0 Alarms and Events Reference Guide (bundled; no controller call): { code, kind (‘alarm’ | ‘event’), name, type (the alarmType/eventType), severity, category…any
alerts.check_nowEvaluate one rule (or every enabled rule) now instead of waiting for its interval.any

Live boards: PromQL panels, alert lists and event feeds on a page that follows every change.

FunctionWhat it doesRole
boards.listThe organisation’s boards: { boards: [{ id, name, description?, panels, version, updatedAt, updatedBy, url }] }.any
boards.getOne board’s full spec (panels with their ids) and its url.any
boards.createCreate a board, optionally with its panels, and return it with its url: tell the user to open the url on their second monitor; the page follows every later change within seconds.engineer
boards.updateChange a board’s name, description, range or variables (the fields given replace those stored).engineer
boards.delete_boardDelete a board.engineer
boards.add_panelAdd a panel (at the end, or at position at, 0-based).engineer
boards.update_panelChange a panel: the fields in patch replace the stored ones, a field set to null is removed.engineer
boards.remove_panelRemove a panel.engineer
boards.move_panelMove a panel to position to (0-based; panels flow left to right, top to bottom).engineer
boards.dataWhat the board shows now, per panel: a time series as { label, points, last, min, max } per series; stat/gauge/bar/table as { label, value, ageSec }; alerts as the summary and problems; events as the newest 20; or {…any
boards.to_alertTurn a metric panel into a threshold alert rule: its expr (with the board’s variables filled in: vars, else their defaults) and its thresholds (op, warn, crit).engineer to apply

Who changed what: the admin audit log, a merged timeline, writes made through SZ-MCP and their undo, post-change verification, config drift, the evidence pack and the shift digest.

FunctionWhat it doesRole
history.auditThe controller’s admin audit log (Administration › Admin Activities), newest first: { total, returned, rows: [{ at, id, user, ip, category, object, action, message, ok, logon, entities? }] }.any
history.timelineWhat happened, newest first, from every source kept here: admin changes on the controller (source ‘audit’), writes made through sz-mcp (‘write’, with the sz-mcp user), inventory changes (‘inventory’: added, removed…any
history.writesWrites sent through sz-mcp (every surface, every user in the organisation), newest first, kept 30 days: { writes: [{ writeId, at, userId, surface, method, path, status, ok, hasBefore, undo: { undoable, reason? }…any
history.get_writeOne write in full: the body sent, the state of the target just before it (before), the response of a create, the undo plan and its post-change verification (as history.verification).any
history.verificationPost-change verification of a write (by writeId) or of one verification (by id): after a write through sz-mcp (a call, an undo, a MOP step) the zone, AP group, AP, switch group or switch it touched (a WLAN’s zone) is…any
history.verificationsPost-change verifications, newest first (see history.verification): { verifications: […] }.any
history.undoReverse a write sent through sz-mcp.engineer to apply
history.config_changesWhat changed in the controller’s configuration between daily snapshots, field by field, newest first: { total, items: [{ at, key, kind (‘zone’ | ‘wlan’ | ‘apgroup’ | ‘system’ | ‘switchconfig’), name, parent?, change…any
history.configOne configuration object as of the last snapshot ({ key, kind, name, parent?, data, takenAt }), e.g. config({ key: 'wlan:<zone>:<id>' }); secrets are digests.any
history.snapshot_configTake a config snapshot now (engineer and up): every zone, its WLANs and AP groups, and four system settings, read in full (about 3 calls per zone plus one per WLAN and AP group).engineer
history.evidenceThe audit evidence pack for a period (UTC month or from/to, at most 400 days): what an auditor asks for, from what sz-mcp already keeps, with no controller calls.any
history.digestThe shift-handover digest for a period (default the last 24 h, at most 8 days), from what sz-mcp keeps, with no controller calls: { headline, text (ready to read out or paste), digest: { problems (now: counts…any
history.status (not in TASK HELPERS)How fresh the audit copy is: { newestAuditAt, newestAuditAgeMin, polling: { enabled, lastFinishedAt, lastError } }.any

What your team knows about its own site, as notes on devices, locations or the whole organisation.

FunctionWhat it doesRole
notes.listSite notes, newest first: { total, returned, notes: [{ id, target, targetName?, text, createdAt, createdBy, updatedAt, updatedBy, expiresAt?, expired? }] }.any
notes.for_entityEvery note that applies to an entity, nearest first: on the entity itself (via ‘self’), on its containers (its AP group, zone, switch…: ‘container’), on its placed location and the locations above it (‘location’), and…any
notes.addAdd a note (operator and up).operator
notes.updateChange a note’s text or expiry (operator and up).operator
notes.removeDelete a note (operator and up).operator

Methods of procedure: a change written as API steps, approved once, run with checks, scheduled, rolled back and exported as a document.

FunctionWhat it doesRole
mop.listThe org’s MOPs, newest change first: { total, mops: [{ id, title, version, steps, params, updatedAt, updatedBy, lastRun? }] }.any
mop.getOne MOP: { id, version, spec, createdAt, createdBy, updatedAt, updatedBy }, plus its recent runs with runs: true.any
mop.saveCreate a MOP, or replace one with id (engineer and up; a new version each save; a run in progress keeps the version it started with).engineer
mop.removeDelete a MOP and its run history (engineer and up); refused while a run of it is active.engineer
mop.previewLint a MOP and show what a run would do, sending nothing: { ready, missingParams?, tier (‘read’ | ‘write’ | ‘dangerous’), writes, errors, warnings, window?, plan: [{ seq, phase, name, surface, method, path, summary…any
mop.startStart a run of a MOP (the steps run with mop.run).engineer for a MOP with writes
mop.runRun a started run’s next steps until it ends, a step fails, maxSteps, or the code-mode budget is nearly spent (then call again; it continues).any
mop.stepRun exactly one step (or one forEach element) of a started run; the same result as mop.run.any
mop.status (not in TASK HELPERS)A run as it stands: status, progress, the evidence of every step so far, its writes and their rollback, its downtime ids, and verification (Phase 30d): the post-change verification of its writes ({ status…any
mop.scheduleSchedule runs of a MOP: once at an instant, or daily/weekly at a time in a time zone, until until (default 30 days, at most 90; a once at most 30 days ahead).engineer for a MOP with writes, else operator
mop.documentA MOP, or one run of it, as a document for a change board: purpose and parameters, every step (request, body with secrets masked, checks, captures, rollback), the rollback plan newest write first, the linter’s notes and…any
mop.schedulesThe org’s MOP schedules, newest first: { schedules: [{ id, mopId, version, title, label?, recurrence, nextRunAt, until, status (‘active’ | ‘done’ | ‘cancelled’), tier, onFail, params, by, runs, activeRunId?, lastRunAt?…any
mop.unscheduleCancel a schedule (the person who made it, or an engineer and up): nothing further fires.the schedule’s creator, or engineer
mop.runsRecent runs, newest first, of one MOP (id) or all.any
mop.abortStop a run (engineer and up): nothing more is sent and its change window closes.engineer
mop.rollbackReverse what a finished, failed or aborted run changed, newest write first (engineer and up; only the person who armed the run, since it sends under that approval): each write’s declared rollback, or its recorded undo…engineer, and only the person who started the run

The best-practice config linter over the daily config snapshot, its waivers, and fixes turned into a MOP.

FunctionWhat it doesRole
lint.rulesThe linter’s rules: [{ id, title, severity (critical | warning | info), kinds (zone | wlan | apgroup | system | switchconfig: the newest SwitchM backup of an ICX switch), why, fixable (a finding comes with a request…any
lint.runLint the controller’s configuration against best practice, from the last daily config snapshot (no controller calls): WLAN security (WEP, WPA1/TKIP, open without a portal, WPA3 without PMF, a passphrase from the…any
lint.to_mopTurn fixable findings into a MOP: per finding a pre-check that the object still reads as the snapshot saw it (so a fix is never built on stale config), the PATCH, and a post-check that it reads back as fixed; a change…engineer to save
lint.waiversWaived findings: [{ rule, key (an object, or * for all), reason, by, at, expiresAt }].any
lint.waiveAccept a finding (engineer and up): the rule on one object (key, e.g. 'wlan:<zone>:<id>'), or on everything when key is left out.engineer
lint.unwaiveRemove a waiver (engineer and up); the finding shows again.engineer

Your organisation’s setup as one YAML document, exported and imported with a plan.

FunctionWhat it doesRole
org.export_bundleThe organisation’s setup as one YAML document (kind: sz-mcp-bundle, version: 1), for git, review or another org: sections rules, boards, notes, locations, devices, placements, tags, lintWaivers, mops, probes…any
org.import_bundleMake this organisation match a bundle (as export_bundle writes it).engineer to apply (escalation levels: admin)