Skip to main content
Glama

Devops Get Incidents

devops_get_incidents
Read-onlyIdempotent

Fetch incident history and scheduled maintenance windows for a vendor. Returns full incident timeline — each investigator update, affected components, and resolution. Filter by status to focus on active incidents (use before deploy), resolved history (for postmortem), or upcoming maintenance windows, and narrow further with match (words in the title or affected component names) and since/until (a start-date range) — all applied before paging, so totals count only what they keep. Page through long histories with limit + offset — a truncated result discloses the total and returns the value to page with in nextOffset. Each response is held to 64,000 bytes per surface: a page can stop short of limit at that budget (the paging fields and notice say so), and an incident too large on its own keeps only its newest updates, with updates_omitted counting the rest — full_updates: true returns them all. Some vendor feeds cap their own history: when upstreamCeiling is present the vendor API returned everything it will serve, and older incidents are not reachable at a higher offset. On Atlassian Statuspage vendors, since (a date) also reads the status page's quarterly history archive back to that date, or 24 months back at most, where the page publishes one — not on a vendor that covers only part of a shared page, such as "sendgrid"; those records are marked source: "history" and carry the title, impact, start and end times, and final update message only. An empty result, or a history read that stopped short of since, explains itself in notice.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum incidents to return per call, at least 1. A value over 50 is served as 50, and the notice says so. Page through longer history with offset rather than raising this.
matchNoWords to look for in each incident's title and affected component names, ignoring case and punctuation ("git-operations" reads as "git operations"). An incident is kept when every word appears, as all or part of a word, in its title or in one of its component names. History-archive records, and vendors that publish no components, match on title alone. Applied before limit/offset, so totals and paging count only the matches. Leave blank to keep every incident.
sinceNoEarliest start date to include, as YYYY-MM-DD (UTC). Accepted with filter "all" or "resolved". Incidents that started before it are left out, and limit/offset page the rest. On Atlassian Statuspage vendors it also reads the status page's quarterly history archive back to this date, reaching incidents older than the 50 the status API serves — except on a vendor that covers only part of a shared status page (such as "sendgrid" on Twilio's page), whose archive records carry no components to narrow by. The archive is read back 24 months at most: for an earlier date, older records come only from what the status API still returns (such as completed maintenance windows), and the notice gives the date the archive was read back to. Omit to read only the status API.
untilNoLatest start date to include, as YYYY-MM-DD (UTC) — the whole day, so until equal to since returns that one day. Accepted with filter "all" or "resolved", and on or after since. Incidents that started after it are left out before limit/offset page the rest. It reads no history archive on its own: set since as well to reach incidents older than the status API returns, through an archive read back 24 months at most.
filterNoall: incidents plus scheduled maintenances. active: only incidents with status investigating/identified/monitoring. resolved: only fully resolved incidents. scheduled: only scheduled maintenance windows. Not every vendor backend serves every filter — "aws" lists a resolved event only until it drops off its feed, "azure" lists open items only (never resolved), and "aws", "azure", "azure-devops", "gcp", and "slack" publish no maintenance windows. An empty result names which case applied.all
offsetNoNumber of matching incidents to skip before applying limit, for paging through history. 0 (default) returns the most recent page; a truncated result returns the value to use next in the nextOffset field. Raising offset past the number of matches returns an empty list and says so.
vendorYesVendor slug (e.g., "github", "aws") or raw Atlassian Statuspage base URL. Use devops_list_vendors to find slugs.
full_updatesNoReturn every update of an incident that is too large for the response size budget on its own, instead of only its newest updates. Default false. Pair it with limit: 1 and the offset the notice names; the response can then run past the budget.

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
capNoThe limit that was applied: the requested limit, or 50 when a larger one was requested. Present only when truncated.
nameNoDisplay name of the vendor.
errorNoPresent when the call failed. Absent on success.
shownNoNumber of incidents on this page: the limit, or fewer when the page stopped at the response size budget. Present only when truncated.
noticeNoPlain-language explanation of this result — a limit over 50 that was served as 50 (with the requested and effective values), a since older than the 24-month history-archive floor (with the date the archive was read back to), how to page onward, that the page stopped at the response size budget or left out an oversized incident's oldest updates (and the call that returns them all), why it came back empty (the vendor currently publishes nothing at all, a filter the backend cannot satisfy, an offset past the end, a since/until range or match words that left everything out — naming the archive floor when the range starts before it), that the vendor feed capped the history, or how far the history archive was read when it stopped short of since or its floor. Absent when the result needs no explanation.
vendorNoVendor slug or URL as provided.
incidentsNoMatching incidents.
truncatedNoTrue when more incidents matched than this page returned — because of limit, or because the page stopped at the response size budget. Absent when this page reached the end of the matches.
nextOffsetNoThe offset to pass on the next call to continue from where this page stopped, already computed as offset + the number returned. Present only when truncated — its absence means this page reached the end of what the filter matched.
totalCountNoTotal incidents matching the filter, date range, and match, across all pages, before offset/limit windowing. Present only when the result was truncated.
statuspage_urlNoStatus page base URL used.
total_returnedNoNumber of incidents in the response.
upstreamCeilingNoMaximum incidents the vendor's own status API serves in one fetch, present only when that ceiling was reached on this call. It bounds the history independently of limit and offset: incidents older than the oldest one returned cannot be fetched at any offset. On Atlassian Statuspage vendors, since reads past it from the page's history archive, except on a vendor that covers only part of a shared page, such as "sendgrid". Absent when the vendor feed is unbounded, returned less than its ceiling, or since was set and the history archive was read back to it (or to its 24-month floor, when since is older).

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed18 schema fields changed
    • changedInput schema / properties / filter / description
      Previous value: -"all: incidents plus scheduled maintenances. active: only incidents with status investigating/identified/monitoring. resolved: only fully resolved incidents. scheduled: only scheduled maintenance windows. Not every vendor backend serves every filter — \"aws\" lists a resolved event only until it drops off its feed, \"azure\" lists open items only (never resolved), and \"aws\", \"azure\", \"gcp\", and \"slack\" publish no maintenance windows. An empty result names which case applied."New value: +"all: incidents plus scheduled maintenances. active: only incidents with status investigating/identified/monitoring. resolved: only fully resolved incidents. scheduled: only scheduled maintenance windows. Not every vendor backend serves every filter — \"aws\" lists a resolved event only until it drops off its feed, \"azure\" lists open items only (never resolved), and \"aws\", \"azure\", \"azure-devops\", \"gcp\", and \"slack\" publish no maintenance windows. An empty result names which case applied."
    • addedInput schema / properties / full_updates
      Added value: +{
      +  "default": false,
      +  "description": "Return every update of an incident that is too large for the response size budget on its own, instead of only its newest updates. Default false. Pair it with limit: 1 and the offset the notice names; the response can then run past the budget.",
      +  "type": "boolean"
      +}
    • changedInput schema / properties / limit / description
      Previous value: -"Maximum incidents to return per call (1–50). Page through longer history with offset rather than raising this."New value: +"Maximum incidents to return per call, at least 1. A value over 50 is served as 50, and the notice says so. Page through longer history with offset rather than raising this."
    • changedInput schema / properties / limit / maximum
      Previous value: -50New value: +9007199254740991
    • addedInput schema / properties / match
      Added value: +{
      +  "description": "Words to look for in each incident's title and affected component names, ignoring case and punctuation (\"git-operations\" reads as \"git operations\"). An incident is kept when every word appears, as all or part of a word, in its title or in one of its component names. History-archive records, and vendors that publish no components, match on title alone. Applied before limit/offset, so totals and paging count only the matches. Leave blank to keep every incident.",
      +  "maxLength": 200,
      +  "type": "string"
      +}
    • changedInput schema / properties / since / description
      Previous value: -"Earliest start date to include, as YYYY-MM-DD (UTC), at most 24 months back. Accepted with filter \"all\" or \"resolved\". Incidents that started before it are left out, and limit/offset page the rest. On Atlassian Statuspage vendors it also reads the status page's quarterly history archive back to this date, reaching incidents older than the 50 the status API serves. Omit to read only the status API."New value: +"Earliest start date to include, as YYYY-MM-DD (UTC). Accepted with filter \"all\" or \"resolved\". Incidents that started before it are left out, and limit/offset page the rest. On Atlassian Statuspage vendors it also reads the status page's quarterly history archive back to this date, reaching incidents older than the 50 the status API serves — except on a vendor that covers only part of a shared status page (such as \"sendgrid\" on Twilio's page), whose archive records carry no components to narrow by. The archive is read back 24 months at most: for an earlier date, older records come only from what the status API still returns (such as completed maintenance windows), and the notice gives the date the archive was read back to. Omit to read only the status API."
    • addedInput schema / properties / until
      Added value: +{
      +  "anyOf": [
      +    {
      +      "const": "",
      +      "type": "string"
      +    },
      +    {
      +      "description": "Latest start date to include, as YYYY-MM-DD (UTC), e.g. \"2025-10-31\".",
      +      "format": "date",
      +      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
      +      "type": "string"
      +    }
      +  ],
      +  "description": "Latest start date to include, as YYYY-MM-DD (UTC) — the whole day, so until equal to since returns that one day. Accepted with filter \"all\" or \"resolved\", and on or after since. Incidents that started after it are left out before limit/offset page the rest. It reads no history archive on its own: set since as well to reach incidents older than the status API returns, through an archive read back 24 months at most."
      +}
    • changedOutput schema / properties / cap / description
      Previous value: -"The limit that was applied. Present only when truncated."New value: +"The limit that was applied: the requested limit, or 50 when a larger one was requested. Present only when truncated."
    • changedOutput schema / properties / error / properties / data / properties / reason / description
      Previous value: -"Machine-readable failure mode. Declared by this tool: `vendor_not_found`: Vendor slug not in registry and input is not a valid URL. `target_blocked`: A raw URL resolves to a private, loopback, or cloud-metadata address. `invalid_since`: since was passed with filter \"active\" or \"scheduled\", or is more than 24 months back. `statuspage_unavailable`: The vendor's status API returned an error or timed out. Other values are possible when a failure originates below the handler."New value: +"Machine-readable failure mode. Declared by this tool: `vendor_not_found`: Vendor slug not in registry and input is not a valid URL. `target_blocked`: A raw URL resolves to a private, loopback, or cloud-metadata address. `invalid_since`: since was passed with filter \"active\" or \"scheduled\". `invalid_until`: until was passed with filter \"active\" or \"scheduled\", or names a date earlier than the since date. `statuspage_unavailable`: The vendor's status API returned an error or timed out. Other values are possible when a failure originates below the handler."
    • changedOutput schema / properties / error / properties / data / properties / reason / examples
      Previous value: -[
      -  "vendor_not_found",
      -  "target_blocked",
      -  "invalid_since",
      -  "statuspage_unavailable"
      -]New value: +[
      +  "vendor_not_found",
      +  "target_blocked",
      +  "invalid_since",
      +  "invalid_until",
      +  "statuspage_unavailable"
      +]
    • changedOutput schema / properties / incidents / items / properties / updates / description
      Previous value: -"Chronological list of incident updates (oldest first). A history-archive record carries only its final update, dated at its end time (or its start when it has none)."New value: +"Chronological list of incident updates (oldest first). A history-archive record carries only its final update, dated at its end time (or its start when it has none). An incident too large for the response size budget on its own carries only its newest updates, and updates_omitted counts the rest."
    • changedOutput schema / properties / incidents / items / properties / updates / items / properties / body / description
      Previous value: -"Update text from the vendor."New value: +"Update text from the vendor, as plain text: HTML markup the vendor published is converted (a link reads as its text, then its URL), and any other < is text the vendor wrote."
    • addedOutput schema / properties / incidents / items / properties / updates_omitted
      Added value: +{
      +  "description": "How many of this incident's oldest updates were left out because it alone exceeds the response size budget; the updates returned are its newest. Absent when every update is returned. Call again with full_updates: true and limit: 1 at this incident's offset to read them all.",
      +  "maximum": 9007199254740991,
      +  "minimum": -9007199254740991,
      +  "type": "integer"
      +}
    • changedOutput schema / properties / notice / description
      Previous value: -"Plain-language explanation of this result — how to page onward, why it came back empty (the vendor currently publishes nothing at all, a filter the backend cannot satisfy, an offset past the end, or a since date that left everything out), that the vendor feed capped the history, or how far the history archive was read when it stopped short of since. Absent when the result needs no explanation."New value: +"Plain-language explanation of this result — a limit over 50 that was served as 50 (with the requested and effective values), a since older than the 24-month history-archive floor (with the date the archive was read back to), how to page onward, that the page stopped at the response size budget or left out an oversized incident's oldest updates (and the call that returns them all), why it came back empty (the vendor currently publishes nothing at all, a filter the backend cannot satisfy, an offset past the end, a since/until range or match words that left everything out — naming the archive floor when the range starts before it), that the vendor feed capped the history, or how far the history archive was read when it stopped short of since or its floor. Absent when the result needs no explanation."
    • changedOutput schema / properties / shown / description
      Previous value: -"Number of incidents returned after applying the limit. Present only when truncated."New value: +"Number of incidents on this page: the limit, or fewer when the page stopped at the response size budget. Present only when truncated."
    • changedOutput schema / properties / totalCount / description
      Previous value: -"Total incidents matching the filter, across all pages, before offset/limit windowing. Present only when the result was truncated."New value: +"Total incidents matching the filter, date range, and match, across all pages, before offset/limit windowing. Present only when the result was truncated."
    • changedOutput schema / properties / truncated / description
      Previous value: -"True when more incidents matched than the limit returned. Absent when the result was not capped."New value: +"True when more incidents matched than this page returned — because of limit, or because the page stopped at the response size budget. Absent when this page reached the end of the matches."
    • changedOutput schema / properties / upstreamCeiling / description
      Previous value: -"Maximum incidents the vendor's own status API serves in one fetch, present only when that ceiling was reached on this call. It bounds the history independently of limit and offset: incidents older than the oldest one returned cannot be fetched at any offset. On Atlassian Statuspage vendors, since reads past it from the page's history archive. Absent when the vendor feed is unbounded, returned less than its ceiling, or since was set and the history archive was read back to it."New value: +"Maximum incidents the vendor's own status API serves in one fetch, present only when that ceiling was reached on this call. It bounds the history independently of limit and offset: incidents older than the oldest one returned cannot be fetched at any offset. On Atlassian Statuspage vendors, since reads past it from the page's history archive, except on a vendor that covers only part of a shared page, such as \"sendgrid\". Absent when the vendor feed is unbounded, returned less than its ceiling, or since was set and the history archive was read back to it (or to its 24-month floor, when since is older)."
  2. Changed16 schema fields changed
    • changedInput schema / properties / filter / description
      Previous value: -"all: incidents plus scheduled maintenances. active: only incidents with status investigating/identified/monitoring. resolved: only fully resolved incidents. scheduled: only scheduled maintenance windows. Not every vendor backend serves every filter — \"aws\" publishes currently-open events only (never resolved, no maintenance windows), and \"gcp\" and \"slack\" publish no maintenance windows. An empty result names which case applied."New value: +"all: incidents plus scheduled maintenances. active: only incidents with status investigating/identified/monitoring. resolved: only fully resolved incidents. scheduled: only scheduled maintenance windows. Not every vendor backend serves every filter — \"aws\" lists a resolved event only until it drops off its feed, \"azure\" lists open items only (never resolved), and \"aws\", \"azure\", \"gcp\", and \"slack\" publish no maintenance windows. An empty result names which case applied."
    • addedInput schema / properties / since
      Added value: +{
      +  "anyOf": [
      +    {
      +      "const": "",
      +      "type": "string"
      +    },
      +    {
      +      "description": "Earliest start date to include, as YYYY-MM-DD (UTC), e.g. \"2025-10-01\".",
      +      "format": "date",
      +      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
      +      "type": "string"
      +    }
      +  ],
      +  "description": "Earliest start date to include, as YYYY-MM-DD (UTC), at most 24 months back. Accepted with filter \"all\" or \"resolved\". Incidents that started before it are left out, and limit/offset page the rest. On Atlassian Statuspage vendors it also reads the status page's quarterly history archive back to this date, reaching incidents older than the 50 the status API serves. Omit to read only the status API."
      +}
    • changedOutput schema / properties / error / properties / data / properties / reason / description
      Previous value: -"Machine-readable failure mode. Declared by this tool: `vendor_not_found`: Vendor slug not in registry and input is not a valid URL. `target_blocked`: A raw URL resolves to a private, loopback, or cloud-metadata address. `statuspage_unavailable`: The vendor's status API returned an error or timed out. Other values are possible when a failure originates below the handler."New value: +"Machine-readable failure mode. Declared by this tool: `vendor_not_found`: Vendor slug not in registry and input is not a valid URL. `target_blocked`: A raw URL resolves to a private, loopback, or cloud-metadata address. `invalid_since`: since was passed with filter \"active\" or \"scheduled\", or is more than 24 months back. `statuspage_unavailable`: The vendor's status API returned an error or timed out. Other values are possible when a failure originates below the handler."
    • changedOutput schema / properties / error / properties / data / properties / reason / examples
      Previous value: -[
      -  "vendor_not_found",
      -  "target_blocked",
      -  "statuspage_unavailable"
      -]New value: +[
      +  "vendor_not_found",
      +  "target_blocked",
      +  "invalid_since",
      +  "statuspage_unavailable"
      +]
    • changedOutput schema / properties / incidents / items / properties / created_at / description
      Previous value: -"ISO 8601 UTC timestamp when the incident was created."New value: +"ISO 8601 timestamp when the incident was created, carrying the UTC offset the vendor published (Z, +00:00, or a local offset such as -07:00). For a history-archive record, the start time its status page displays, to the minute, in UTC."
    • changedOutput schema / properties / incidents / items / properties / resolved_at / description
      Previous value: -"ISO 8601 UTC timestamp when resolved, or null if still active."New value: +"ISO 8601 timestamp, with the vendor's UTC offset, when resolved, or null if still active. For a history-archive record, to the minute, in UTC."
    • changedOutput schema / properties / incidents / items / properties / scheduled_for / description
      Previous value: -"Present for scheduled maintenances — ISO 8601 UTC start time."New value: +"Present for scheduled maintenances — ISO 8601 start time with the vendor's UTC offset."
    • changedOutput schema / properties / incidents / items / properties / scheduled_until / description
      Previous value: -"Present for scheduled maintenances — ISO 8601 UTC end time."New value: +"Present for scheduled maintenances — ISO 8601 end time with the vendor's UTC offset."
    • addedOutput schema / properties / incidents / items / properties / source
      Added value: +{
      +  "description": "Where this record came from. api: the vendor's status API, with the full update timeline and affected components. history: the status page's quarterly history archive, read only when since is set — title, impact, start and end times, and the final update message, with no components and no started_at, scheduled window, or duration.",
      +  "enum": [
      +    "api",
      +    "history"
      +  ],
      +  "type": "string"
      +}
    • changedOutput schema / properties / incidents / items / properties / started_at / description
      Previous value: -"ISO 8601 UTC timestamp when the incident started, or null/absent if not set by the vendor."New value: +"ISO 8601 timestamp, with the vendor's UTC offset, when the incident started, or null/absent if not set by the vendor."
    • changedOutput schema / properties / incidents / items / properties / status / description
      Previous value: -"Current status: investigating | identified | monitoring | resolved | postmortem | scheduled | in_progress | completed."New value: +"Current status: investigating | identified | monitoring | resolved | postmortem | scheduled | in_progress | completed | unknown. unknown marks a history-archive record with no end time, whose lifecycle stage the archive does not publish."
    • changedOutput schema / properties / incidents / items / properties / updates / description
      Previous value: -"Chronological list of incident updates (oldest first)."New value: +"Chronological list of incident updates (oldest first). A history-archive record carries only its final update, dated at its end time (or its start when it has none)."
    • changedOutput schema / properties / incidents / items / properties / updates / items / properties / created_at / description
      Previous value: -"ISO 8601 UTC timestamp of this update."New value: +"ISO 8601 timestamp of this update, with the vendor's UTC offset."
    • changedOutput schema / properties / incidents / items / required
      Previous value: -[
      -  "id",
      -  "name",
      -  "impact",
      -  "status",
      -  "created_at",
      -  "resolved_at",
      -  "scheduled_for",
      -  "scheduled_until",
      -  "duration_minutes",
      -  "affected_components",
      -  "updates"
      -]New value: +[
      +  "id",
      +  "name",
      +  "impact",
      +  "status",
      +  "created_at",
      +  "resolved_at",
      +  "scheduled_for",
      +  "scheduled_until",
      +  "duration_minutes",
      +  "affected_components",
      +  "updates",
      +  "source"
      +]
    • changedOutput schema / properties / notice / description
      Previous value: -"Plain-language explanation of this result — how to page onward, why it came back empty (the vendor currently publishes nothing at all, a filter the backend cannot satisfy, or an offset past the end), or that the vendor feed capped the history. Absent when the result needs no explanation."New value: +"Plain-language explanation of this result — how to page onward, why it came back empty (the vendor currently publishes nothing at all, a filter the backend cannot satisfy, an offset past the end, or a since date that left everything out), that the vendor feed capped the history, or how far the history archive was read when it stopped short of since. Absent when the result needs no explanation."
    • changedOutput schema / properties / upstreamCeiling / description
      Previous value: -"Maximum incidents the vendor's own status API serves in one fetch, present only when that ceiling was reached on this call. It bounds the history independently of limit and offset: incidents older than the oldest one returned cannot be fetched at any offset, only browsed on the vendor status page. Absent when the vendor feed is unbounded or returned less than its ceiling."New value: +"Maximum incidents the vendor's own status API serves in one fetch, present only when that ceiling was reached on this call. It bounds the history independently of limit and offset: incidents older than the oldest one returned cannot be fetched at any offset. On Atlassian Statuspage vendors, since reads past it from the page's history archive. Absent when the vendor feed is unbounded, returned less than its ceiling, or since was set and the history archive was read back to it."
  3. Changed12 schema fields changed
    • removedOutput schema / properties / incidents / items / properties / duration_minutes / anyOf
      Removed value: -[
      -  {
      -    "type": "number"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / incidents / items / properties / duration_minutes / type
      Added value: +[
      +  "number",
      +  "null"
      +]
    • removedOutput schema / properties / incidents / items / properties / resolved_at / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / incidents / items / properties / resolved_at / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / properties / incidents / items / properties / scheduled_for / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / incidents / items / properties / scheduled_for / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / properties / incidents / items / properties / scheduled_until / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / incidents / items / properties / scheduled_until / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / properties / incidents / items / properties / shortlink / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / incidents / items / properties / shortlink / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / properties / incidents / items / properties / started_at / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / incidents / items / properties / started_at / type
      Added value: +[
      +  "string",
      +  "null"
      +]
  4. Changed6 schema fields changed
    • changedInput schema / $schema
      Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • addedInput schema / additionalProperties
      Added value: +false
    • changedOutput schema / $schema
      Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • addedOutput schema / anyOf
      Added value: +[
      +  {
      +    "not": {
      +      "required": [
      +        "error"
      +      ]
      +    },
      +    "required": [
      +      "vendor",
      +      "name",
      +      "incidents",
      +      "total_returned",
      +      "statuspage_url"
      +    ]
      +  },
      +  {
      +    "required": [
      +      "error"
      +    ]
      +  }
      +]
    • addedOutput schema / properties / error
      Added value: +{
      +  "additionalProperties": {},
      +  "description": "Present when the call failed. Absent on success.",
      +  "properties": {
      +    "code": {
      +      "description": "JSON-RPC error code for this failure.",
      +      "maximum": 9007199254740991,
      +      "minimum": -9007199254740991,
      +      "type": "integer"
      +    },
      +    "data": {
      +      "additionalProperties": {},
      +      "properties": {
      +        "reason": {
      +          "description": "Machine-readable failure mode. Declared by this tool: `vendor_not_found`: Vendor slug not in registry and input is not a valid URL. `target_blocked`: A raw URL resolves to a private, loopback, or cloud-metadata address. `statuspage_unavailable`: The vendor's status API returned an error or timed out. Other values are possible when a failure originates below the handler.",
      +          "examples": [
      +            "vendor_not_found",
      +            "target_blocked",
      +            "statuspage_unavailable"
      +          ],
      +          "type": "string"
      +        },
      +        "recovery": {
      +          "additionalProperties": {},
      +          "description": "Actionable next step for the caller.",
      +          "properties": {
      +            "hint": {
      +              "type": "string"
      +            }
      +          },
      +          "required": [
      +            "hint"
      +          ],
      +          "type": "object"
      +        },
      +        "retryable": {
      +          "description": "Whether retrying may succeed.",
      +          "type": "boolean"
      +        }
      +      },
      +      "type": "object"
      +    },
      +    "message": {
      +      "description": "Human-readable description of what went wrong.",
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "code",
      +    "message"
      +  ],
      +  "type": "object"
      +}
    • removedOutput schema / required
      Removed value: -[
      -  "vendor",
      -  "name",
      -  "incidents",
      -  "total_returned",
      -  "statuspage_url"
      -]
  5. Changed1 schema field changed
    • changedOutput schema / properties / notice / description
      Previous value: -"Plain-language explanation of this result — how to page onward, why it came back empty (filter the backend cannot satisfy, or an offset past the end), or that the vendor feed capped the history. Absent when the result needs no explanation."New value: +"Plain-language explanation of this result — how to page onward, why it came back empty (the vendor currently publishes nothing at all, a filter the backend cannot satisfy, or an offset past the end), or that the vendor feed capped the history. Absent when the result needs no explanation."
  6. Changed1 schema field changed
    • changedInput schema / properties / filter / description
      Previous value: -"all: incidents plus scheduled maintenances. active: only incidents with status investigating/identified/monitoring. resolved: only fully resolved incidents. scheduled: only scheduled maintenance windows. Not every vendor backend serves every filter — \"aws\" publishes currently-open events only (never resolved, no maintenance windows) and \"slack\" publishes no maintenance windows. An empty result names which case applied."New value: +"all: incidents plus scheduled maintenances. active: only incidents with status investigating/identified/monitoring. resolved: only fully resolved incidents. scheduled: only scheduled maintenance windows. Not every vendor backend serves every filter — \"aws\" publishes currently-open events only (never resolved, no maintenance windows), and \"gcp\" and \"slack\" publish no maintenance windows. An empty result names which case applied."
  7. Changed5 schema fields changed
    • changedInput schema / properties / filter / description
      Previous value: -"all: incidents plus scheduled maintenances. active: only incidents with status investigating/identified/monitoring. resolved: only fully resolved incidents. scheduled: only scheduled maintenance windows."New value: +"all: incidents plus scheduled maintenances. active: only incidents with status investigating/identified/monitoring. resolved: only fully resolved incidents. scheduled: only scheduled maintenance windows. Not every vendor backend serves every filter — \"aws\" publishes currently-open events only (never resolved, no maintenance windows) and \"slack\" publishes no maintenance windows. An empty result names which case applied."
    • changedInput schema / properties / offset / description
      Previous value: -"Number of matching incidents to skip before applying limit, for paging through history. 0 (default) returns the most recent page; a truncated result names the next offset to use."New value: +"Number of matching incidents to skip before applying limit, for paging through history. 0 (default) returns the most recent page; a truncated result returns the value to use next in the nextOffset field. Raising offset past the number of matches returns an empty list and says so."
    • addedOutput schema / properties / nextOffset
      Added value: +{
      +  "description": "The offset to pass on the next call to continue from where this page stopped, already computed as offset + the number returned. Present only when truncated — its absence means this page reached the end of what the filter matched.",
      +  "type": "number"
      +}
    • addedOutput schema / properties / notice
      Added value: +{
      +  "description": "Plain-language explanation of this result — how to page onward, why it came back empty (filter the backend cannot satisfy, or an offset past the end), or that the vendor feed capped the history. Absent when the result needs no explanation.",
      +  "type": "string"
      +}
    • addedOutput schema / properties / upstreamCeiling
      Added value: +{
      +  "description": "Maximum incidents the vendor's own status API serves in one fetch, present only when that ceiling was reached on this call. It bounds the history independently of limit and offset: incidents older than the oldest one returned cannot be fetched at any offset, only browsed on the vendor status page. Absent when the vendor feed is unbounded or returned less than its ceiling.",
      +  "type": "number"
      +}
  8. Changed3 schema fields changed
    • changedInput schema / properties / limit / description
      Previous value: -"Maximum incidents to return. Vendor status APIs return at most ~50 recent entries per call. Use a lower limit for recent-history queries."New value: +"Maximum incidents to return per call (1–50). Page through longer history with offset rather than raising this."
    • addedInput schema / properties / offset
      Added value: +{
      +  "default": 0,
      +  "description": "Number of matching incidents to skip before applying limit, for paging through history. 0 (default) returns the most recent page; a truncated result names the next offset to use.",
      +  "maximum": 9007199254740991,
      +  "minimum": 0,
      +  "type": "integer"
      +}
    • addedOutput schema / properties / totalCount
      Added value: +{
      +  "description": "Total incidents matching the filter, across all pages, before offset/limit windowing. Present only when the result was truncated.",
      +  "type": "number"
      +}
  9. Changed4 schema fields changed
    • changedInput schema / properties / limit / description
      Previous value: -"Maximum incidents to return. Statuspage returns at most 50 per call. Use a lower limit for recent-history queries."New value: +"Maximum incidents to return. Vendor status APIs return at most ~50 recent entries per call. Use a lower limit for recent-history queries."
    • changedInput schema / properties / vendor / description
      Previous value: -"Vendor slug (e.g., \"github\") or raw Statuspage base URL. Use devops_list_vendors to find slugs."New value: +"Vendor slug (e.g., \"github\", \"aws\") or raw Atlassian Statuspage base URL. Use devops_list_vendors to find slugs."
    • changedOutput schema / properties / incidents / items / properties / id / description
      Previous value: -"Unique incident identifier from Statuspage."New value: +"Unique incident identifier from the vendor's status API."
    • changedOutput schema / properties / statuspage_url / description
      Previous value: -"Statuspage base URL used."New value: +"Status page base URL used."
  10. Changed5 schema fields changed
    • changedOutput schema / properties / cap / description
      Previous value: -"The limit that was applied."New value: +"The limit that was applied. Present only when truncated."
    • changedOutput schema / properties / incidents / items / properties / duration_minutes / description
      Previous value: -"Minutes from started_at to resolved_at. Null for active or scheduled incidents."New value: +"Minutes from started_at to resolved_at. Null for active or scheduled incidents, or when the vendor-authored timestamps are missing, invalid, or inverted."
    • changedOutput schema / properties / shown / description
      Previous value: -"Number of incidents returned after applying the limit."New value: +"Number of incidents returned after applying the limit. Present only when truncated."
    • changedOutput schema / properties / truncated / description
      Previous value: -"True when more incidents matched than the limit returned."New value: +"True when more incidents matched than the limit returned. Absent when the result was not capped."
    • changedOutput schema / required
      Previous value: -[
      -  "vendor",
      -  "name",
      -  "incidents",
      -  "total_returned",
      -  "statuspage_url",
      -  "truncated",
      -  "shown",
      -  "cap"
      -]New value: +[
      +  "vendor",
      +  "name",
      +  "incidents",
      +  "total_returned",
      +  "statuspage_url"
      +]
  11. Changed4 schema fields changed
    • addedOutput schema / properties / cap
      Added value: +{
      +  "description": "The limit that was applied.",
      +  "type": "number"
      +}
    • addedOutput schema / properties / shown
      Added value: +{
      +  "description": "Number of incidents returned after applying the limit.",
      +  "type": "number"
      +}
    • addedOutput schema / properties / truncated
      Added value: +{
      +  "description": "True when more incidents matched than the limit returned.",
      +  "type": "boolean"
      +}
    • changedOutput schema / required
      Previous value: -[
      -  "vendor",
      -  "name",
      -  "incidents",
      -  "total_returned",
      -  "statuspage_url"
      -]New value: +[
      +  "vendor",
      +  "name",
      +  "incidents",
      +  "total_returned",
      +  "statuspage_url",
      +  "truncated",
      +  "shown",
      +  "cap"
      +]
  12. Added

TDQS

A4.1/5.0
Behavior5/5

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

Despite annotations already covering read-only, open-world, and idempotent traits, the description adds substantial behavioral context: response size budget of 64,000 bytes per surface, truncated results and nextOffset, full_updates behavior with updates_omitted, vendor history caps via upstreamCeiling, and Atlassian Statuspage history archive limits (24 months, partial shared page exclusion). This is rich, specific disclosure that goes well beyond structured fields.

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

Conciseness3/5

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

The description is front-loaded with the core purpose but then becomes a single dense paragraph of ~350 words. While the complexity justifies some length, the lack of structure (e.g., bullets for paging, archive, and size rules) makes it harder to parse, and several details duplicate the schema, reducing conciseness.

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

Completeness5/5

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

Given the tool's complexity, the presence of annotations and a full output schema, the description is complete enough for an agent to call it correctly. It covers filtering, paging, size limits, archive behavior, vendor-specific caveats, and empty-result notices, leaving no critical gaps.

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

Parameters3/5

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

The schema has 100% description coverage, so the baseline is 3. The description repeats much of the schema's parameter information (e.g., filter usage, match behavior, since/until archive reading), but it adds little semantic meaning beyond what each parameter's schema description already provides. The integration of parameter interactions is helpful but not sufficiently novel to raise the score.

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

Purpose4/5

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

The description states a specific verb (Fetch) and resources (incident history and scheduled maintenance windows) and details what the response contains (full incident timeline, investigator updates, affected components, resolution). It does not explicitly distinguish this tool from siblings like devops_status_check, so it falls short of the 5-level criterion that requires naming the sibling it is not.

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

Usage Guidelines4/5

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

The description gives clear context for using the filter parameter ('use before deploy' for active, 'for postmortem' for resolved, etc.) and directs the user to devops_list_vendors for slugs. It does not provide explicit when-not-to-use guidance or name alternative tools for overlapping tasks, so it is clear but not exhaustive.

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.