Skip to main content
Glama

endpoint_show

Read-onlyIdempotent

Show Port OS devices with their supported controls.

To show a device, always call this tool: the widget it opens is the device's UI, so never render a second card, map or controls for it; answer in a sentence or two.

Uses the same selection, expansion and pagination arguments as endpoint_query. A single matching device opens its full view with now playing, transport, volume and other controls; several matches open only a list of names to choose from, so pass one full endpoint ID (or a query matching one device) to control a device. Showing a device does not start live video or send a control command.

Pass primary to choose which card leads, one of the device's card ids (every result lists them as cardIds; an unknown id is rejected with the available ones). The device's usual card and every other card stay behind the details toggle. Examples: "what's the battery on the vacuum" -> primary battery; "turn the thermostat fan on" -> primary fan; "how open are the blinds" -> primary closure; "show me the camera on the roborock" -> primary camera. "where is my phone" or "show its location" -> primary location; "show the roborock's map" or "pick a room to clean" -> primary house-map. Every result already includes the cached readings of the cards it lists (cardIds), so you can answer without a second call; pass expand to choose different capabilities. primary refreshes that card's readings from the device, so the answer is current. Always state the value in words: a FRESH reading is current; a STALE reading is the last known value, so say it is last known and give its age.

Input Schema

NameRequiredDescriptionDefault
queryNoOptional field-first filter. Omit it to load full context; filter only when the account is large. Each key is a field or a combinator, and all keys of one object must match: {"name": {"like": "living"}, "type": {"in": ["LIGHT", "SWITCH"]}}. Combinators: {"and": [query, ...]}, {"or": [query, ...]}, {"not": query}. Text operators: eq (exact), in (any of a list), like (case-insensitive substring), lt and gt (lexical order). List operators: has (contains the exact value), like (some value contains the substring, case-insensitive). Fields: id (text) full endpoint ID; name (text) endpoint name; type (text) effective endpoint type, including customer overrides, such as LIGHT, SWITCH, PLUG or ROBOT_VACUUM; manufacturer (text) manufacturer name; model (text) model name; ownerId (text, eq only at the top level) principal whose endpoints to list; defaults to the caller; interfaces (list) full capability interface namespaces; messages (list) full message IDs the endpoint accepts; controllableGroups (list) IDs of groups the endpoint can act on, such as rooms a vacuum can clean (needs group:read).
expandNoSelect observations to add to each device result, for example ["power", "connectivity"] or ["battery"]. Use capability names or full namespaces declared by the device. This reads attributes; it does not send commands or broaden the device search. Short names use port1/systems/zero/capability-interfaces. endpoint_show already includes cached readings for the cards it lists; expand replaces that selection.
primaryNoThe card to lead with, one of the device's card ids (shown as cardIds in the result), for example battery, fan, closure, thermostat, camera or remote; house-map for a vacuum's map or room picking (never draw your own map). Needs endpointId. Every other card stays behind the details toggle.
nextTokenNoOpaque cursor returned by a previous endpoint_query call.
enablementNoFilter by ENABLED (default), DISABLED, or * for both. This filter is preserved by pagination.ENABLED
endpointIdNoReturn one endpoint by its full Port OS identifier. Cannot be combined with other filters or pagination. Results advertise its declared command and outbound message IDs.
maxResultsNoMaximum number of results (default 10, maximum 100).
forceDeviceAttributeQueryNoRead selected attributes from devices instead of cache. Requires nonempty expand. Failed reads remain unavailable.

Output Schema

NameRequiredDescriptionDefault

