{"openapi":"3.1.0","info":{"title":"Meraki Appliances (BYOK) API","version":"0.1.0","description":"Meraki Appliances (BYOK) lets an AI assistant read your own Meraki Appliances data through the Meraki Appliances API with a key you supply (Meraki Dashboard API key (Organization > API & Webhooks)). Read-only: 7 tools (list_uplink_statuses, get_uplink_status_overview, list_vpn_statuses, list_vpn_stats, get_uplink_usage_by_network, list_l3_interfaces, list_intrusion_policy_overviews). The BYOK key...\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://byok-meraki-appliance.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-meraki-appliance/docs"},"termsOfService":"https://connectorbay.com/byok-meraki-appliance/terms"},"servers":[{"url":"https://byok-meraki-appliance.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-meraki-appliance/docs"},"security":[{"upstreamKey":[]}],"components":{"securitySchemes":{"bearer":{"type":"http","scheme":"bearer","description":"Optional. A Pro API key raises rate limits; no credentials are required."},"upstreamKey":{"type":"apiKey","in":"header","name":"X-Upstream-Key","description":"Your own key for the service this connector wraps (bring your own key). Used for that one call only; never stored, logged or cached."}},"schemas":{"Error":{"type":"object","properties":{"ok":{"const":false},"error":{"type":"object"}}}}},"paths":{"/v1/tools/list_uplink_statuses":{"post":{"operationId":"list_uplink_statuses","summary":"List the uplink status of each MX appliance, Z-series teleworker gateway and Secure Router in an organization: model, la","description":"List the uplink status of each MX appliance, Z-series teleworker gateway and Secure Router in an organization: model, last report time, high-availability role and the uplinks with interface, status, IP and provider. Use for \"Which of my Meraki MX appliances have a failed WAN uplink\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"organization_id":{"description":"Organization id from the Meraki organizations list, for example '549236'.","maxLength":40,"title":"Organization Id","type":"string"},"per_page":{"anyOf":[{"maximum":1000,"minimum":3,"type":"integer"},{"type":"null"}],"default":100,"description":"How many entries to return, 3 to 1000. Only the first page is returned unless starting_after is given.","title":"Per Page"},"starting_after":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Paging token: the value the previous page ended with (an id, serial or timestamp). Leave empty for the first page.","title":"Starting After"},"network_id":{"anyOf":[{"maxLength":60,"type":"string"},{"type":"null"}],"default":null,"description":"Only appliances of this network id.","title":"Network Id"},"serial":{"anyOf":[{"maxLength":40,"type":"string"},{"type":"null"}],"default":null,"description":"Only appliances of the device with this serial, for example 'Q2XX-XXXX-XXXX'.","title":"Serial"}},"required":["organization_id"],"title":"list_uplink_statusesArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_uplink_status_overview":{"post":{"operationId":"get_uplink_status_overview","summary":"Count the MX uplinks of an organization by status: active, ready, failed, connecting and not connected. Use for \"How man","description":"Count the MX uplinks of an organization by status: active, ready, failed, connecting and not connected. Use for \"How many Meraki MX uplinks are active versus failed\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"organization_id":{"description":"Organization id from the Meraki organizations list, for example '549236'.","maxLength":40,"title":"Organization Id","type":"string"},"network_id":{"anyOf":[{"maxLength":60,"type":"string"},{"type":"null"}],"default":null,"description":"Only uplinks of this network id.","title":"Network Id"}},"required":["organization_id"],"title":"get_uplink_status_overviewArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_vpn_statuses":{"post":{"operationId":"list_vpn_statuses","summary":"Show the site-to-site VPN status per network: appliance serial and status, VPN mode, uplinks, exported subnets and the M","description":"Show the site-to-site VPN status per network: appliance serial and status, VPN mode, uplinks, exported subnets and the Meraki and third-party VPN peers with reachability. Use for \"Which of my Meraki site-to-site VPN tunnels are unreachable\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"organization_id":{"description":"Organization id from the Meraki organizations list, for example '549236'.","maxLength":40,"title":"Organization Id","type":"string"},"per_page":{"anyOf":[{"maximum":300,"minimum":3,"type":"integer"},{"type":"null"}],"default":50,"description":"How many entries to return, 3 to 300. Only the first page is returned unless starting_after is given.","title":"Per Page"},"starting_after":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Paging token: the value the previous page ended with (an id, serial or timestamp). Leave empty for the first page.","title":"Starting After"},"network_id":{"anyOf":[{"maxLength":60,"type":"string"},{"type":"null"}],"default":null,"description":"Only VPN status of this network id.","title":"Network Id"}},"required":["organization_id"],"title":"list_vpn_statusesArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_vpn_stats":{"post":{"operationId":"list_vpn_stats","summary":"Show VPN history statistics per network over a period: for each Meraki VPN peer the loss, latency, jitter and mean opini","description":"Show VPN history statistics per network over a period: for each Meraki VPN peer the loss, latency, jitter and mean opinion score per uplink pair. Use for \"How was the latency of my Meraki VPN tunnels over the last day\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"organization_id":{"description":"Organization id from the Meraki organizations list, for example '549236'.","maxLength":40,"title":"Organization Id","type":"string"},"per_page":{"anyOf":[{"maximum":300,"minimum":3,"type":"integer"},{"type":"null"}],"default":50,"description":"How many entries to return, 3 to 300. Only the first page is returned unless starting_after is given.","title":"Per Page"},"starting_after":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Paging token: the value the previous page ended with (an id, serial or timestamp). Leave empty for the first page.","title":"Starting After"},"network_id":{"anyOf":[{"maxLength":60,"type":"string"},{"type":"null"}],"default":null,"description":"Only VPN statistics of this network id.","title":"Network Id"},"t0":{"anyOf":[{"maxLength":40,"type":"string"},{"type":"null"}],"default":null,"description":"Start of the time window as ISO 8601, for example 2026-10-01T00:00:00Z.","title":"T0"},"t1":{"anyOf":[{"maxLength":40,"type":"string"},{"type":"null"}],"default":null,"description":"End of the time window as ISO 8601.","title":"T1"},"timespan":{"anyOf":[{"maximum":31622400,"minimum":1,"type":"number"},{"type":"null"}],"default":null,"description":"Window length in seconds; use instead of t0 and t1.","title":"Timespan"}},"required":["organization_id"],"title":"list_vpn_statsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_uplink_usage_by_network":{"post":{"operationId":"get_uplink_usage_by_network","summary":"Get the bytes sent and received on each MX or Z-series uplink per network over a period. Use for \"How much data did each","description":"Get the bytes sent and received on each MX or Z-series uplink per network over a period. Use for \"How much data did each Meraki network send over its WAN uplinks last week\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"organization_id":{"description":"Organization id from the Meraki organizations list, for example '549236'.","maxLength":40,"title":"Organization Id","type":"string"},"t0":{"anyOf":[{"maxLength":40,"type":"string"},{"type":"null"}],"default":null,"description":"Start of the time window as ISO 8601, for example 2026-10-01T00:00:00Z.","title":"T0"},"t1":{"anyOf":[{"maxLength":40,"type":"string"},{"type":"null"}],"default":null,"description":"End of the time window as ISO 8601.","title":"T1"},"timespan":{"anyOf":[{"maximum":31622400,"minimum":1,"type":"number"},{"type":"null"}],"default":null,"description":"Window length in seconds; use instead of t0 and t1.","title":"Timespan"}},"required":["organization_id"],"title":"get_uplink_usage_by_networkArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_l3_interfaces":{"post":{"operationId":"list_l3_interfaces","summary":"List the layer 3 interfaces configured on MX appliances across networks of an organization: interface id, IPv4 settings,","description":"List the layer 3 interfaces configured on MX appliances across networks of an organization: interface id, IPv4 settings, network and port. Use for \"What L3 interfaces do my Meraki MX appliances have\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"organization_id":{"description":"Organization id from the Meraki organizations list, for example '549236'.","maxLength":40,"title":"Organization Id","type":"string"},"per_page":{"anyOf":[{"maximum":1000,"minimum":3,"type":"integer"},{"type":"null"}],"default":100,"description":"How many entries to return, 3 to 1000. Only the first page is returned unless starting_after is given.","title":"Per Page"},"starting_after":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Paging token: the value the previous page ended with (an id, serial or timestamp). Leave empty for the first page.","title":"Starting After"},"network_id":{"anyOf":[{"maxLength":60,"type":"string"},{"type":"null"}],"default":null,"description":"Only interfaces of this network id.","title":"Network Id"}},"required":["organization_id"],"title":"list_l3_interfacesArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_intrusion_policy_overviews":{"post":{"operationId":"list_intrusion_policy_overviews","summary":"List the intrusion prevention and base policies of an organization with the counts of networks and rules that use each. ","description":"List the intrusion prevention and base policies of an organization with the counts of networks and rules that use each. Use for \"Which intrusion prevention policies exist in my Meraki organization\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"organization_id":{"description":"Organization id from the Meraki organizations list, for example '549236'.","maxLength":40,"title":"Organization Id","type":"string"},"per_page":{"anyOf":[{"maximum":100,"minimum":3,"type":"integer"},{"type":"null"}],"default":25,"description":"How many entries to return, 3 to 100. Only the first page is returned unless starting_after is given.","title":"Per Page"},"starting_after":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Paging token: the value the previous page ended with (an id, serial or timestamp). Leave empty for the first page.","title":"Starting After"},"search":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Only policies whose name contains this text.","title":"Search"}},"required":["organization_id"],"title":"list_intrusion_policy_overviewsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}}}}