Skip to main content
Glama

Compare monitors before and after a deploy

verify_deploy
Read-onlyIdempotent

Compare monitor checks before and after a deploy to detect regressions by returning PASS, REGRESSED, FAIL, or INSUFFICIENT_DATA per region without running new checks.

Instructions

Compare monitors before and after a deploy, without running any check. For each monitor it compares the checks since since with the 24 hours before it, per region, and returns verdict PASS, REGRESSED (most regions slower or failing more than in the baseline, or one region failing), FAIL (most regions failing now, or an incident opened since since) or INSUFFICIENT_DATA (too few checks yet: wait retry_after_seconds and call again; or too little history: say so and stop). These verdicts are not monitor statuses: REGRESSED is not the DEGRADED of list_monitors. Checks run inside a maintenance window count by their result. Each monitor lists its regions with check counts, the median latency since the deploy and the baseline p95 (for HTTP monitors the comparison uses time to first byte when both sides have it; each region's latency_metric says which), plus incidents_since, changes_since (outside changes such as DNS or certificate) and needs_fresh_checks (call check_now on it before retrying). Paused monitors come back in skipped, and deploy markers near since in deploy_markers. Select monitors with monitor_ids or with tag (+ tag_match), never both, at most 100. check_now allows 10 calls a minute, so with many monitors call check_now first on those whose interval_seconds is over 60: the faster ones fill up on their own schedule. Pass the same since on every retry. When retry_after_seconds is null, stop: it turns null 15 minutes after since at the latest. The tool only reads: for fresh points call check_now first. A 5xx on a large selection that repeats after one retry means the check is too large: pass fewer monitors or a later since. Limited to 10 calls per minute per calling address for an API key, per user for an app connection (never per key or organization); past that it is a 429 with the seconds to wait. Example: {"tag": ["service:api"], "since": "2026-11-01T10:02:00Z"}

Input Schema

NameRequiredDescriptionDefault
tagNoKeep items carrying these tags: a JSON array of up to 10 tags, each up to 50 characters, lowercased before matching. tag_match decides whether all or any of them must match. At most 100 monitors (paused included) may match. Not with monitor_ids.
sinceYesWhen the deploy finished, ISO 8601 with a UTC offset, for example 2026-11-01T10:02:00Z. At most 24 hours ago; up to 5 minutes ahead is read as now. A time without an offset is a 422. Use the deployed_at you gave record_deploy.
tag_matchNoall (the default): an item must carry every tag in tag. any: at least one of them.
monitor_idsNo1 to 100 distinct monitor uuids from list_monitors. A repeated id is a 422 and an unknown id is a 404 naming it. Not with tag.

Output Schema

NameRequiredDescriptionDefault
sinceYesThe deploy time used (never later than evaluated_at).
countsYesMonitors per verdict.
skippedYesSelected monitors that were not judged, such as paused ones.
verdictYesWorst verdict of the monitors; INSUFFICIENT_DATA when none were judged. Known values: PASS, REGRESSED, FAIL, INSUFFICIENT_DATA.
monitorsYesJudged monitors, worst verdict first, then by name.
baseline_toYesEnd of the baseline hours (exclusive).
evaluated_atYesWhen the check was computed.
baseline_fromYesStart of the baseline hours.
deploy_markersYesUp to 5 recorded deploys near `since` that touched these monitors.
latency_metricYesThe latency every region was compared on, or mixed when regions differ; each region row names its own; response_time_ms when no monitor was compared. Known values: response_time_ms, ttfb_ms, mixed.
retry_after_secondsYesLargest wait among monitors that waiting can help; null when none.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Addedv1.3.0

TDQS

A4.8/5.0
Behavior5/5

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

Annotations already establish read-only, idempotent, non-destructive, but the description adds far more: the full verdict decision table, maintenance-window check counting, baseline p95 vs median latency comparison including the time-to-first-byte caveat, per-region latency_metric, paused monitors in `skipped`, deploy_markers, and needs_fresh_checks. It also discloses rate limits (10/min per calling address for an API key, per user for an app connection) and the 429 behavior, plus the 15-minute retry_after_seconds expiry — none of which annotations convey.

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

Conciseness4/5

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

Purpose and the key distinction are front-loaded and nearly every sentence carries operational information, but the definition is a single dense paragraph with many clauses chained together, making it harder to scan than a short bulleted structure would be.

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

Completeness5/5

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

For a comparison tool with a rich output schema, rate limits, and retry semantics, the description covers selection, verdict interpretation, edge cases (paused monitors, maintenance windows, insufficient data), and error handling. An agent has everything needed to call it correctly and interpret the result.

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 already 100%, so the schema carries parameter definitions; the description still adds cross-parameter rules the schema cannot express, notably 'Pass the same since on every retry', the mutual exclusivity of monitor_ids and tag, and a concrete example payload. It does not add format details beyond the schema (offsets, max 24 hours), so it stops short of a 5.

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

Purpose5/5

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

The description opens with a specific verb and resource: 'Compare monitors before and after a deploy, without running any check.' It also explicitly separates its verdict vocabulary from sibling concepts ('These verdicts are not monitor statuses: REGRESSED is not the DEGRADED of list_monitors'), so an agent can pick it apart from list_monitors and check_now without opening a 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?

Explicit routing and stop rules are given: select with monitor_ids or tag (+tag_match), 'never both, at most 100'; when retry_after_seconds is null, stop; on INSUFFICIENT_DATA wait and retry, on too little history say so and stop; call check_now first when many monitors have interval_seconds over 60. It also names prerequisites (the since from record_deploy) and the failure path for repeated 5xx responses.

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