Skip to main content
Glama

Fabric AIops

Disclaimer: Community-maintained open-source project. Not affiliated with, endorsed by, or sponsored by Cisco, Meraki, Arista, Ubiquiti, or any network-controller vendor. "Cisco", "Meraki", "Catalyst", "DNA Center", "Arista", "CloudVision", "Ubiquiti", "UniFi", "ACI", "APIC" and all product/trademark names belong to their respective owners. MIT licensed.

Governed AI-ops for network fabrics managed through a controller — the Cisco Meraki Dashboard API (the reference platform, full read + write), Cisco Catalyst Center (formerly DNA Center; read subset), Arista CloudVision Portal (CVP) (read subset), and UniFi Network (self-hosted controller or UniFi OS console; read subset + device restart), plus read-only Cisco ACI (APIC) endpoint path reconstruction and faults — with a built-in governance harness: unified audit log, token/runaway budget guard, undo-token recording, and descriptive risk tiers. Multi-platform by construction: a registry keyed by platform maps every canonical operation onto each controller's REST API (path templates + response adapters), so adding a controller is a registry entry, never new ops/CLI/MCP surface. An operation a platform doesn't map returns a clear teaching error ("not supported on X yet — open an issue"), never a silent no-op. No platform has yet been exercised against a live controller by this tool; the ACI reads are the one part built from real controller responses (anonymized APIC payloads a production user supplied) — see docs/VERIFICATION.md.

What it does

Three flagship signature analyses, plus the guarded reads and writes around them:

  • Uplink loss & latency RCA — pull MX WAN uplink loss + latency across an org, rank the worst uplinks by a composite of average loss and latency, and map each degraded uplink to a likely cause + recommended action. Every ranking carries its numbers, not a black-box verdict.

  • Network health score — a composite 0-100 score per network from device online %, uplink health %, and an alert-severity penalty (weighted 0.5/0.3/0.2), with every component returned so the number is explainable.

  • Config template drift — for networks bound to a config template, list the settings that have drifted from the template (expected vs actual).

Related MCP server: observability-aiops

What works

  • CLI (fabric-aiops ...): init, overview, org, network, device, client, health, aci, remediate, secret, doctor, mcp.

  • MCP server (fabric-aiops mcp or fabric-aiops-mcp): 37 tools (28 read, 9 write), every one wrapped with the bundled @governed_tool harness.

  • Encrypted credentials: the controller secret (Meraki API key / Catalyst Center or APIC username:password / CVP service-account token / UniFi API key) lives in an encrypted store ~/.fabric-aiops/secrets.enc (Fernet + scrypt) — never plaintext on disk. Unlock with a master password from FABRIC_AIOPS_MASTER_PASSWORD (MCP/CI) or an interactive prompt (CLI).

  • Reversibility: mutating writes fetch the real before-state first and record a faithful inverse (update_device/update_network_vlan restore prior values; claim↔remove; bind↔unbind/rebind). Irreversible ops (reboot_device, blink_device_leds) record the prior state for audit but declare no undo.

  • Safety: every state-changing CLI op supports --dry-run and requires double confirmation; every write MCP tool takes a dry_run preview.

Capability matrix (37 MCP tools)

Domain

Tools

Count

R/W

Overview

overview

1

read

Organizations

org_list, org_get, org_licensing, org_admins, org_device_statuses, org_api_requests

6

read

Networks

network_list, network_get, network_vlans, network_alerts, network_traffic

5

read

Devices

device_inventory, device_status, device_uplinks, switch_ports, wireless_ssids

5

read

Clients

client_list, client_get, client_usage, client_connectivity

4

read

Health (flagship)

uplink_loss_and_latency_rca, network_health_score, config_template_drift

3

read

Cisco ACI (APIC only)

aci_endpoint_trace, aci_epg_segment, aci_faults_list

3

read

Remediation

reboot_device, claim_devices_into_network, remove_device_from_network, bind_network_to_template, unbind_network_from_template

5

write (high)

update_device, update_network_vlan

2

write (medium)

blink_device_leds

1

write (low)

Undo

undo_list

1

read

undo_apply

1

write (medium)

network_health_score and config_template_drift are injected-only (they score data you already hold); uplink_loss_and_latency_rca accepts injected records for offline analysis or pulls live from a configured target. Device models carry a product-type prefix: MX appliance, MS switch, MR wireless AP, MV camera, MG cellular gateway.

Platform support matrix

One tool, five controller platforms. For the four in the table below the ops/CLI/MCP surface is identical everywhere; each platform maps the canonical operations it supports and raises a teaching error for the rest ("not supported on <platform> yet — open an issue or PR"). ACI maps none of these — see Cisco ACI below.

Canonical operation

meraki

catalyst

cvp

unifi

overview (org/site/container rollup)

✅

✅

✅

✅

org_list / org_get

✅

✅ sites

✅ containers

✅ sites (list; get ❌)

org_licensing, org_api_requests

✅

❌

❌

❌

org_admins

✅

❌

✅ users

❌

org_device_statuses

✅

✅ device-health

✅ inventory + streaming status

✅ stat/device (state, uptime, firmware)

network_list / network_get

✅

✅ site-health / site

✅ containers

✅ sites / stat/health (subsystem rollup)

network_vlans, network_traffic

✅

❌

❌

❌

network_alerts

✅

✅ issues (P1→critical, P2→warning)

✅ events

✅ alarms (*_Lost_Contact→critical)

device_inventory, device_status

✅

✅ network-device

✅ inventory (+ complianceCode drift signal)

✅ stat/device (id = device MAC)

device_uplinks

✅

❌

❌

❌

switch_ports

✅

✅ interface stats (pass the device uuid)

❌

✅ device port_table (pass the device MAC)

wireless_ssids

✅

❌

❌

❌

client_list / client_get

✅

✅ client-health (aggregate) / client-detail (by MAC)

❌

✅ stat/sta (connected) / stat/user (by MAC)

client_usage, client_connectivity

✅

❌

❌

❌

uplink_loss_and_latency_rca (live pull)

✅

❌ (injected records still work)

❌ (injected records still work)

❌ (injected records still work)

network_health_score, config_template_drift (injected-only)

✅

✅

✅

✅

reboot_device

✅

❌ teaching error

❌ teaching error

✅ cmd/devmgr restart-device

The other 7 writes (blink/update/claim/remove/bind/unbind/VLAN)

✅

❌ teaching error

❌ teaching error

❌ teaching error