No arguments

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • changedOutput schema / oneOf
      Previous value: -[
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "paginationContext": {
      -        "properties": {
      -          "nextToken": {
      -            "type": "string"
      -          }
      -        },
      -        "required": [
      -          "nextToken"
      -        ],
      -        "type": "object"
      -      },
      -      "primary": {
      -        "description": "The card endpoint_show was asked to lead with. Present only when the call set primary.",
      -        "type": "string"
      -      },
      -      "results": {
      -        "items": {
      -          "properties": {
      -            "cardIds": {
      -              "description": "Card ids the device can show as its primary card in endpoint_show. Present only on endpoint_show results.",
      -              "items": {
      -                "type": "string"
      -              },
      -              "type": "array"
      -            },
      -            "childEndpointIds": {
      -              "items": {
      -                "type": "string"
      -              },
      -              "type": "array"
      -            },
      -            "controllableGroups": {
      -              "items": {
      -                "properties": {
      -                  "geometry": {
      -                    "description": "The room outline from the group's stored spatial geometry (cached, never a provider read). Present on every single-endpoint read (endpoint_show or endpoint_query with endpointId), never on lists, and only for rooms whose geometry is usable; rooms without it stay listed. Rooms sharing a frameId are one map. Tiny speckle and excess detail are dropped to keep the result bounded.",
      -                    "properties": {
      -                      "coordinateSystem": {
      -                        "description": "The spatial capability's declared axes. Drawing must flip y when yAxis is UP.",
      -                        "properties": {
      -                          "unit": {
      -                            "type": "string"
      -                          },
      -                          "xAxis": {
      -                            "type": "string"
      -                          },
      -                          "yAxis": {
      -                            "type": "string"
      -                          }
      -                        },
      -                        "type": "object"
      -                      },
      -                      "frameId": {
      -                        "description": "The group route the coordinates are relative to; rooms of one map share it.",
      -                        "type": "string"
      -                      },
      -                      "shape": {
      -                        "properties": {
      -                          "coordinates": {
      -                            "description": "Polygons, each a list of rings of [x, y] points; the first ring is the outline, the others are holes.",
      -                            "items": {},
      -                            "type": "array"
      -                          },
      -                          "type": {
      -                            "enum": [
      -                              "MultiPolygon"
      -                            ],
      -                            "type": "string"
      -                          }
      -                        },
      -                        "required": [
      -                          "type",
      -                          "coordinates"
      -                        ],
      -                        "type": "object"
      -                      }
      -                    },
      -                    "required": [
      -                      "shape"
      -                    ],
      -                    "type": "object"
      -                  },
      -                  "groupId": {
      -                    "type": "string"
      -                  },
      -                  "messages": {
      -                    "items": {
      -                      "type": "string"
      -                    },
      -                    "type": "array"
      -                  },
      -                  "name": {
      -                    "type": "string"
      -                  },
      -                  "parentPath": {
      -                    "items": {
      -                      "properties": {
      -                        "groupId": {
      -                          "type": "string"
      -                        },
      -                        "name": {
      -                          "type": "string"
      -                        },
      -                        "role": {
      -                          "type": "string"
      -                        }
      -                      },
      -                      "required": [
      -                        "groupId",
      -                        "name"
      -                      ],
      -                      "type": "object"
      -                    },
      -                    "type": "array"
      -                  }
      -                },
      -                "required": [
      -                  "groupId",
      -                  "name",
      -                  "parentPath",
      -                  "messages"
      -                ],
      -                "type": "object"
      -              },
      -              "type": "array"
      -            },
      -            "description": {
      -              "properties": {
      -                "type": {
      -                  "type": "string"
      -                },
      -                "value": {
      -                  "type": "string"
      -                }
      -              },
      -              "required": [
      -                "type",
      -                "value"
      -              ],
      -              "type": "object"
      -            },
      -            "enablement": {
      -              "enum": [
      -                "ENABLED",
      -                "DISABLED"
      -              ],
      -              "type": "string"
      -            },
      -            "id": {
      -              "type": "string"
      -            },
      -            "interfaces": {
      -              "items": {
      -                "properties": {
      -                  "attributes": {
      -                    "items": {
      -                      "oneOf": [
      -                        {
      -                          "additionalProperties": false,
      -                          "properties": {
      -                            "name": {
      -                              "type": "string"
      -                            }
      -                          },
      -                          "required": [
      -                            "name"
      -                          ],
      -                          "type": "object"
      -                        },
      -                        {
      -                          "additionalProperties": false,
      -                          "properties": {
      -                            "autoUpdateFrequency": {
      -                              "description": "Declared frequency at which the serving route automatically updates this attribute.",
      -                              "enum": [
      -                                "REALTIME",
      -                                "MINUTES",
      -                                "HOURLY",
      -                                "DAILY",
      -                                "NEVER"
      -                              ],
      -                              "type": "string"
      -                            },
      -                            "error": {
      -                              "description": "The one Port OS error shape, returned by every REST error response and every MCP tool error. `code` names the specific failure and `family` its broad class; both are closed enums, so clients branch on them and show `message`, which says what failed and what to do next.",
      -                              "properties": {
      -                                "code": {
      -                                  "description": "The specific error, one of a closed set of Port OS codes. Every REST error body, MCP tool error, batch item error and discovery item error uses this enum; each code belongs to an `ErrorFamily` that decides its HTTP status. Provider-specific codes are never codes: they travel in `details.providerCode`. New failure kinds are added here, never as free strings.",
      -                                  "enum": [
      -                                    "BAD_REQUEST",
      -                                    "UNAUTHORIZED",
      -                                    "FORBIDDEN",
      -                                    "INSUFFICIENT_SCOPE",
      -                                    "NOT_FOUND",
      -                                    "CONFLICT",
      -                                    "UNPROCESSABLE_ENTITY",
      -                                    "UNSUPPORTED_OPERATION",
      -                                    "TOO_MANY_REQUESTS",
      -                                    "SERVICE_UNAVAILABLE",
      -                                    "NOT_IMPLEMENTED",
      -                                    "INTERNAL",
      -                                    "CHECKSUM_MISMATCH",
      -                                    "FILE_TOO_LARGE",
      -                                    "STORAGE_UNAVAILABLE",
      -                                    "INSUFFICIENT_PERMISSIONS",
      -                                    "INVALID_FILE_TYPE",
      -                                    "QUOTA_EXCEEDED",
      -                                    "CONCURRENT_MODIFICATION",
      -                                    "ENDPOINT_UNREACHABLE",
      -                                    "BRIDGE_UNREACHABLE",
      -                                    "CLOUD_CONTROL_DISABLED",
      -                                    "ENDPOINT_BUSY",
      -                                    "ENDPOINT_LOW_POWER",
      -                                    "AUTHORIZATION_CREDENTIAL_INVALID",
      -                                    "AUTHORIZATION_CREDENTIAL_EXPIRED",
      -                                    "INVALID_DIRECTIVE",
      -                                    "INVALID_VALUE",
      -                                    "VALUE_OUT_OF_RANGE",
      -                                    "NOT_SUPPORTED_IN_CURRENT_MODE",
      -                                    "RATE_LIMIT_EXCEEDED",
      -                                    "PROVIDER_SERVICE_UNAVAILABLE",
      -                                    "PROVIDER_TIMEOUT",
      -                                    "PROVIDER_INTERNAL_ERROR",
      -                                    "INVALID_PROVIDER_RESPONSE",
      -                                    "OUTCOME_UNKNOWN",
      -                                    "PRECONDITION_FAILED",
      -                                    "AUTH_LINK_NOT_READY",
      -                                    "AUTH_LINK_NOT_DISCONNECTABLE",
      -                                    "PRECONDITION_REQUIRED",
      -                                    "IDEMPOTENCY_KEY_REQUIRED",
      -                                    "IDEMPOTENCY_KEY_REUSED",
      -                                    "IDEMPOTENCY_KEY_IN_FLIGHT",
      -                                    "IDEMPOTENCY_KEY_INVALID",
      -                                    "GROUP_MERGED",
      -                                    "MULTI_ROOM_UNSUPPORTED",
      -                                    "MAP_NOT_ACTIVE",
      -                                    "TARGET_UNSUPPORTED",
      -                                    "TARGET_AMBIGUOUS",
      -                                    "TARGET_GROUP_NOT_FOUND",
      -                                    "TARGET_GROUP_DISABLED",
      -                                    "DUPLICATE_TARGET_GROUP",
      -                                    "MESSAGE_UNSUPPORTED",
      -                                    "MESSAGE_AMBIGUOUS",
      -                                    "ENDPOINT_DISABLED",
      -                                    "ENDPOINT_ROUTE_CHANGED",
      -                                    "ENDPOINT_HAS_DEPENDENCIES",
      -                                    "ENDPOINT_EVENT_SUBSCRIPTIONS_ACTIVE",
      -                                    "ENDPOINT_COMMITTED_CLEANUP_PENDING",
      -                                    "DEEP_QUERY_FAILED",
      -                                    "PROVIDER_NO_STATE",
      -                                    "EVENT_MANAGEMENT_DISABLED",
      -                                    "SUBSCRIPTION_IDENTITY_IMMUTABLE",
      -                                    "UNSUPPORTED_MEDIA_TYPE",
      -                                    "EVENT_PAYLOAD_TOO_LARGE",
      -                                    "REQUEST_BODY_TOO_LARGE",
      -                                    "EVENT_IDENTITY_CONFLICT",
      -                                    "EVENT_INGRESS_QUOTA_EXCEEDED",
      -                                    "EVENT_RECEIPT_EXPIRED",
      -                                    "EVENT_STORAGE_UNAVAILABLE",
      -                                    "EVENT_DEAD_LETTER_NOT_FOUND",
      -                                    "EVENT_REDRIVE_CONFLICT",
      -                                    "EVENT_REDRIVE_EXPIRED",
      -                                    "RECEIPT_CONTEXT_EXPIRED",
      -                                    "EVENT_MAINTENANCE_INCOMPLETE",
      -                                    "UNKNOWN_INTERFACE",
      -                                    "INVALID_CONFIGURATION",
      -                                    "INVALID_PLUGIN_MANIFEST",
      -                                    "INVALID_ATTRIBUTE",
      -                                    "INVALID_PROVIDER_MESSAGE",
      -                                    "UNDECLARED_CAPABILITY",
      -                                    "PLUGIN_ROUTE_ID_CONFLICT",
      -                                    "UNRESOLVED_REFERENCE",
      -                                    "INVALID_RELATIONSHIP",
      -                                    "RELATIONSHIP_CYCLE",
      -                                    "MULTIPLE_PARENTS",
      -                                    "FLOW_VALIDATION_FAILED",
      -                                    "PROVIDER_SYNC_UNSUPPORTED"
      -                                  ],
      -                                  "type": "string"
      -                                },
      -                                "details": {
      -                                  "description": "Optional typed context for an error. Fields are additive and only populated when the error can safely expose that context to API clients.\n",
      -                                  "properties": {
      -                                    "actual": {
      -                                      "description": "String representation of the submitted value when the plugin can safely report it.",
      -                                      "type": "string"
      -                                    },
      -                                    "correlationId": {
      -                                      "description": "Provider or plugin correlation ID useful for support.",
      -                                      "type": "string"
      -                                    },
      -                                    "correlationToken": {
      -                                      "description": "Token that correlates an outcome-unknown dispatch with its eventual result.",
      -                                      "type": "string"
      -                                    },
      -                                    "currentMode": {
      -                                      "description": "Current endpoint mode when `code` is `NOT_SUPPORTED_IN_CURRENT_MODE`.",
      -                                      "type": "string"
      -                                    },
      -                                    "directive": {
      -                                      "description": "Message namespace and name or provider directive that failed.",
      -                                      "type": "string"
      -                                    },
      -                                    "discoveryEndpointId": {
      -                                      "description": "Port OS provider endpoint (type ENDPOINT_PLUGIN) of the connection to send `discover-routes` to when `code` is `TARGET_UNSUPPORTED` because the route must be rediscovered.",
      -                                      "type": "string"
      -                                    },
      -                                    "endpointId": {
      -                                      "description": "Port OS endpoint ID involved in the failed dispatch.",
      -                                      "type": "string"
      -                                    },
      -                                    "fieldErrors": {
      -                                      "description": "The request fields that were rejected, when the error is about the request's content.",
      -                                      "items": {
      -                                        "description": "One rejected request field of an error.",
      -                                        "properties": {
      -                                          "field": {
      -                                            "description": "Name or JSON path of the rejected field.",
      -                                            "type": "string"
      -                                          },
      -                                          "reason": {
      -                                            "description": "Why the field was rejected and what an accepted value looks like.",
      -                                            "type": "string"
      -                                          }
      -                                        },
      -                                        "required": [
      -                                          "field",
      -                                          "reason"
      -                                        ],
      -                                        "type": "object"
      -                                      },
      -                                      "type": "array"
      -                                    },
      -                                    "maximum": {
      -                                      "description": "Maximum accepted value when `code` is `VALUE_OUT_OF_RANGE`.",
      -                                      "type": "number"
      -                                    },
      -                                    "minimum": {
      -                                      "description": "Minimum accepted value when `code` is `VALUE_OUT_OF_RANGE`.",
      -                                      "type": "number"
      -                                    },
      -                                    "parameter": {
      -                                      "description": "Request parameter or capability value that caused the failure.",
      -                                      "type": "string"
      -                                    },
      -                                    "pluginId": {
      -                                      "description": "Port OS plugin ID that reported the failure.",
      -                                      "type": "string"
      -                                    },
      -                                    "pluginRouteId": {
      -                                      "description": "Plugin-owned route identifier involved in the failed dispatch.",
      -                                      "type": "string"
      -                                    },
      -                                    "provider": {
      -                                      "description": "Third-party provider or bridge name that reported the failure.",
      -                                      "type": "string"
      -                                    },
      -                                    "providerCode": {
      -                                      "description": "The third-party provider's own error code, for support. It is opaque and provider-specific; branch on `code` and `family` instead.",
      -                                      "type": "string"
      -                                    },
      -                                    "retryAfterSeconds": {
      -                                      "description": "Suggested retry delay for rate-limit or provider-unavailable failures.",
      -                                      "minimum": 0,
      -                                      "type": "integer"
      -                                    }
      -                                  },
      -                                  "type": "object"
      -                                },
      -                                "errors": {
      -                                  "description": "Every rejected item when a request that is validated item by item and applied atomically fails, such as a discovery `SynchronizationRequest` whose routes, group routes or relationships are rejected. Omitted for single-item failures.\n",
      -                                  "items": {
      -                                    "description": "One rejected discovery item of a `SynchronizationRequest`, keyed by the plugin-owned identity of the rejected item: `pluginRouteId` for a route or group route, or `relationshipExternalId` for a relationship. Exactly one of the two is set. It shares the `code`, `family`, `status` and `message` fields of `BatchItemError`; discovery items are keyed by plugin-owned identity because they carry no `requestId`. A request with any rejected item is rejected as a whole and lists every rejected item.\n",
      -                                    "properties": {
      -                                      "code": {
      -                                        "description": "The specific error, one of a closed set of Port OS codes. Every REST error body, MCP tool error, batch item error and discovery item error uses this enum; each code belongs to an `ErrorFamily` that decides its HTTP status. Provider-specific codes are never codes: they travel in `details.providerCode`. New failure kinds are added here, never as free strings.",
      -                                        "enum": [
      -                                          "BAD_REQUEST",
      -                                          "UNAUTHORIZED",
      -                                          "FORBIDDEN",
      -                                          "INSUFFICIENT_SCOPE",
      -                                          "NOT_FOUND",
      -                                          "CONFLICT",
      -                                          "UNPROCESSABLE_ENTITY",
      -                                          "UNSUPPORTED_OPERATION",
      -                                          "TOO_MANY_REQUESTS",
      -                                          "SERVICE_UNAVAILABLE",
      -                                          "NOT_IMPLEMENTED",
      -                                          "INTERNAL",
      -                                          "CHECKSUM_MISMATCH",
      -                                          "FILE_TOO_LARGE",
      -                                          "STORAGE_UNAVAILABLE",
      -                                          "INSUFFICIENT_PERMISSIONS",
      -                                          "INVALID_FILE_TYPE",
      -                                          "QUOTA_EXCEEDED",
      -                                          "CONCURRENT_MODIFICATION",
      -                                          "ENDPOINT_UNREACHABLE",
      -                                          "BRIDGE_UNREACHABLE",
      -                                          "CLOUD_CONTROL_DISABLED",
      -                                          "ENDPOINT_BUSY",
      -                                          "ENDPOINT_LOW_POWER",
      -                                          "AUTHORIZATION_CREDENTIAL_INVALID",
      -                                          "AUTHORIZATION_CREDENTIAL_EXPIRED",
      -                                          "INVALID_DIRECTIVE",
      -                                          "INVALID_VALUE",
      -                                          "VALUE_OUT_OF_RANGE",
      -                                          "NOT_SUPPORTED_IN_CURRENT_MODE",
      -                                          "RATE_LIMIT_EXCEEDED",
      -                                          "PROVIDER_SERVICE_UNAVAILABLE",
      -                                          "PROVIDER_TIMEOUT",
      -                                          "PROVIDER_INTERNAL_ERROR",
      -                                          "INVALID_PROVIDER_RESPONSE",
      -                                          "OUTCOME_UNKNOWN",
      -                                          "PRECONDITION_FAILED",
      -                                          "AUTH_LINK_NOT_READY",
      -                                          "AUTH_LINK_NOT_DISCONNECTABLE",
      -                                          "PRECONDITION_REQUIRED",
      -                                          "IDEMPOTENCY_KEY_REQUIRED",
      -                                          "IDEMPOTENCY_KEY_REUSED",
      -                                          "IDEMPOTENCY_KEY_IN_FLIGHT",
      -                                          "IDEMPOTENCY_KEY_INVALID",
      -                                          "GROUP_MERGED",
      -                                          "MULTI_ROOM_UNSUPPORTED",
      -                                          "MAP_NOT_ACTIVE",
      -                                          "TARGET_UNSUPPORTED",
      -                                          "TARGET_AMBIGUOUS",
      -                                          "TARGET_GROUP_NOT_FOUND",
      -                                          "TARGET_GROUP_DISABLED",
      -                                          "DUPLICATE_TARGET_GROUP",
      -                                          "MESSAGE_UNSUPPORTED",
      -                                          "MESSAGE_AMBIGUOUS",
      -                                          "ENDPOINT_DISABLED",
      -                                          "ENDPOINT_ROUTE_CHANGED",
      -                                          "ENDPOINT_HAS_DEPENDENCIES",
      -                                          "ENDPOINT_EVENT_SUBSCRIPTIONS_ACTIVE",
      -                                          "ENDPOINT_COMMITTED_CLEANUP_PENDING",
      -                                          "DEEP_QUERY_FAILED",
      -                                          "PROVIDER_NO_STATE",
      -                                          "EVENT_MANAGEMENT_DISABLED",
      -                                          "SUBSCRIPTION_IDENTITY_IMMUTABLE",
      -                                          "UNSUPPORTED_MEDIA_TYPE",
      -                                          "EVENT_PAYLOAD_TOO_LARGE",
      -                                          "REQUEST_BODY_TOO_LARGE",
      -                                          "EVENT_IDENTITY_CONFLICT",
      -                                          "EVENT_INGRESS_QUOTA_EXCEEDED",
      -                                          "EVENT_RECEIPT_EXPIRED",
      -                                          "EVENT_STORAGE_UNAVAILABLE",
      -                                          "EVENT_DEAD_LETTER_NOT_FOUND",
      -                                          "EVENT_REDRIVE_CONFLICT",
      -                                          "EVENT_REDRIVE_EXPIRED",
      -                                          "RECEIPT_CONTEXT_EXPIRED",
      -                                          "EVENT_MAINTENANCE_INCOMPLETE",
      -                                          "UNKNOWN_INTERFACE",
      -                                          "INVALID_CONFIGURATION",
      -                                          "INVALID_PLUGIN_MANIFEST",
      -                                          "INVALID_ATTRIBUTE",
      -                                          "INVALID_PROVIDER_MESSAGE",
      -                                          "UNDECLARED_CAPABILITY",
      -                                          "PLUGIN_ROUTE_ID_CONFLICT",
      -                                          "UNRESOLVED_REFERENCE",
      -                                          "INVALID_RELATIONSHIP",
      -                                          "RELATIONSHIP_CYCLE",
      -                                          "MULTIPLE_PARENTS",
      -                                          "FLOW_VALIDATION_FAILED",
      -                                          "PROVIDER_SYNC_UNSUPPORTED"
      -                                        ],
      -                                        "type": "string"
      -                                      },
      -                                      "family": {
      -                                        "description": "The broad class of an error. The family decides the HTTP status of a REST error, so clients can handle every code of a family alike.",
      -                                        "enum": [
      -                                          "NOT_FOUND",
      -                                          "BAD_REQUEST",
      -                                          "UNAUTHORIZED",
      -                                          "FORBIDDEN",
      -                                          "CONFLICT",
      -                                          "GONE",
      -                                          "PRECONDITION_FAILED",
      -                                          "PRECONDITION_REQUIRED",
      -                                          "PAYLOAD_TOO_LARGE",
      -                                          "UNSUPPORTED_MEDIA_TYPE",
      -                                          "UNPROCESSABLE_ENTITY",
      -                                          "LOCKED",
      -                                          "TOO_MANY_REQUESTS",
      -                                          "BAD_GATEWAY",
      -                                          "SERVICE_UNAVAILABLE",
      -                                          "GATEWAY_TIMEOUT",
      -                                          "NOT_IMPLEMENTED",
      -                                          "INTERNAL_SERVER_ERROR",
      -                                          "REQUEST_INVALID",
      -                                          "AUTHENTICATION",
      -                                          "PERMISSION",
      -                                          "ENDPOINT_NOT_FOUND",
      -                                          "ENDPOINT_STATE_CONFLICT",
      -                                          "ENDPOINT_UNAVAILABLE",
      -                                          "RATE_LIMIT",
      -                                          "PROVIDER_BAD_RESPONSE",
      -                                          "PROVIDER_UNAVAILABLE",
      -                                          "PROVIDER_TIMEOUT"
      -                                        ],
      -                                        "type": "string"
      -                                      },
      -                                      "interface": {
      -                                        "description": "Canonical capability interface name the failure applies to, when the failure is interface-specific.",
      -                                        "type": "string"
      -                                      },
      -                                      "message": {
      -                                        "description": "Plain-language description of the failure and the suggested fix.",
      -                                        "type": "string"
      -                                      },
      -                                      "pluginRouteId": {
      -                                        "description": "Plugin-owned identifier of the rejected route or group route. Set unless the item is a relationship.",
      -                                        "type": "string"
      -                                      },
      -                                      "relationshipExternalId": {
      -                                        "description": "Plugin-owned `externalId` of the rejected relationship. Set only for relationship items.",
      -                                        "type": "string"
      -                                      },
      -                                      "status": {
      -                                        "description": "HTTP-equivalent status code of the item failure.",
      -                                        "maximum": 599,
      -                                        "minimum": 400,
      -                                        "type": "integer"
      -                                      },
      -                                      "version": {
      -                                        "description": "Declared capability interface version the failure applies to, when the failure is interface-specific.",
      -                                        "type": "string"
      -                                      }
      -                                    },
      -                                    "required": [
      -                                      "code",
      -                                      "family",
      -                                      "status",
      -                                      "message"
      -                                    ],
      -                                    "type": "object"
      -                                  },
      -                                  "type": "array"
      -                                },
      -                                "family": {
      -                                  "description": "The broad class of an error. The family decides the HTTP status of a REST error, so clients can handle every code of a family alike.",
      -                                  "enum": [
      -                                    "NOT_FOUND",
      -                                    "BAD_REQUEST",
      -                                    "UNAUTHORIZED",
      -                                    "FORBIDDEN",
      -                                    "CONFLICT",
      -                                    "GONE",
      -                                    "PRECONDITION_FAILED",
      -                                    "PRECONDITION_REQUIRED",
      -                                    "PAYLOAD_TOO_LARGE",
      -                                    "UNSUPPORTED_MEDIA_TYPE",
      -                                    "UNPROCESSABLE_ENTITY",
      -                                    "LOCKED",
      -                                    "TOO_MANY_REQUESTS",
      -                                    "BAD_GATEWAY",
      -                                    "SERVICE_UNAVAILABLE",
      -                                    "GATEWAY_TIMEOUT",
      -                                    "NOT_IMPLEMENTED",
      -                                    "INTERNAL_SERVER_ERROR",
      -                                    "REQUEST_INVALID",
      -                                    "AUTHENTICATION",
      -                                    "PERMISSION",
      -                                    "ENDPOINT_NOT_FOUND",
      -                                    "ENDPOINT_STATE_CONFLICT",
      -                                    "ENDPOINT_UNAVAILABLE",
      -                                    "RATE_LIMIT",
      -                                    "PROVIDER_BAD_RESPONSE",
      -                                    "PROVIDER_UNAVAILABLE",
      -                                    "PROVIDER_TIMEOUT"
      -                                  ],
      -                                  "type": "string"
      -                                },
      -                                "message": {
      -                                  "description": "Plain-language description of the failure and the suggested next action.",
      -                                  "type": "string"
      -                                }
      -                              },
      -                              "required": [
      -                                "family",
      -                                "code",
      -                                "message"
      -                              ],
      -                              "type": "object"
      -                            },
      -                            "freshness": {
      -                              "description": "Whether the value is current enough to present as the device's present state.\n\n`FRESH`: the provider reported a sample within the last 30 seconds, or a\nforced refresh (`forceDeviceAttributeQuery=true` or `forceDeviceQuery`) read the\nprovider during this request and the provider reported no sample time.\n\n`STALE`: the value is older than 30 seconds, came from stored state, or is a\nprovider's own last known value. A forced refresh cannot make a provider's old\nsample newer: when the provider (for example a thermostat reached through a\nvoice-assistant account) answers with the sample it already holds, the value\nkeeps its original `sampledAt` and is `STALE`. Report the value together with\n`sampledAt`, never as the present reading.\n",
      -                              "enum": [
      -                                "FRESH",
      -                                "STALE"
      -                              ],
      -                              "type": "string"
      -                            },
      -                            "name": {
      -                              "type": "string"
      -                            },
      -                            "retrievability": {
      -                              "description": "Whether the serving route supports retrieving this attribute.",
      -                              "enum": [
      -                                "RETRIEVABLE",
      -                                "NOT_RETRIEVABLE"
      -                              ],
      -                              "type": "string"
      -                            },
      -                            "sampledAt": {
      -                              "format": "date-time",
      -                              "type": "string"
      -                            },
      -                            "value": {
      -                              "additionalProperties": true,
      -                              "type": "object"
      -                            }
      -                          },
      -                          "required": [
      -                            "name",
      -                            "retrievability",
      -                            "autoUpdateFrequency"
      -                          ],
      -                          "type": "object"
      -                        }
      -                      ]
      -                    },
      -                    "type": "array"
      -                  },
      -                  "configuration": {
      -                    "type": "object"
      -                  },
      -                  "messages": {
      -                    "items": {
      -                      "properties": {
      -                        "id": {
      -                          "type": "string"
      -                        },
      -                        "name": {
      -                          "type": "string"
      -                        }
      -                      },
      -                      "required": [
      -                        "id",
      -                        "name"
      -                      ],
      -                      "type": "object"
      -                    },
      -                    "type": "array"
      -                  },
      -                  "name": {
      -                    "type": "string"
      -                  },
      -                  "outboundMessages": {
      -                    "description": "Declared outbound message types, including results and events. Not every command returns a correlated result. These IDs cannot be sent as commands.",
      -                    "items": {
      -                      "properties": {
      -                        "id": {
      -                          "type": "string"
      -                        },
      -                        "name": {
      -                          "type": "string"
      -                        }
      -                      },
      -                      "required": [
      -                        "id",
      -                        "name"
      -                      ],
      -                      "type": "object"
      -                    },
      -                    "type": "array"
      -                  },
      -                  "version": {
      -                    "type": "string"
      -                  }
      -                },
      -                "required": [
      -                  "name",
      -                  "version",
      -                  "messages",
      -                  "attributes"
      -                ],
      -                "type": "object"
      -              },
      -              "type": "array"
      -            },
      -            "manufacturer": {
      -              "properties": {
      -                "type": {
      -                  "type": "string"
      -                },
      -                "value": {
      -                  "type": "string"
      -                }
      -              },
      -              "required": [
      -                "type",
      -                "value"
      -              ],
      -              "type": "object"
      -            },
      -            "model": {
      -              "properties": {
      -                "type": {
      -                  "type": "string"
      -                },
      -                "value": {
      -                  "type": "string"
      -                }
      -              },
      -              "required": [
      -                "type",
      -                "value"
      -              ],
      -              "type": "object"
      -            },
      -            "name": {
      -              "properties": {
      -                "type": {
      -                  "type": "string"
      -                },
      -                "value": {
      -                  "type": "string"
      -                }
      -              },
      -              "required": [
      -                "type",
      -                "value"
      -              ],
      -              "type": "object"
      -            },
      -            "parentEndpointId": {
      -              "type": "string"
      -            },
      -            "routes": {
      -              "items": {
      -                "properties": {
      -                  "id": {
      -                    "type": "string"
      -                  },
      -                  "interfaces": {
      -                    "items": {
      -                      "properties": {
      -                        "attributes": {
      -                          "items": {
      -                            "oneOf": [
      -                              {
      -                                "additionalProperties": false,
      -                                "properties": {
      -                                  "name": {
      -                                    "type": "string"
      -                                  }
      -                                },
      -                                "required": [
      -                                  "name"
      -                                ],
      -                                "type": "object"
      -                              },
      -                              {
      -                                "additionalProperties": false,
      -                                "properties": {
      -                                  "autoUpdateFrequency": {
      -                                    "description": "Declared frequency at which the serving route automatically updates this attribute.",
      -                                    "enum": [
      -                                      "REALTIME",
      -                                      "MINUTES",
      -                                      "HOURLY",
      -                                      "DAILY",
      -                                      "NEVER"
      -                                    ],
      -                                    "type": "string"
      -                                  },
      -                                  "error": {
      -                                    "description": "The one Port OS error shape, returned by every REST error response and every MCP tool error. `code` names the specific failure and `family` its broad class; both are closed enums, so clients branch on them and show `message`, which says what failed and what to do next.",
      -                                    "properties": {
      -                                      "code": {
      -                                        "description": "The specific error, one of a closed set of Port OS codes. Every REST error body, MCP tool error, batch item error and discovery item error uses this enum; each code belongs to an `ErrorFamily` that decides its HTTP status. Provider-specific codes are never codes: they travel in `details.providerCode`. New failure kinds are added here, never as free strings.",
      -                                        "enum": [
      -                                          "BAD_REQUEST",
      -                                          "UNAUTHORIZED",
      -                                          "FORBIDDEN",
      -                                          "INSUFFICIENT_SCOPE",
      -                                          "NOT_FOUND",
      -                                          "CONFLICT",
      -                                          "UNPROCESSABLE_ENTITY",
      -                                          "UNSUPPORTED_OPERATION",
      -                                          "TOO_MANY_REQUESTS",
      -                                          "SERVICE_UNAVAILABLE",
      -                                          "NOT_IMPLEMENTED",
      -                                          "INTERNAL",
      -                                          "CHECKSUM_MISMATCH",
      -                                          "FILE_TOO_LARGE",
      -                                          "STORAGE_UNAVAILABLE",
      -                                          "INSUFFICIENT_PERMISSIONS",
      -                                          "INVALID_FILE_TYPE",
      -                                          "QUOTA_EXCEEDED",
      -                                          "CONCURRENT_MODIFICATION",
      -                                          "ENDPOINT_UNREACHABLE",
      -                                          "BRIDGE_UNREACHABLE",
      -                                          "CLOUD_CONTROL_DISABLED",
      -                                          "ENDPOINT_BUSY",
      -                                          "ENDPOINT_LOW_POWER",
      -                                          "AUTHORIZATION_CREDENTIAL_INVALID",
      -                                          "AUTHORIZATION_CREDENTIAL_EXPIRED",
      -                                          "INVALID_DIRECTIVE",
      -                                          "INVALID_VALUE",
      -                                          "VALUE_OUT_OF_RANGE",
      -                                          "NOT_SUPPORTED_IN_CURRENT_MODE",
      -                                          "RATE_LIMIT_EXCEEDED",
      -                                          "PROVIDER_SERVICE_UNAVAILABLE",
      -                                          "PROVIDER_TIMEOUT",
      -                                          "PROVIDER_INTERNAL_ERROR",
      -                                          "INVALID_PROVIDER_RESPONSE",
      -                                          "OUTCOME_UNKNOWN",
      -                                          "PRECONDITION_FAILED",
      -                                          "AUTH_LINK_NOT_READY",
      -                                          "AUTH_LINK_NOT_DISCONNECTABLE",
      -                                          "PRECONDITION_REQUIRED",
      -                                          "IDEMPOTENCY_KEY_REQUIRED",
      -                                          "IDEMPOTENCY_KEY_REUSED",
      -                                          "IDEMPOTENCY_KEY_IN_FLIGHT",
      -                                          "IDEMPOTENCY_KEY_INVALID",
      -                                          "GROUP_MERGED",
      -                                          "MULTI_ROOM_UNSUPPORTED",
      -                                          "MAP_NOT_ACTIVE",
      -                                          "TARGET_UNSUPPORTED",
      -                                          "TARGET_AMBIGUOUS",
      -                                          "TARGET_GROUP_NOT_FOUND",
      -                                          "TARGET_GROUP_DISABLED",
      -                                          "DUPLICATE_TARGET_GROUP",
      -                                          "MESSAGE_UNSUPPORTED",
      -                                          "MESSAGE_AMBIGUOUS",
      -                                          "ENDPOINT_DISABLED",
      -                                          "ENDPOINT_ROUTE_CHANGED",
      -                                          "ENDPOINT_HAS_DEPENDENCIES",
      -                                          "ENDPOINT_EVENT_SUBSCRIPTIONS_ACTIVE",
      -                                          "ENDPOINT_COMMITTED_CLEANUP_PENDING",
      -                                          "DEEP_QUERY_FAILED",
      -                                          "PROVIDER_NO_STATE",
      -                                          "EVENT_MANAGEMENT_DISABLED",
      -                                          "SUBSCRIPTION_IDENTITY_IMMUTABLE",
      -                                          "UNSUPPORTED_MEDIA_TYPE",
      -                                          "EVENT_PAYLOAD_TOO_LARGE",
      -                                          "REQUEST_BODY_TOO_LARGE",
      -                                          "EVENT_IDENTITY_CONFLICT",
      -                                          "EVENT_INGRESS_QUOTA_EXCEEDED",
      -                                          "EVENT_RECEIPT_EXPIRED",
      -                                          "EVENT_STORAGE_UNAVAILABLE",
      -                                          "EVENT_DEAD_LETTER_NOT_FOUND",
      -                                          "EVENT_REDRIVE_CONFLICT",
      -                                          "EVENT_REDRIVE_EXPIRED",
      -                                          "RECEIPT_CONTEXT_EXPIRED",
      -                                          "EVENT_MAINTENANCE_INCOMPLETE",
      -                                          "UNKNOWN_INTERFACE",
      -                                          "INVALID_CONFIGURATION",
      -                                          "INVALID_PLUGIN_MANIFEST",
      -                                          "INVALID_ATTRIBUTE",
      -                                          "INVALID_PROVIDER_MESSAGE",
      -                                          "UNDECLARED_CAPABILITY",
      -                                          "PLUGIN_ROUTE_ID_CONFLICT",
      -                                          "UNRESOLVED_REFERENCE",
      -                                          "INVALID_RELATIONSHIP",
      -                                          "RELATIONSHIP_CYCLE",
      -                                          "MULTIPLE_PARENTS",
      -                                          "FLOW_VALIDATION_FAILED",
      -                                          "PROVIDER_SYNC_UNSUPPORTED"
      -                                        ],
      -                                        "type": "string"
      -                                      },
      -                                      "details": {
      -                                        "description": "Optional typed context for an error. Fields are additive and only populated when the error can safely expose that context to API clients.\n",
      -                                        "properties": {
      -                                          "actual": {
      -                                            "description": "String representation of the submitted value when the plugin can safely report it.",
      -                                            "type": "string"
      -                                          },
      -                                          "correlationId": {
      -                                            "description": "Provider or plugin correlation ID useful for support.",
      -                                            "type": "string"
      -                                          },
      -                                          "correlationToken": {
      -                                            "description": "Token that correlates an outcome-unknown dispatch with its eventual result.",
      -                                            "type": "string"
      -                                          },
      -                                          "currentMode": {
      -                                            "description": "Current endpoint mode when `code` is `NOT_SUPPORTED_IN_CURRENT_MODE`.",
      -                                            "type": "string"
      -                                          },
      -                                          "directive": {
      -                                            "description": "Message namespace and name or provider directive that failed.",
      -                                            "type": "string"
      -                                          },
      -                                          "discoveryEndpointId": {
      -                                            "description": "Port OS provider endpoint (type ENDPOINT_PLUGIN) of the connection to send `discover-routes` to when `code` is `TARGET_UNSUPPORTED` because the route must be rediscovered.",
      -                                            "type": "string"
      -                                          },
      -                                          "endpointId": {
      -                                            "description": "Port OS endpoint ID involved in the failed dispatch.",
      -                                            "type": "string"
      -                                          },
      -                                          "fieldErrors": {
      -                                            "description": "The request fields that were rejected, when the error is about the request's content.",
      -                                            "items": {
      -                                              "description": "One rejected request field of an error.",
      -                                              "properties": {
      -                                                "field": {
      -                                                  "description": "Name or JSON path of the rejected field.",
      -                                                  "type": "string"
      -                                                },
      -                                                "reason": {
      -                                                  "description": "Why the field was rejected and what an accepted value looks like.",
      -                                                  "type": "string"
      -                                                }
      -                                              },
      -                                              "required": [
      -                                                "field",
      -                                                "reason"
      -                                              ],
      -                                              "type": "object"
      -                                            },
      -                                            "type": "array"
      -                                          },
      -                                          "maximum": {
      -                                            "description": "Maximum accepted value when `code` is `VALUE_OUT_OF_RANGE`.",
      -                                            "type": "number"
      -                                          },
      -                                          "minimum": {
      -                                            "description": "Minimum accepted value when `code` is `VALUE_OUT_OF_RANGE`.",
      -                                            "type": "number"
      -                                          },
      -                                          "parameter": {
      -                                            "description": "Request parameter or capability value that caused the failure.",
      -                                            "type": "string"
      -                                          },
      -                                          "pluginId": {
      -                                            "description": "Port OS plugin ID that reported the failure.",
      -                                            "type": "string"
      -                                          },
      -                                          "pluginRouteId": {
      -                                            "description": "Plugin-owned route identifier involved in the failed dispatch.",
      -                                            "type": "string"
      -                                          },
      -                                          "provider": {
      -                                            "description": "Third-party provider or bridge name that reported the failure.",
      -                                            "type": "string"
      -                                          },
      -                                          "providerCode": {
      -                                            "description": "The third-party provider's own error code, for support. It is opaque and provider-specific; branch on `code` and `family` instead.",
      -                                            "type": "string"
      -                                          },
      -                                          "retryAfterSeconds": {
      -                                            "description": "Suggested retry delay for rate-limit or provider-unavailable failures.",
      -                                            "minimum": 0,
      -                                            "type": "integer"
      -                                          }
      -                                        },
      -                                        "type": "object"
      -                                      },
      -                                      "errors": {
      -                                        "description": "Every rejected item when a request that is validated item by item and applied atomically fails, such as a discovery `SynchronizationRequest` whose routes, group routes or relationships are rejected. Omitted for single-item failures.\n",
      -                                        "items": {
      -                                          "description": "One rejected discovery item of a `SynchronizationRequest`, keyed by the plugin-owned identity of the rejected item: `pluginRouteId` for a route or group route, or `relationshipExternalId` for a relationship. Exactly one of the two is set. It shares the `code`, `family`, `status` and `message` fields of `BatchItemError`; discovery items are keyed by plugin-owned identity because they carry no `requestId`. A request with any rejected item is rejected as a whole and lists every rejected item.\n",
      -                                          "properties": {
      -                                            "code": {
      -                                              "description": "The specific error, one of a closed set of Port OS codes. Every REST error body, MCP tool error, batch item error and discovery item error uses this enum; each code belongs to an `ErrorFamily` that decides its HTTP status. Provider-specific codes are never codes: they travel in `details.providerCode`. New failure kinds are added here, never as free strings.",
      -                                              "enum": [
      -                                                "BAD_REQUEST",
      -                                                "UNAUTHORIZED",
      -                                                "FORBIDDEN",
      -                                                "INSUFFICIENT_SCOPE",
      -                                                "NOT_FOUND",
      -                                                "CONFLICT",
      -                                                "UNPROCESSABLE_ENTITY",
      -                                                "UNSUPPORTED_OPERATION",
      -                                                "TOO_MANY_REQUESTS",
      -                                                "SERVICE_UNAVAILABLE",
      -                                                "NOT_IMPLEMENTED",
      -                                                "INTERNAL",
      -                                                "CHECKSUM_MISMATCH",
      -                                                "FILE_TOO_LARGE",
      -                                                "STORAGE_UNAVAILABLE",
      -                                                "INSUFFICIENT_PERMISSIONS",
      -                                                "INVALID_FILE_TYPE",
      -                                                "QUOTA_EXCEEDED",
      -                                                "CONCURRENT_MODIFICATION",
      -                                                "ENDPOINT_UNREACHABLE",
      -                                                "BRIDGE_UNREACHABLE",
      -                                                "CLOUD_CONTROL_DISABLED",
      -                                                "ENDPOINT_BUSY",
      -                                                "ENDPOINT_LOW_POWER",
      -                                                "AUTHORIZATION_CREDENTIAL_INVALID",
      -                                                "AUTHORIZATION_CREDENTIAL_EXPIRED",
      -                                                "INVALID_DIRECTIVE",
      -                                                "INVALID_VALUE",
      -                                                "VALUE_OUT_OF_RANGE",
      -                                                "NOT_SUPPORTED_IN_CURRENT_MODE",
      -                                                "RATE_LIMIT_EXCEEDED",
      -                                                "PROVIDER_SERVICE_UNAVAILABLE",
      -                                                "PROVIDER_TIMEOUT",
      -                                                "PROVIDER_INTERNAL_ERROR",
      -                                                "INVALID_PROVIDER_RESPONSE",
      -                                                "OUTCOME_UNKNOWN",
      -                                                "PRECONDITION_FAILED",
      -                                                "AUTH_LINK_NOT_READY",
      -                                                "AUTH_LINK_NOT_DISCONNECTABLE",
      -                                                "PRECONDITION_REQUIRED",
      -                                                "IDEMPOTENCY_KEY_REQUIRED",
      -                                                "IDEMPOTENCY_KEY_REUSED",
      -                                                "IDEMPOTENCY_KEY_IN_FLIGHT",
      -                                                "IDEMPOTENCY_KEY_INVALID",
      -                                                "GROUP_MERGED",
      -                                                "MULTI_ROOM_UNSUPPORTED",
      -                                                "MAP_NOT_ACTIVE",
      -                                                "TARGET_UNSUPPORTED",
      -                                                "TARGET_AMBIGUOUS",
      -                                                "TARGET_GROUP_NOT_FOUND",
      -                                                "TARGET_GROUP_DISABLED",
      -                                                "DUPLICATE_TARGET_GROUP",
      -                                                "MESSAGE_UNSUPPORTED",
      -                                                "MESSAGE_AMBIGUOUS",
      -                                                "ENDPOINT_DISABLED",
      -                                                "ENDPOINT_ROUTE_CHANGED",
      -                                                "ENDPOINT_HAS_DEPENDENCIES",
      -                                                "ENDPOINT_EVENT_SUBSCRIPTIONS_ACTIVE",
      -                                                "ENDPOINT_COMMITTED_CLEANUP_PENDING",
      -                                                "DEEP_QUERY_FAILED",
      -                                                "PROVIDER_NO_STATE",
      -                                                "EVENT_MANAGEMENT_DISABLED",
      -                                                "SUBSCRIPTION_IDENTITY_IMMUTABLE",
      -                                                "UNSUPPORTED_MEDIA_TYPE",
      -                                                "EVENT_PAYLOAD_TOO_LARGE",
      -                                                "REQUEST_BODY_TOO_LARGE",
      -                                                "EVENT_IDENTITY_CONFLICT",
      -                                                "EVENT_INGRESS_QUOTA_EXCEEDED",
      -                                                "EVENT_RECEIPT_EXPIRED",
      -                                                "EVENT_STORAGE_UNAVAILABLE",
      -                                                "EVENT_DEAD_LETTER_NOT_FOUND",
      -                                                "EVENT_REDRIVE_CONFLICT",
      -                                                "EVENT_REDRIVE_EXPIRED",
      -                                                "RECEIPT_CONTEXT_EXPIRED",
      -                                                "EVENT_MAINTENANCE_INCOMPLETE",
      -                                                "UNKNOWN_INTERFACE",
      -                                                "INVALID_CONFIGURATION",
      -                                                "INVALID_PLUGIN_MANIFEST",
      -                                                "INVALID_ATTRIBUTE",
      -                                                "INVALID_PROVIDER_MESSAGE",
      -                                                "UNDECLARED_CAPABILITY",
      -                                                "PLUGIN_ROUTE_ID_CONFLICT",
      -                                                "UNRESOLVED_REFERENCE",
      -                                                "INVALID_RELATIONSHIP",
      -                                                "RELATIONSHIP_CYCLE",
      -                                                "MULTIPLE_PARENTS",
      -                                                "FLOW_VALIDATION_FAILED",
      -                                                "PROVIDER_SYNC_UNSUPPORTED"
      -                                              ],
      -                                              "type": "string"
      -                                            },
      -                                            "family": {
      -                                              "description": "The broad class of an error. The family decides the HTTP status of a REST error, so clients can handle every code of a family alike.",
      -                                              "enum": [
      -                                                "NOT_FOUND",
      -                                                "BAD_REQUEST",
      -                                                "UNAUTHORIZED",
      -                                                "FORBIDDEN",
      -                                                "CONFLICT",
      -                                                "GONE",
      -                                                "PRECONDITION_FAILED",
      -                                                "PRECONDITION_REQUIRED",
      -                                                "PAYLOAD_TOO_LARGE",
      -                                                "UNSUPPORTED_MEDIA_TYPE",
      -                                                "UNPROCESSABLE_ENTITY",
      -                                                "LOCKED",
      -                                                "TOO_MANY_REQUESTS",
      -                                                "BAD_GATEWAY",
      -                                                "SERVICE_UNAVAILABLE",
      -                                                "GATEWAY_TIMEOUT",
      -                                                "NOT_IMPLEMENTED",
      -                                                "INTERNAL_SERVER_ERROR",
      -                                                "REQUEST_INVALID",
      -                                                "AUTHENTICATION",
      -                                                "PERMISSION",
      -                                                "ENDPOINT_NOT_FOUND",
      -                                                "ENDPOINT_STATE_CONFLICT",
      -                                                "ENDPOINT_UNAVAILABLE",
      -                                                "RATE_LIMIT",
      -                                                "PROVIDER_BAD_RESPONSE",
      -                                                "PROVIDER_UNAVAILABLE",
      -                                                "PROVIDER_TIMEOUT"
      -                                              ],
      -                                              "type": "string"
      -                                            },
      -                                            "interface": {
      -                                              "description": "Canonical capability interface name the failure applies to, when the failure is interface-specific.",
      -                                              "type": "string"
      -                                            },
      -                                            "message": {
      -                                              "description": "Plain-language description of the failure and the suggested fix.",
      -                                              "type": "string"
      -                                            },
      -                                            "pluginRouteId": {
      -                                              "description": "Plugin-owned identifier of the rejected route or group route. Set unless the item is a relationship.",
      -                                              "type": "string"
      -                                            },
      -                                            "relationshipExternalId": {
      -                                              "description": "Plugin-owned `externalId` of the rejected relationship. Set only for relationship items.",
      -                                              "type": "string"
      -                                            },
      -                                            "status": {
      -                                              "description": "HTTP-equivalent status code of the item failure.",
      -                                              "maximum": 599,
      -                                              "minimum": 400,
      -                                              "type": "integer"
      -                                            },
      -                                            "version": {
      -                                              "description": "Declared capability interface version the failure applies to, when the failure is interface-specific.",
      -                                              "type": "string"
      -                                            }
      -                                          },
      -                                          "required": [
      -                                            "code",
      -                                            "family",
      -                                            "status",
      -                                            "message"
      -                                          ],
      -                                          "type": "object"
      -                                        },
      -                                        "type": "array"
      -                                      },
      -                                      "family": {
      -                                        "description": "The broad class of an error. The family decides the HTTP status of a REST error, so clients can handle every code of a family alike.",
      -                                        "enum": [
      -                                          "NOT_FOUND",
      -                                          "BAD_REQUEST",
      -                                          "UNAUTHORIZED",
      -                                          "FORBIDDEN",
      -                                          "CONFLICT",
      -                                          "GONE",
      -                                          "PRECONDITION_FAILED",
      -                                          "PRECONDITION_REQUIRED",
      -                                          "PAYLOAD_TOO_LARGE",
      -                                          "UNSUPPORTED_MEDIA_TYPE",
      -                                          "UNPROCESSABLE_ENTITY",
      -                                          "LOCKED",
      -                                          "TOO_MANY_REQUESTS",
      -                                          "BAD_GATEWAY",
      -                                          "SERVICE_UNAVAILABLE",
      -                                          "GATEWAY_TIMEOUT",
      -                                          "NOT_IMPLEMENTED",
      -                                          "INTERNAL_SERVER_ERROR",
      -                                          "REQUEST_INVALID",
      -                                          "AUTHENTICATION",
      -                                          "PERMISSION",
      -                                          "ENDPOINT_NOT_FOUND",
      -                                          "ENDPOINT_STATE_CONFLICT",
      -                                          "ENDPOINT_UNAVAILABLE",
      -                                          "RATE_LIMIT",
      -                                          "PROVIDER_BAD_RESPONSE",
      -                                          "PROVIDER_UNAVAILABLE",
      -                                          "PROVIDER_TIMEOUT"
      -                                        ],
      -                                        "type": "string"
      -                                      },
      -                                      "message": {
      -                                        "description": "Plain-language description of the failure and the suggested next action.",
      -                                        "type": "string"
      -                                      }
      -                                    },
      -                                    "required": [
      -                                      "family",
      -                                      "code",
      -                                      "message"
      -                                    ],
      -                                    "type": "object"
      -                                  },
      -                                  "freshness": {
      -                                    "description": "Whether the value is current enough to present as the device's present state.\n\n`FRESH`: the provider reported a sample within the last 30 seconds, or a\nforced refresh (`forceDeviceAttributeQuery=true` or `forceDeviceQuery`) read the\nprovider during this request and the provider reported no sample time.\n\n`STALE`: the value is older than 30 seconds, came from stored state, or is a\nprovider's own last known value. A forced refresh cannot make a provider's old\nsample newer: when the provider (for example a thermostat reached through a\nvoice-assistant account) answers with the sample it already holds, the value\nkeeps its original `sampledAt` and is `STALE`. Report the value together with\n`sampledAt`, never as the present reading.\n",
      -                                    "enum": [
      -                                      "FRESH",
      -                                      "STALE"
      -                                    ],
      -                                    "type": "string"
      -                                  },
      -                                  "name": {
      -                                    "type": "string"
      -                                  },
      -                                  "retrievability": {
      -                                    "description": "Whether the serving route supports retrieving this attribute.",
      -                                    "enum": [
      -                                      "RETRIEVABLE",
      -                                      "NOT_RETRIEVABLE"
      -                                    ],
      -                                    "type": "string"
      -                                  },
      -                                  "sampledAt": {
      -                                    "format": "date-time",
      -                                    "type": "string"
      -                                  },
      -                                  "value": {
      -                                    "additionalProperties": true,
      -                                    "type": "object"
      -                                  }
      -                                },
      -                                "required": [
      -                                  "name",
      -                                  "retrievability",
      -                                  "autoUpdateFrequency"
      -                                ],
      -                                "type": "object"
      -                              }
      -                            ]
      -                          },
      -                          "type": "array"
      -                        },
      -                        "configuration": {
      -                          "type": "object"
      -                        },
      -                        "messages": {
      -                          "items": {
      -                            "properties": {
      -                              "id": {
      -                                "type": "string"
      -                              },
      -                              "name": {
      -                                "type": "string"
      -                              }
      -                            },
      -                            "required": [
      -                              "id",
      -                              "name"
      -                            ],
      -                            "type": "object"
      -                          },
      -                          "type": "array"
      -                        },
      -                        "name": {
      -                          "type": "string"
      -                        },
      -                        "outboundMessages": {
      -                          "description": "Declared outbound message types, including results and events. Not every command returns a correlated result. These IDs cannot be sent as commands.",
      -                          "items": {
      -                            "properties": {
      -                              "id": {
      -                                "type": "string"
      -                              },
      -                              "name": {
      -                                "type": "string"
      -                              }
      -                            },
      -                            "required": [
      -                              "id",
      -                              "name"
      -                            ],
      -                            "type": "object"
      -                          },
      -                          "type": "array"
      -                        },
      -                        "version": {
      -                          "type": "string"
      -                        }
      -                      },
      -                      "required": [
      -                        "name",
      -                        "version",
      -                        "messages",
      -                        "attributes"
      -                      ],
      -                      "type": "object"
      -                    },
      -                    "type": "array"
      -                  },
      -                  "name": {
      -                    "type": "string"
      -                  },
      -                  "providerId": {
      -                    "type": "string"
      -                  },
      -                  "providerName": {
      -                    "type": "string"
      -                  }
      -                },
      -                "required": [
      -                  "id",
      -                  "providerId",
      -                  "providerName",
      -                  "interfaces"
      -                ],
      -                "type": "object"
      -              },
      -              "type": "array"
      -            },
      -            "serialNumber": {
      -              "properties": {
      -                "type": {
      -                  "type": "string"
      -                },
      -                "value": {
      -                  "type": "string"
      -                }
      -              },
      -              "required": [
      -                "type",
      -                "value"
      -              ],
      -              "type": "object"
      -            },
      -            "type": {
      -              "type": "string"
      -            }
      -          },
      -          "required": [
      -            "id",
      -            "name",
      -            "type",
      -            "enablement",
      -            "interfaces"
      -          ],
      -          "type": "object"
      -        },
      -        "type": "array"
      -      }
      -    },
      -    "required": [
      -      "results"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "description": "The one Port OS error shape, returned by every REST error response and every MCP tool error. `code` names the specific failure and `family` its broad class; both are closed enums, so clients branch on them and show `message`, which says what failed and what to do next.",
      -    "properties": {
      -      "code": {
      -        "description": "The specific error, one of a closed set of Port OS codes. Every REST error body, MCP tool error, batch item error and discovery item error uses this enum; each code belongs to an `ErrorFamily` that decides its HTTP status. Provider-specific codes are never codes: they travel in `details.providerCode`. New failure kinds are added here, never as free strings.",
      -        "enum": [
      -          "BAD_REQUEST",
      -          "UNAUTHORIZED",
      -          "FORBIDDEN",
      -          "INSUFFICIENT_SCOPE",
      -          "NOT_FOUND",
      -          "CONFLICT",
      -          "UNPROCESSABLE_ENTITY",
      -          "UNSUPPORTED_OPERATION",
      -          "TOO_MANY_REQUESTS",
      -          "SERVICE_UNAVAILABLE",
      -          "NOT_IMPLEMENTED",
      -          "INTERNAL",
      -          "CHECKSUM_MISMATCH",
      -          "FILE_TOO_LARGE",
      -          "STORAGE_UNAVAILABLE",
      -          "INSUFFICIENT_PERMISSIONS",
      -          "INVALID_FILE_TYPE",
      -          "QUOTA_EXCEEDED",
      -          "CONCURRENT_MODIFICATION",
      -          "ENDPOINT_UNREACHABLE",
      -          "BRIDGE_UNREACHABLE",
      -          "CLOUD_CONTROL_DISABLED",
      -          "ENDPOINT_BUSY",
      -          "ENDPOINT_LOW_POWER",
      -          "AUTHORIZATION_CREDENTIAL_INVALID",
      -          "AUTHORIZATION_CREDENTIAL_EXPIRED",
      -          "INVALID_DIRECTIVE",
      -          "INVALID_VALUE",
      -          "VALUE_OUT_OF_RANGE",
      -          "NOT_SUPPORTED_IN_CURRENT_MODE",
      -          "RATE_LIMIT_EXCEEDED",
      -          "PROVIDER_SERVICE_UNAVAILABLE",
      -          "PROVIDER_TIMEOUT",
      -          "PROVIDER_INTERNAL_ERROR",
      -          "INVALID_PROVIDER_RESPONSE",
      -          "OUTCOME_UNKNOWN",
      -          "PRECONDITION_FAILED",
      -          "AUTH_LINK_NOT_READY",
      -          "AUTH_LINK_NOT_DISCONNECTABLE",
      -          "PRECONDITION_REQUIRED",
      -          "IDEMPOTENCY_KEY_REQUIRED",
      -          "IDEMPOTENCY_KEY_REUSED",
      -          "IDEMPOTENCY_KEY_IN_FLIGHT",
      -          "IDEMPOTENCY_KEY_INVALID",
      -          "GROUP_MERGED",
      -          "MULTI_ROOM_UNSUPPORTED",
      -          "MAP_NOT_ACTIVE",
      -          "TARGET_UNSUPPORTED",
      -          "TARGET_AMBIGUOUS",
      -          "TARGET_GROUP_NOT_FOUND",
      -          "TARGET_GROUP_DISABLED",
      -          "DUPLICATE_TARGET_GROUP",
      -          "MESSAGE_UNSUPPORTED",
      -          "MESSAGE_AMBIGUOUS",
      -          "ENDPOINT_DISABLED",
      -          "ENDPOINT_ROUTE_CHANGED",
      -          "ENDPOINT_HAS_DEPENDENCIES",
      -          "ENDPOINT_EVENT_SUBSCRIPTIONS_ACTIVE",
      -          "ENDPOINT_COMMITTED_CLEANUP_PENDING",
      -          "DEEP_QUERY_FAILED",
      -          "PROVIDER_NO_STATE",
      -          "EVENT_MANAGEMENT_DISABLED",
      -          "SUBSCRIPTION_IDENTITY_IMMUTABLE",
      -          "UNSUPPORTED_MEDIA_TYPE",
      -          "EVENT_PAYLOAD_TOO_LARGE",
      -          "REQUEST_BODY_TOO_LARGE",
      -          "EVENT_IDENTITY_CONFLICT",
      -          "EVENT_INGRESS_QUOTA_EXCEEDED",
      -          "EVENT_RECEIPT_EXPIRED",
      -          "EVENT_STORAGE_UNAVAILABLE",
      -          "EVENT_DEAD_LETTER_NOT_FOUND",
      -          "EVENT_REDRIVE_CONFLICT",
      -          "EVENT_REDRIVE_EXPIRED",
      -          "RECEIPT_CONTEXT_EXPIRED",
      -          "EVENT_MAINTENANCE_INCOMPLETE",
      -          "UNKNOWN_INTERFACE",
      -          "INVALID_CONFIGURATION",
      -          "INVALID_PLUGIN_MANIFEST",
      -          "INVALID_ATTRIBUTE",
      -          "INVALID_PROVIDER_MESSAGE",
      -          "UNDECLARED_CAPABILITY",
      -          "PLUGIN_ROUTE_ID_CONFLICT",
      -          "UNRESOLVED_REFERENCE",
      -          "INVALID_RELATIONSHIP",
      -          "RELATIONSHIP_CYCLE",
      -          "MULTIPLE_PARENTS",
      -          "FLOW_VALIDATION_FAILED",
      -          "PROVIDER_SYNC_UNSUPPORTED"
      -        ],
      -        "type": "string"
      -      },
      -      "details": {
      -        "description": "Optional typed context for an error. Fields are additive and only populated when the error can safely expose that context to API clients.\n",
      -        "properties": {
      -          "actual": {
      -            "description": "String representation of the submitted value when the plugin can safely report it.",
      -            "type": "string"
      -          },
      -          "correlationId": {
      -            "description": "Provider or plugin correlation ID useful for support.",
      -            "type": "string"
      -          },
      -          "correlationToken": {
      -            "description": "Token that correlates an outcome-unknown dispatch with its eventual result.",
      -            "type": "string"
      -          },
      -          "currentMode": {
      -            "description": "Current endpoint mode when `code` is `NOT_SUPPORTED_IN_CURRENT_MODE`.",
      -            "type": "string"
      -          },
      -          "directive": {
      -            "description": "Message namespace and name or provider directive that failed.",
      -            "type": "string"
      -          },
      -          "discoveryEndpointId": {
      -            "description": "Port OS provider endpoint (type ENDPOINT_PLUGIN) of the connection to send `discover-routes` to when `code` is `TARGET_UNSUPPORTED` because the route must be rediscovered.",
      -            "type": "string"
      -          },
      -          "endpointId": {
      -            "description": "Port OS endpoint ID involved in the failed dispatch.",
      -            "type": "string"
      -          },
      -          "fieldErrors": {
      -            "description": "The request fields that were rejected, when the error is about the request's content.",
      -            "items": {
      -              "description": "One rejected request field of an error.",
      -              "properties": {
      -                "field": {
      -                  "description": "Name or JSON path of the rejected field.",
      -                  "type": "string"
      -                },
      -                "reason": {
      -                  "description": "Why the field was rejected and what an accepted value looks like.",
      -                  "type": "string"
      -                }
      -              },
      -              "required": [
      -                "field",
      -                "reason"
      -              ],
      -              "type": "object"
      -            },
      -            "type": "array"
      -          },
      -          "maximum": {
      -            "description": "Maximum accepted value when `code` is `VALUE_OUT_OF_RANGE`.",
      -            "type": "number"
      -          },
      -          "minimum": {
      -            "description": "Minimum accepted value when `code` is `VALUE_OUT_OF_RANGE`.",
      -            "type": "number"
      -          },
      -          "parameter": {
      -            "description": "Request parameter or capability value that caused the failure.",
      -            "type": "string"
      -          },
      -          "pluginId": {
      -            "description": "Port OS plugin ID that reported the failure.",
      -            "type": "string"
      -          },
      -          "pluginRouteId": {
      -            "description": "Plugin-owned route identifier involved in the failed dispatch.",
      -            "type": "string"
      -          },
      -          "provider": {
      -            "description": "Third-party provider or bridge name that reported the failure.",
      -            "type": "string"
      -          },
      -          "providerCode": {
      -            "description": "The third-party provider's own error code, for support. It is opaque and provider-specific; branch on `code` and `family` instead.",
      -            "type": "string"
      -          },
      -          "retryAfterSeconds": {
      -            "description": "Suggested retry delay for rate-limit or provider-unavailable failures.",
      -            "minimum": 0,
      -            "type": "integer"
      -          }
      -        },
      -        "type": "object"
      -      },
      -      "errors": {
      -        "description": "Every rejected item when a request that is validated item by item and applied atomically fails, such as a discovery `SynchronizationRequest` whose routes, group routes or relationships are rejected. Omitted for single-item failures.\n",
      -        "items": {
      -          "description": "One rejected discovery item of a `SynchronizationRequest`, keyed by the plugin-owned identity of the rejected item: `pluginRouteId` for a route or group route, or `relationshipExternalId` for a relationship. Exactly one of the two is set. It shares the `code`, `family`, `status` and `message` fields of `BatchItemError`; discovery items are keyed by plugin-owned identity because they carry no `requestId`. A request with any rejected item is rejected as a whole and lists every rejected item.\n",
      -          "properties": {
      -            "code": {
      -              "description": "The specific error, one of a closed set of Port OS codes. Every REST error body, MCP tool error, batch item error and discovery item error uses this enum; each code belongs to an `ErrorFamily` that decides its HTTP status. Provider-specific codes are never codes: they travel in `details.providerCode`. New failure kinds are added here, never as free strings.",
      -              "enum": [
      -                "BAD_REQUEST",
      -                "UNAUTHORIZED",
      -                "FORBIDDEN",
      -                "INSUFFICIENT_SCOPE",
      -                "NOT_FOUND",
      -                "CONFLICT",
      -                "UNPROCESSABLE_ENTITY",
      -                "UNSUPPORTED_OPERATION",
      -                "TOO_MANY_REQUESTS",
      -                "SERVICE_UNAVAILABLE",
      -                "NOT_IMPLEMENTED",
      -                "INTERNAL",
      -                "CHECKSUM_MISMATCH",
      -                "FILE_TOO_LARGE",
      -                "STORAGE_UNAVAILABLE",
      -                "INSUFFICIENT_PERMISSIONS",
      -                "INVALID_FILE_TYPE",
      -                "QUOTA_EXCEEDED",
      -                "CONCURRENT_MODIFICATION",
      -                "ENDPOINT_UNREACHABLE",
      -                "BRIDGE_UNREACHABLE",
      -                "CLOUD_CONTROL_DISABLED",
      -                "ENDPOINT_BUSY",
      -                "ENDPOINT_LOW_POWER",
      -                "AUTHORIZATION_CREDENTIAL_INVALID",
      -                "AUTHORIZATION_CREDENTIAL_EXPIRED",
      -                "INVALID_DIRECTIVE",
      -                "INVALID_VALUE",
      -                "VALUE_OUT_OF_RANGE",
      -                "NOT_SUPPORTED_IN_CURRENT_MODE",
      -                "RATE_LIMIT_EXCEEDED",
      -                "PROVIDER_SERVICE_UNAVAILABLE",
      -                "PROVIDER_TIMEOUT",
      -                "PROVIDER_INTERNAL_ERROR",
      -                "INVALID_PROVIDER_RESPONSE",
      -                "OUTCOME_UNKNOWN",
      -                "PRECONDITION_FAILED",
      -                "AUTH_LINK_NOT_READY",
      -                "AUTH_LINK_NOT_DISCONNECTABLE",
      -                "PRECONDITION_REQUIRED",
      -                "IDEMPOTENCY_KEY_REQUIRED",
      -                "IDEMPOTENCY_KEY_REUSED",
      -                "IDEMPOTENCY_KEY_IN_FLIGHT",
      -                "IDEMPOTENCY_KEY_INVALID",
      -                "GROUP_MERGED",
      -                "MULTI_ROOM_UNSUPPORTED",
      -                "MAP_NOT_ACTIVE",
      -                "TARGET_UNSUPPORTED",
      -                "TARGET_AMBIGUOUS",
      -                "TARGET_GROUP_NOT_FOUND",
      -                "TARGET_GROUP_DISABLED",
      -                "DUPLICATE_TARGET_GROUP",
      -                "MESSAGE_UNSUPPORTED",
      -                "MESSAGE_AMBIGUOUS",
      -                "ENDPOINT_DISABLED",
      -                "ENDPOINT_ROUTE_CHANGED",
      -                "ENDPOINT_HAS_DEPENDENCIES",
      -                "ENDPOINT_EVENT_SUBSCRIPTIONS_ACTIVE",
      -                "ENDPOINT_COMMITTED_CLEANUP_PENDING",
      -                "DEEP_QUERY_FAILED",
      -                "PROVIDER_NO_STATE",
      -                "EVENT_MANAGEMENT_DISABLED",
      -                "SUBSCRIPTION_IDENTITY_IMMUTABLE",
      -                "UNSUPPORTED_MEDIA_TYPE",
      -                "EVENT_PAYLOAD_TOO_LARGE",
      -                "REQUEST_BODY_TOO_LARGE",
      -                "EVENT_IDENTITY_CONFLICT",
      -                "EVENT_INGRESS_QUOTA_EXCEEDED",
      -                "EVENT_RECEIPT_EXPIRED",
      -                "EVENT_STORAGE_UNAVAILABLE",
      -                "EVENT_DEAD_LETTER_NOT_FOUND",
      -                "EVENT_REDRIVE_CONFLICT",
      -                "EVENT_REDRIVE_EXPIRED",
      -                "RECEIPT_CONTEXT_EXPIRED",
      -                "EVENT_MAINTENANCE_INCOMPLETE",
      -                "UNKNOWN_INTERFACE",
      -                "INVALID_CONFIGURATION",
      -                "INVALID_PLUGIN_MANIFEST",
      -                "INVALID_ATTRIBUTE",
      -                "INVALID_PROVIDER_MESSAGE",
      -                "UNDECLARED_CAPABILITY",
      -                "PLUGIN_ROUTE_ID_CONFLICT",
      -                "UNRESOLVED_REFERENCE",
      -                "INVALID_RELATIONSHIP",
      -                "RELATIONSHIP_CYCLE",
      -                "MULTIPLE_PARENTS",
      -                "FLOW_VALIDATION_FAILED",
      -                "PROVIDER_SYNC_UNSUPPORTED"
      -              ],
      -              "type": "string"
      -            },
      -            "family": {
      -              "description": "The broad class of an error. The family decides the HTTP status of a REST error, so clients can handle every code of a family alike.",
      -              "enum": [
      -                "NOT_FOUND",
      -                "BAD_REQUEST",
      -                "UNAUTHORIZED",
      -                "FORBIDDEN",
      -                "CONFLICT",
      -                "GONE",
      -                "PRECONDITION_FAILED",
      -                "PRECONDITION_REQUIRED",
      -                "PAYLOAD_TOO_LARGE",
      -                "UNSUPPORTED_MEDIA_TYPE",
      -                "UNPROCESSABLE_ENTITY",
      -                "LOCKED",
      -                "TOO_MANY_REQUESTS",
      -                "BAD_GATEWAY",
      -                "SERVICE_UNAVAILABLE",
      -                "GATEWAY_TIMEOUT",
      -                "NOT_IMPLEMENTED",
      -                "INTERNAL_SERVER_ERROR",
      -                "REQUEST_INVALID",
      -                "AUTHENTICATION",
      -                "PERMISSION",
      -                "ENDPOINT_NOT_FOUND",
      -                "ENDPOINT_STATE_CONFLICT",
      -                "ENDPOINT_UNAVAILABLE",
      -                "RATE_LIMIT",
      -                "PROVIDER_BAD_RESPONSE",
      -                "PROVIDER_UNAVAILABLE",
      -                "PROVIDER_TIMEOUT"
      -              ],
      -              "type": "string"
      -            },
      -            "interface": {
      -              "description": "Canonical capability interface name the failure applies to, when the failure is interface-specific.",
      -              "type": "string"
      -            },
      -            "message": {
      -              "description": "Plain-language description of the failure and the suggested fix.",
      -              "type": "string"
      -            },
      -            "pluginRouteId": {
      -              "description": "Plugin-owned identifier of the rejected route or group route. Set unless the item is a relationship.",
      -              "type": "string"
      -            },
      -            "relationshipExternalId": {
      -              "description": "Plugin-owned `externalId` of the rejected relationship. Set only for relationship items.",
      -              "type": "string"
      -            },
      -            "status": {
      -              "description": "HTTP-equivalent status code of the item failure.",
      -              "maximum": 599,
      -              "minimum": 400,
      -              "type": "integer"
      -            },
      -            "version": {
      -              "description": "Declared capability interface version the failure applies to, when the failure is interface-specific.",
      -              "type": "string"
      -            }
      -          },
      -          "required": [
      -            "code",
      -            "family",
      -            "status",
      -            "message"
      -          ],
      -          "type": "object"
      -        },
      -        "type": "array"
      -      },
      -      "family": {
      -        "description": "The broad class of an error. The family decides the HTTP status of a REST error, so clients can handle every code of a family alike.",
      -        "enum": [
      -          "NOT_FOUND",
      -          "BAD_REQUEST",
      -          "UNAUTHORIZED",
      -          "FORBIDDEN",
      -          "CONFLICT",
      -          "GONE",
      -          "PRECONDITION_FAILED",
      -          "PRECONDITION_REQUIRED",
      -          "PAYLOAD_TOO_LARGE",
      -          "UNSUPPORTED_MEDIA_TYPE",
      -          "UNPROCESSABLE_ENTITY",
      -          "LOCKED",
      -          "TOO_MANY_REQUESTS",
      -          "BAD_GATEWAY",
      -          "SERVICE_UNAVAILABLE",
      -          "GATEWAY_TIMEOUT",
      -          "NOT_IMPLEMENTED",
      -          "INTERNAL_SERVER_ERROR",
      -          "REQUEST_INVALID",
      -          "AUTHENTICATION",
      -          "PERMISSION",
      -          "ENDPOINT_NOT_FOUND",
      -          "ENDPOINT_STATE_CONFLICT",
      -          "ENDPOINT_UNAVAILABLE",
      -          "RATE_LIMIT",
      -          "PROVIDER_BAD_RESPONSE",
      -          "PROVIDER_UNAVAILABLE",
      -          "PROVIDER_TIMEOUT"
      -        ],
      -        "type": "string"
      -      },
      -      "message": {
      -        "description": "Plain-language description of the failure and the suggested next action.",
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "family",
      -      "code",
      -      "message"
      -    ],
      -    "type": "object"
      -  }
      -]New value: +[
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "paginationContext": {
      +        "properties": {
      +          "nextToken": {
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "nextToken"
      +        ],
      +        "type": "object"
      +      },
      +      "primary": {
      +        "description": "The card endpoint_show was asked to lead with. Present only when the call set primary.",
      +        "type": "string"
      +      },
      +      "results": {
      +        "items": {
      +          "properties": {
      +            "cardIds": {
      +              "description": "Card ids the device can show as its primary card in endpoint_show. Present only on endpoint_show results.",
      +              "items": {
      +                "type": "string"
      +              },
      +              "type": "array"
      +            },
      +            "childEndpointIds": {
      +              "items": {
      +                "type": "string"
      +              },
      +              "type": "array"
      +            },
      +            "controllableGroups": {
      +              "items": {
      +                "properties": {
      +                  "geometry": {
      +                    "description": "The room outline from the group's stored spatial geometry (cached, never a provider read). Present on every single-endpoint read (endpoint_show or endpoint_query with endpointId), never on lists, and only for rooms whose geometry is usable; rooms without it stay listed. Rooms sharing a frameId are one map. Tiny speckle and excess detail are dropped to keep the result bounded.",
      +                    "properties": {
      +                      "coordinateSystem": {
      +                        "description": "The spatial capability's declared axes. Drawing must flip y when yAxis is UP.",
      +                        "properties": {
      +                          "unit": {
      +                            "type": "string"
      +                          },
      +                          "xAxis": {
      +                            "type": "string"
      +                          },
      +                          "yAxis": {
      +                            "type": "string"
      +                          }
      +                        },
      +                        "type": "object"
      +                      },
      +                      "frameId": {
      +                        "description": "The group route the coordinates are relative to; rooms of one map share it.",
      +                        "type": "string"
      +                      },
      +                      "shape": {
      +                        "properties": {
      +                          "coordinates": {
      +                            "description": "Polygons, each a list of rings of [x, y] points; the first ring is the outline, the others are holes.",
      +                            "items": {},
      +                            "type": "array"
      +                          },
      +                          "type": {
      +                            "enum": [
      +                              "MultiPolygon"
      +                            ],
      +                            "type": "string"
      +                          }
      +                        },
      +                        "required": [
      +                          "type",
      +                          "coordinates"
      +                        ],
      +                        "type": "object"
      +                      }
      +                    },
      +                    "required": [
      +                      "shape"
      +                    ],
      +                    "type": "object"
      +                  },
      +                  "groupId": {
      +                    "type": "string"
      +                  },
      +                  "messages": {
      +                    "items": {
      +                      "type": "string"
      +                    },
      +                    "type": "array"
      +                  },
      +                  "name": {
      +                    "type": "string"
      +                  },
      +                  "parentPath": {
      +                    "items": {
      +                      "properties": {
      +                        "groupId": {
      +                          "type": "string"
      +                        },
      +                        "name": {
      +                          "type": "string"
      +                        },
      +                        "role": {
      +                          "type": "string"
      +                        }
      +                      },
      +                      "required": [
      +                        "groupId",
      +                        "name"
      +                      ],
      +                      "type": "object"
      +                    },
      +                    "type": "array"
      +                  }
      +                },
      +                "required": [
      +                  "groupId",
      +                  "name",
      +                  "parentPath",
      +                  "messages"
      +                ],
      +                "type": "object"
      +              },
      +              "type": "array"
      +            },
      +            "description": {
      +              "properties": {
      +                "type": {
      +                  "type": "string"
      +                },
      +                "value": {
      +                  "type": "string"
      +                }
      +              },
      +              "required": [
      +                "type",
      +                "value"
      +              ],
      +              "type": "object"
      +            },
      +            "enablement": {
      +              "enum": [
      +                "ENABLED",
      +                "DISABLED"
      +              ],
      +              "type": "string"
      +            },
      +            "etag": {
      +              "description": "Strong version of the writable name, type and enablement document.",
      +              "type": "string"
      +            },
      +            "id": {
      +              "type": "string"
      +            },
      +            "interfaces": {
      +              "items": {
      +                "properties": {
      +                  "attributes": {
      +                    "items": {
      +                      "oneOf": [
      +                        {
      +                          "additionalProperties": false,
      +                          "properties": {
      +                            "name": {
      +                              "type": "string"
      +                            }
      +                          },
      +                          "required": [
      +                            "name"
      +                          ],
      +                          "type": "object"
      +                        },
      +                        {
      +                          "additionalProperties": false,
      +                          "properties": {
      +                            "autoUpdateFrequency": {
      +                              "description": "Declared frequency at which the serving route automatically updates this attribute.",
      +                              "enum": [
      +                                "REALTIME",
      +                                "MINUTES",
      +                                "HOURLY",
      +                                "DAILY",
      +                                "NEVER"
      +                              ],
      +                              "type": "string"
      +                            },
      +                            "error": {
      +                              "description": "The one Port OS error shape, returned by every REST error response and every MCP tool error. `code` names the specific failure and `family` its broad class; both are closed enums, so clients branch on them and show `message`, which says what failed and what to do next.",
      +                              "properties": {
      +                                "code": {
      +                                  "description": "The specific error, one of a closed set of Port OS codes. Every REST error body, MCP tool error, batch item error and discovery item error uses this enum; each code belongs to an `ErrorFamily` that decides its HTTP status. Provider-specific codes are never codes: they travel in `details.providerCode`. New failure kinds are added here, never as free strings.",
      +                                  "enum": [
      +                                    "BAD_REQUEST",
      +                                    "UNAUTHORIZED",
      +                                    "FORBIDDEN",
      +                                    "INSUFFICIENT_SCOPE",
      +                                    "NOT_FOUND",
      +                                    "CONFLICT",
      +                                    "UNPROCESSABLE_ENTITY",
      +                                    "UNSUPPORTED_OPERATION",
      +                                    "TOO_MANY_REQUESTS",
      +                                    "SERVICE_UNAVAILABLE",
      +                                    "NOT_IMPLEMENTED",
      +                                    "INTERNAL",
      +                                    "CHECKSUM_MISMATCH",
      +                                    "FILE_TOO_LARGE",
      +                                    "STORAGE_UNAVAILABLE",
      +                                    "INSUFFICIENT_PERMISSIONS",
      +                                    "INVALID_FILE_TYPE",
      +                                    "QUOTA_EXCEEDED",
      +                                    "CONCURRENT_MODIFICATION",
      +                                    "ENDPOINT_UNREACHABLE",
      +                                    "BRIDGE_UNREACHABLE",
      +                                    "CLOUD_CONTROL_DISABLED",
      +                                    "ENDPOINT_BUSY",
      +                                    "ENDPOINT_LOW_POWER",
      +                                    "AUTHORIZATION_CREDENTIAL_INVALID",
      +                                    "AUTHORIZATION_CREDENTIAL_EXPIRED",
      +                                    "INVALID_DIRECTIVE",
      +                                    "INVALID_VALUE",
      +                                    "VALUE_OUT_OF_RANGE",
      +                                    "NOT_SUPPORTED_IN_CURRENT_MODE",
      +                                    "RATE_LIMIT_EXCEEDED",
      +                                    "PROVIDER_SERVICE_UNAVAILABLE",
      +                                    "PROVIDER_TIMEOUT",
      +                                    "PROVIDER_INTERNAL_ERROR",
      +                                    "INVALID_PROVIDER_RESPONSE",
      +                                    "OUTCOME_UNKNOWN",
      +                                    "PRECONDITION_FAILED",
      +                                    "AUTH_LINK_NOT_READY",
      +                                    "AUTH_LINK_NOT_DISCONNECTABLE",
      +                                    "PRECONDITION_REQUIRED",
      +                                    "IDEMPOTENCY_KEY_REQUIRED",
      +                                    "IDEMPOTENCY_KEY_REUSED",
      +                                    "IDEMPOTENCY_KEY_IN_FLIGHT",
      +                                    "IDEMPOTENCY_KEY_INVALID",
      +                                    "GROUP_MERGED",
      +                                    "MULTI_ROOM_UNSUPPORTED",
      +                                    "MAP_NOT_ACTIVE",
      +                                    "TARGET_UNSUPPORTED",
      +                                    "TARGET_AMBIGUOUS",
      +                                    "TARGET_GROUP_NOT_FOUND",
      +                                    "TARGET_GROUP_DISABLED",
      +                                    "DUPLICATE_TARGET_GROUP",
      +                                    "MESSAGE_UNSUPPORTED",
      +                                    "MESSAGE_AMBIGUOUS",
      +                                    "ENDPOINT_DISABLED",
      +                                    "ENDPOINT_ROUTE_CHANGED",
      +                                    "ENDPOINT_HAS_DEPENDENCIES",
      +                                    "ENDPOINT_EVENT_SUBSCRIPTIONS_ACTIVE",
      +                                    "ENDPOINT_COMMITTED_CLEANUP_PENDING",
      +                                    "DEEP_QUERY_FAILED",
      +                                    "PROVIDER_NO_STATE",
      +                                    "EVENT_MANAGEMENT_DISABLED",
      +                                    "SUBSCRIPTION_IDENTITY_IMMUTABLE",
      +                                    "UNSUPPORTED_MEDIA_TYPE",
      +                                    "EVENT_PAYLOAD_TOO_LARGE",
      +                                    "REQUEST_BODY_TOO_LARGE",
      +                                    "EVENT_IDENTITY_CONFLICT",
      +                                    "EVENT_INGRESS_QUOTA_EXCEEDED",
      +                                    "EVENT_RECEIPT_EXPIRED",
      +                                    "EVENT_STORAGE_UNAVAILABLE",
      +                                    "EVENT_DEAD_LETTER_NOT_FOUND",
      +                                    "EVENT_REDRIVE_CONFLICT",
      +                                    "EVENT_REDRIVE_EXPIRED",
      +                                    "RECEIPT_CONTEXT_EXPIRED",
      +                                    "EVENT_MAINTENANCE_INCOMPLETE",
      +                                    "UNKNOWN_INTERFACE",
      +                                    "INVALID_CONFIGURATION",
      +                                    "INVALID_PLUGIN_MANIFEST",
      +                                    "INVALID_ATTRIBUTE",
      +                                    "INVALID_PROVIDER_MESSAGE",
      +                                    "UNDECLARED_CAPABILITY",
      +                                    "PLUGIN_ROUTE_ID_CONFLICT",
      +                                    "UNRESOLVED_REFERENCE",
      +                                    "INVALID_RELATIONSHIP",
      +                                    "RELATIONSHIP_CYCLE",
      +                                    "MULTIPLE_PARENTS",
      +                                    "FLOW_VALIDATION_FAILED",
      +                                    "PROVIDER_SYNC_UNSUPPORTED"
      +                                  ],
      +                                  "type": "string"
      +                                },
      +                                "details": {
      +                                  "description": "Optional typed context for an error. Fields are additive and only populated when the error can safely expose that context to API clients.\n",
      +                                  "properties": {
      +                                    "actual": {
      +                                      "description": "String representation of the submitted value when the plugin can safely report it.",
      +                                      "type": "string"
      +                                    },
      +                                    "correlationId": {
      +                                      "description": "Provider or plugin correlation ID useful for support.",
      +                                      "type": "string"
      +                                    },
      +                                    "correlationToken": {
      +                                      "description": "Token that correlates an outcome-unknown dispatch with its eventual result.",
      +                                      "type": "string"
      +                                    },
      +                                    "currentMode": {
      +                                      "description": "Current endpoint mode when `code` is `NOT_SUPPORTED_IN_CURRENT_MODE`.",
      +                                      "type": "string"
      +                                    },
      +                                    "directive": {
      +                                      "description": "Message namespace and name or provider directive that failed.",
      +                                      "type": "string"
      +                                    },
      +                                    "discoveryEndpointId": {
      +                                      "description": "Port OS provider endpoint (type ENDPOINT_PLUGIN) of the connection to send `discover-routes` to when `code` is `TARGET_UNSUPPORTED` because the route must be rediscovered.",
      +                                      "type": "string"
      +                                    },
      +                                    "endpointId": {
      +                                      "description": "Port OS endpoint ID involved in the failed dispatch.",
      +                                      "type": "string"
      +                                    },
      +                                    "fieldErrors": {
      +                                      "description": "The request fields that were rejected, when the error is about the request's content.",
      +                                      "items": {
      +                                        "description": "One rejected request field of an error.",
      +                                        "properties": {
      +                                          "field": {
      +                                            "description": "Name or JSON path of the rejected field.",
      +                                            "type": "string"
      +                                          },
      +                                          "reason": {
      +                                            "description": "Why the field was rejected and what an accepted value looks like.",
      +                                            "type": "string"
      +                                          }
      +                                        },
      +                                        "required": [
      +                                          "field",
      +                                          "reason"
      +                                        ],
      +                                        "type": "object"
      +                                      },
      +                                      "type": "array"
      +                                    },
      +                                    "maximum": {
      +                                      "description": "Maximum accepted value when `code` is `VALUE_OUT_OF_RANGE`.",
      +                                      "type": "number"
      +                                    },
      +                                    "minimum": {
      +                                      "description": "Minimum accepted value when `code` is `VALUE_OUT_OF_RANGE`.",
      +                                      "type": "number"
      +                                    },
      +                                    "parameter": {
      +                                      "description": "Request parameter or capability value that caused the failure.",
      +                                      "type": "string"
      +                                    },
      +                                    "pluginId": {
      +                                      "description": "Port OS plugin ID that reported the failure.",
      +                                      "type": "string"
      +                                    },
      +                                    "pluginRouteId": {
      +                                      "description": "Plugin-owned route identifier involved in the failed dispatch.",
      +                                      "type": "string"
      +                                    },
      +                                    "provider": {
      +                                      "description": "Third-party provider or bridge name that reported the failure.",
      +                                      "type": "string"
      +                                    },
      +                                    "providerCode": {
      +                                      "description": "The third-party provider's own error code, for support. It is opaque and provider-specific; branch on `code` and `family` instead.",
      +                                      "type": "string"
      +                                    },
      +                                    "retryAfterSeconds": {
      +                                      "description": "Suggested retry delay for rate-limit or provider-unavailable failures.",
      +                                      "minimum": 0,
      +                                      "type": "integer"
      +                                    }
      +                                  },
      +                                  "type": "object"
      +                                },
      +                                "errors": {
      +                                  "description": "Every rejected item when a request that is validated item by item and applied atomically fails, such as a discovery `SynchronizationRequest` whose routes, group routes or relationships are rejected. Omitted for single-item failures.\n",
      +                                  "items": {
      +                                    "description": "One rejected discovery item of a `SynchronizationRequest`, keyed by the plugin-owned identity of the rejected item: `pluginRouteId` for a route or group route, or `relationshipExternalId` for a relationship. Exactly one of the two is set. It shares the `code`, `family`, `status` and `message` fields of `BatchItemError`; discovery items are keyed by plugin-owned identity because they carry no `requestId`. A request with any rejected item is rejected as a whole and lists every rejected item.\n",
      +                                    "properties": {
      +                                      "code": {
      +                                        "description": "The specific error, one of a closed set of Port OS codes. Every REST error body, MCP tool error, batch item error and discovery item error uses this enum; each code belongs to an `ErrorFamily` that decides its HTTP status. Provider-specific codes are never codes: they travel in `details.providerCode`. New failure kinds are added here, never as free strings.",
      +                                        "enum": [
      +                                          "BAD_REQUEST",
      +                                          "UNAUTHORIZED",
      +                                          "FORBIDDEN",
      +                                          "INSUFFICIENT_SCOPE",
      +                                          "NOT_FOUND",
      +                                          "CONFLICT",
      +                                          "UNPROCESSABLE_ENTITY",
      +                                          "UNSUPPORTED_OPERATION",
      +                                          "TOO_MANY_REQUESTS",
      +                                          "SERVICE_UNAVAILABLE",
      +                                          "NOT_IMPLEMENTED",
      +                                          "INTERNAL",
      +                                          "CHECKSUM_MISMATCH",
      +                                          "FILE_TOO_LARGE",
      +                                          "STORAGE_UNAVAILABLE",
      +                                          "INSUFFICIENT_PERMISSIONS",
      +                                          "INVALID_FILE_TYPE",
      +                                          "QUOTA_EXCEEDED",
      +                                          "CONCURRENT_MODIFICATION",
      +                                          "ENDPOINT_UNREACHABLE",
      +                                          "BRIDGE_UNREACHABLE",
      +                                          "CLOUD_CONTROL_DISABLED",
      +                                          "ENDPOINT_BUSY",
      +                                          "ENDPOINT_LOW_POWER",
      +                                          "AUTHORIZATION_CREDENTIAL_INVALID",
      +                                          "AUTHORIZATION_CREDENTIAL_EXPIRED",
      +                                          "INVALID_DIRECTIVE",
      +                                          "INVALID_VALUE",
      +                                          "VALUE_OUT_OF_RANGE",
      +                                          "NOT_SUPPORTED_IN_CURRENT_MODE",
      +                                          "RATE_LIMIT_EXCEEDED",
      +                                          "PROVIDER_SERVICE_UNAVAILABLE",
      +                                          "PROVIDER_TIMEOUT",
      +                                          "PROVIDER_INTERNAL_ERROR",
      +                                          "INVALID_PROVIDER_RESPONSE",
      +                                          "OUTCOME_UNKNOWN",
      +                                          "PRECONDITION_FAILED",
      +                                          "AUTH_LINK_NOT_READY",
      +                                          "AUTH_LINK_NOT_DISCONNECTABLE",
      +                                          "PRECONDITION_REQUIRED",
      +                                          "IDEMPOTENCY_KEY_REQUIRED",
      +                                          "IDEMPOTENCY_KEY_REUSED",
      +                                          "IDEMPOTENCY_KEY_IN_FLIGHT",
      +                                          "IDEMPOTENCY_KEY_INVALID",
      +                                          "GROUP_MERGED",
      +                                          "MULTI_ROOM_UNSUPPORTED",
      +                                          "MAP_NOT_ACTIVE",
      +                                          "TARGET_UNSUPPORTED",
      +                                          "TARGET_AMBIGUOUS",
      +                                          "TARGET_GROUP_NOT_FOUND",
      +                                          "TARGET_GROUP_DISABLED",
      +                                          "DUPLICATE_TARGET_GROUP",
      +                                          "MESSAGE_UNSUPPORTED",
      +                                          "MESSAGE_AMBIGUOUS",
      +                                          "ENDPOINT_DISABLED",
      +                                          "ENDPOINT_ROUTE_CHANGED",
      +                                          "ENDPOINT_HAS_DEPENDENCIES",
      +                                          "ENDPOINT_EVENT_SUBSCRIPTIONS_ACTIVE",
      +                                          "ENDPOINT_COMMITTED_CLEANUP_PENDING",
      +                                          "DEEP_QUERY_FAILED",
      +                                          "PROVIDER_NO_STATE",
      +                                          "EVENT_MANAGEMENT_DISABLED",
      +                                          "SUBSCRIPTION_IDENTITY_IMMUTABLE",
      +                                          "UNSUPPORTED_MEDIA_TYPE",
      +                                          "EVENT_PAYLOAD_TOO_LARGE",
      +                                          "REQUEST_BODY_TOO_LARGE",
      +                                          "EVENT_IDENTITY_CONFLICT",
      +                                          "EVENT_INGRESS_QUOTA_EXCEEDED",
      +                                          "EVENT_RECEIPT_EXPIRED",
      +                                          "EVENT_STORAGE_UNAVAILABLE",
      +                                          "EVENT_DEAD_LETTER_NOT_FOUND",
      +                                          "EVENT_REDRIVE_CONFLICT",
      +                                          "EVENT_REDRIVE_EXPIRED",
      +                                          "RECEIPT_CONTEXT_EXPIRED",
      +                                          "EVENT_MAINTENANCE_INCOMPLETE",
      +                                          "UNKNOWN_INTERFACE",
      +                                          "INVALID_CONFIGURATION",
      +                                          "INVALID_PLUGIN_MANIFEST",
      +                                          "INVALID_ATTRIBUTE",
      +                                          "INVALID_PROVIDER_MESSAGE",
      +                                          "UNDECLARED_CAPABILITY",
      +                                          "PLUGIN_ROUTE_ID_CONFLICT",
      +                                          "UNRESOLVED_REFERENCE",
      +                                          "INVALID_RELATIONSHIP",
      +                                          "RELATIONSHIP_CYCLE",
      +                                          "MULTIPLE_PARENTS",
      +                                          "FLOW_VALIDATION_FAILED",
      +                                          "PROVIDER_SYNC_UNSUPPORTED"
      +                                        ],
      +                                        "type": "string"
      +                                      },
      +                                      "family": {
      +                                        "description": "The broad class of an error. The family decides the HTTP status of a REST error, so clients can handle every code of a family alike.",
      +                                        "enum": [
      +                                          "NOT_FOUND",
      +                                          "BAD_REQUEST",
      +                                          "UNAUTHORIZED",
      +                                          "FORBIDDEN",
      +                                          "CONFLICT",
      +                                          "GONE",
      +                                          "PRECONDITION_FAILED",
      +                                          "PRECONDITION_REQUIRED",
      +                                          "PAYLOAD_TOO_LARGE",
      +                                          "UNSUPPORTED_MEDIA_TYPE",
      +                                          "UNPROCESSABLE_ENTITY",
      +                                          "LOCKED",
      +                                          "TOO_MANY_REQUESTS",
      +                                          "BAD_GATEWAY",
      +                                          "SERVICE_UNAVAILABLE",
      +                                          "GATEWAY_TIMEOUT",
      +                                          "NOT_IMPLEMENTED",
      +                                          "INTERNAL_SERVER_ERROR",
      +                                          "REQUEST_INVALID",
      +                                          "AUTHENTICATION",
      +                                          "PERMISSION",
      +                                          "ENDPOINT_NOT_FOUND",
      +                                          "ENDPOINT_STATE_CONFLICT",
      +                                          "ENDPOINT_UNAVAILABLE",
      +                                          "RATE_LIMIT",
      +                                          "PROVIDER_BAD_RESPONSE",
      +                                          "PROVIDER_UNAVAILABLE",
      +                                          "PROVIDER_TIMEOUT"
      +                                        ],
      +                                        "type": "string"
      +                                      },
      +                                      "interface": {
      +                                        "description": "Canonical capability interface name the failure applies to, when the failure is interface-specific.",
      +                                        "type": "string"
      +                                      },
      +                                      "message": {
      +                                        "description": "Plain-language description of the failure and the suggested fix.",
      +                                        "type": "string"
      +                                      },
      +                                      "pluginRouteId": {
      +                                        "description": "Plugin-owned identifier of the rejected route or group route. Set unless the item is a relationship.",
      +                                        "type": "string"
      +                                      },
      +                                      "relationshipExternalId": {
      +                                        "description": "Plugin-owned `externalId` of the rejected relationship. Set only for relationship items.",
      +                                        "type": "string"
      +                                      },
      +                                      "status": {
      +                                        "description": "HTTP-equivalent status code of the item failure.",
      +                                        "maximum": 599,
      +                                        "minimum": 400,
      +                                        "type": "integer"
      +                                      },
      +                                      "version": {
      +                                        "description": "Declared capability interface version the failure applies to, when the failure is interface-specific.",
      +                                        "type": "string"
      +                                      }
      +                                    },
      +                                    "required": [
      +                                      "code",
      +                                      "family",
      +                                      "status",
      +                                      "message"
      +                                    ],
      +                                    "type": "object"
      +                                  },
      +                                  "type": "array"
      +                                },
      +                                "family": {
      +                                  "description": "The broad class of an error. The family decides the HTTP status of a REST error, so clients can handle every code of a family alike.",
      +                                  "enum": [
      +                                    "NOT_FOUND",
      +                                    "BAD_REQUEST",
      +                                    "UNAUTHORIZED",
      +                                    "FORBIDDEN",
      +                                    "CONFLICT",
      +                                    "GONE",
      +                                    "PRECONDITION_FAILED",
      +                                    "PRECONDITION_REQUIRED",
      +                                    "PAYLOAD_TOO_LARGE",
      +                                    "UNSUPPORTED_MEDIA_TYPE",
      +                                    "UNPROCESSABLE_ENTITY",
      +                                    "LOCKED",
      +                                    "TOO_MANY_REQUESTS",
      +                                    "BAD_GATEWAY",
      +                                    "SERVICE_UNAVAILABLE",
      +                                    "GATEWAY_TIMEOUT",
      +                                    "NOT_IMPLEMENTED",
      +                                    "INTERNAL_SERVER_ERROR",
      +                                    "REQUEST_INVALID",
      +                                    "AUTHENTICATION",
      +                                    "PERMISSION",
      +                                    "ENDPOINT_NOT_FOUND",
      +                                    "ENDPOINT_STATE_CONFLICT",
      +                                    "ENDPOINT_UNAVAILABLE",
      +                                    "RATE_LIMIT",
      +                                    "PROVIDER_BAD_RESPONSE",
      +                                    "PROVIDER_UNAVAILABLE",
      +                                    "PROVIDER_TIMEOUT"
      +                                  ],
      +                                  "type": "string"
      +                                },
      +                                "message": {
      +                                  "description": "Plain-language description of the failure and the suggested next action.",
      +                                  "type": "string"
      +                                }
      +                              },
      +                              "required": [
      +                                "family",
      +                                "code",
      +                                "message"
      +                              ],
      +                              "type": "object"
      +                            },
      +                            "freshness": {
      +                              "description": "Whether the value is current enough to present as the device's present state.\n\n`FRESH`: the provider reported a sample within the last 30 seconds, or a\nforced refresh (`forceDeviceAttributeQuery=true` or `forceDeviceQuery`) read the\nprovider during this request and the provider reported no sample time.\n\n`STALE`: the value is older than 30 seconds, came from stored state, or is a\nprovider's own last known value. A forced refresh cannot make a provider's old\nsample newer: when the provider (for example a thermostat reached through a\nvoice-assistant account) answers with the sample it already holds, the value\nkeeps its original `sampledAt` and is `STALE`. Report the value together with\n`sampledAt`, never as the present reading.\n",
      +                              "enum": [
      +                                "FRESH",
      +                                "STALE"
      +                              ],
      +                              "type": "string"
      +                            },
      +                            "name": {
      +                              "type": "string"
      +                            },
      +                            "retrievability": {
      +                              "description": "Whether the serving route supports retrieving this attribute.",
      +                              "enum": [
      +                                "RETRIEVABLE",
      +                                "NOT_RETRIEVABLE"
      +                              ],
      +                              "type": "string"
      +                            },
      +                            "sampledAt": {
      +                              "format": "date-time",
      +                              "type": "string"
      +                            },
      +                            "value": {
      +                              "additionalProperties": true,
      +                              "type": "object"
      +                            }
      +                          },
      +                          "required": [
      +                            "name",
      +                            "retrievability",
      +                            "autoUpdateFrequency"
      +                          ],
      +                          "type": "object"
      +                        }
      +                      ]
      +                    },
      +                    "type": "array"
      +                  },
      +                  "configuration": {
      +                    "type": "object"
      +                  },
      +                  "messages": {
      +                    "items": {
      +                      "properties": {
      +                        "id": {
      +                          "type": "string"
      +                        },
      +                        "name": {
      +                          "type": "string"
      +                        }
      +                      },
      +                      "required": [
      +                        "id",
      +                        "name"
      +                      ],
      +                      "type": "object"
      +                    },
      +                    "type": "array"
      +                  },
      +                  "name": {
      +                    "type": "string"
      +                  },
      +                  "outboundMessages": {
      +                    "description": "Declared outbound message types, including results and events. Not every command returns a correlated result. These IDs cannot be sent as commands.",
      +                    "items": {
      +                      "properties": {
      +                        "id": {
      +                          "type": "string"
      +                        },
      +                        "name": {
      +                          "type": "string"
      +                        }
      +                      },
      +                      "required": [
      +                        "id",
      +                        "name"
      +                      ],
      +                      "type": "object"
      +                    },
      +                    "type": "array"
      +                  },
      +                  "version": {
      +                    "type": "string"
      +                  }
      +                },
      +                "required": [
      +                  "name",
      +                  "version",
      +                  "messages",
      +                  "attributes"
      +                ],
      +                "type": "object"
      +              },
      +              "type": "array"
      +            },
      +            "manufacturer": {
      +              "properties": {
      +                "type": {
      +                  "type": "string"
      +                },
      +                "value": {
      +                  "type": "string"
      +                }
      +              },
      +              "required": [
      +                "type",
      +                "value"
      +              ],
      +              "type": "object"
      +            },
      +            "model": {
      +              "properties": {
      +                "type": {
      +                  "type": "string"
      +                },
      +                "value": {
      +                  "type": "string"
      +                }
      +              },
      +              "required": [
      +                "type",
      +                "value"
      +              ],
      +              "type": "object"
      +            },
      +            "name": {
      +              "properties": {
      +                "type": {
      +                  "type": "string"
      +                },
      +                "value": {
      +                  "type": "string"
      +                }
      +              },
      +              "required": [
      +                "type",
      +                "value"
      +              ],
      +              "type": "object"
      +            },
      +            "parentEndpointId": {
      +              "type": "string"
      +            },
      +            "routes": {
      +              "items": {
      +                "properties": {
      +                  "id": {
      +                    "type": "string"
      +                  },
      +                  "interfaces": {
      +                    "items": {
      +                      "properties": {
      +                        "attributes": {
      +                          "items": {
      +                            "oneOf": [
      +                              {
      +                                "additionalProperties": false,
      +                                "properties": {
      +                                  "name": {
      +                                    "type": "string"
      +                                  }
      +                                },
      +                                "required": [
      +                                  "name"
      +                                ],
      +                                "type": "object"
      +                              },
      +                              {
      +                                "additionalProperties": false,
      +                                "properties": {
      +                                  "autoUpdateFrequency": {
      +                                    "description": "Declared frequency at which the serving route automatically updates this attribute.",
      +                                    "enum": [
      +                                      "REALTIME",
      +                                      "MINUTES",
      +                                      "HOURLY",
      +                                      "DAILY",
      +                                      "NEVER"
      +                                    ],
      +                                    "type": "string"
      +                                  },
      +                                  "error": {
      +                                    "description": "The one Port OS error shape, returned by every REST error response and every MCP tool error. `code` names the specific failure and `family` its broad class; both are closed enums, so clients branch on them and show `message`, which says what failed and what to do next.",
      +                                    "properties": {
      +                                      "code": {
      +                                        "description": "The specific error, one of a closed set of Port OS codes. Every REST error body, MCP tool error, batch item error and discovery item error uses this enum; each code belongs to an `ErrorFamily` that decides its HTTP status. Provider-specific codes are never codes: they travel in `details.providerCode`. New failure kinds are added here, never as free strings.",
      +                                        "enum": [
      +                                          "BAD_REQUEST",
      +                                          "UNAUTHORIZED",
      +                                          "FORBIDDEN",
      +                                          "INSUFFICIENT_SCOPE",
      +                                          "NOT_FOUND",
      +                                          "CONFLICT",
      +                                          "UNPROCESSABLE_ENTITY",
      +                                          "UNSUPPORTED_OPERATION",
      +                                          "TOO_MANY_REQUESTS",
      +                                          "SERVICE_UNAVAILABLE",
      +                                          "NOT_IMPLEMENTED",
      +                                          "INTERNAL",
      +                                          "CHECKSUM_MISMATCH",
      +                                          "FILE_TOO_LARGE",
      +                                          "STORAGE_UNAVAILABLE",
      +                                          "INSUFFICIENT_PERMISSIONS",
      +                                          "INVALID_FILE_TYPE",
      +                                          "QUOTA_EXCEEDED",
      +                                          "CONCURRENT_MODIFICATION",
      +                                          "ENDPOINT_UNREACHABLE",
      +                                          "BRIDGE_UNREACHABLE",
      +                                          "CLOUD_CONTROL_DISABLED",
      +                                          "ENDPOINT_BUSY",
      +                                          "ENDPOINT_LOW_POWER",
      +                                          "AUTHORIZATION_CREDENTIAL_INVALID",
      +                                          "AUTHORIZATION_CREDENTIAL_EXPIRED",
      +                                          "INVALID_DIRECTIVE",
      +                                          "INVALID_VALUE",
      +                                          "VALUE_OUT_OF_RANGE",
      +                                          "NOT_SUPPORTED_IN_CURRENT_MODE",
      +                                          "RATE_LIMIT_EXCEEDED",
      +                                          "PROVIDER_SERVICE_UNAVAILABLE",
      +                                          "PROVIDER_TIMEOUT",
      +                                          "PROVIDER_INTERNAL_ERROR",
      +                                          "INVALID_PROVIDER_RESPONSE",
      +                                          "OUTCOME_UNKNOWN",
      +                                          "PRECONDITION_FAILED",
      +                                          "AUTH_LINK_NOT_READY",
      +                                          "AUTH_LINK_NOT_DISCONNECTABLE",
      +                                          "PRECONDITION_REQUIRED",
      +                                          "IDEMPOTENCY_KEY_REQUIRED",
      +                                          "IDEMPOTENCY_KEY_REUSED",
      +                                          "IDEMPOTENCY_KEY_IN_FLIGHT",
      +                                          "IDEMPOTENCY_KEY_INVALID",
      +                                          "GROUP_MERGED",
      +                                          "MULTI_ROOM_UNSUPPORTED",
      +                                          "MAP_NOT_ACTIVE",
      +                                          "TARGET_UNSUPPORTED",
      +                                          "TARGET_AMBIGUOUS",
      +                                          "TARGET_GROUP_NOT_FOUND",
      +                                          "TARGET_GROUP_DISABLED",
      +                                          "DUPLICATE_TARGET_GROUP",
      +                                          "MESSAGE_UNSUPPORTED",
      +                                          "MESSAGE_AMBIGUOUS",
      +                                          "ENDPOINT_DISABLED",
      +                                          "ENDPOINT_ROUTE_CHANGED",
      +                                          "ENDPOINT_HAS_DEPENDENCIES",
      +                                          "ENDPOINT_EVENT_SUBSCRIPTIONS_ACTIVE",
      +                                          "ENDPOINT_COMMITTED_CLEANUP_PENDING",
      +                                          "DEEP_QUERY_FAILED",
      +                                          "PROVIDER_NO_STATE",
      +                                          "EVENT_MANAGEMENT_DISABLED",
      +                                          "SUBSCRIPTION_IDENTITY_IMMUTABLE",
      +                                          "UNSUPPORTED_MEDIA_TYPE",
      +                                          "EVENT_PAYLOAD_TOO_LARGE",
      +                                          "REQUEST_BODY_TOO_LARGE",
      +                                          "EVENT_IDENTITY_CONFLICT",
      +                                          "EVENT_INGRESS_QUOTA_EXCEEDED",
      +                                          "EVENT_RECEIPT_EXPIRED",
      +                                          "EVENT_STORAGE_UNAVAILABLE",
      +                                          "EVENT_DEAD_LETTER_NOT_FOUND",
      +                                          "EVENT_REDRIVE_CONFLICT",
      +                                          "EVENT_REDRIVE_EXPIRED",
      +                                          "RECEIPT_CONTEXT_EXPIRED",
      +                                          "EVENT_MAINTENANCE_INCOMPLETE",
      +                                          "UNKNOWN_INTERFACE",
      +                                          "INVALID_CONFIGURATION",
      +                                          "INVALID_PLUGIN_MANIFEST",
      +                                          "INVALID_ATTRIBUTE",
      +                                          "INVALID_PROVIDER_MESSAGE",
      +                                          "UNDECLARED_CAPABILITY",
      +                                          "PLUGIN_ROUTE_ID_CONFLICT",
      +                                          "UNRESOLVED_REFERENCE",
      +                                          "INVALID_RELATIONSHIP",
      +                                          "RELATIONSHIP_CYCLE",
      +                                          "MULTIPLE_PARENTS",
      +                                          "FLOW_VALIDATION_FAILED",
      +                                          "PROVIDER_SYNC_UNSUPPORTED"
      +                                        ],
      +                                        "type": "string"
      +                                      },
      +                                      "details": {
      +                                        "description": "Optional typed context for an error. Fields are additive and only populated when the error can safely expose that context to API clients.\n",
      +                                        "properties": {
      +                                          "actual": {
      +                                            "description": "String representation of the submitted value when the plugin can safely report it.",
      +                                            "type": "string"
      +                                          },
      +                                          "correlationId": {
      +                                            "description": "Provider or plugin correlation ID useful for support.",
      +                                            "type": "string"
      +                                          },
      +                                          "correlationToken": {
      +                                            "description": "Token that correlates an outcome-unknown dispatch with its eventual result.",
      +                                            "type": "string"
      +                                          },
      +                                          "currentMode": {
      +                                            "description": "Current endpoint mode when `code` is `NOT_SUPPORTED_IN_CURRENT_MODE`.",
      +                                            "type": "string"
      +                                          },
      +                                          "directive": {
      +                                            "description": "Message namespace and name or provider directive that failed.",
      +                                            "type": "string"
      +                                          },
      +                                          "discoveryEndpointId": {
      +                                            "description": "Port OS provider endpoint (type ENDPOINT_PLUGIN) of the connection to send `discover-routes` to when `code` is `TARGET_UNSUPPORTED` because the route must be rediscovered.",
      +                                            "type": "string"
      +                                          },
      +                                          "endpointId": {
      +                                            "description": "Port OS endpoint ID involved in the failed dispatch.",
      +                                            "type": "string"
      +                                          },
      +                                          "fieldErrors": {
      +                                            "description": "The request fields that were rejected, when the error is about the request's content.",
      +                                            "items": {
      +                                              "description": "One rejected request field of an error.",
      +                                              "properties": {
      +                                                "field": {
      +                                                  "description": "Name or JSON path of the rejected field.",
      +                                                  "type": "string"
      +                                                },
      +                                                "reason": {
      +                                                  "description": "Why the field was rejected and what an accepted value looks like.",
      +                                                  "type": "string"
      +                                                }
      +                                              },
      +                                              "required": [
      +                                                "field",
      +                                                "reason"
      +                                              ],
      +                                              "type": "object"
      +                                            },
      +                                            "type": "array"
      +                                          },
      +                                          "maximum": {
      +                                            "description": "Maximum accepted value when `code` is `VALUE_OUT_OF_RANGE`.",
      +                                            "type": "number"
      +                                          },
      +                                          "minimum": {
      +                                            "description": "Minimum accepted value when `code` is `VALUE_OUT_OF_RANGE`.",
      +                                            "type": "number"
      +                                          },
      +                                          "parameter": {
      +                                            "description": "Request parameter or capability value that caused the failure.",
      +                                            "type": "string"
      +                                          },
      +                                          "pluginId": {
      +                                            "description": "Port OS plugin ID that reported the failure.",
      +                                            "type": "string"
      +                                          },
      +                                          "pluginRouteId": {
      +                                            "description": "Plugin-owned route identifier involved in the failed dispatch.",
      +                                            "type": "string"
      +                                          },
      +                                          "provider": {
      +                                            "description": "Third-party provider or bridge name that reported the failure.",
      +                                            "type": "string"
      +                                          },
      +                                          "providerCode": {
      +                                            "description": "The third-party provider's own error code, for support. It is opaque and provider-specific; branch on `code` and `family` instead.",
      +                                            "type": "string"
      +                                          },
      +                                          "retryAfterSeconds": {
      +                                            "description": "Suggested retry delay for rate-limit or provider-unavailable failures.",
      +                                            "minimum": 0,
      +                                            "type": "integer"
      +                                          }
      +                                        },
      +                                        "type": "object"
      +                                      },
      +                                      "errors": {
      +                                        "description": "Every rejected item when a request that is validated item by item and applied atomically fails, such as a discovery `SynchronizationRequest` whose routes, group routes or relationships are rejected. Omitted for single-item failures.\n",
      +                                        "items": {
      +                                          "description": "One rejected discovery item of a `SynchronizationRequest`, keyed by the plugin-owned identity of the rejected item: `pluginRouteId` for a route or group route, or `relationshipExternalId` for a relationship. Exactly one of the two is set. It shares the `code`, `family`, `status` and `message` fields of `BatchItemError`; discovery items are keyed by plugin-owned identity because they carry no `requestId`. A request with any rejected item is rejected as a whole and lists every rejected item.\n",
      +                                          "properties": {
      +                                            "code": {
      +                                              "description": "The specific error, one of a closed set of Port OS codes. Every REST error body, MCP tool error, batch item error and discovery item error uses this enum; each code belongs to an `ErrorFamily` that decides its HTTP status. Provider-specific codes are never codes: they travel in `details.providerCode`. New failure kinds are added here, never as free strings.",
      +                                              "enum": [
      +                                                "BAD_REQUEST",
      +                                                "UNAUTHORIZED",
      +                                                "FORBIDDEN",
      +                                                "INSUFFICIENT_SCOPE",
      +                                                "NOT_FOUND",
      +                                                "CONFLICT",
      +                                                "UNPROCESSABLE_ENTITY",
      +                                                "UNSUPPORTED_OPERATION",
      +                                                "TOO_MANY_REQUESTS",
      +                                                "SERVICE_UNAVAILABLE",
      +                                                "NOT_IMPLEMENTED",
      +                                                "INTERNAL",
      +                                                "CHECKSUM_MISMATCH",
      +                                                "FILE_TOO_LARGE",
      +                                                "STORAGE_UNAVAILABLE",
      +                                                "INSUFFICIENT_PERMISSIONS",
      +                                                "INVALID_FILE_TYPE",
      +                                                "QUOTA_EXCEEDED",
      +                                                "CONCURRENT_MODIFICATION",
      +                                                "ENDPOINT_UNREACHABLE",
      +                                                "BRIDGE_UNREACHABLE",
      +                                                "CLOUD_CONTROL_DISABLED",
      +                                                "ENDPOINT_BUSY",
      +                                                "ENDPOINT_LOW_POWER",
      +                                                "AUTHORIZATION_CREDENTIAL_INVALID",
      +                                                "AUTHORIZATION_CREDENTIAL_EXPIRED",
      +                                                "INVALID_DIRECTIVE",
      +                                                "INVALID_VALUE",
      +                                                "VALUE_OUT_OF_RANGE",
      +                                                "NOT_SUPPORTED_IN_CURRENT_MODE",
      +                                                "RATE_LIMIT_EXCEEDED",
      +                                                "PROVIDER_SERVICE_UNAVAILABLE",
      +                                                "PROVIDER_TIMEOUT",
      +                                                "PROVIDER_INTERNAL_ERROR",
      +                                                "INVALID_PROVIDER_RESPONSE",
      +                                                "OUTCOME_UNKNOWN",
      +                                                "PRECONDITION_FAILED",
      +                                                "AUTH_LINK_NOT_READY",
      +                                                "AUTH_LINK_NOT_DISCONNECTABLE",
      +                                                "PRECONDITION_REQUIRED",
      +                                                "IDEMPOTENCY_KEY_REQUIRED",
      +                                                "IDEMPOTENCY_KEY_REUSED",
      +                                                "IDEMPOTENCY_KEY_IN_FLIGHT",
      +                                                "IDEMPOTENCY_KEY_INVALID",
      +                                                "GROUP_MERGED",
      +                                                "MULTI_ROOM_UNSUPPORTED",
      +                                                "MAP_NOT_ACTIVE",
      +                                                "TARGET_UNSUPPORTED",
      +                                                "TARGET_AMBIGUOUS",
      +                                                "TARGET_GROUP_NOT_FOUND",
      +                                                "TARGET_GROUP_DISABLED",
      +                                                "DUPLICATE_TARGET_GROUP",
      +                                                "MESSAGE_UNSUPPORTED",
      +                                                "MESSAGE_AMBIGUOUS",
      +                                                "ENDPOINT_DISABLED",
      +                                                "ENDPOINT_ROUTE_CHANGED",
      +                                                "ENDPOINT_HAS_DEPENDENCIES",
      +                                                "ENDPOINT_EVENT_SUBSCRIPTIONS_ACTIVE",
      +                                                "ENDPOINT_COMMITTED_CLEANUP_PENDING",
      +                                                "DEEP_QUERY_FAILED",
      +                                                "PROVIDER_NO_STATE",
      +                                                "EVENT_MANAGEMENT_DISABLED",
      +                                                "SUBSCRIPTION_IDENTITY_IMMUTABLE",
      +                                                "UNSUPPORTED_MEDIA_TYPE",
      +                                                "EVENT_PAYLOAD_TOO_LARGE",
      +                                                "REQUEST_BODY_TOO_LARGE",
      +                                                "EVENT_IDENTITY_CONFLICT",
      +                                                "EVENT_INGRESS_QUOTA_EXCEEDED",
      +                                                "EVENT_RECEIPT_EXPIRED",
      +                                                "EVENT_STORAGE_UNAVAILABLE",
      +                                                "EVENT_DEAD_LETTER_NOT_FOUND",
      +                                                "EVENT_REDRIVE_CONFLICT",
      +                                                "EVENT_REDRIVE_EXPIRED",
      +                                                "RECEIPT_CONTEXT_EXPIRED",
      +                                                "EVENT_MAINTENANCE_INCOMPLETE",
      +                                                "UNKNOWN_INTERFACE",
      +                                                "INVALID_CONFIGURATION",
      +                                                "INVALID_PLUGIN_MANIFEST",
      +                                                "INVALID_ATTRIBUTE",
      +                                                "INVALID_PROVIDER_MESSAGE",
      +                                                "UNDECLARED_CAPABILITY",
      +                                                "PLUGIN_ROUTE_ID_CONFLICT",
      +                                                "UNRESOLVED_REFERENCE",
      +                                                "INVALID_RELATIONSHIP",
      +                                                "RELATIONSHIP_CYCLE",
      +                                                "MULTIPLE_PARENTS",
      +                                                "FLOW_VALIDATION_FAILED",
      +                                                "PROVIDER_SYNC_UNSUPPORTED"
      +                                              ],
      +                                              "type": "string"
      +                                            },
      +                                            "family": {
      +                                              "description": "The broad class of an error. The family decides the HTTP status of a REST error, so clients can handle every code of a family alike.",
      +                                              "enum": [
      +                                                "NOT_FOUND",
      +                                                "BAD_REQUEST",
      +                                                "UNAUTHORIZED",
      +                                                "FORBIDDEN",
      +                                                "CONFLICT",
      +                                                "GONE",
      +                                                "PRECONDITION_FAILED",
      +                                                "PRECONDITION_REQUIRED",
      +                                                "PAYLOAD_TOO_LARGE",
      +                                                "UNSUPPORTED_MEDIA_TYPE",
      +                                                "UNPROCESSABLE_ENTITY",
      +                                                "LOCKED",
      +                                                "TOO_MANY_REQUESTS",
      +                                                "BAD_GATEWAY",
      +                                                "SERVICE_UNAVAILABLE",
      +                                                "GATEWAY_TIMEOUT",
      +                                                "NOT_IMPLEMENTED",
      +                                                "INTERNAL_SERVER_ERROR",
      +                                                "REQUEST_INVALID",
      +                                                "AUTHENTICATION",
      +                                                "PERMISSION",
      +                                                "ENDPOINT_NOT_FOUND",
      +                                                "ENDPOINT_STATE_CONFLICT",
      +                                                "ENDPOINT_UNAVAILABLE",
      +                                                "RATE_LIMIT",
      +                                                "PROVIDER_BAD_RESPONSE",
      +                                                "PROVIDER_UNAVAILABLE",
      +                                                "PROVIDER_TIMEOUT"
      +                                              ],
      +                                              "type": "string"
      +                                            },
      +                                            "interface": {
      +                                              "description": "Canonical capability interface name the failure applies to, when the failure is interface-specific.",
      +                                              "type": "string"
      +                                            },
      +                                            "message": {
      +                                              "description": "Plain-language description of the failure and the suggested fix.",
      +                                              "type": "string"
      +                                            },
      +                                            "pluginRouteId": {
      +                                              "description": "Plugin-owned identifier of the rejected route or group route. Set unless the item is a relationship.",
      +                                              "type": "string"
      +                                            },
      +                                            "relationshipExternalId": {
      +                                              "description": "Plugin-owned `externalId` of the rejected relationship. Set only for relationship items.",
      +                                              "type": "string"
      +                                            },
      +                                            "status": {
      +                                              "description": "HTTP-equivalent status code of the item failure.",
      +                                              "maximum": 599,
      +                                              "minimum": 400,
      +                                              "type": "integer"
      +                                            },
      +                                            "version": {
      +                                              "description": "Declared capability interface version the failure applies to, when the failure is interface-specific.",
      +                                              "type": "string"
      +                                            }
      +                                          },
      +                                          "required": [
      +                                            "code",
      +                                            "family",
      +                                            "status",
      +                                            "message"
      +                                          ],
      +                                          "type": "object"
      +                                        },
      +                                        "type": "array"
      +                                      },
      +                                      "family": {
      +                                        "description": "The broad class of an error. The family decides the HTTP status of a REST error, so clients can handle every code of a family alike.",
      +                                        "enum": [
      +                                          "NOT_FOUND",
      +                                          "BAD_REQUEST",
      +                                          "UNAUTHORIZED",
      +                                          "FORBIDDEN",
      +                                          "CONFLICT",
      +                                          "GONE",
      +                                          "PRECONDITION_FAILED",
      +                                          "PRECONDITION_REQUIRED",
      +                                          "PAYLOAD_TOO_LARGE",
      +                                          "UNSUPPORTED_MEDIA_TYPE",
      +                                          "UNPROCESSABLE_ENTITY",
      +                                          "LOCKED",
      +                                          "TOO_MANY_REQUESTS",
      +                                          "BAD_GATEWAY",
      +                                          "SERVICE_UNAVAILABLE",
      +                                          "GATEWAY_TIMEOUT",
      +                                          "NOT_IMPLEMENTED",
      +                                          "INTERNAL_SERVER_ERROR",
      +                                          "REQUEST_INVALID",
      +                                          "AUTHENTICATION",
      +                                          "PERMISSION",
      +                                          "ENDPOINT_NOT_FOUND",
      +                                          "ENDPOINT_STATE_CONFLICT",
      +                                          "ENDPOINT_UNAVAILABLE",
      +                                          "RATE_LIMIT",
      +                                          "PROVIDER_BAD_RESPONSE",
      +                                          "PROVIDER_UNAVAILABLE",
      +                                          "PROVIDER_TIMEOUT"
      +                                        ],
      +                                        "type": "string"
      +                                      },
      +                                      "message": {
      +                                        "description": "Plain-language description of the failure and the suggested next action.",
      +                                        "type": "string"
      +                                      }
      +                                    },
      +                                    "required": [
      +                                      "family",
      +                                      "code",
      +                                      "message"
      +                                    ],
      +                                    "type": "object"
      +                                  },
      +                                  "freshness": {
      +                                    "description": "Whether the value is current enough to present as the device's present state.\n\n`FRESH`: the provider reported a sample within the last 30 seconds, or a\nforced refresh (`forceDeviceAttributeQuery=true` or `forceDeviceQuery`) read the\nprovider during this request and the provider reported no sample time.\n\n`STALE`: the value is older than 30 seconds, came from stored state, or is a\nprovider's own last known value. A forced refresh cannot make a provider's old\nsample newer: when the provider (for example a thermostat reached through a\nvoice-assistant account) answers with the sample it already holds, the value\nkeeps its original `sampledAt` and is `STALE`. Report the value together with\n`sampledAt`, never as the present reading.\n",
      +                                    "enum": [
      +                                      "FRESH",
      +                                      "STALE"
      +                                    ],
      +                                    "type": "string"
      +                                  },
      +                                  "name": {
      +                                    "type": "string"
      +                                  },
      +                                  "retrievability": {
      +                                    "description": "Whether the serving route supports retrieving this attribute.",
      +                                    "enum": [
      +                                      "RETRIEVABLE",
      +                                      "NOT_RETRIEVABLE"
      +                                    ],
      +                                    "type": "string"
      +                                  },
      +                                  "sampledAt": {
      +                                    "format": "date-time",
      +                                    "type": "string"
      +                                  },
      +                                  "value": {
      +                                    "additionalProperties": true,
      +                                    "type": "object"
      +                                  }
      +                                },
      +                                "required": [
      +                                  "name",
      +                                  "retrievability",
      +                                  "autoUpdateFrequency"
      +                                ],
      +                                "type": "object"
      +                              }
      +                            ]
      +                          },
      +                          "type": "array"
      +                        },
      +                        "configuration": {
      +                          "type": "object"
      +                        },
      +                        "messages": {
      +                          "items": {
      +                            "properties": {
      +                              "id": {
      +                                "type": "string"
      +                              },
      +                              "name": {
      +                                "type": "string"
      +                              }
      +                            },
      +                            "required": [
      +                              "id",
      +                              "name"
      +                            ],
      +                            "type": "object"
      +                          },
      +                          "type": "array"
      +                        },
      +                        "name": {
      +                          "type": "string"
      +                        },
      +                        "outboundMessages": {
      +                          "description": "Declared outbound message types, including results and events. Not every command returns a correlated result. These IDs cannot be sent as commands.",
      +                          "items": {
      +                            "properties": {
      +                              "id": {
      +                                "type": "string"
      +                              },
      +                              "name": {
      +                                "type": "string"
      +                              }
      +                            },
      +                            "required": [
      +                              "id",
      +                              "name"
      +                            ],
      +                            "type": "object"
      +                          },
      +                          "type": "array"
      +                        },
      +                        "version": {
      +                          "type": "string"
      +                        }
      +                      },
      +                      "required": [
      +                        "name",
      +                        "version",
      +                        "messages",
      +                        "attributes"
      +                      ],
      +                      "type": "object"
      +                    },
      +                    "type": "array"
      +                  },
      +                  "name": {
      +                    "type": "string"
      +                  },
      +                  "providerId": {
      +                    "type": "string"
      +                  },
      +                  "providerName": {
      +                    "type": "string"
      +                  }
      +                },
      +                "required": [
      +                  "id",
      +                  "providerId",
      +                  "providerName",
      +                  "interfaces"
      +                ],
      +                "type": "object"
      +              },
      +              "type": "array"
      +            },
      +            "serialNumber": {
      +              "properties": {
      +                "type": {
      +                  "type": "string"
      +                },
      +                "value": {
      +                  "type": "string"
      +                }
      +              },
      +              "required": [
      +                "type",
      +                "value"
      +              ],
      +              "type": "object"
      +            },
      +            "type": {
      +              "type": "string"
      +            }
      +          },
      +          "required": [
      +            "id",
      +            "etag",
      +            "name",
      +            "type",
      +            "enablement",
      +            "interfaces"
      +          ],
      +          "type": "object"
      +        },
      +        "type": "array"
      +      }
      +    },
      +    "required": [
      +      "results"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "description": "The one Port OS error shape, returned by every REST error response and every MCP tool error. `code` names the specific failure and `family` its broad class; both are closed enums, so clients branch on them and show `message`, which says what failed and what to do next.",
      +    "properties": {
      +      "code": {
      +        "description": "The specific error, one of a closed set of Port OS codes. Every REST error body, MCP tool error, batch item error and discovery item error uses this enum; each code belongs to an `ErrorFamily` that decides its HTTP status. Provider-specific codes are never codes: they travel in `details.providerCode`. New failure kinds are added here, never as free strings.",
      +        "enum": [
      +          "BAD_REQUEST",
      +          "UNAUTHORIZED",
      +          "FORBIDDEN",
      +          "INSUFFICIENT_SCOPE",
      +          "NOT_FOUND",
      +          "CONFLICT",
      +          "UNPROCESSABLE_ENTITY",
      +          "UNSUPPORTED_OPERATION",
      +          "TOO_MANY_REQUESTS",
      +          "SERVICE_UNAVAILABLE",
      +          "NOT_IMPLEMENTED",
      +          "INTERNAL",
      +          "CHECKSUM_MISMATCH",
      +          "FILE_TOO_LARGE",
      +          "STORAGE_UNAVAILABLE",
      +          "INSUFFICIENT_PERMISSIONS",
      +          "INVALID_FILE_TYPE",
      +          "QUOTA_EXCEEDED",
      +          "CONCURRENT_MODIFICATION",
      +          "ENDPOINT_UNREACHABLE",
      +          "BRIDGE_UNREACHABLE",
      +          "CLOUD_CONTROL_DISABLED",
      +          "ENDPOINT_BUSY",
      +          "ENDPOINT_LOW_POWER",
      +          "AUTHORIZATION_CREDENTIAL_INVALID",
      +          "AUTHORIZATION_CREDENTIAL_EXPIRED",
      +          "INVALID_DIRECTIVE",
      +          "INVALID_VALUE",
      +          "VALUE_OUT_OF_RANGE",
      +          "NOT_SUPPORTED_IN_CURRENT_MODE",
      +          "RATE_LIMIT_EXCEEDED",
      +          "PROVIDER_SERVICE_UNAVAILABLE",
      +          "PROVIDER_TIMEOUT",
      +          "PROVIDER_INTERNAL_ERROR",
      +          "INVALID_PROVIDER_RESPONSE",
      +          "OUTCOME_UNKNOWN",
      +          "PRECONDITION_FAILED",
      +          "AUTH_LINK_NOT_READY",
      +          "AUTH_LINK_NOT_DISCONNECTABLE",
      +          "PRECONDITION_REQUIRED",
      +          "IDEMPOTENCY_KEY_REQUIRED",
      +          "IDEMPOTENCY_KEY_REUSED",
      +          "IDEMPOTENCY_KEY_IN_FLIGHT",
      +          "IDEMPOTENCY_KEY_INVALID",
      +          "GROUP_MERGED",
      +          "MULTI_ROOM_UNSUPPORTED",
      +          "MAP_NOT_ACTIVE",
      +          "TARGET_UNSUPPORTED",
      +          "TARGET_AMBIGUOUS",
      +          "TARGET_GROUP_NOT_FOUND",
      +          "TARGET_GROUP_DISABLED",
      +          "DUPLICATE_TARGET_GROUP",
      +          "MESSAGE_UNSUPPORTED",
      +          "MESSAGE_AMBIGUOUS",
      +          "ENDPOINT_DISABLED",
      +          "ENDPOINT_ROUTE_CHANGED",
      +          "ENDPOINT_HAS_DEPENDENCIES",
      +          "ENDPOINT_EVENT_SUBSCRIPTIONS_ACTIVE",
      +          "ENDPOINT_COMMITTED_CLEANUP_PENDING",
      +          "DEEP_QUERY_FAILED",
      +          "PROVIDER_NO_STATE",
      +          "EVENT_MANAGEMENT_DISABLED",
      +          "SUBSCRIPTION_IDENTITY_IMMUTABLE",
      +          "UNSUPPORTED_MEDIA_TYPE",
      +          "EVENT_PAYLOAD_TOO_LARGE",
      +          "REQUEST_BODY_TOO_LARGE",
      +          "EVENT_IDENTITY_CONFLICT",
      +          "EVENT_INGRESS_QUOTA_EXCEEDED",
      +          "EVENT_RECEIPT_EXPIRED",
      +          "EVENT_STORAGE_UNAVAILABLE",
      +          "EVENT_DEAD_LETTER_NOT_FOUND",
      +          "EVENT_REDRIVE_CONFLICT",
      +          "EVENT_REDRIVE_EXPIRED",
      +          "RECEIPT_CONTEXT_EXPIRED",
      +          "EVENT_MAINTENANCE_INCOMPLETE",
      +          "UNKNOWN_INTERFACE",
      +          "INVALID_CONFIGURATION",
      +          "INVALID_PLUGIN_MANIFEST",
      +          "INVALID_ATTRIBUTE",
      +          "INVALID_PROVIDER_MESSAGE",
      +          "UNDECLARED_CAPABILITY",
      +          "PLUGIN_ROUTE_ID_CONFLICT",
      +          "UNRESOLVED_REFERENCE",
      +          "INVALID_RELATIONSHIP",
      +          "RELATIONSHIP_CYCLE",
      +          "MULTIPLE_PARENTS",
      +          "FLOW_VALIDATION_FAILED",
      +          "PROVIDER_SYNC_UNSUPPORTED"
      +        ],
      +        "type": "string"
      +      },
      +      "details": {
      +        "description": "Optional typed context for an error. Fields are additive and only populated when the error can safely expose that context to API clients.\n",
      +        "properties": {
      +          "actual": {
      +            "description": "String representation of the submitted value when the plugin can safely report it.",
      +            "type": "string"
      +          },
      +          "correlationId": {
      +            "description": "Provider or plugin correlation ID useful for support.",
      +            "type": "string"
      +          },
      +          "correlationToken": {
      +            "description": "Token that correlates an outcome-unknown dispatch with its eventual result.",
      +            "type": "string"
      +          },
      +          "currentMode": {
      +            "description": "Current endpoint mode when `code` is `NOT_SUPPORTED_IN_CURRENT_MODE`.",
      +            "type": "string"
      +          },
      +          "directive": {
      +            "description": "Message namespace and name or provider directive that failed.",
      +            "type": "string"
      +          },
      +          "discoveryEndpointId": {
      +            "description": "Port OS provider endpoint (type ENDPOINT_PLUGIN) of the connection to send `discover-routes` to when `code` is `TARGET_UNSUPPORTED` because the route must be rediscovered.",
      +            "type": "string"
      +          },
      +          "endpointId": {
      +            "description": "Port OS endpoint ID involved in the failed dispatch.",
      +            "type": "string"
      +          },
      +          "fieldErrors": {
      +            "description": "The request fields that were rejected, when the error is about the request's content.",
      +            "items": {
      +              "description": "One rejected request field of an error.",
      +              "properties": {
      +                "field": {
      +                  "description": "Name or JSON path of the rejected field.",
      +                  "type": "string"
      +                },
      +                "reason": {
      +                  "description": "Why the field was rejected and what an accepted value looks like.",
      +                  "type": "string"
      +                }
      +              },
      +              "required": [
      +                "field",
      +                "reason"
      +              ],
      +              "type": "object"
      +            },
      +            "type": "array"
      +          },
      +          "maximum": {
      +            "description": "Maximum accepted value when `code` is `VALUE_OUT_OF_RANGE`.",
      +            "type": "number"
      +          },
      +          "minimum": {
      +            "description": "Minimum accepted value when `code` is `VALUE_OUT_OF_RANGE`.",
      +            "type": "number"
      +          },
      +          "parameter": {
      +            "description": "Request parameter or capability value that caused the failure.",
      +            "type": "string"
      +          },
      +          "pluginId": {
      +            "description": "Port OS plugin ID that reported the failure.",
      +            "type": "string"
      +          },
      +          "pluginRouteId": {
      +            "description": "Plugin-owned route identifier involved in the failed dispatch.",
      +            "type": "string"
      +          },
      +          "provider": {
      +            "description": "Third-party provider or bridge name that reported the failure.",
      +            "type": "string"
      +          },
      +          "providerCode": {
      +            "description": "The third-party provider's own error code, for support. It is opaque and provider-specific; branch on `code` and `family` instead.",
      +            "type": "string"
      +          },
      +          "retryAfterSeconds": {
      +            "description": "Suggested retry delay for rate-limit or provider-unavailable failures.",
      +            "minimum": 0,
      +            "type": "integer"
      +          }
      +        },
      +        "type": "object"
      +      },
      +      "errors": {
      +        "description": "Every rejected item when a request that is validated item by item and applied atomically fails, such as a discovery `SynchronizationRequest` whose routes, group routes or relationships are rejected. Omitted for single-item failures.\n",
      +        "items": {
      +          "description": "One rejected discovery item of a `SynchronizationRequest`, keyed by the plugin-owned identity of the rejected item: `pluginRouteId` for a route or group route, or `relationshipExternalId` for a relationship. Exactly one of the two is set. It shares the `code`, `family`, `status` and `message` fields of `BatchItemError`; discovery items are keyed by plugin-owned identity because they carry no `requestId`. A request with any rejected item is rejected as a whole and lists every rejected item.\n",
      +          "properties": {
      +            "code": {
      +              "description": "The specific error, one of a closed set of Port OS codes. Every REST error body, MCP tool error, batch item error and discovery item error uses this enum; each code belongs to an `ErrorFamily` that decides its HTTP status. Provider-specific codes are never codes: they travel in `details.providerCode`. New failure kinds are added here, never as free strings.",
      +              "enum": [
      +                "BAD_REQUEST",
      +                "UNAUTHORIZED",
      +                "FORBIDDEN",
      +                "INSUFFICIENT_SCOPE",
      +                "NOT_FOUND",
      +                "CONFLICT",
      +                "UNPROCESSABLE_ENTITY",
      +                "UNSUPPORTED_OPERATION",
      +                "TOO_MANY_REQUESTS",
      +                "SERVICE_UNAVAILABLE",
      +                "NOT_IMPLEMENTED",
      +                "INTERNAL",
      +                "CHECKSUM_MISMATCH",
      +                "FILE_TOO_LARGE",
      +                "STORAGE_UNAVAILABLE",
      +                "INSUFFICIENT_PERMISSIONS",
      +                "INVALID_FILE_TYPE",
      +                "QUOTA_EXCEEDED",
      +                "CONCURRENT_MODIFICATION",
      +                "ENDPOINT_UNREACHABLE",
      +                "BRIDGE_UNREACHABLE",
      +                "CLOUD_CONTROL_DISABLED",
      +                "ENDPOINT_BUSY",
      +                "ENDPOINT_LOW_POWER",
      +                "AUTHORIZATION_CREDENTIAL_INVALID",
      +                "AUTHORIZATION_CREDENTIAL_EXPIRED",
      +                "INVALID_DIRECTIVE",
      +                "INVALID_VALUE",
      +                "VALUE_OUT_OF_RANGE",
      +                "NOT_SUPPORTED_IN_CURRENT_MODE",
      +                "RATE_LIMIT_EXCEEDED",
      +                "PROVIDER_SERVICE_UNAVAILABLE",
      +                "PROVIDER_TIMEOUT",
      +                "PROVIDER_INTERNAL_ERROR",
      +                "INVALID_PROVIDER_RESPONSE",
      +                "OUTCOME_UNKNOWN",
      +                "PRECONDITION_FAILED",
      +                "AUTH_LINK_NOT_READY",
      +                "AUTH_LINK_NOT_DISCONNECTABLE",
      +                "PRECONDITION_REQUIRED",
      +                "IDEMPOTENCY_KEY_REQUIRED",
      +                "IDEMPOTENCY_KEY_REUSED",
      +                "IDEMPOTENCY_KEY_IN_FLIGHT",
      +                "IDEMPOTENCY_KEY_INVALID",
      +                "GROUP_MERGED",
      +                "MULTI_ROOM_UNSUPPORTED",
      +                "MAP_NOT_ACTIVE",
      +                "TARGET_UNSUPPORTED",
      +                "TARGET_AMBIGUOUS",
      +                "TARGET_GROUP_NOT_FOUND",
      +                "TARGET_GROUP_DISABLED",
      +                "DUPLICATE_TARGET_GROUP",
      +                "MESSAGE_UNSUPPORTED",
      +                "MESSAGE_AMBIGUOUS",
      +                "ENDPOINT_DISABLED",
      +                "ENDPOINT_ROUTE_CHANGED",
      +                "ENDPOINT_HAS_DEPENDENCIES",
      +                "ENDPOINT_EVENT_SUBSCRIPTIONS_ACTIVE",
      +                "ENDPOINT_COMMITTED_CLEANUP_PENDING",
      +                "DEEP_QUERY_FAILED",
      +                "PROVIDER_NO_STATE",
      +                "EVENT_MANAGEMENT_DISABLED",
      +                "SUBSCRIPTION_IDENTITY_IMMUTABLE",
      +                "UNSUPPORTED_MEDIA_TYPE",
      +                "EVENT_PAYLOAD_TOO_LARGE",
      +                "REQUEST_BODY_TOO_LARGE",
      +                "EVENT_IDENTITY_CONFLICT",
      +                "EVENT_INGRESS_QUOTA_EXCEEDED",
      +                "EVENT_RECEIPT_EXPIRED",
      +                "EVENT_STORAGE_UNAVAILABLE",
      +                "EVENT_DEAD_LETTER_NOT_FOUND",
      +                "EVENT_REDRIVE_CONFLICT",
      +                "EVENT_REDRIVE_EXPIRED",
      +                "RECEIPT_CONTEXT_EXPIRED",
      +                "EVENT_MAINTENANCE_INCOMPLETE",
      +                "UNKNOWN_INTERFACE",
      +                "INVALID_CONFIGURATION",
      +                "INVALID_PLUGIN_MANIFEST",
      +                "INVALID_ATTRIBUTE",
      +                "INVALID_PROVIDER_MESSAGE",
      +                "UNDECLARED_CAPABILITY",
      +                "PLUGIN_ROUTE_ID_CONFLICT",
      +                "UNRESOLVED_REFERENCE",
      +                "INVALID_RELATIONSHIP",
      +                "RELATIONSHIP_CYCLE",
      +                "MULTIPLE_PARENTS",
      +                "FLOW_VALIDATION_FAILED",
      +                "PROVIDER_SYNC_UNSUPPORTED"
      +              ],
      +              "type": "string"
      +            },
      +            "family": {
      +              "description": "The broad class of an error. The family decides the HTTP status of a REST error, so clients can handle every code of a family alike.",
      +              "enum": [
      +                "NOT_FOUND",
      +                "BAD_REQUEST",
      +                "UNAUTHORIZED",
      +                "FORBIDDEN",
      +                "CONFLICT",
      +                "GONE",
      +                "PRECONDITION_FAILED",
      +                "PRECONDITION_REQUIRED",
      +                "PAYLOAD_TOO_LARGE",
      +                "UNSUPPORTED_MEDIA_TYPE",
      +                "UNPROCESSABLE_ENTITY",
      +                "LOCKED",
      +                "TOO_MANY_REQUESTS",
      +                "BAD_GATEWAY",
      +                "SERVICE_UNAVAILABLE",
      +                "GATEWAY_TIMEOUT",
      +                "NOT_IMPLEMENTED",
      +                "INTERNAL_SERVER_ERROR",
      +                "REQUEST_INVALID",
      +                "AUTHENTICATION",
      +                "PERMISSION",
      +                "ENDPOINT_NOT_FOUND",
      +                "ENDPOINT_STATE_CONFLICT",
      +                "ENDPOINT_UNAVAILABLE",
      +                "RATE_LIMIT",
      +                "PROVIDER_BAD_RESPONSE",
      +                "PROVIDER_UNAVAILABLE",
      +                "PROVIDER_TIMEOUT"
      +              ],
      +              "type": "string"
      +            },
      +            "interface": {
      +              "description": "Canonical capability interface name the failure applies to, when the failure is interface-specific.",
      +              "type": "string"
      +            },
      +            "message": {
      +              "description": "Plain-language description of the failure and the suggested fix.",
      +              "type": "string"
      +            },
      +            "pluginRouteId": {
      +              "description": "Plugin-owned identifier of the rejected route or group route. Set unless the item is a relationship.",
      +              "type": "string"
      +            },
      +            "relationshipExternalId": {
      +              "description": "Plugin-owned `externalId` of the rejected relationship. Set only for relationship items.",
      +              "type": "string"
      +            },
      +            "status": {
      +              "description": "HTTP-equivalent status code of the item failure.",
      +              "maximum": 599,
      +              "minimum": 400,
      +              "type": "integer"
      +            },
      +            "version": {
      +              "description": "Declared capability interface version the failure applies to, when the failure is interface-specific.",
      +              "type": "string"
      +            }
      +          },
      +          "required": [
      +            "code",
      +            "family",
      +            "status",
      +            "message"
      +          ],
      +          "type": "object"
      +        },
      +        "type": "array"
      +      },
      +      "family": {
      +        "description": "The broad class of an error. The family decides the HTTP status of a REST error, so clients can handle every code of a family alike.",
      +        "enum": [
      +          "NOT_FOUND",
      +          "BAD_REQUEST",
      +          "UNAUTHORIZED",
      +          "FORBIDDEN",
      +          "CONFLICT",
      +          "GONE",
      +          "PRECONDITION_FAILED",
      +          "PRECONDITION_REQUIRED",
      +          "PAYLOAD_TOO_LARGE",
      +          "UNSUPPORTED_MEDIA_TYPE",
      +          "UNPROCESSABLE_ENTITY",
      +          "LOCKED",
      +          "TOO_MANY_REQUESTS",
      +          "BAD_GATEWAY",
      +          "SERVICE_UNAVAILABLE",
      +          "GATEWAY_TIMEOUT",
      +          "NOT_IMPLEMENTED",
      +          "INTERNAL_SERVER_ERROR",
      +          "REQUEST_INVALID",
      +          "AUTHENTICATION",
      +          "PERMISSION",
      +          "ENDPOINT_NOT_FOUND",
      +          "ENDPOINT_STATE_CONFLICT",
      +          "ENDPOINT_UNAVAILABLE",
      +          "RATE_LIMIT",
      +          "PROVIDER_BAD_RESPONSE",
      +          "PROVIDER_UNAVAILABLE",
      +          "PROVIDER_TIMEOUT"
      +        ],
      +        "type": "string"
      +      },
      +      "message": {
      +        "description": "Plain-language description of the failure and the suggested next action.",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "family",
      +      "code",
      +      "message"
      +    ],
      +    "type": "object"
      +  }
      +]
  2. First observed

TDQS

A4.8/5.0
Behavior5/5

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

Annotations already declare readOnly/idempotent/non-destructive, and the description adds substantial behavior beyond them: single match opens full view vs multiple matches render only a name list, primary refreshes that card's readings from the device, expand replaces the default card selection, and FRESH vs STALE reading semantics with age. None of this contradicts 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-loaded with purpose and the widget rule, followed by matching, primary selection, and freshness semantics in a logical order. It runs long and repeats ideas (cardIds explained twice, 'never draw your own map' restated), so a few sentences could be trimmed.

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 8 parameters, nested query object, and an output schema present, the description covers what the agent still needs: rendering behavior, match-count behavior, card selection, and how to answer with cached vs fresh readings. Nothing essential for a correct invocation 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 100%, so the baseline is 3, but the description earns more by mapping user intents to concrete `primary` values ('what's the battery' -> battery, 'where is my phone' -> location) and by explaining that `primary` refreshes readings whereas `expand` replaces the card selection. It stops short of covering the remaining multi-param interactions (query/enablement/pagination) in prose.

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 (show devices with their supported controls) and immediately distinguishes itself from siblings: it is the widget-opening tool, not endpoint_query, and it explicitly does not send control commands like `control`. An agent can route correctly 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 Guidelines5/5

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

Gives explicit when-to-use ('To show a device, always call this tool'), when-not-to-use ('never render a second card, map or controls for it'), and the routing rule for controlling a device (pass one full endpoint ID or a query matching one device). Alternatives are named directly.

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources