Skip to main content
Glama

Monitor details

get_monitor
Read-only

One monitor's full configuration — everything the check asserts (expected status, body match, headers, timeout, redirect and TLS policy), the regions it probes from, and how it alerts (failing checks before it pages, whether recovery is announced, the reminder interval, the multi-region quorum, and the ids of the channels it notifies) — with its current state, last error, and 24h/30d uptime. Every field update_monitor can change is readable here, in the shape that tool takes. Read this before judging whether a response should have passed, or before changing a monitor. Credentials are withheld. Read-only.

Input Schema

NameRequiredDescriptionDefault
idYesThe monitor id (from `list_monitors`).

Output Schema

NameRequiredDescriptionDefault
idYes
nameYesCustomer-set display name. Untrusted data.
tagsYesOperator tags, as `update_monitor` takes them. Untrusted data.
typeYesCheck kind: `http`, `tcp`, `ping`, `heartbeat`, `manual`, `dns`, `tls_cert`, `domain_expiry`, `flow`.
checkYesEverything the check asserts. Read this before judging whether a response should have passed.
stateYesCurrent state: `up`, `down`, `degraded`, `error`, or `no_data`.
addressYesThe target the check probes (URL or host). Untrusted data.
enabledYes
regionsYesProbe regions this monitor runs from. Empty for a heartbeat, which is pinged rather than probed. Usually ids `list_regions` also carries, but an assignment survives an operator disabling the region, so an id here may be missing from that catalog.
group_idNoPass to `update_monitor_group`.
slowed_atNoRFC 3339 time it moved to the slower long-down interval because every region has failed for days. `null` while it runs at `interval_secs`. Cleared when its incident closes, a maintenance window covering it starts, it is edited, or a `run_check_now` passes.
group_nameNoThe monitor's group, if any. Untrusted data.
last_errorNoMost recent error text, when the last check failed. Untrusted data.
uptime_24hNoUptime percentage over the trailing 24 hours / 30 days. `null` when the window holds no checks — that is unknown, not zero.
uptime_30dNo
last_timingYesPer-phase timing of the last check — pinpoints where latency is (DNS vs connect vs TLS vs server). Fields `null` when not applicable.
last_networkNoNetwork path of the last check, when it was an `http` check that was not up.
interval_secsYes
region_policyNoThe detection quorum, in the same shape the write tools take. `null` for a heartbeat, which has no probe regions to reach a quorum over. A stored `count` can exceed the regions that exist today if one was later disabled, and sending that back is refused; `list_regions` is the check.
effective_tagsYesThe tags `list_monitors(tag=…)` matches: the group's while it alerts as one, `tags` otherwise. Untrusted data.
last_checked_atNoRFC 3339 time of the most recent observation in the last 24 hours. `null` when nothing landed in that window, which is not the same as never checked: a monitor paused yesterday, or a heartbeat on a longer period, reads `null` here and `no_data` in `state`.
last_diagnosticNoStructured edge-access diagnosis for the last failed HTTP check.
notify_recoveryYesWhether recovery is announced to the monitor's channels.
last_http_statusNoHTTP status code of the last check, for `http` monitors. `null` for non-HTTP checks or when the last probe never got a response.
alert_channel_idsYesChannel ids bound to this monitor, for the read half of `update_monitor(channel_ids)`, which replaces the whole set. Empty means none is bound, which is not the same as alerting nobody: a channel whose `auto_bind_tags` covers one of this monitor's tags is paged as well. `list_notification_channels` puts names to these.
checked_every_secsYesHow often it is checked: `interval_secs`, or the long-down interval while `slowed_at` is set. Report this, not `interval_secs`.
last_response_sizeNoResponse body size of the last check in bytes, when measured.
managed_externallyYesTerraform declares this monitor, so `update_monitor`, `pause_monitor` and `resume_monitor` all refuse it. Change it in the `.tf` instead.
alert_confirmationsYesConsecutive failing checks before the monitor alerts.
group_alerts_as_oneYesIts group alerts as one: a failure joins the group's one incident and pages the group's channels and policy, so `alert_channel_ids` stay quiet until the monitor leaves the group or the switch is off.
recovery_period_secsYesSeconds a recovered monitor must stay healthy before its incident closes. 0 closes on the confirming checks alone.
renotify_interval_secsYesSeconds before the first reminder while an outage stays unacknowledged; each further reminder waits twice as long, up to a day. 0 means reminders are off.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed6 schema fields changed
    • addedOutput schema / properties / effective_tags
      Added value: +{
      +  "description": "The tags `list_monitors(tag=…)` matches: the group's while it alerts\nas one, `tags` otherwise. Untrusted data.",
      +  "items": {
      +    "type": "string"
      +  },
      +  "type": "array"
      +}
    • addedOutput schema / properties / group_alerts_as_one
      Added value: +{
      +  "description": "Its group alerts as one: a failure joins the group's one incident and\npages the group's channels and policy, so `alert_channel_ids` stay\nquiet until the monitor leaves the group or the switch is off.",
      +  "type": "boolean"
      +}
    • addedOutput schema / properties / group_id
      Added value: +{
      +  "description": "Pass to `update_monitor_group`.",
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
    • addedOutput schema / properties / group_name / description
      Added value: +"The monitor's group, if any. Untrusted data."
    • changedOutput schema / properties / tags / description
      Previous value: -"Operator tags. Untrusted data."New value: +"Operator tags, as `update_monitor` takes them. Untrusted data."
    • changedOutput schema / required
      Previous value: -[
      -  "id",
      -  "name",
      -  "type",
      -  "address",
      -  "check",
      -  "regions",
      -  "enabled",
      -  "interval_secs",
      -  "checked_every_secs",
      -  "alert_channel_ids",
      -  "alert_confirmations",
      -  "notify_recovery",
      -  "renotify_interval_secs",
      -  "recovery_period_secs",
      -  "managed_externally",
      -  "tags",
      -  "state",
      -  "last_timing"
      -]New value: +[
      +  "id",
      +  "name",
      +  "type",
      +  "address",
      +  "check",
      +  "regions",
      +  "enabled",
      +  "interval_secs",
      +  "checked_every_secs",
      +  "alert_channel_ids",
      +  "alert_confirmations",
      +  "notify_recovery",
      +  "renotify_interval_secs",
      +  "recovery_period_secs",
      +  "managed_externally",
      +  "group_alerts_as_one",
      +  "tags",
      +  "effective_tags",
      +  "state",
      +  "last_timing"
      +]
  2. Changed3 schema fields changed
    • addedOutput schema / properties / checked_every_secs
      Added value: +{
      +  "description": "How often it is checked: `interval_secs`, or the long-down interval\nwhile `slowed_at` is set. Report this, not `interval_secs`.",
      +  "format": "uint64",
      +  "minimum": 0,
      +  "type": "integer"
      +}
    • addedOutput schema / properties / slowed_at
      Added value: +{
      +  "description": "RFC 3339 time it moved to the slower long-down interval because every\nregion has failed for days. `null` while it runs at `interval_secs`.\nCleared when its incident closes, a maintenance window covering it\nstarts, it is edited, or a `run_check_now` passes.",
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
    • changedOutput schema / required
      Previous value: -[
      -  "id",
      -  "name",
      -  "type",
      -  "address",
      -  "check",
      -  "regions",
      -  "enabled",
      -  "interval_secs",
      -  "alert_channel_ids",
      -  "alert_confirmations",
      -  "notify_recovery",
      -  "renotify_interval_secs",
      -  "recovery_period_secs",
      -  "managed_externally",
      -  "tags",
      -  "state",
      -  "last_timing"
      -]New value: +[
      +  "id",
      +  "name",
      +  "type",
      +  "address",
      +  "check",
      +  "regions",
      +  "enabled",
      +  "interval_secs",
      +  "checked_every_secs",
      +  "alert_channel_ids",
      +  "alert_confirmations",
      +  "notify_recovery",
      +  "renotify_interval_secs",
      +  "recovery_period_secs",
      +  "managed_externally",
      +  "tags",
      +  "state",
      +  "last_timing"
      +]
  3. Changed6 schema fields changed
    • addedOutput schema / $defs / HttpCheckConfig / properties / ip_version
      Added value: +{
      +  "description": "Address family the probe dials: `any`, `ipv4` or `ipv6`. With `any`\nit takes whichever connects first, so a broken family stays hidden.",
      +  "type": "string"
      +}
    • changedOutput schema / $defs / HttpCheckConfig / required
      Previous value: -[
      -  "url",
      -  "method",
      -  "timeout_ms",
      -  "follow_redirects",
      -  "max_redirects",
      -  "expected_status",
      -  "headers",
      -  "verify_tls",
      -  "has_basic_auth",
      -  "has_bearer_token"
      -]New value: +[
      +  "url",
      +  "method",
      +  "timeout_ms",
      +  "follow_redirects",
      +  "max_redirects",
      +  "expected_status",
      +  "headers",
      +  "verify_tls",
      +  "has_basic_auth",
      +  "has_bearer_token",
      +  "ip_version"
      +]
    • addedOutput schema / $defs / TcpCheckConfig / properties / ip_version
      Added value: +{
      +  "description": "Address family the probe dials: `any`, `ipv4` or `ipv6`. With `any`\nit takes whichever connects first, so a broken family stays hidden.",
      +  "type": "string"
      +}
    • changedOutput schema / $defs / TcpCheckConfig / required
      Previous value: -[
      -  "host",
      -  "port",
      -  "timeout_ms"
      -]New value: +[
      +  "host",
      +  "port",
      +  "timeout_ms",
      +  "ip_version"
      +]
    • addedOutput schema / $defs / TlsCertCheckConfig / properties / ip_version
      Added value: +{
      +  "description": "Address family the probe dials: `any`, `ipv4` or `ipv6`. With `any`\nit takes whichever connects first, so a broken family stays hidden.",
      +  "type": "string"
      +}
    • changedOutput schema / $defs / TlsCertCheckConfig / required
      Previous value: -[
      -  "host",
      -  "port",
      -  "warn_days",
      -  "critical_days",
      -  "timeout_ms"
      -]New value: +[
      +  "host",
      +  "port",
      +  "warn_days",
      +  "critical_days",
      +  "timeout_ms",
      +  "ip_version"
      +]
  4. Changed3 schema fields changed
    • addedOutput schema / $defs / DnsAnswerView
      Added value: +{
      +  "properties": {
      +    "addresses": {
      +      "items": {
      +        "type": "string"
      +      },
      +      "type": "array"
      +    },
      +    "resolver": {
      +      "type": "string"
      +    },
      +    "ttl_secs": {
      +      "description": "How long, from the check's time, that resolver keeps the host's own\nrecord (the alias, when the host is one) before it asks again.",
      +      "format": "uint32",
      +      "minimum": 0,
      +      "type": "integer"
      +    }
      +  },
      +  "required": [
      +    "resolver",
      +    "addresses",
      +    "ttl_secs"
      +  ],
      +  "type": "object"
      +}
    • addedOutput schema / $defs / NetworkPathView
      Added value: +{
      +  "description": "What an HTTP probe saw on the way to a result that was not up. Compare\n`remote_ip` with the operator's own server address: a different one usually\nmeans DNS still points elsewhere. Behind a CDN or proxy it is the edge's\naddress, not the origin's.",
      +  "properties": {
      +    "dns": {
      +      "anyOf": [
      +        {
      +          "$ref": "#/$defs/DnsAnswerView"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ],
      +      "description": "The decisive hop's host as the probe's resolver answered it right after\nthe failure."
      +    },
      +    "hop_url": {
      +      "description": "The redirect hop that decided the result, when it was not the first.\nUntrusted data.",
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "remote_ip": {
      +      "description": "Server address of the connection that decided the result.",
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "tried_ips": {
      +      "description": "On a failed connect, the addresses the probe had for the host.",
      +      "items": {
      +        "type": "string"
      +      },
      +      "type": "array"
      +    }
      +  },
      +  "required": [
      +    "tried_ips"
      +  ],
      +  "type": "object"
      +}
    • addedOutput schema / properties / last_network
      Added value: +{
      +  "anyOf": [
      +    {
      +      "$ref": "#/$defs/NetworkPathView"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "description": "Network path of the last check, when it was an `http` check that was not up."
      +}
  5. Changed1 schema field changed
    • addedOutput schema / $defs / DnsCheckConfig / properties / expected_records
      Added value: +{
      +  "description": "The exact record set the answer must hold, when set: any record\nadded, removed or changed fails the check.",
      +  "items": {
      +    "type": "string"
      +  },
      +  "type": [
      +    "array",
      +    "null"
      +  ]
      +}
  6. Changed2 schema fields changed
    • addedOutput schema / properties / recovery_period_secs
      Added value: +{
      +  "description": "Seconds a recovered monitor must stay healthy before its incident\ncloses. 0 closes on the confirming checks alone.",
      +  "format": "uint32",
      +  "minimum": 0,
      +  "type": "integer"
      +}
    • changedOutput schema / required
      Previous value: -[
      -  "id",
      -  "name",
      -  "type",
      -  "address",
      -  "check",
      -  "regions",
      -  "enabled",
      -  "interval_secs",
      -  "alert_channel_ids",
      -  "alert_confirmations",
      -  "notify_recovery",
      -  "renotify_interval_secs",
      -  "managed_externally",
      -  "tags",
      -  "state",
      -  "last_timing"
      -]New value: +[
      +  "id",
      +  "name",
      +  "type",
      +  "address",
      +  "check",
      +  "regions",
      +  "enabled",
      +  "interval_secs",
      +  "alert_channel_ids",
      +  "alert_confirmations",
      +  "notify_recovery",
      +  "renotify_interval_secs",
      +  "recovery_period_secs",
      +  "managed_externally",
      +  "tags",
      +  "state",
      +  "last_timing"
      +]
  7. Changed3 schema fields changed
    • changedOutput schema / $defs / CheckConfig / oneOf
      Previous value: -[
      -  {
      -    "$ref": "#/$defs/HttpCheckConfig",
      -    "properties": {
      -      "type": {
      -        "const": "http",
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "type"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "$ref": "#/$defs/TcpCheckConfig",
      -    "properties": {
      -      "type": {
      -        "const": "tcp",
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "type"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "$ref": "#/$defs/PingCheckConfig",
      -    "properties": {
      -      "type": {
      -        "const": "ping",
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "type"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "$ref": "#/$defs/HeartbeatCheckConfig",
      -    "properties": {
      -      "type": {
      -        "const": "heartbeat",
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "type"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "$ref": "#/$defs/DnsCheckConfig",
      -    "properties": {
      -      "type": {
      -        "const": "dns",
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "type"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "$ref": "#/$defs/TlsCertCheckConfig",
      -    "properties": {
      -      "type": {
      -        "const": "tls_cert",
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "type"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "$ref": "#/$defs/DomainExpiryCheckConfig",
      -    "properties": {
      -      "type": {
      -        "const": "domain_expiry",
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "type"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "$ref": "#/$defs/FlowCheckConfig",
      -    "properties": {
      -      "type": {
      -        "const": "flow",
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "type"
      -    ],
      -    "type": "object"
      -  }
      -]New value: +[
      +  {
      +    "$ref": "#/$defs/HttpCheckConfig",
      +    "properties": {
      +      "type": {
      +        "const": "http",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "type"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "$ref": "#/$defs/TcpCheckConfig",
      +    "properties": {
      +      "type": {
      +        "const": "tcp",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "type"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "$ref": "#/$defs/PingCheckConfig",
      +    "properties": {
      +      "type": {
      +        "const": "ping",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "type"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "$ref": "#/$defs/HeartbeatCheckConfig",
      +    "properties": {
      +      "type": {
      +        "const": "heartbeat",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "type"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "$ref": "#/$defs/ManualCheckConfig",
      +    "properties": {
      +      "type": {
      +        "const": "manual",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "type"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "$ref": "#/$defs/DnsCheckConfig",
      +    "properties": {
      +      "type": {
      +        "const": "dns",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "type"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "$ref": "#/$defs/TlsCertCheckConfig",
      +    "properties": {
      +      "type": {
      +        "const": "tls_cert",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "type"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "$ref": "#/$defs/DomainExpiryCheckConfig",
      +    "properties": {
      +      "type": {
      +        "const": "domain_expiry",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "type"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "$ref": "#/$defs/FlowCheckConfig",
      +    "properties": {
      +      "type": {
      +        "const": "flow",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "type"
      +    ],
      +    "type": "object"
      +  }
      +]
    • addedOutput schema / $defs / ManualCheckConfig
      Added value: +{
      +  "description": "Nothing is probed: the state is whatever an operator last set with\n`set_monitor_state`, and the monitor's `state` reports it.",
      +  "type": "object"
      +}
    • changedOutput schema / properties / type / description
      Previous value: -"Check kind: `http`, `tcp`, `ping`, `heartbeat`, `dns`, `tls_cert`,\n`domain_expiry`, `flow`."New value: +"Check kind: `http`, `tcp`, `ping`, `heartbeat`, `manual`, `dns`,\n`tls_cert`, `domain_expiry`, `flow`."
  8. Changed1 schema field changed
    • changedOutput schema / properties / renotify_interval_secs / description
      Previous value: -"Seconds between reminders while an outage stays unacknowledged. 0 means\nreminders are off."New value: +"Seconds before the first reminder while an outage stays unacknowledged;\neach further reminder waits twice as long, up to a day. 0 means\nreminders are off."
  9. Changed1 schema field changed
    • changedOutput schema / properties / alert_channel_ids / description
      Previous value: -"Channel ids this monitor alerts, for the read half of\n`update_monitor(channel_ids)`, which replaces the whole set. Empty means\nit alerts nobody. `list_notification_channels` puts names to these."New value: +"Channel ids bound to this monitor, for the read half of\n`update_monitor(channel_ids)`, which replaces the whole set. Empty means\nnone is bound, which is not the same as alerting nobody: a channel whose\n`auto_bind_tags` covers one of this monitor's tags is paged as well.\n`list_notification_channels` puts names to these."
  10. Changed2 schema fields changed
    • addedOutput schema / $defs / CheckDiagnosticView
      Added value: +{
      +  "description": "Bounded, machine-readable explanation for a failed HTTP observation.",
      +  "properties": {
      +    "confidence": {
      +      "type": "string"
      +    },
      +    "evidence": {
      +      "items": {
      +        "type": "string"
      +      },
      +      "type": "array"
      +    },
      +    "guidance": {
      +      "type": "string"
      +    },
      +    "kind": {
      +      "type": "string"
      +    },
      +    "provider": {
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "remediations": {
      +      "items": {
      +        "type": "string"
      +      },
      +      "type": "array"
      +    },
      +    "summary": {
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "kind",
      +    "confidence",
      +    "evidence",
      +    "remediations",
      +    "summary",
      +    "guidance"
      +  ],
      +  "type": "object"
      +}
    • addedOutput schema / properties / last_diagnostic
      Added value: +{
      +  "anyOf": [
      +    {
      +      "$ref": "#/$defs/CheckDiagnosticView"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "description": "Structured edge-access diagnosis for the last failed HTTP check."
      +}
  11. First observed

TDQS

A4.2/5.0
Behavior4/5

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

With readOnlyHint already set, the description still adds real context: 'Credentials are withheld' warns the agent that secrets will be absent and prevents false assumptions, and the round-trip guarantee ('every field update_monitor can change is readable here, in the shape that tool takes') tells the agent it can safely read-modify-write. 'Read-only' merely restates the annotation.

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

Conciseness4/5

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

Three sentences, front-loaded with the core identity, then usage conditions. The long parenthetical enumeration of alerting fields is dense but each item maps to actual returned data, so it earns its place; only slightly over-packed for a single-screen read.

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?

An output schema exists so return shape needn't be spelled out, and the description still covers what's included and what's deliberately excluded (credentials). Combined with the safety hint and the read-before-update advice, an agent has everything needed to call this correctly.

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

Parameters3/5

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

Single parameter with 100% schema coverage, and the schema already says the id comes from list_monitors. The description adds nothing beyond that about the id (format, prefix, or failure mode for a bad id), so baseline 3 applies.

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

Purpose5/5

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

States a specific verb and resource ('One monitor's full configuration') and enumerates exactly what is returned: assertion fields, probe regions, alerting behavior, current state, last error, uptime windows. This clearly separates it from get_monitor_history (history), list_monitors (enumeration), and update_monitor (mutation).

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

Usage Guidelines4/5

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

Gives concrete when-to-use conditions: 'before judging whether a response should have passed, or before changing a monitor.' Implicitly positions itself against update_monitor by guaranteeing field parity. No explicit when-not guidance or direct naming of get_monitor_history as the alternative for historical data.

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.