Concept mapping: canonical organizations/networks are Catalyst Center sites, CVP containers, and UniFi sites (the canonical id is the site's short name — the /api/s/{site}/ path segment); all have one global tree, so the org scope does not filter their lists. On unifi, device-scoped calls (device get / switch_ports / reboot) fill the site from the target's default org_id — set it in config.yaml (or the init wizard). Writes are Meraki-only except UniFi device restart — Catalyst Center and CVP change models (task/configlet workflows) don't map cleanly onto these canonical writes, so each write fails fast with a teaching error before any controller call (never a silent no-op). CVP config-drift surfaces through device_inventory (complianceCode/complianceIndication per device) and network_alerts (events); configlet-content retrieval and deep pagination on catalyst/cvp/unifi are known deferrals.

Cisco ACI (APIC)

ACI has two axes — tenant → VRF → bridge domain → EPG, and pod → node → interface — and neither is an organization → network → device tree. Rather than make every network_id mean something different per call, an aci target answers the canonical tools with a teaching error and gets three read-only ACI-native tools that take ACI references (MAC/IP, tenant/app/EPG names, DNs):

Tool (CLI)

What it answers

aci_endpoint_trace (aci trace --mac/--ip)

Where is this endpoint and what carries it: attachment (pod / leaf / interface or vPC) → EPG → bridge domain → VRF → the EPG's contracts → filter entries, plus faults whose DN names the EPG or the attachment interface

aci_epg_segment (aci segment TENANT APP EPG)

The same EPG → BD → VRF → contracts chain from an EPG name

aci_faults_list (aci faults)

Fabric faults, worst severity first

How to read them:

  • A static reconstruction, not a reachability test. staticPathResolved: true means the fabric is configured to carry the endpoint, not that traffic flows. Nothing is written to the APIC and no troubleshooting session is created.

  • Links follow the relation APIC resolved (tDn), so cross-tenant links into common are followed; a relation that is not formed is a finding with its state.

  • Related faults are candidates matched by DN (the EPG, the attachment interface, the leaf's deployed copy of the EPG's policy) — proximity, not cause.

  • Fault rows are records, not incidents: a delegated record mirrors a fault on another object. A cleared fault keeps the description it had when raised.

  • Not evaluated (listed in every result as notChecked): vzAny contracts, taboo contracts, imported contract interfaces, preferred-group peers, service graphs / L3Out.

Leaf/spine inventory and interface state (fabricNode, topSystem, l1PhysIf) are not in this release — they will be built once real responses for those classes are available, as the ones above were.

Per-platform auth

Platform

platform:

Secret stored (encrypted)

Auth on the wire

Base URL

Cisco Meraki Dashboard

meraki

API key (Dashboard → Organization → Settings → API access)

Authorization: Bearer (or auth_style: meraki-key → X-Cisco-Meraki-API-Key)

default https://api.meraki.com/api/v1

Cisco Catalyst Center

catalyst

username:password (one string)

exchanged via POST /dna/system/api/v1/auth/token (HTTP Basic) for a ~1 h X-Auth-Token, auto-refreshed once on a 401

required, e.g. https://<catalyst-center-host>

Arista CloudVision Portal

cvp

service-account token (Settings → Access Control → Service Accounts)

Authorization: Bearer

required, e.g. https://<cvp-host>

Cisco ACI (APIC)

aci

username:password (one string; a read-only role is enough — every ACI read is a GET, only the login is a POST)

POST /api/aaaLogin.json opens a session carried as a cookie; extended via /api/aaaRefresh.json at half its lifetime; one fresh login on a 401/403 (APIC reports an expired session as 403)

required, e.g. https://<apic-host>

UniFi Network

unifi

API key (UniFi OS: Settings → Control Plane → Integrations; self-hosted Network Server 9.0+)

X-API-KEY (stateless; legacy cookie login is a known deferral)

required — classic controller https://<host>:8443, or UniFi OS console https://<console>/proxy/network (keep the prefix)

fabric-aiops init walks through the platform choice and stores the right kind of secret; fabric-aiops doctor probes each target with the canonical top-of-hierarchy read (organizations / sites / containers / UniFi sites; on an APIC, the tenant count), exercising the full auth flow.

What this tool does, and does not, decide

It delivers network-fabric operations — reads and writes — accurately and efficiently, and records every one of them. It does not decide whether a write is allowed to happen. That is the agent's judgement, or the permission of the account you connect it with: give it a Meraki API key whose admin has read-only organization access (or the read-only equivalent on your controller) and the writes fail at the controller — the place that actually owns the permission.

So there is no read-only switch, no policy file, no approval gate to configure. The one thing the tool guarantees is that nothing is silent: every call, over MCP and over the CLI alike, lands an audit row in ~/.fabric-aiops/audit.db, and mutating writes still capture their before-state and record an inverse where one exists.

Each tool declares a risk_level, kept in agreement with its [READ]/[WRITE] documentation tag by a test, and carried into the audit row as a descriptive tier — so a reviewer can see at a glance that a row was a high-risk delete. It is a label, not a gate.

Quick start

As a Claude Code plugin

One install gives an agent both the skill and the MCP server:

/plugin marketplace add AIops-tools/marketplace
/plugin install fabric-aiops@aiops-tools

The MCP server is fetched with uv and pinned to the package version this plugin declares, so an audit row can be traced back to the code that wrote it. Credentials are still configured with fabric-aiops init — see below.

As an OpenClaw plugin

The same bundle is published on ClawHub, where one install delivers the skill and its MCP server together:

openclaw plugins install clawhub:@zw008/fabric-aiops
openclaw skills info fabric-aiops          # expect: Visible to model: yes

Restart the OpenClaw gateway afterwards so it loads the plugin. The MCP server is fetched with uv, pinned to this exact release, so uvx has to be on PATH — without it the skill still installs but reports Visible to model: no. Credentials are configured exactly as below.

As a CLI or standalone MCP server

uv tool install fabric-aiops              # or: pipx install fabric-aiops
fabric-aiops init                         # wizard: choose platform (meraki/catalyst/cvp/unifi) + store the secret (encrypted)
fabric-aiops doctor                       # verify config, secrets, connectivity (per-platform auth probe)
fabric-aiops overview                     # one-shot fabric fleet health
fabric-aiops health uplink-rca            # rank worst MX WAN uplinks + cause/action (meraki)
fabric-aiops device inventory --model MS  # switches in the org

Run as an MCP server (stdio):

export FABRIC_AIOPS_MASTER_PASSWORD=...   # unlock secrets non-interactively
fabric-aiops-mcp

Where that password then lives: an exported variable is readable by every process this shell starts and is recorded by shell history. On a shared or long-lived host, prefer the interactive prompt, or inject it from a secret manager for the life of the one command that needs it.

Governance

Every operation — MCP and CLI — passes through the bundled @governed_tool harness. It records; it does not authorize (see above).

  • Audit — every call (params, result, status, duration, risk tier, and any operator-supplied approver/rationale) is logged to ~/.fabric-aiops/audit.db (relocatable via FABRIC_AIOPS_HOME). The CLI writes the same row the MCP path does — there is no unaudited entry point.

  • Runaway guard — a safety backstop, not an authorization gate: the same call hammered in a tight loop trips a circuit breaker so a stuck agent can't burn unbounded calls/time. Disable with FABRIC_RUNAWAY_MAX=0; optional hard ceilings via FABRIC_MAX_TOOL_CALLS / FABRIC_MAX_TOOL_SECONDS.

  • Undo recording — reversible writes record an inverse descriptor built from the fetched before-state.

  • Risk tier — a descriptive label on the audit row derived from risk_level; it gates nothing.

Scope

This is the network-fabric / controller member of the AIops-tools family (governed AI-ops with audit + budget + undo + risk tiers). Do NOT use it for OT / industrial edge (Modbus, OPC-UA, PROFINET) — see the separate industrial-aiops line — nor for device-level CLI/SSH network automation.

Missing a capability?

Coverage is intentionally a curated subset of each controller's API. Missing a call or a device family on Meraki? A ❌ in the support matrix you need on Catalyst Center, CloudVision Portal, or UniFi Network (writes included — e.g. the UniFi cookie-login fallback for pre-9.0 controllers)? Want another controller platform entirely? Open an issue or PR — contributions welcome (a platform is a single descriptor module: path templates + response adapters).

Status

No platform has yet been exercised by this tool against a live Meraki organization, Catalyst Center appliance, CloudVision Portal instance, UniFi controller or APIC. The first four platforms' API paths are modelled from the public API shapes and tested against mocks. The ACI reads are tested against real, anonymized APIC responses from a production fabric (endpoint, EPG, bridge domain, VRF, contract, filter entry, faults) and their query mechanics against Cisco's own SDK — but a live run of this tool against an APIC is still outstanding. docs/VERIFICATION.md defines the checklist a live run must cover; fabric-aiops doctor is the fastest live check.

Available Tools

37 tools
aci_endpoint_traceA
Read-only

[READ] Reconstruct an ACI endpoint's static fabric path from its MAC or IP.

One call follows: endpoint → attachment (pod / leaf / interface or vPC) →
EPG → bridge domain → VRF → contracts the EPG provides/consumes → filter
entries, plus faults whose DN names the EPG or the attachment interface.
Every link is the relation APIC resolved (its tDn), so cross-tenant links
into 'common' are followed correctly.

How to read the result (do not over-state it):
  * It is NOT a reachability test. 'staticPathResolved: true' means the
    fabric is configured to carry the endpoint, not that traffic flows.
  * 'relatedFaultCandidates' are matched by DN only — proximity, not cause.
    Never report one as the reason for a problem. 'faults: null' means no
    fault scan succeeded (related faults unknown, not none); 'complete:
    false' means some scan failed, hit its page limit, or could not run.
  * 'tagRelations' in state 'missing-target' are policy-tag lookups and say
    nothing about the attachment path; do not report them as a path failure.
  * A section that is null with an entry in 'errors' was NOT read — never
    describe it as empty or absent. 'segmentResolved'/'staticPathResolved'
    are null in that case, not false.
  * A cleared fault keeps the description it had when raised; judge it by
    severity/lifecycle, not by its text.
  * 'contracts.complete: false' means a contract or filter was not read or
    not returned (its entry says 'read: false', 'exists: false' or has
    'entries: null') — its rules are unknown, not absent. The EPG → BD →
    VRF verdict is unaffected.
  * An 'epg' with 'supported: false' is a parent object this read does not
    trace (e.g. an L2Out external EPG) — the chain is undetermined, not broken.
  * 'notFound' means the fabric has not learned the address now, or it is in
    a tenant this account cannot see — not that the host is down.
  * 'notChecked' lists what this read does not evaluate (vzAny, taboo
    contracts, imported contracts, preferred-group peers, service graphs).

Args:
    mac: Endpoint MAC (any case; e.g. 00:50:56:AB:CD:EF). Pass mac OR ip.
    ip: Endpoint IPv4/IPv6 address. Pass mac OR ip.
    limit: Max matching endpoints to trace (default 5, max 20); the result
        carries returned/limit/truncated.
    fault_limit: Max related-fault candidates per endpoint (default 20).
    target: Target name from config (must be 'platform: aci').

endpoint.recordedPathMatch compares APIC's fabricPathDn with the formed
attachment: "exact", "vpc-member" (APIC records a vPC-learned endpoint on one
member leaf, e.g. paths-301 for protpaths-301-302 — the same attachment, not
a move), "differs" (a medium finding that does not claim a move), or null (no recorded
path, or no formed relation — not compared; never a match). Paths behind a FEX
are not excused as vPC members.

Returns dict: {query, endpoints:[{endpoint, ips, attachment, attachmentFormed,
    tagRelations, epg, bd, vrf, contracts, segmentResolved, notChecked,
    relatedFaultCandidates, staticPathResolved, findings:[{rank, severity,
    signal, cause, action}], errors}], returned, limit, truncated,
    serverReportedMatches, lookupErrors, note, notFound?}.
ParametersJSON Schema
NameRequiredDescriptionDefault
ipNo
macNo
limitNo
targetNo
fault_limitNo

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With readOnlyHint already covering safety, the description goes far beyond annotations: it explains null-vs-error semantics, 'complete: false' meaning partial reads, 'notFound' semantics, 'tagRelations' missing-target interpretation, FEX/vPC path matching, and what the read deliberately does not evaluate (notChecked). This is unusually rich behavioral disclosure for a read tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with [READ] and the one-line purpose, then organized into labelled bullet blocks for result interpretation. It is long, but nearly every bullet addresses a distinct misreading risk; the only cost is bulk, not filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, yet the description enumerates the return dict shape (query, endpoints[...], findings, errors, returned/limit/truncated, notFound) and explains the meaning of the ambiguous fields. Given the complexity of the traversal, this is complete enough for an agent to call and interpret it.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries the full burden — and it does: all five params are documented, including case-insensitivity and MAC example, mac-XOR-ip exclusivity, limit default 5/max 20 plus the returned/limit/truncated result fields, fault_limit default 20, and the target value constraint 'platform: aci'.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

[READ] plus a specific verb ('Reconstruct') and resource ('ACI endpoint's static fabric path'), scoped to MAC or IP input. The enumerated chain (endpoint → attachment → EPG → BD → VRF → contracts → filters) makes the operation concrete and distinguishable from siblings like aci_faults_list or aci_epg_segment.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear calling conditions ('Pass mac OR ip') and strong scope exclusions, most importantly that it is NOT a reachability test and that fabric path resolution is not traffic flow. No sibling tool is named as an alternative (e.g. aci_faults_list for raw faults), leaving the routing implicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

aci_epg_segmentA
Read-only

[READ] An ACI EPG's segment: bridge domain, VRF and contracts, by name.

Follows EPG → BD → VRF through the relations APIC resolved (cross-tenant
links into 'common' included) and expands the contracts the EPG provides
and consumes down to filter entries. Use it when you know the EPG but not
an endpoint in it.

A relation that is not 'formed' is reported as a finding with its state; a
read that failed is null with an entry in 'errors' (not empty — say it was
not read). An unenforced VRF means contracts do not restrict traffic in it.
'notChecked' lists what is not evaluated (vzAny, taboo, imported
contracts, preferred-group peers, service graphs).

Args:
    tenant: Tenant name (e.g. 'tenant-A').
    app: Application profile name.
    epg: EPG name.
    target: Target name from config (must be 'platform: aci').

Returns dict: {epg, bd, vrf, contracts:{contracts, returned, limit,
    truncated, filters, filtersTruncated, complete}, segmentResolved,
    notChecked,
    findings:[{rank, severity, signal, cause, action}], errors}.
ParametersJSON Schema
NameRequiredDescriptionDefault
appYes
epgYes
targetNo
tenantYes

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare readOnlyHint=true, but the description adds substantial behavioral context: it follows APIC-resolved relations (including cross-tenant 'common' links), expands contracts to filter entries, explains that non-'formed' relations become findings, that failed reads are null with an 'errors' entry, and that an unenforced VRF does not restrict traffic. This is richer than the annotation alone.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the [READ] tag and one-line purpose before the traversal, edge-case, and args sections. It is on the long side but each block (traversal semantics, error handling, notChecked scope) earns its place without redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description carries the return-shape burden and enumerates the full dict (epg, bd, vrf, contracts with truncation flags, segmentResolved, notChecked, findings, errors). Combined with the scope and error-handling details, an agent has everything needed to call and interpret it.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description must compensate, and it documents all four args including the critical constraint that target 'must be platform: aci'. Word-level semantics for tenant/app/epg are adequate though minimal beyond the example.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('An ACI EPG's segment: bridge domain, VRF and contracts, by name') and describes the traversal it performs. It also implicitly distinguishes itself from sibling aci_endpoint_trace by noting 'Use it when you know the EPG but not an endpoint in it,' so an agent can tell the two apart.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives a clear when-to-use condition ('when you know the EPG but not an endpoint in it') that effectively points away from the endpoint-trace sibling. There is no explicit when-not or named alternative, but the routing intent is unambiguous.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

aci_faults_listA
Read-only

[READ] ACI fabric faults, worst severity first.

Rows are fault RECORDS, not incidents: a record with 'delegated: true'
mirrors a fault raised on another object, so one condition can appear
twice — do not count them as separate problems. 'active' comes from
severity only; a cleared fault ('active: false') keeps its original
description, which is not current state. 'bySeverity.serverReported' is
APIC's own totalCount per level. Within one severity, rows are sorted
newest first among the rows APIC returned; when a level is truncated, rows
beyond the page may be newer — raise the limit before claiming "latest".

Args:
    severity: One of critical/major/minor/warning/info/cleared; omit for
        every active level.
    include_cleared: Also read cleared faults when no severity is given.
    limit: Max rows (default 50, max 500). The result carries
        returned/limit/truncated; re-run with a higher limit when
        'truncated' is true rather than treating the list as complete.
    target: Target name from config (must be 'platform: aci').

Returns dict: {severities, faults:[{rank, code, severity, active, lifecycle,
    delegated, dn, scope, pod, node, aboutDn, cause, descr, changeSet,
    lastTransition, ...}], returned, limit, truncated,
    bySeverity:{serverReported}, delegatedRecords, note}.
ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
targetNo
severityNo
include_clearedNo

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With only readOnlyHint=true in annotations, the description adds substantial behavioral context: how 'active' is derived, that delegated records mirror faults raised elsewhere, that cleared faults retain stale descriptions, how sorting works within a severity, and that truncation makes 'latest' claims unsafe. These are non-obvious semantics an agent could not infer from the annotation alone.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads purpose in the first line and the dense prose is mostly load-bearing semantics rather than filler. It is long, and the inline Returns block partially overlaps what an output schema would normally carry, but since no output schema exists that content is justified; only minor tightening is possible.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema and 0% param coverage, the description supplies the return shape (faults, bySeverity.serverReported, returned/limit/truncated, delegatedRecords), per-parameter meaning, and interpretation caveats. Nothing needed to call or correctly interpret the tool appears to be missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description carries the full burden and does so well: it enumerates the severity values (critical/major/minor/warning/info/cleared) that the schema's free-form string lacks, explains include_cleared's interaction with severity being omitted, gives limit's default and max, and specifies target must be 'platform: aci'.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('[READ] ACI fabric faults') plus the ordering ('worst severity first'), which immediately distinguishes it from the other ACI siblings (aci_epg_segment, aci_endpoint_trace) that deal with topology rather than faults. An agent knows exactly what domain this operates on before opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides strong operational guidance: don't double-count delegated records, re-run with a higher limit when 'truncated' is true, and don't treat cleared descriptions as current state. It stops short of naming sibling alternatives (e.g. vs network_alerts) or explicit when-not-to-use conditions, so it lands at clear-context rather than full routing guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

bind_network_to_templateA
Destructive

[WRITE][risk=high] Bind a network to a config template, capturing prior binding.

REFUSES when the network is unbound and carries local VLANs: the bind
overwrites them with the template's, unbinding does not put them back, and
this tool has no VLAN-create operation — so the undo would report success
having restored nothing.

Undo, precisely: rebind to the prior template when there was one (a faithful
restore — the configuration was template-derived either way); unbind when
the network was unbound with a VERIFIED empty VLAN set (restores the binding
state only, NOT firewall rules / group policies / static routes); and NO
undo at all when the prior VLAN set could not be read.

Pass dry_run=True to preview. The preview runs the same refusal check
(reads only), so it never previews green a bind the real call would refuse.

Args:
    network_id: Meraki network id to bind.
    template_id: Config template id to bind to.
    auto_bind: Auto-bind switch/AP profiles (Meraki autoBind flag).
    dry_run: If True, preview without binding.
    target: Target name from config; omit for the default.
ParametersJSON Schema
NameRequiredDescriptionDefault
targetNo
dry_runNo
auto_bindNo
network_idYes
template_idYes

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With annotations only flagging destructive/non-idempotent, the description goes far beyond: it discloses the refusal trigger and why (undo would report success restoring nothing), the precise undo semantics per prior state, and the exact partial-restore scope (binding state only, NOT firewall rules / group policies / static routes). This is exactly the destructive-behavior detail an agent needs.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the risk tags, then refusal, undo, and preview semantics in priority order before the args list. Sentences are dense with multi-clause undo logic but every clause carries decision-relevant information; nothing is filler, though the density costs some readability.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a high-risk, no-output-schema mutation with 5 params, the description covers refusal, preview safety, and undo/partial-restore consequences thoroughly. It could still note what a successful response returns or any template-existence precondition, but the behavioral picture is essentially complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must carry all parameter meaning, and it documents all five with non-obvious detail for auto_bind (Meraki autoBind flag), dry_run, and target (omit for default). The two required IDs get only restated descriptions, but those are self-evident.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource (bind a network to a config template) and immediately tags it [WRITE][risk=high], which is unambiguous. It is clearly distinguishable from the sibling unbind_network_from_template, and the refusal condition further scopes exactly what class of bind the tool will accept.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives strong contextual guidance: it names the exact condition under which the call is refused (unbound network with local VLANs) and steers the agent to dry_run=True for previewing. It does not, however, explicitly route to related siblings (unbind_network_from_template, config_template_drift) as alternatives, leaving that to the agent.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

claim_devices_into_networkA
Destructive

[WRITE][risk=high] Claim devices into a network. Inverse: remove them.

Records the claimed serials so the harness can offer an undo (remove them).
Pass dry_run=True to preview.

Args:
    network_id: Meraki network id to claim into.
    serials: Device serials to claim.
    dry_run: If True, preview without claiming.
    target: Target name from config; omit for the default.
ParametersJSON Schema
NameRequiredDescriptionDefault
targetNo
dry_runNo
serialsYes
network_idYes

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false, destructiveHint=true, idempotentHint=false. The description adds value beyond those: the [WRITE][risk=high] tag, the fact that claimed serials are recorded so the harness can offer an undo, and the dry_run preview path. Doesn't cover failure modes or auth requirements, so not a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with severity tag and one-line purpose, then an Args block. Every sentence earns its place, though the Args list partly restates parameter names already visible in the schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a high-risk mutation with no output schema, the description covers the write semantics, undo behavior, dry-run safety, and all parameters. Auth/permission prerequisites and the undo workflow specifics are the only meaningful gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must carry parameter meaning, and it documents all four: network_id, serials, dry_run (preview only), and target. It compensates well for the coverage gap, though it adds no format/constraint detail (e.g. serial list limits).

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource (claim devices into a network) and explicitly names the inverse operation, letting an agent distinguish it from the sibling remove_device_from_network without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear context: use it to claim, with the inverse operation called out for the reverse direction, and notes dry_run previews and that target can be omitted for the default. It stops short of explicit when-not-to-use conditions, so a 4.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

client_connectivityA
Read-only

[READ] A client's connection-quality stats (assoc/auth/dhcp/dns/success).

Args:
    network_id: Meraki network id.
    client_id: Client id/MAC (from client_list).
    target: Target name from config; omit for the default.
ParametersJSON Schema
NameRequiredDescriptionDefault
targetNo
client_idYes
network_idYes

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, and the '[READ]' tag is consistent with that. The description adds the enumerated stat categories, but discloses nothing about error behavior, time windows, or response shape beyond what the annotations and name imply.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the read purpose in one bracketed sentence and then a compact Args block. No redundant prose; the only minor cost is that the enumerated stat abbreviations are unexplained.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read tool with no output schema and 3 params at 0% schema coverage, the description covers the inputs adequately and hints at return content via the stat categories. It stops short of describing the response structure or time range, leaving a modest gap for an agent deciding whether the result answers its question.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description carries the full burden and largely meets it: network_id ('Meraki network id'), client_id ('Client id/MAC (from client_list)'), and target ('Target name from config; omit for the default'). The target semantics are genuinely clarifying (a config profile, omit for default), though acceptable value formats for network_id are not detailed.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific resource ('A client's connection-quality stats') and enumerates the stat categories captured (assoc/auth/dhcp/dns/success), which is more concrete than a generic 'get client info'. It is distinguishable from client_usage/client_get, though it never names the sibling it differs from.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It tells the agent where client_id comes from ('from client_list'), which is useful routing, but gives no explicit when-to-use/when-not guidance versus client_usage, client_get, or network health tools. Usage is implied by the resource rather than stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

client_getA
Read-only

[READ] One client's detail (description, MAC, IP, VLAN, manufacturer).

Args:
    network_id: Meraki network id.
    client_id: Client id/MAC (from client_list).
    target: Target name from config; omit for the default.
ParametersJSON Schema
NameRequiredDescriptionDefault
targetNo
client_idYes
network_idYes

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

readOnlyHint=true already establishes this as a safe read, so the bar is lower; the [READ] tag merely restates it. The description adds the set of fields returned and the target-omission default, but says nothing about rate limits or pagination behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The [READ] marker and resource summary are front-loaded, followed by a compact args block. Every line earns its place, with no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, but the description lists the key return fields, and all parameters are covered. The only soft spot is the vague 'Target name from config' phrasing, which leaves an agent guessing what a target represents.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must carry the load, and it documents all three parameters: network_id, client_id (with a hint it comes from client_list and accepts a MAC), and target (omit for the default). This meaningfully compensates for the empty schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (get) and resource (one client's detail), and enumerates the returned fields (description, MAC, IP, VLAN, manufacturer). It implies differentiation from client_list by naming it as the source of client_id, though it never explicitly contrasts the two tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied: client_id comes 'from client_list', suggesting this is the single-record counterpart to that list tool. There is no explicit when-to-use vs client_usage or client_connectivity, nor any exclusion guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

client_listA
Read-only

[READ] Clients seen on a network within a look-back window.

Args:
    network_id: Meraki network id (from network_list).
    timespan: Look-back window in seconds (7200..2592000, default 86400).
    target: Target name from config; omit for the default.
ParametersJSON Schema
NameRequiredDescriptionDefault
targetNo
timespanNo
network_idYes

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, and the '[READ]' prefix merely restates that. The description does add the timespan bounds (7200..2592000, default 86400), which the schema lacks, but says nothing about pagination, result caps, or the shape of a returned client record. Adequate against a low annotation bar, not rich.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded one-line purpose followed by a compact Args list; no filler sentences. The '[READ]' tag is slightly redundant with the annotation but is cheap. Structure is easy to scan for an agent.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only list tool with no output schema, the description covers the arguments and the general nature of the result ('clients seen on a network'). It stops short of describing return fields, ordering, or pagination behavior, but nothing required to invoke the tool correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries the full burden and largely meets it: it gives network_id provenance (from network_list), the timespan range and default, and the meaning of target. The only weak spot is 'Target name from config', which is vague about what valid targets exist. Given a 0% coverage schema, this is strong compensation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource with scope: lists clients 'seen on a network within a look-back window'. That distinguishes it from siblings like client_get, client_usage, and client_connectivity. However, it never names an alternative tool, so the differentiation is inferred from the name rather than stated.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by the description (retrieve clients on a given network) and it helpfully notes that network_id comes from network_list. There is no explicit when-to-use vs. when-not guidance and no routing to client_get or client_usage for per-client detail, so the agent must infer the boundary.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

client_usageB
Read-only

[READ] A client's usage history rolled up to total sent/received KB.

Args:
    network_id: Meraki network id.
    client_id: Client id/MAC (from client_list).
    target: Target name from config; omit for the default.
ParametersJSON Schema
NameRequiredDescriptionDefault
targetNo
client_idYes
network_idYes

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations provide readOnlyHint=true, confirming a safe read operation. The description adds the aggregation detail (rolled up to total sent/received KB), but does not disclose return format, historical time span coverage, or rate limits. With annotations covering safety, this extra detail is moderate value.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with [READ] and purpose. The Args block is standard and each line is short. One sentence intros plus three parameter lines, no fluff, though the target line is a bit cryptic and could be trimmed or improved.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only tool with no output schema, the description should ideally explain return values or time range. It covers what the tool does and identifies parameters, but misses context about aggregation period, data freshness, and required permissions. Adequate but with clear gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries full parameter burden. It names network_id as 'Meraki network id' and client_id as 'Client id/MAC (from client_list)', adding some meaning beyond the schema's bare types. However, the target parameter explanation ('Target name from config; omit for the default') is vague and doesn't clarify what config refers to or what the default is. Two of three parameters get only basic identification, leaving gaps.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (rolled up) and resource (client's usage history into total sent/received KB). The scope is clear enough to distinguish from sibling client_list and client_connectivity, though it doesn't explicitly name them as alternatives.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit when-to-use or when-not-to-use guidance. The description alludes to client_id coming from client_list, hinting at a workflow, but doesn't offer any exclusion criteria or alternative selection logic.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

config_template_driftA
Read-only

[READ] For networks bound to a config template, list drifted settings.

Compares each network bound to the template against the template's settings
by exact value and reports expected-vs-actual for every drifted key. Pure
analysis over injected data — no live pull.

Args:
    template: {id, name, settings:{key: value}} — the config template.
    networks: rows {networkId, name, boundTemplateId, settings:{key: value}};
        only those whose boundTemplateId matches template['id'] are checked.
    limit: Max rows in the drifted list (default 100). The result carries
        'returned'/'limit'/'truncated'; re-run with a higher limit when
        'truncated' is true rather than treating the list as complete.

Returns dict: {templateId, templateName, boundNetworks, driftedCount,
    compliantCount, settingsChecked, driftedNetworks:[{networkId, name,
    deviations:[{setting, expected, actual}]}], returned, limit, truncated,
    note}.

Example: config_template_drift(
    template={"id":"T1","name":"branch","settings":{"timezone":"UTC"}},
    networks=[{"networkId":"N1","boundTemplateId":"T1",
               "settings":{"timezone":"PST"}}]).
ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
networksYes
templateYes

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the readOnlyHint annotation, it discloses key behavioral traits: pure analysis over injected data with 'no live pull', exact-value comparison semantics, and explicit truncation handling ('re-run with a higher limit when truncated is true rather than treating the list as complete'). This is rich, non-obvious context that an agent cannot get from structured fields.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with a [READ] marker and a one-line purpose before structured Args/Returns/Example sections. It is somewhat long, but the length is justified by the nested-object params and zero schema coverage; every section carries needed information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, but the description fully enumerates the return dict (templateId, boundNetworks, driftedCount, compliantCount, driftedNetworks with per-setting deviations, returned/limit/truncated, note). Combined with the documented args and a worked example, an agent has everything needed to call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema coverage and nested objects, the description fully compensates: it documents the template shape {id, name, settings}, the networks row shape {networkId, name, boundTemplateId, settings}, the matching rule on boundTemplateId, and the limit default/truncation behavior. This is exactly what the schema lacks.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb+resource ('list drifted settings') and precise scope ('networks bound to a config template'), then explains the comparison semantics. It is clearly distinguishable from siblings like bind_network_to_template and unbind_network_from_template without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It establishes the context (networks bound to a config template, exact-value comparison) but never states explicit when-to-use vs when-not, nor names an alternative. Usage is implied by the 'only those whose boundTemplateId matches' clause rather than spelled out.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

device_inventoryA
Read-only

[READ] Org device inventory, optionally filtered by model family.

Buckets devices by Meraki model prefix (MX security appliance, MS switch, MR
wireless AP, MV camera, MG cellular gateway) and returns per-family counts.

Args:
    org_id: Meraki organization id; omit to use the target's default org.
    model: Model family/prefix to filter (e.g. 'MS', 'MR46'); omit for all.
    limit: Max rows in the returned list (default 500). The result carries
        'returned'/'limit'/'truncated'; re-run with a higher limit when
        'truncated' is true rather than treating the list as complete.
    target: Target name from config; omit for the default.
ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
modelNo
org_idNo
targetNo

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, so the safe-read profile is covered. The description adds genuinely useful behavior beyond that: how results are bucketed by model prefix and, importantly, that the result carries 'returned'/'limit'/'truncated' and how to react to truncation. That pagination contract is real behavioral disclosure, though return-field details remain limited without an output schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded one-line purpose followed by an Args block; every sentence carries information (bucketing behavior, defaults, truncation handling). No filler or restatement of the tool name.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, yet the description compensates by describing the return shape (per-family counts, returned/limit/truncated flags) and the recovery path when truncated. Combined with per-parameter documentation, an agent has everything needed to call this correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must carry the load, and it does: all four parameters are explained with semantics the schema lacks (org_id defaulting, model prefix with concrete examples like 'MS'/'MR46', limit default and truncation meaning, target defaulting). 'target' is explained only thinly ('Target name from config'), which keeps this from a 5.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Org device inventory'), the scope (organization-wide), and the optional filter dimension (model family). It also distinguishes itself from nearby siblings such as org_device_statuses and device_status by describing the bucketing-by-model-prefix behavior, so an agent can tell what this tool returns versus a status lookup.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear context for the optional args ('omit to use the target's default org', 'omit for all') and operational guidance for the truncation case ('re-run with a higher limit when truncated'). It does not name sibling alternatives or when-not-to-use conditions, so it stops short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

device_statusA
Read-only

[READ] One device's availability status (online/offline/alerting/dormant).

Args:
    serial: Device serial (e.g. Q2XX-XXXX-XXXX).
    org_id: Meraki organization id; omit to use the target's default org.
    target: Target name from config; omit for the default.
ParametersJSON Schema
NameRequiredDescriptionDefault
org_idNo
serialYes
targetNo

TDQS

A3.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, and the [READ] tag reinforces it without contradiction. The description adds genuine value by enumerating the four returned status values, which matters since there is no output schema. No auth or rate-limit caveats are mentioned.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Purpose is front-loaded in the first line, followed by a compact Args block. No filler sentences; every line maps to a parameter or the core purpose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only, single-device lookup with no output schema, the definition covers purpose, all parameters, and the possible return states. Only minor gaps remain around auth/permission expectations and what fields accompany the status.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description carries the full burden and documents all three parameters: serial with a format example, org_id with meaning and default-omission behavior, and target with its source. The 'target' explanation ('name from config') is a bit thin but functional.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ([READ]) and resource ('One device's availability status') and enumerates the possible states (online/offline/alerting/dormant). The singular 'one device' scope implicitly distinguishes it from the bulk sibling org_device_statuses, though it never names the alternative.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to use this versus alternatives such as org_device_statuses. The only conditional text ('omit to use the target's default org') is per-parameter behavior, not usage routing, so the agent must infer selection from the name alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

network_alertsA
Read-only

[READ] Current network health alerts, summarised by severity.

Args:
    network_id: Meraki network id (from network_list).
    limit: Max rows in the returned list (default 200). The result carries
        'returned'/'limit'/'truncated'; re-run with a higher limit when
        'truncated' is true rather than treating the list as complete.
    target: Target name from config; omit for the default.
ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
targetNo
network_idYes

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish readOnlyHint=true (reinforced by the [READ] tag), but the description adds genuinely useful behavior beyond that: the result carries 'returned'/'limit'/'truncated' and the caller is told to re-run with a higher limit when truncated, rather than treating a short list as complete. It stops short of stating auth requirements or rate limits.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The one-line summary is front-loaded and the Args block is compact. The Args lines restate schema keys, but each adds substantive meaning (source, defaults, truncation semantics) rather than repeating types.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite no output schema, the description explains the shape of the list response (counts plus truncation flags), which is what an agent needs to consume results safely. It doesn't describe alert contents or severity levels, a minor gap for a 3-param read tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With schema coverage at 0%, the description carries the burden and mostly does: it identifies network_id's source (network_list), gives limit's default (200) and its interaction with truncation, and explains target as a config name with a default fallback. 'Target name from config' remains slightly underspecified, keeping this from a 5.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('Current network health alerts') and scope ('summarised by severity'), which cleanly separates it from siblings like network_traffic and network_health_score. An agent can tell what it returns without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No when-to-use or when-not-to-use guidance, and no alternative sibling is named despite several overlapping candidates (network_health_score, network_traffic, overview). 'Current' implies recency but nothing routes the agent here versus those tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

network_getA
Read-only

[READ] One network by id (name, product types, timezone, bound template).

Args:
    network_id: Meraki network id (from network_list).
    target: Target name from config; omit for the default.
ParametersJSON Schema
NameRequiredDescriptionDefault
targetNo
network_idYes

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The readOnlyHint annotation already establishes that this is a safe read, so the '[READ]' prefix is largely redundant. The description does add value by disclosing what is returned (name, product types, timezone, bound template), a useful behavioral hint beyond the annotations, but it says nothing about permissions, rate limits, or error behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Compact and front-loaded: the one-line purpose precedes a short Args block with no wasted wording. It is terse to the point of being slightly clipped, but every line earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple two-param read with no output schema, the description covers both parameters, names the id source, and enumerates the returned fields, so an agent has enough to invoke it correctly. Minor gaps (auth/target semantics beyond 'default') keep it just under full marks.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries the full parameter burden and does so reasonably: network_id is defined as a Meraki network id with its source (network_list), and target is defined as a config target name with 'omit for the default'. Neither param gets format/validation detail, keeping it from a 5.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('One network by id') and even enumerates the returned fields (name, product types, timezone, bound template), which clearly separates it from the list-oriented siblings. The distinction from network_list is implied by the parenthetical id source rather than stated outright, so it stops short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied: the 'from network_list' note establishes the id prerequisite chain, and 'omit for the default' explains one param's behavior. There is no explicit when-to-use/when-not guidance or named alternative for fetching broader network data.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

network_health_scoreA
Read-only

[READ] Composite fleet health score per network (0-100), worst-first.

Folds device online %%, uplink health %%, and an alert-severity penalty into
one weighted score per network (0.5 / 0.3 / 0.2), every component returned so
the number is explainable. Pure analysis over injected rows — no live pull.

Args:
    device_statuses: rows {serial, networkId, status, productType} (e.g. from
        org_device_statuses' 'devices').
    uplinks: optional rows {networkId, status} (active/ready = healthy).
    alerts: optional rows {networkId, severity} (critical/warning/info).
    limit: Max rows in the ranked list (default 100). The result carries
        'returned'/'limit'/'truncated'; re-run with a higher limit when
        'truncated' is true rather than treating the list as complete.

Returns dict: {networksEvaluated, fleetScore, summary:{healthy, degraded,
    critical}, weights, worst:[{networkId, score, band, devicesOnline,
    devicesTotal, onlinePct, uplinkHealthPct, alertPenalty}], returned,
    limit, truncated, note}.

Example: network_health_score(device_statuses=[
    {"networkId":"N1","status":"online"},
    {"networkId":"N1","status":"offline"}]).
ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
alertsNo
uplinksNo
device_statusesYes

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only provide readOnlyHint=true; the description adds explanation of the computation (weighted 0.5/0.3/0.2 across online %, uplink health %, alert penalty), that components are returned for explainability, and that it's pure analysis with no live pull. Good disclosure beyond annotations; doesn't cover auth or rate limits.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the [READ] tag and one-line summary, then details weights, args, and return shape. Slightly long but every section carries distinct information; the arg-by-arg breakdown is well organized.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema, the description documents the return dict fields (networksEvaluated, fleetScore, summary buckets in {}, weights, worst list fields, returned/limit/truncated/note). With 4 params, 1 required, and 0% coverage, this is thorough.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description fully carries parameter documentation: shape of each row for device_statuses, uplinks, and alerts (including how 'active/ready' and severity values are interpreted), plus the limit/truncated semantics. This is exactly the compensation required when the schema is silent.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb-class ('composite fleet health score per network') with concrete units (0-100) and ordering rule (worst-first). Distinguishes itself from raw-data siblings like org_device_statuses and device_status by naming this as a fold/aggregation over injected rows.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Clearly points to the upstream source for the primary argument ('e.g. from org_device_statuses' devices'). Notes it operates on injected rows rather than live data, and explains when to re-run with higher limit when truncated. Doesn't explicitly say when NOT to use it (e.g. for single-network diagnosis vs network_list + device_status).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

network_listA
Read-only

[READ] Networks in the organization (id, name, productTypes, tags).

Args:
    org_id: Meraki organization id; omit to use the target's default org.
    target: Target name from config; omit for the default.
ParametersJSON Schema
NameRequiredDescriptionDefault
org_idNo
targetNo

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

readOnlyHint=true already declares the safety profile, so the '[READ]' tag is largely redundant. The description does add value by naming the returned fields, but omits pagination, result-size limits, and whether the listing is filtered by product type. With annotations covering safety, a 3 fits.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short args lines, no filler, with the core purpose front-loaded in the first clause. The 'Args:' block is slightly ceremonial for two optional parameters but not wasteful.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description compensates by naming the returned fields, and both params are at least addressed. What is missing is any note on list size, pagination, or whether productTypes reflects a filter — minor gaps for a simple read-only listing tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must carry parameter meaning — and it partially does: org_id is defined and its default behavior explained, as is target. However 'Target name from config' is circular and never says what a target actually is or how it relates to org_id, leaving the second parameter only superficially documented. Baseline for two fully explained params would be 4; the vagueness on target holds it to 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The verb and resource are explicit ('[READ] Networks in the organization') and the parenthetical enumerates the returned fields (id, name, productTypes, tags), so an agent knows this is an org-wide network listing rather than a single-network fetch. It does not explicitly name the sibling network_get to distinguish list-vs-get, so it falls short of 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The only usage context is scoping: 'omit to use the target's default org' and 'omit for the default.' That tells the agent how to call it, but nothing about when to prefer it over network_get, network_vlans, or the org-level listing siblings. Usage is implied by the name rather than stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

network_trafficA
Read-only

[READ] Application/protocol traffic mix for a network, top apps by bytes.

Args:
    network_id: Meraki network id (from network_list).
    timespan: Look-back window in seconds (7200..2592000, default 86400).
    limit: Max rows in the returned list (default 25). The result carries
        'returned'/'limit'/'truncated'; re-run with a higher limit when
        'truncated' is true rather than treating the list as complete.
    target: Target name from config; omit for the default.
ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
targetNo
timespanNo
network_idYes

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, but the description adds real behavioral context beyond them: the return payload carries 'returned'/'limit'/'truncated' and truncation must be handled by re-running rather than assuming completeness. It does not cover auth/permission needs, but the truncation contract is the important disclosure for a paginated read.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Purpose is front-loaded in one line, then parameters are laid out in a scannable Args block. Nothing is padded; the note about 'truncated' is the one longer sentence and it directly affects correct usage.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description compensates by naming the returned metadata fields and explaining how to react to truncation. It is nearly complete for a read-only list tool; minor gaps remain around what identifiers the app rows carry, but nothing prevents a correct call.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries the full burden and does so: network_id provenance, timespan bounds and default (7200..2592000, default 86400), limit default plus truncation semantics, and target's fallback behavior. Each parameter gains meaning absent from the bare schema titles.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The first line states a specific verb and resource: '[READ] Application/protocol traffic mix for a network, top apps by bytes.' It is immediately distinguishable from siblings like client_usage, network_health_score, or device_uplinks, which measure different things.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives useful invocation guidance (network_id comes from network_list; re-run with a higher limit when 'truncated' is true; omit target for the default), but never says when to choose this tool over adjacent ones such as client_usage or network_alerts.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

network_vlansB
Read-only

[READ] Appliance VLANs configured on a network (id, subnet, appliance IP).

Args:
    network_id: Meraki network id (from network_list).
    target: Target name from config; omit for the default.
ParametersJSON Schema
NameRequiredDescriptionDefault
targetNo
network_idYes

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, so safety is covered. The description reinforces this with the [READ] tag and lists returned fields, but discloses nothing about permissions, rate limits, or pagination.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the [READ] marker and resource, then an Args block. Every line earns its place; only the empty title line adds nothing.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple two-parameter read tool with annotation-covered safety and no output schema, the description supplies the essential return fields, parameter provenance, and the target default. Pagination or result-count behavior is the only minor omission.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description must compensate, and it does: network_id is described as a Meraki network id sourced 'from network_list', and target is described as a config target name whose omission selects the default. This adds real meaning beyond the bare schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb via the [READ] marker and a specific resource (Appliance VLANs configured on a network), plus the fields returned (id, subnet, appliance IP). The [READ] prefix separates it from the write sibling update_network_vlan, though that sibling is never named.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no explicit when-to-use or when-not guidance, and no alternative is named despite update_network_vlan being the obvious companion. The only contextual hint is 'omit for the default' for the target parameter.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

org_adminsA
Read-only

[READ] Dashboard administrators for the org (name, email, access level).

Args:
    org_id: Meraki organization id; omit to use the target's default org.
    target: Target name from config; omit for the default.
ParametersJSON Schema
NameRequiredDescriptionDefault
org_idNo
targetNo

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

readOnlyHint=true already tells the agent this is a safe read, and the '[READ]' marker largely repeats that. The description does add value by disclosing the returned fields (name, email, access level), but says nothing about auth requirements, rate limits, or pagination.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the purpose and the returned fields before the arg list. The Args block is slightly verbose but every line adds meaning and nothing is wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter read tool with no output schema, the description covers purpose, both parameters, and the shape of returned data, which is sufficient for correct invocation. Minor gaps (auth, pagination) remain but are not blocking.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description carries the burden, and it does: it explains org_id (Meraki organization id, default org if omitted) and target (config target name, default if omitted). Both parameters and their defaulting behavior are documented, though format examples are absent.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (list/read) and resource (dashboard administrators for the org) and even names the returned fields (name, email, access level). It is clearly distinguishable from siblings like org_list or org_get, though it never explicitly contrasts itself with them.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives per-parameter guidance (omit org_id/target to fall back to defaults), which is useful operational context, but offers no explicit when-to-use-this-vs-an-alternative guidance and no exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

org_api_requestsB
Read-only

[READ] Org API-request usage overview (response-code counts, 429 rate-limits).

Args:
    org_id: Meraki organization id; omit to use the target's default org.
    target: Target name from config; omit for the default.
ParametersJSON Schema
NameRequiredDescriptionDefault
org_idNo
targetNo

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The readOnlyHint=true annotation already carries the safety profile, and the '[READ]' prefix merely restates it. The description does add useful context about what the payload contains (response-code counts and 429 rate-limit data). However, it says nothing about pagination, time window, or rate-limit/auth behavior of the call itself.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The definition is short and front-loaded, leading with the '[READ]' scope marker and the overview before the Args block. Every line carries information, with only the redundant '[READ]' tag arguably duplicating the annotation.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple, no-required-parameter read tool with no output schema, the description covers both parameters, their defaults, and the returned content. The absence of any mention of time range or result shape is a small gap but not blocking.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must carry the parameters, and it does: org_id is documented as the Meraki organization id with the omission behavior (use the target's default org), and target as a config target name defaulting to the default. It adds the important default-on-omission semantics, though it does not specify the org_id format.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource — an org API-request usage overview — and enumerates the returned content (response-code counts, 429 rate-limits). It is immediately clear what the tool does. It does not name or differentiate against any sibling, but no sibling tool overlaps this domain, so the omission is minor.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no statement of when to use this tool versus alternatives, nor any prerequisites or exclusions. Usage is only implied by the tool name and the '[READ]' marker. An agent gets no routing guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

org_device_statusesA
Read-only

[READ] Org-wide device availability rolled up by status + product type.

Args:
    org_id: Meraki organization id; omit to use the target's default org.
    limit: Max rows in the returned list (default 500). The result carries
        'returned'/'limit'/'truncated'; re-run with a higher limit when
        'truncated' is true rather than treating the list as complete.
    target: Target name from config; omit for the default.
ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
org_idNo
targetNo

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, so the safety profile is covered. The description goes further by disclosing pagination behavior: the result carries 'returned'/'limit'/'truncated', and the agent is told to re-run with a higher limit when truncated rather than trusting an incomplete list. That is genuine behavioral context beyond structured fields, though nothing is said about auth requirements or rate limits.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The roll-up scope is front-loaded in a single line, followed by a compact args block. Every sentence earns its place, including the truncation warning, which conveys non-obvious retry semantics rather than padding.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, and the description usefully compensates by naming the return envelope fields and their meaning. For a read-only tool with three optional parameters it is essentially complete; it could still say what status values or product types to expect, which is the only remaining gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries the full burden—and it does: org_id (Meraki org id, omit for default org), limit (default 500, drives truncation), and target (config name, omit for default) are all explained with defaults and semantics. This fully compensates for the empty schema titles.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a concrete verb and resource—org-wide device availability—and adds scope qualifiers ('rolled up by status + product type') that make it clearly distinct from the single-device sibling 'device_status'. It does not explicitly name that sibling, so it stops short of the 5 calibration case, but the aggregation scope alone is enough for an agent to differentiate.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Guidance is limited to argument-level mechanics ('omit org_id to use the target's default org', 'omit target for the default'). It never states when to prefer this tool over 'device_status' or other org-level siblings, so usage is implied rather than stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

org_getA
Read-only

[READ] One organization by id (name, url, api access, cloud region).

Args:
    org_id: Meraki organization id; omit to use the target's default org.
    target: Target name from config; omit for the default.
ParametersJSON Schema
NameRequiredDescriptionDefault
org_idNo
targetNo

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

readOnlyHint=true already covers the safety profile, so the bar is lower; the description still adds value by naming the fields returned and documenting the default-resolution behavior when org_id/target are omitted. It does not describe error behavior when an id is not found, which is the main remaining gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences plus a tight Args block; the read nature and resource are front-loaded and no sentence is filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter read tool with no output schema, the description supplies the return fields, parameter meanings, and default fallbacks, which is close to complete. Missing only edge-case/error behavior and an explicit pointer to the sibling list tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0% and both parameters are undocumented in the schema, so the description carries the burden and does so: it defines org_id as the Meraki organization id and target as a config target name, plus the default behavior for each. It stops short of giving an id format or example.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('One organization by id') and enumerates the returned fields (name, url, api access, cloud region). It implicitly distinguishes itself from the sibling org_list by emphasizing a single org, but never names the alternative explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains how to fall back to defaults ('omit to use the target's default org'), which is useful context, but it never states when to pick org_get over org_list or org_licensing, leaving the alternative-selection decision to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

org_licensingA
Read-only

[READ] Org licensing overview: status, expiration, per-device-type counts.

Args:
    org_id: Meraki organization id; omit to use the target's default org.
    target: Target name from config; omit for the default.
ParametersJSON Schema
NameRequiredDescriptionDefault
org_idNo
targetNo

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

readOnlyHint=true already establishes the safety profile, so the '[READ]' prefix is largely redundant. It adds modest value by disclosing the shape of the returned data, but says nothing about auth requirements, rate limits, or how per-device-type counts are scoped.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded one-line purpose followed by a compact Args block; every line carries information. Slightly padded by the redundant '[READ]' marker.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-required-param read tool with no output schema, the description covers purpose, both parameters, and default behavior adequately. Only auth/error behavior and return format details are absent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must carry the burden, and it does: both params are explained with their fallback behavior (omit org_id to use the target's default org; omit target for the default). That is real semantic value beyond the bare anyOf string types.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific resource (org licensing) and enumerates what the overview contains: status, expiration, per-device-type counts. It is clearly distinguishable from sibling reads like org_get or org_list, though it does not explicitly name them.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The '[READ]' tag and 'overview' framing imply this is the tool for checking an organization's licensing state, but there is no explicit when-to-use, when-not-to-use, or alternative (e.g., org_get) guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

org_listA
Read-only

[READ] Organizations visible to the API key (id, name, url, apiEnabled).

Args:
    target: Target name from config; omit for the default.
ParametersJSON Schema
NameRequiredDescriptionDefault
targetNo

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, so the safety profile is covered by structured data. The description adds the meaningful scope constraint that results are limited to organizations visible to the API key, plus the shape of each returned record, but says nothing about pagination, result size, or error behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short lines, front-loaded with the read marker, scope, and returns before the argument block. Nothing is padded; every clause carries information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, but the description compensates by naming the returned fields. Combined with annotations covering read-only safety for this zero-required-parameter tool, an agent has enough to invoke it correctly; the only gap is the unstated relationship to org_get.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description must carry the parameter. It does explain that 'target' is a Target name from config and that omitting it uses the default, which is more than the bare schema with default null provides. It does not clarify valid target values or where the config lives.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource (list organizations) plus the scoping condition (visible to the API key) and the summary fields returned (id, name, url, apiEnabled). It implicitly separates itself from the single-object sibling org_get by enumerating list-level fields, but never names that sibling, so the differentiation is not explicit.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

"[READ]" and "visible to the API key" give implied context for when this tool applies, and "omit for the default" guides the optional argument. However, there is no explicit when-to-use vs when-not guidance and no routing to alternatives such as org_get for a single organization.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

overviewA
Read-only

[READ] One-shot fabric fleet health: networks + device status/product rollup.

Call this first to triage a Meraki organization before drilling into a
specific network or device.

Args:
    org_id: Meraki organization id; omit to use the target's default org.
    target: Target name from config; omit for the default.
ParametersJSON Schema
NameRequiredDescriptionDefault
org_idNo
targetNo

TDQS

A4.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The [READ] marker is consistent with readOnlyHint=true, so no contradiction, but it is redundant with the annotation. The description adds that this is a one-shot aggregate (network + device rollup), which is useful scope context, yet it says nothing about auth requirements, pagination/rate limits, or result shape. With annotations covering the safety profile, a 3 is appropriate.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the operation and its scope, then the triage guidance, then a compact Args block. Efficient overall, with only minor redundancy in the [READ] prefix duplicating readOnlyHint.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, so the description should ideally sketch return values; it hints at content ('networks + device status/product rollup') but not structure or aggregation level. Combined with the covered annotations and documented params, it is largely sufficient for triage-oriented calling.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must carry the load, and it does document both parameters: org_id ('omit to use the target's default org') and target ('Target name from config; omit for the default'). The defaults-sourced behavior for 'target' is genuinely beyond the schema, though what constitutes a valid target is only loosely defined.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource scope: a one-shot fleet health rollup combining 'networks + device status/product rollup'. This clearly distinguishes it from point tools like device_status, org_device_statuses, and network_traffic, which cover narrower slices.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly says 'Call this first to triage a Meraki organization before drilling into a specific network or device,' giving a clear ordering and context. It stops short of naming the specific alternative tools (e.g. device_status, network_get) or stating when not to use it, so it lands at 4 rather than 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

reboot_deviceA
Destructive

[WRITE][risk=high] Reboot a device (no safe inverse).

Records the device's prior status for the audit trail; a reboot cannot be
undone, so no undo descriptor is offered. Pass dry_run=True to preview.

Args:
    serial: Device serial to reboot.
    dry_run: If True, preview without rebooting.
    target: Target name from config; omit for the default.
ParametersJSON Schema
NameRequiredDescriptionDefault
serialYes
targetNo
dry_runNo

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true, readOnlyHint=false and idempotentHint=false, so the safety profile is partly covered. The description still adds real value beyond them: it discloses that prior status is captured for the audit trail, that the action is irreversible, and notably that no undo descriptor is offered even though an undo subsystem exists in this toolset. It stops short of describing failure behavior or permissions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the [WRITE][risk=high] tag and the core action, followed by consequences and then args. Every sentence contributes, though the audit-trail sentence is slightly explanatory and could be tightened.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive three-parameter mutation with no output schema, the definition covers irreversibility, dry-run preview, audit behavior, and all parameter meanings. Edge cases such as permission requirements or post-reboot state verification are left unstated.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must carry the parameter burden, and it does: all three parameters are documented, including that target is a config name and that omitting it selects the default. The meanings added go beyond the bare schema titles.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Reboot a device') with an explicit risk marker, so an agent can distinguish it from sibling mutations like update_device or blink_device_leds at a glance. The parenthetical '(no safe inverse)' further sharpens what kind of reboot this is.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides an actionable hint to use dry_run=True to preview, which is genuine usage guidance. However, it never states when to prefer this over sibling tools such as blink_device_leds or update_device, nor when a reboot is inappropriate, so context is only implied.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

remove_device_from_networkA
Destructive

[WRITE][risk=high] Remove device(s) from a network. Inverse: claim back.

The devices' current network is captured for undo, so the undo token is
genuinely applicable — but claiming a device back restores MEMBERSHIP, not
CONFIGURATION. A removed device is reset to an unconfigured state; it
returns with the network's defaults, without the name, tags, address, notes
or switch-port settings it carried before. Read those with device_status /
switch_ports first if you will need them back.

Pass dry_run=True to preview. Accepts a single ``serial`` or a ``serials``
list — the list form is how claim_devices_into_network's undo replays.

Args:
    network_id: Meraki network id the devices are bound to.
    serial: One device serial to remove (or use ``serials``).
    serials: Device serials to remove (mutually exclusive with ``serial``).
    dry_run: If True, preview without removing.
    target: Target name from config; omit for the default.
ParametersJSON Schema
NameRequiredDescriptionDefault
serialNo
targetNo
dry_runNo
serialsNo
network_idYes

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already flag destructiveHint=true, but the description adds the crucial detail the annotation cannot convey: undo restores membership only, and the device returns unconfigured with defaults, losing name, tags, address, notes and switch-port settings. It also discloses the dry_run preview affordance.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with [WRITE][risk=high] and the core action, and the warning about lost configuration appears before the Args block where it matters. The Args section restates dry_run and serial/serials guidance already given in prose, which is mild redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive 5-parameter mutation with no output schema, the description covers what is destroyed, what is preserved, prerequisites, preview mode, and the undo relationship to a sibling tool. Nothing an agent needs to call this safely is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description carries the full burden, and it documents all five parameters including the serial/serials mutual exclusivity and dry_run behavior. The only weak spot is 'target: Target name from config', which is vague about what a target actually selects.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with a specific verb+resource ('Remove device(s) from a network') and immediately distinguishes itself from the sibling claim_devices_into_network by declaring itself its inverse. An agent can route correctly without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly directs the agent to read device_status / switch_ports first when the pre-removal configuration will be needed, explains the undo path and its limitation, and notes dry_run=True as a preview mechanism. This is when-to-use, prerequisite, and safety guidance all in one.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

switch_portsB
Read-only

[READ] Switch (MS) port configuration for a device by serial.

Args:
    serial: MS switch serial.
    target: Target name from config; omit for the default.
ParametersJSON Schema
NameRequiredDescriptionDefault
serialYes
targetNo

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

readOnlyHint=true already declares the safety profile, so the '[READ]' prefix is largely redundant with structured data. Beyond that, the description says nothing about what configuration data is returned, whether the serial must belong to a switch, or any permissions/rate-limit considerations. The one genuinely new detail is that omitting target yields the default target.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The purpose is front-loaded in a single sentence followed by a compact Args block; there is no filler. The docstring-style 'Args:' formatting is slightly heavier than a prose sentence would be but not wasteful.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple two-parameter read tool this is nearly adequate, but with no output schema the description leaves the return value entirely unexplained and gives no hint about the shape or size of the port configuration payload. It is minimally viable rather than complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries the full documentation burden, and it does so for both parameters: serial is qualified as an MS switch serial (narrowing the accepted input), and target is explained as a config name with an explicit default fallback. This is meaningful added semantics, though it doesn't state the format or allowed values of a target name.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific resource ('Switch (MS) port configuration') and the keying parameter ('by serial'), and the [READ] tag disambiguates the ambiguous verb 'Switch' as a retrieval rather than a mutation. It does not differentiate itself from siblings such as device_uplinks or network_vlans, which an agent might reasonably confuse it with.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description supplies no when-to-use context, no prerequisites (e.g. that the device must be an MS switch), and no alternative tool to prefer. The only guidance is the parameter-level note to omit target for the default, which is invocation detail rather than usage guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

unbind_network_from_templateA
Destructive

[WRITE][risk=high] Unbind a network from its config template. Inverse: rebind.

Captures the template the network was bound to, so undo rebinds to it. Pass
dry_run=True to preview.

Args:
    network_id: Meraki network id to unbind.
    dry_run: If True, preview without unbinding.
    target: Target name from config; omit for the default.
ParametersJSON Schema
NameRequiredDescriptionDefault
targetNo
dry_runNo
network_idYes

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false and destructiveHint=true, so the write/destructive nature is covered. The description adds genuine value beyond that: the [risk=high] marker, the side effect that it captures the prior template binding for undo, and the dry_run preview affordance. It doesn't describe what happens to the network's config once unbound.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the [WRITE][risk=high] tag and the core purpose, followed by undo semantics and a clean Args block. Every sentence carries information and nothing is redundant.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive, non-idempotent mutation with no output schema and undocumented parameters, the description supplies the risk level, reversibility path (undo rebinding), preview option, and all param meanings. Only the post-condition state of the network is left implicit.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries the full burden, and it documents all three parameters: network_id, dry_run, and target ('Target name from config; omit for the default'). The guidance on omitting target adds meaning the bare schema does not.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource: 'Unbind a network from its config template.' It even names the inverse operation ('rebind') and points at undo behavior, so an agent can distinguish it from bind_network_to_template and the undo_* siblings immediately.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives clear when-to-use context (unbinding, with rebind as the inverse and undo rebinding to the captured template), and flags dry_run for previewing. It stops short of explicitly naming the sibling tools (bind_network_to_template / undo_apply) as the routing alternative, so it is strong but not fully explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

undo_applyA
Destructive

[WRITE][risk=medium] Apply a recorded undo by dispatching its inverse tool.

The inverse runs through its own governed tool, so its real risk tier is
recorded there. Pass dry_run=True to preview the inverse call without
executing it. A token can only be applied once.

Args:
    undo_id: The undoId from undo_list (or an ``_undo_id`` in a write result).
    dry_run: If True, preview the inverse tool + params without running it.
    target: Passed through to the inverse tool when it accepts a target.
ParametersJSON Schema
NameRequiredDescriptionDefault
targetNo
dry_runNo
undo_idYes

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes beyond the annotations by disclosing that the inverse executes through its own governed tool (so the real risk tier lives there), that dry_run previews the inverse tool and params, and that a token is single-use. These are meaningful operational facts; only failure behavior and return shape are left unspecified.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded one-line summary, followed by a tight behavioral paragraph and an Args block that substitutes for the undocumented schema. Slightly longer than strictly necessary for a 3-param tool, but each sentence adds information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists and annotations only carry the safety profile, so the description usefully covers sourcing the token, previewing, and single-use semantics. It stops short of describing what is returned on success or how partial/aborted inverses behave.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries the full burden and does: undo_id is sourced from undo_list or an _undo_id field, dry_run previews the inverse call without executing, and target is passed through only when the inverse tool accepts one.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('Apply a recorded undo by dispatching its inverse tool') and marks the operation class as [WRITE] with risk=medium. It is clearly distinguishable from the read-only sibling undo_list.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly points to undo_list (and _undo_id in write results) as the source of the id, and tells the caller how to preview via dry_run=True. It does not state when *not* to use it or what to do if the token was already consumed, beyond noting a token applies only once.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

undo_listA
Read-only

[READ] List recorded, not-yet-applied undo tokens (most recent first).

Each entry names the original tool, the inverse tool that ``undo_apply``
would run, and a human note. Use the ``undoId`` with ``undo_apply``.

One extra row is fetched so ``truncated`` is **measured**, not guessed from
the returned count happening to equal the limit — a capped list that cannot
say "there is more" invites a weak model to report it as the whole story.

Each entry carries ``effectVerified``. False means the original write
lost its response, so the change it reverses is PROBABLE, not confirmed —
check the live state before applying, and do not report the result as a
restore of a state that may never have been reached.

Args:
    limit: Max rows to return (default 50).
    target: Unused (undo state is host-local); accepted for CLI uniformity.
ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
targetNo

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare readOnlyHint=true; the description adds substantial context beyond that: `truncated` is measured (an extra row is fetched), `effectVerified` flags where the original write lost its response so the reversal is PROBABLE not confirmed, and `target` is accepted but unused. That is genuinely useful behavioral guidance, though it doubles as design rationale rather than pure operator context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core purpose, then the truncated/effectVerified caveats, then a compact Args block. Mostly tight, though the 'measured, not guessed' justification paragraph runs longer than strictly needed for an agent to act on.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, and the description compensates by naming the return fields ('original tool, the inverse tool, a human note', `undoId`, `effectVerified`, `truncated`) and their semantics. For a zero-required-param read tool this is complete enough to call correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description must carry both params — and it does: `limit` ('max rows, default 50') and `target` ('Unused... accepted for CLI uniformity'), the latter saving the agent from trying to use it. Defaults were already in the schema, so it is not fully additive, but the gap is well covered.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Specific verb+resource: 'List recorded, not-yet-applied undo tokens (most recent first)'. The [READ] tag and 'not-yet-applied' scoping distinguish it clearly from the sibling undo_apply, which it explicitly references. An agent can tell the two apart without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

States the follow-on path: 'Use the `undoId` with `undo_apply`', routing the agent to the sibling. It also gives an important conditional: if `effectVerified` is False, check live state before applying. It stops short of explicit when-not-to-use-this (e.g., use undo_apply instead when you already have a token), but context is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_deviceA
Destructive

[WRITE][risk=medium] Update device attributes (name/tags/address/notes).

Captures the changed keys' prior values before the change, so the harness
records an undo (restore the prior values) and a faithful audit trail. Pass
dry_run=True to preview.

Args:
    serial: Device serial.
    attrs: Attributes to set — allowed keys: name, tags, address, notes,
        lat, lng, floorPlanId.
    dry_run: If True, preview without changing.
    target: Target name from config; omit for the default.
ParametersJSON Schema
NameRequiredDescriptionDefault
attrsYes
serialYes
targetNo
dry_runNo

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false and destructiveHint=true, but the description adds substantial behavioral context: it captures prior values of changed keys to record an undo and a faithful audit trail, labels itself [WRITE][risk=medium], and offers a dry_run preview. This goes well beyond what the structured annotations convey.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with [WRITE][risk=medium] and the core operation, then layers in behavioral and parameter details without waste. The Args section is justified because the schema itself has no field descriptions.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a non-idempotent, destructive write tool with a nested attrs object, no output schema, and zero schema description coverage, the description supplies the missing pieces: safety framing, preview path, undo/audit behavior, and all four parameter meanings. Nothing an agent needs to invoke it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate, and it does: it documents serial, attrs with an explicit list of allowed keys (name, tags, address, notes, lat, lng, floorPlanId), dry_run's preview behavior, and target's default behavior. This meaningfully compensates for the undocumented nested object.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 'Update device attributes (name/tags/address/notes).' It is clearly a mutation tool for device attributes, distinct in kind from siblings like reboot_device or device_status, but it never names a sibling alternative to sharpen the boundary.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by the verb and framing, and it does mention 'Pass dry_run=True to preview,' which is operational guidance. However, it never says when to choose this over related siblings such as undo_apply or other update tools, so the guidance remains implicit rather than explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_network_vlanA
Destructive

[WRITE][risk=medium] Update an appliance VLAN, capturing its prior values.

Captures the changed keys' prior values before the change (undo restores
them). Pass dry_run=True to preview.

Args:
    network_id: Meraki network id.
    vlan_id: VLAN id to update.
    attrs: Attributes to set — allowed keys: name, subnet, applianceIp,
        groupPolicyId, dhcpHandling.
    dry_run: If True, preview without changing.
    target: Target name from config; omit for the default.
ParametersJSON Schema
NameRequiredDescriptionDefault
attrsYes
targetNo
dry_runNo
vlan_idYes
network_idYes

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false and destructiveHint=true, so the write/destructive nature is covered structurally. The description adds genuinely new context: it captures changed keys' prior values and that undo restores them (consistent with the sibling undo_list/undo_apply), plus the dry_run preview path. It stops short of describing failure behavior or response shape, but adds real value beyond the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the write/risk tag and the key behavioral fact (prior-value capture + undo), then a clean Args list. Every line is relevant. Minor redundancy between the top-line 'capturing its prior values' and the parenthetical 'undo restores them,' but overall tight.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 5-param mutation with no output schema, the description covers purpose, reversibility, preview, and per-parameter meaning. The only gap is the return value on success/failure, which is not addressed, but with no output schema and strong parameter coverage the definition is largely complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage and a nested free-form attrs object, the description carries the full burden and does: it names all five parameters and critically enumerates the allowed attrs keys (name, subnet, applianceIp, groupPolicyId, dhcpHandling), which the schema does not. This is exactly the compensation needed for an under-documented nested object.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Update an appliance VLAN') and adds a scope/tag marker ([WRITE][risk=medium]) that instantly separates it from read siblings like network_vlans or overview. An agent can identify the operation and its mutation nature without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives actionable invocation guidance — pass dry_run=True to preview, and omit target to use the default — but never states when to choose this over alternatives or any preconditions/exclusions. Usage is implied through the preview hint rather than explicitly framed as when/when-not.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

wireless_ssidsA
Read-only

[READ] Wireless (MR) SSIDs configured on a network (number, name, enabled).

Args:
    network_id: Meraki network id (from network_list).
    target: Target name from config; omit for the default.
ParametersJSON Schema
NameRequiredDescriptionDefault
targetNo
network_idYes

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

readOnlyHint=true already covers the safety profile, and the description is consistent with it via the [READ] tag. It adds the useful fact that the response contains number, name, and enabled, but says nothing about pagination, result size, or auth/permission needs beyond the annotation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded one-line summary followed by a compact Args block; nothing is padded. The 'Target name from config' line is the weakest, since 'config' is never defined, but overall the text is tight and well ordered.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter read-only tool with no output schema, the definition covers both parameters and sketches the return fields. The main gap is that 'target/config' is introduced without explanation, leaving the non-default path ambiguous.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries the full burden and mostly meets it: network_id is identified as a Meraki network id sourced from network_list, and target is explained as a config target that defaults when omitted. The notion of 'target'/'config' is still somewhat opaque, so it falls short of fully compensating.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific resource (Wireless MR SSIDs configured on a network) and enumerates the returned fields (number, name, enabled), with a [READ] marker signalling a list/read verb. It does not name a sibling to differentiate against, but no sibling covers SSIDs, so confusion risk is low.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied: the network_id arg points at network_list as the source, which tells the agent where the id comes from, and the target arg says to omit it for the default. There is no explicit when-to-use versus when-not, and no alternative tool is named.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 3 tool updatesv0.12.0
    • Addedaci_endpoint_trace
    • Addedaci_epg_segment
    • Addedaci_faults_list
  2. 34 tool updatesv0.1.0
    • First observedbind_network_to_template
    • First observedblink_device_leds
    • First observedclaim_devices_into_network
    • First observedclient_connectivity
    • First observedclient_get
    • First observedclient_list
    • First observedclient_usage
    • First observedconfig_template_drift
    • First observeddevice_inventory
    • First observeddevice_status
    • First observeddevice_uplinks
    • First observednetwork_alerts
    • First observednetwork_get
    • First observednetwork_health_score
    • First observednetwork_list
    • First observednetwork_traffic
    • First observednetwork_vlans
    • First observedorg_admins
    • First observedorg_api_requests
    • First observedorg_device_statuses
    • First observedorg_get
    • First observedorg_licensing
    • First observedorg_list
    • First observedoverview
    • First observedreboot_device
    • First observedremove_device_from_network
    • First observedswitch_ports
    • First observedunbind_network_from_template
    • First observedundo_apply
    • First observedundo_list
    • First observedupdate_device
    • First observedupdate_network_vlan
    • First observeduplink_loss_and_latency_rca
    • First observedwireless_ssids

TDQS

A3.6/5.0

Scored across 37 tools

Disambiguation4/5

Most tools target a clearly distinct resource+action (client_get vs client_usage vs client_connectivity, aci_endpoint_trace vs aci_epg_segment, bind/unbind, claim/remove). The main overlap risk is among the health/summary reads — overview, org_device_statuses, device_status, network_health_score, and network_alerts all touch fleet/device health — but descriptions differentiate live rollups from single-entity reads from pure analysis. Only a few boundary pairs could occasionally be confused.

Naming Consistency3/5

All names are snake_case, but conventions are mixed: read tools are noun-first (org_list, network_vlans, client_get, device_uplinks) while write tools are verb-first (reboot_device, update_device, claim_devices_into_network). Within a single prefix the second token also flips between verbs and nouns (org_list/org_get vs org_licensing/org_admins). Readable, but not one predictable pattern.

Tool Count3/5

37 tools is heavy and sits above the comfortable 3-15 band, but the surface spans two distinct platforms (Meraki org/network/device/client/switch/wireless plus ACI fabric), three pure-analysis tools, and a governed write/undo layer, so most tools earn their place. It is borderline-heavy rather than padded.

Completeness4/5

Read coverage is broad and coherent (org, network, device, client, switch, wireless, ACI endpoints/EPGs/faults), writes cover the main remediation actions with undo tokens, and undo_list/undo_apply close the write loop. Gaps are minor: no network create/delete, no VLAN/SSID/switch-port creation or full config write, and ACI is read-only — workable but not full lifecycle.

Maintenance

ActivityActive
ResponsivenessResponsive

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    D
    maintenance
    Provides dynamic access to 400+ Meraki Dashboard API endpoints with intelligent discovery, plus advanced compliance auditing (PCI DSS, HIPAA, SOC2, ISO 27001, NIST), backup/restore operations, and network security analysis. Enables natural language queries to manage Meraki networks without pre-defined tools.
    4
    -
  • A
    license
    B
    quality
    A
    maintenance
    Governed Prometheus + Grafana operations — firing-alert and scrape-target RCA, alert noise/flapping analysis, silences, and dashboards, with unbypassable audit logging (MCP + CLI), budget/runaway guards, dry-run, and undo/rollback.
    39
    MIT
  • A
    license
    A
    quality
    A
    maintenance
    Governed OPNsense + pfSense firewall operations — gateway-health, rule-shadow, and blocked-traffic RCA, with guarded rule/alias writes, unbypassable audit logging (MCP + CLI), budget/runaway guards, dry-run, and undo/rollback.
    35
    1
    MIT
  • A
    license
    A
    quality
    A
    maintenance
    Governed reverse-proxy operations for Traefik, Caddy, and HAProxy — backend-health, cert-expiry, 5xx, and route-conflict RCA, with unbypassable audit logging (MCP + CLI), budget/runaway guards, dry-run, and undo/rollback.
    28
    MIT