Skip to main content
Glama

Create monitors

create_monitors

Create several monitors at once, with one confirmation covering the batch where the client can show a prompt. Every check is run once first and all the results are shown together, so a misconfigured endpoint is visible before anything is saved. An item that fails validation or its trial run is reported in the results and the rest are still created. Prefer this over repeated create_monitor calls whenever the user names more than one thing to watch: it costs them one prompt instead of many. Same per-monitor fields and same limits as create_monitor. Not read-only.

Input Schema

NameRequiredDescriptionDefault
monitorsYesThe monitors to create. Each is validated and probed before the single confirmation covering the batch.

Output Schema

NameRequiredDescriptionDefault
createdYes
resultsYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • changedInput schema / $defs / NewCheck / oneOf
      Previous value: -[
      -  {
      -    "additionalProperties": false,
      -    "description": "An HTTP(S) endpoint.",
      -    "properties": {
      -      "body": {
      -        "description": "Request body, sent as given. `{{ key }}` references are resolved at\nprobe time, so a body may carry a secret by reference.",
      -        "type": [
      -          "string",
      -          "null"
      -        ]
      -      },
      -      "expected_body_contains": {
      -        "description": "Text the response body must contain for the check to pass.",
      -        "type": [
      -          "string",
      -          "null"
      -        ]
      -      },
      -      "expected_status": {
      -        "description": "A single code like `200`, a range like `200-299`, or a list like\n`200,201,204`. Defaults to `200-299`.",
      -        "type": [
      -          "string",
      -          "null"
      -        ]
      -      },
      -      "follow_redirects": {
      -        "description": "Defaults to true, following at most 5 hops.",
      -        "type": [
      -          "boolean",
      -          "null"
      -        ]
      -      },
      -      "headers": {
      -        "additionalProperties": {
      -          "type": "string"
      -        },
      -        "description": "Request headers. A header that carries a credential\n(`authorization`, `x-api-key`, `api-key`, `cookie`,\n`proxy-authorization`) must reference an org variable rather than\nspell the secret out: `Bearer {{ my_key }}`. Use `list_variables`\nto find the key, and never paste the credential itself — this tool\nrefuses it, and a pasted one would live on in the chat log.",
      -        "type": [
      -          "object",
      -          "null"
      -        ]
      -      },
      -      "method": {
      -        "description": "`get` (default), `head`, `post`, `put`, `patch`, `delete`, `options`.",
      -        "type": [
      -          "string",
      -          "null"
      -        ]
      -      },
      -      "timeout_ms": {
      -        "description": "Defaults to 10000. A redirect counts as a pass only with\n`follow_redirects`.",
      -        "format": "uint64",
      -        "minimum": 0,
      -        "type": [
      -          "integer",
      -          "null"
      -        ]
      -      },
      -      "type": {
      -        "const": "http",
      -        "type": "string"
      -      },
      -      "url": {
      -        "type": "string"
      -      },
      -      "verify_tls": {
      -        "description": "Defaults to true. False accepts an invalid certificate, which a\n`tls_cert` monitor is the better way to watch.",
      -        "type": [
      -          "boolean",
      -          "null"
      -        ]
      -      }
      -    },
      -    "required": [
      -      "type",
      -      "url"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "description": "A TCP port accepting connections.",
      -    "properties": {
      -      "host": {
      -        "type": "string"
      -      },
      -      "port": {
      -        "format": "uint16",
      -        "maximum": 65535,
      -        "minimum": 0,
      -        "type": "integer"
      -      },
      -      "timeout_ms": {
      -        "format": "uint64",
      -        "minimum": 0,
      -        "type": [
      -          "integer",
      -          "null"
      -        ]
      -      },
      -      "type": {
      -        "const": "tcp",
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "type",
      -      "host",
      -      "port"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "description": "ICMP reachability.",
      -    "properties": {
      -      "host": {
      -        "type": "string"
      -      },
      -      "timeout_ms": {
      -        "format": "uint64",
      -        "minimum": 0,
      -        "type": [
      -          "integer",
      -          "null"
      -        ]
      -      },
      -      "type": {
      -        "const": "ping",
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "type",
      -      "host"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "description": "A DNS record resolving, optionally to an expected value.",
      -    "properties": {
      -      "domain": {
      -        "description": "Name to resolve. A `ptr` lookup also takes an IP address.",
      -        "type": "string"
      -      },
      -      "expected_contains": {
      -        "description": "Text the answer must contain.",
      -        "type": [
      -          "string",
      -          "null"
      -        ]
      -      },
      -      "expected_records": {
      -        "description": "Every record the answer must hold and nothing else, written as a\nresult's `answers` shows them (`10 mail.example.com.` for MX, or a\nbare `mail.example.com` to allow any preference). Any record\nadded, removed or changed fails the check. Not combined with\n`expected_contains`.",
      -        "items": {
      -          "type": "string"
      -        },
      -        "type": [
      -          "array",
      -          "null"
      -        ]
      -      },
      -      "record_type": {
      -        "description": "`a` (default), `aaaa`, `cname`, `mx`, `ns`, `txt`, `soa`, `ptr`,\n`caa`, `srv`.",
      -        "type": [
      -          "string",
      -          "null"
      -        ]
      -      },
      -      "resolver": {
      -        "description": "Resolver to ask. Defaults to the agent's own.",
      -        "type": [
      -          "string",
      -          "null"
      -        ]
      -      },
      -      "timeout_ms": {
      -        "format": "uint64",
      -        "minimum": 0,
      -        "type": [
      -          "integer",
      -          "null"
      -        ]
      -      },
      -      "type": {
      -        "const": "dns",
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "type",
      -      "domain"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "description": "A TLS certificate's remaining validity.",
      -    "properties": {
      -      "critical_days": {
      -        "description": "Days of remaining validity that fail it. Default 7.",
      -        "format": "uint32",
      -        "minimum": 0,
      -        "type": [
      -          "integer",
      -          "null"
      -        ]
      -      },
      -      "host": {
      -        "type": "string"
      -      },
      -      "port": {
      -        "description": "Defaults to 443.",
      -        "format": "uint16",
      -        "maximum": 65535,
      -        "minimum": 0,
      -        "type": [
      -          "integer",
      -          "null"
      -        ]
      -      },
      -      "timeout_ms": {
      -        "format": "uint64",
      -        "minimum": 0,
      -        "type": [
      -          "integer",
      -          "null"
      -        ]
      -      },
      -      "type": {
      -        "const": "tls_cert",
      -        "type": "string"
      -      },
      -      "warn_days": {
      -        "description": "Days of remaining validity that degrade the check. Default 30.",
      -        "format": "uint32",
      -        "minimum": 0,
      -        "type": [
      -          "integer",
      -          "null"
      -        ]
      -      }
      -    },
      -    "required": [
      -      "type",
      -      "host"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "description": "A domain registration's remaining validity.",
      -    "properties": {
      -      "critical_days": {
      -        "description": "Default 7.",
      -        "format": "uint32",
      -        "minimum": 0,
      -        "type": [
      -          "integer",
      -          "null"
      -        ]
      -      },
      -      "domain": {
      -        "type": "string"
      -      },
      -      "timeout_ms": {
      -        "format": "uint64",
      -        "minimum": 0,
      -        "type": [
      -          "integer",
      -          "null"
      -        ]
      -      },
      -      "type": {
      -        "const": "domain_expiry",
      -        "type": "string"
      -      },
      -      "warn_days": {
      -        "description": "Default 30.",
      -        "format": "uint32",
      -        "minimum": 0,
      -        "type": [
      -          "integer",
      -          "null"
      -        ]
      -      }
      -    },
      -    "required": [
      -      "type",
      -      "domain"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "description": "An inbound ping from a job that is expected to report in. Nothing is\nprobed; the monitor fails when the ping does not arrive. The ping URL\nand its token are shown in the app, never here.",
      -    "properties": {
      -      "grace_secs": {
      -        "description": "Lateness tolerated before the monitor fails.",
      -        "format": "uint64",
      -        "minimum": 0,
      -        "type": "integer"
      -      },
      -      "max_runtime_secs": {
      -        "description": "Fail a run that starts and does not finish within this.",
      -        "format": "uint64",
      -        "minimum": 0,
      -        "type": [
      -          "integer",
      -          "null"
      -        ]
      -      },
      -      "period_secs": {
      -        "description": "How often the job is expected to report.",
      -        "format": "uint64",
      -        "minimum": 0,
      -        "type": "integer"
      -      },
      -      "type": {
      -        "const": "heartbeat",
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "type",
      -      "period_secs",
      -      "grace_secs"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "description": "A service no probe can judge, such as a SIP trunk or a partner's back\noffice. Nothing is checked: it starts up, and `set_monitor_state` moves\nit, opening and closing incidents like any other monitor.",
      -    "properties": {
      -      "type": {
      -        "const": "manual",
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "type"
      -    ],
      -    "type": "object"
      -  }
      -]New value: +[
      +  {
      +    "additionalProperties": false,
      +    "description": "An HTTP(S) endpoint.",
      +    "properties": {
      +      "body": {
      +        "description": "Request body, sent as given. `{{ key }}` references are resolved at\nprobe time, so a body may carry a secret by reference.",
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      },
      +      "expected_body_contains": {
      +        "description": "Text the response body must contain for the check to pass.",
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      },
      +      "expected_status": {
      +        "description": "A single code like `200`, a range like `200-299`, or a list like\n`200,201,204`. Defaults to `200-299`.",
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      },
      +      "follow_redirects": {
      +        "description": "Defaults to true, following at most 5 hops.",
      +        "type": [
      +          "boolean",
      +          "null"
      +        ]
      +      },
      +      "headers": {
      +        "additionalProperties": {
      +          "type": "string"
      +        },
      +        "description": "Request headers. A header that carries a credential\n(`authorization`, `x-api-key`, `api-key`, `cookie`,\n`proxy-authorization`) must reference an org variable rather than\nspell the secret out: `Bearer {{ my_key }}`. Use `list_variables`\nto find the key, and never paste the credential itself — this tool\nrefuses it, and a pasted one would live on in the chat log.",
      +        "type": [
      +          "object",
      +          "null"
      +        ]
      +      },
      +      "ip_version": {
      +        "description": "`any` (default), `ipv4` or `ipv6`. See `ip_version` on `Tcp`.",
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      },
      +      "method": {
      +        "description": "`get` (default), `head`, `post`, `put`, `patch`, `delete`, `options`.",
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      },
      +      "timeout_ms": {
      +        "description": "Defaults to 10000. A redirect counts as a pass only with\n`follow_redirects`.",
      +        "format": "uint64",
      +        "minimum": 0,
      +        "type": [
      +          "integer",
      +          "null"
      +        ]
      +      },
      +      "type": {
      +        "const": "http",
      +        "type": "string"
      +      },
      +      "url": {
      +        "type": "string"
      +      },
      +      "verify_tls": {
      +        "description": "Defaults to true. False accepts an invalid certificate, which a\n`tls_cert` monitor is the better way to watch.",
      +        "type": [
      +          "boolean",
      +          "null"
      +        ]
      +      }
      +    },
      +    "required": [
      +      "type",
      +      "url"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "description": "A TCP port accepting connections.",
      +    "properties": {
      +      "host": {
      +        "type": "string"
      +      },
      +      "ip_version": {
      +        "description": "`any` (default) dials whichever of IPv6 and IPv4 connects first,\nso a broken AAAA record or IPv6 firewall stays hidden. `ipv4` or\n`ipv6` checks only that family and fails when the host has no\naddress in it. To watch both, create one monitor per family.",
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      },
      +      "port": {
      +        "format": "uint16",
      +        "maximum": 65535,
      +        "minimum": 0,
      +        "type": "integer"
      +      },
      +      "timeout_ms": {
      +        "format": "uint64",
      +        "minimum": 0,
      +        "type": [
      +          "integer",
      +          "null"
      +        ]
      +      },
      +      "type": {
      +        "const": "tcp",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "type",
      +      "host",
      +      "port"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "description": "ICMP reachability.",
      +    "properties": {
      +      "host": {
      +        "type": "string"
      +      },
      +      "timeout_ms": {
      +        "format": "uint64",
      +        "minimum": 0,
      +        "type": [
      +          "integer",
      +          "null"
      +        ]
      +      },
      +      "type": {
      +        "const": "ping",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "type",
      +      "host"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "description": "A DNS record resolving, optionally to an expected value.",
      +    "properties": {
      +      "domain": {
      +        "description": "Name to resolve. A `ptr` lookup also takes an IP address.",
      +        "type": "string"
      +      },
      +      "expected_contains": {
      +        "description": "Text the answer must contain.",
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      },
      +      "expected_records": {
      +        "description": "Every record the answer must hold and nothing else, written as a\nresult's `answers` shows them (`10 mail.example.com.` for MX, or a\nbare `mail.example.com` to allow any preference). Any record\nadded, removed or changed fails the check. Not combined with\n`expected_contains`.",
      +        "items": {
      +          "type": "string"
      +        },
      +        "type": [
      +          "array",
      +          "null"
      +        ]
      +      },
      +      "record_type": {
      +        "description": "`a` (default), `aaaa`, `cname`, `mx`, `ns`, `txt`, `soa`, `ptr`,\n`caa`, `srv`.",
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      },
      +      "resolver": {
      +        "description": "Resolver to ask. Defaults to the agent's own.",
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      },
      +      "timeout_ms": {
      +        "format": "uint64",
      +        "minimum": 0,
      +        "type": [
      +          "integer",
      +          "null"
      +        ]
      +      },
      +      "type": {
      +        "const": "dns",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "type",
      +      "domain"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "description": "A TLS certificate's remaining validity.",
      +    "properties": {
      +      "critical_days": {
      +        "description": "Days of remaining validity that fail it. Default 7.",
      +        "format": "uint32",
      +        "minimum": 0,
      +        "type": [
      +          "integer",
      +          "null"
      +        ]
      +      },
      +      "host": {
      +        "type": "string"
      +      },
      +      "ip_version": {
      +        "description": "`any` (default), `ipv4` or `ipv6`. See `ip_version` on `Tcp`.",
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      },
      +      "port": {
      +        "description": "Defaults to 443.",
      +        "format": "uint16",
      +        "maximum": 65535,
      +        "minimum": 0,
      +        "type": [
      +          "integer",
      +          "null"
      +        ]
      +      },
      +      "timeout_ms": {
      +        "format": "uint64",
      +        "minimum": 0,
      +        "type": [
      +          "integer",
      +          "null"
      +        ]
      +      },
      +      "type": {
      +        "const": "tls_cert",
      +        "type": "string"
      +      },
      +      "warn_days": {
      +        "description": "Days of remaining validity that degrade the check. Default 30.",
      +        "format": "uint32",
      +        "minimum": 0,
      +        "type": [
      +          "integer",
      +          "null"
      +        ]
      +      }
      +    },
      +    "required": [
      +      "type",
      +      "host"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "description": "A domain registration's remaining validity.",
      +    "properties": {
      +      "critical_days": {
      +        "description": "Default 7.",
      +        "format": "uint32",
      +        "minimum": 0,
      +        "type": [
      +          "integer",
      +          "null"
      +        ]
      +      },
      +      "domain": {
      +        "type": "string"
      +      },
      +      "timeout_ms": {
      +        "format": "uint64",
      +        "minimum": 0,
      +        "type": [
      +          "integer",
      +          "null"
      +        ]
      +      },
      +      "type": {
      +        "const": "domain_expiry",
      +        "type": "string"
      +      },
      +      "warn_days": {
      +        "description": "Default 30.",
      +        "format": "uint32",
      +        "minimum": 0,
      +        "type": [
      +          "integer",
      +          "null"
      +        ]
      +      }
      +    },
      +    "required": [
      +      "type",
      +      "domain"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "description": "An inbound ping from a job that is expected to report in. Nothing is\nprobed; the monitor fails when the ping does not arrive. The ping URL\nand its token are shown in the app, never here.",
      +    "properties": {
      +      "grace_secs": {
      +        "description": "Lateness tolerated before the monitor fails.",
      +        "format": "uint64",
      +        "minimum": 0,
      +        "type": "integer"
      +      },
      +      "max_runtime_secs": {
      +        "description": "Fail a run that starts and does not finish within this.",
      +        "format": "uint64",
      +        "minimum": 0,
      +        "type": [
      +          "integer",
      +          "null"
      +        ]
      +      },
      +      "period_secs": {
      +        "description": "How often the job is expected to report.",
      +        "format": "uint64",
      +        "minimum": 0,
      +        "type": "integer"
      +      },
      +      "type": {
      +        "const": "heartbeat",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "type",
      +      "period_secs",
      +      "grace_secs"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "description": "A service no probe can judge, such as a SIP trunk or a partner's back\noffice. Nothing is checked: it starts up, and `set_monitor_state` moves\nit, opening and closing incidents like any other monitor.",
      +    "properties": {
      +      "type": {
      +        "const": "manual",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "type"
      +    ],
      +    "type": "object"
      +  }
      +]
  2. Changed1 schema field changed
    • changedInput schema / $defs / NewCheck / oneOf
      Previous value: -[
      -  {
      -    "additionalProperties": false,
      -    "description": "An HTTP(S) endpoint.",
      -    "properties": {
      -      "body": {
      -        "description": "Request body, sent as given. `{{ key }}` references are resolved at\nprobe time, so a body may carry a secret by reference.",
      -        "type": [
      -          "string",
      -          "null"
      -        ]
      -      },
      -      "expected_body_contains": {
      -        "description": "Text the response body must contain for the check to pass.",
      -        "type": [
      -          "string",
      -          "null"
      -        ]
      -      },
      -      "expected_status": {
      -        "description": "A single code like `200`, a range like `200-299`, or a list like\n`200,201,204`. Defaults to `200-299`.",
      -        "type": [
      -          "string",
      -          "null"
      -        ]
      -      },
      -      "follow_redirects": {
      -        "description": "Defaults to true, following at most 5 hops.",
      -        "type": [
      -          "boolean",
      -          "null"
      -        ]
      -      },
      -      "headers": {
      -        "additionalProperties": {
      -          "type": "string"
      -        },
      -        "description": "Request headers. A header that carries a credential\n(`authorization`, `x-api-key`, `api-key`, `cookie`,\n`proxy-authorization`) must reference an org variable rather than\nspell the secret out: `Bearer {{ my_key }}`. Use `list_variables`\nto find the key, and never paste the credential itself — this tool\nrefuses it, and a pasted one would live on in the chat log.",
      -        "type": [
      -          "object",
      -          "null"
      -        ]
      -      },
      -      "method": {
      -        "description": "`get` (default), `head`, `post`, `put`, `patch`, `delete`, `options`.",
      -        "type": [
      -          "string",
      -          "null"
      -        ]
      -      },
      -      "timeout_ms": {
      -        "description": "Defaults to 10000. A redirect counts as a pass only with\n`follow_redirects`.",
      -        "format": "uint64",
      -        "minimum": 0,
      -        "type": [
      -          "integer",
      -          "null"
      -        ]
      -      },
      -      "type": {
      -        "const": "http",
      -        "type": "string"
      -      },
      -      "url": {
      -        "type": "string"
      -      },
      -      "verify_tls": {
      -        "description": "Defaults to true. False accepts an invalid certificate, which a\n`tls_cert` monitor is the better way to watch.",
      -        "type": [
      -          "boolean",
      -          "null"
      -        ]
      -      }
      -    },
      -    "required": [
      -      "type",
      -      "url"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "description": "A TCP port accepting connections.",
      -    "properties": {
      -      "host": {
      -        "type": "string"
      -      },
      -      "port": {
      -        "format": "uint16",
      -        "maximum": 65535,
      -        "minimum": 0,
      -        "type": "integer"
      -      },
      -      "timeout_ms": {
      -        "format": "uint64",
      -        "minimum": 0,
      -        "type": [
      -          "integer",
      -          "null"
      -        ]
      -      },
      -      "type": {
      -        "const": "tcp",
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "type",
      -      "host",
      -      "port"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "description": "ICMP reachability.",
      -    "properties": {
      -      "host": {
      -        "type": "string"
      -      },
      -      "timeout_ms": {
      -        "format": "uint64",
      -        "minimum": 0,
      -        "type": [
      -          "integer",
      -          "null"
      -        ]
      -      },
      -      "type": {
      -        "const": "ping",
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "type",
      -      "host"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "description": "A DNS record resolving, optionally to an expected value.",
      -    "properties": {
      -      "domain": {
      -        "description": "Name to resolve. A `ptr` lookup also takes an IP address.",
      -        "type": "string"
      -      },
      -      "expected_contains": {
      -        "description": "Text the answer must contain.",
      -        "type": [
      -          "string",
      -          "null"
      -        ]
      -      },
      -      "expected_records": {
      -        "description": "Every record the answer must hold and nothing else, written as a\nresult's `answers` shows them (`10 mail.example.com.` for MX). Any\nrecord added, removed or changed fails the check. Not combined\nwith `expected_contains`.",
      -        "items": {
      -          "type": "string"
      -        },
      -        "type": [
      -          "array",
      -          "null"
      -        ]
      -      },
      -      "record_type": {
      -        "description": "`a` (default), `aaaa`, `cname`, `mx`, `ns`, `txt`, `soa`, `ptr`,\n`caa`, `srv`.",
      -        "type": [
      -          "string",
      -          "null"
      -        ]
      -      },
      -      "resolver": {
      -        "description": "Resolver to ask. Defaults to the agent's own.",
      -        "type": [
      -          "string",
      -          "null"
      -        ]
      -      },
      -      "timeout_ms": {
      -        "format": "uint64",
      -        "minimum": 0,
      -        "type": [
      -          "integer",
      -          "null"
      -        ]
      -      },
      -      "type": {
      -        "const": "dns",
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "type",
      -      "domain"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "description": "A TLS certificate's remaining validity.",
      -    "properties": {
      -      "critical_days": {
      -        "description": "Days of remaining validity that fail it. Default 7.",
      -        "format": "uint32",
      -        "minimum": 0,
      -        "type": [
      -          "integer",
      -          "null"
      -        ]
      -      },
      -      "host": {
      -        "type": "string"
      -      },
      -      "port": {
      -        "description": "Defaults to 443.",
      -        "format": "uint16",
      -        "maximum": 65535,
      -        "minimum": 0,
      -        "type": [
      -          "integer",
      -          "null"
      -        ]
      -      },
      -      "timeout_ms": {
      -        "format": "uint64",
      -        "minimum": 0,
      -        "type": [
      -          "integer",
      -          "null"
      -        ]
      -      },
      -      "type": {
      -        "const": "tls_cert",
      -        "type": "string"
      -      },
      -      "warn_days": {
      -        "description": "Days of remaining validity that degrade the check. Default 30.",
      -        "format": "uint32",
      -        "minimum": 0,
      -        "type": [
      -          "integer",
      -          "null"
      -        ]
      -      }
      -    },
      -    "required": [
      -      "type",
      -      "host"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "description": "A domain registration's remaining validity.",
      -    "properties": {
      -      "critical_days": {
      -        "description": "Default 7.",
      -        "format": "uint32",
      -        "minimum": 0,
      -        "type": [
      -          "integer",
      -          "null"
      -        ]
      -      },
      -      "domain": {
      -        "type": "string"
      -      },
      -      "timeout_ms": {
      -        "format": "uint64",
      -        "minimum": 0,
      -        "type": [
      -          "integer",
      -          "null"
      -        ]
      -      },
      -      "type": {
      -        "const": "domain_expiry",
      -        "type": "string"
      -      },
      -      "warn_days": {
      -        "description": "Default 30.",
      -        "format": "uint32",
      -        "minimum": 0,
      -        "type": [
      -          "integer",
      -          "null"
      -        ]
      -      }
      -    },
      -    "required": [
      -      "type",
      -      "domain"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "description": "An inbound ping from a job that is expected to report in. Nothing is\nprobed; the monitor fails when the ping does not arrive. The ping URL\nand its token are shown in the app, never here.",
      -    "properties": {
      -      "grace_secs": {
      -        "description": "Lateness tolerated before the monitor fails.",
      -        "format": "uint64",
      -        "minimum": 0,
      -        "type": "integer"
      -      },
      -      "max_runtime_secs": {
      -        "description": "Fail a run that starts and does not finish within this.",
      -        "format": "uint64",
      -        "minimum": 0,
      -        "type": [
      -          "integer",
      -          "null"
      -        ]
      -      },
      -      "period_secs": {
      -        "description": "How often the job is expected to report.",
      -        "format": "uint64",
      -        "minimum": 0,
      -        "type": "integer"
      -      },
      -      "type": {
      -        "const": "heartbeat",
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "type",
      -      "period_secs",
      -      "grace_secs"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "description": "A service no probe can judge, such as a SIP trunk or a partner's back\noffice. Nothing is checked: it starts up, and `set_monitor_state` moves\nit, opening and closing incidents like any other monitor.",
      -    "properties": {
      -      "type": {
      -        "const": "manual",
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "type"
      -    ],
      -    "type": "object"
      -  }
      -]New value: +[
      +  {
      +    "additionalProperties": false,
      +    "description": "An HTTP(S) endpoint.",
      +    "properties": {
      +      "body": {
      +        "description": "Request body, sent as given. `{{ key }}` references are resolved at\nprobe time, so a body may carry a secret by reference.",
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      },
      +      "expected_body_contains": {
      +        "description": "Text the response body must contain for the check to pass.",
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      },
      +      "expected_status": {
      +        "description": "A single code like `200`, a range like `200-299`, or a list like\n`200,201,204`. Defaults to `200-299`.",
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      },
      +      "follow_redirects": {
      +        "description": "Defaults to true, following at most 5 hops.",
      +        "type": [
      +          "boolean",
      +          "null"
      +        ]
      +      },
      +      "headers": {
      +        "additionalProperties": {
      +          "type": "string"
      +        },
      +        "description": "Request headers. A header that carries a credential\n(`authorization`, `x-api-key`, `api-key`, `cookie`,\n`proxy-authorization`) must reference an org variable rather than\nspell the secret out: `Bearer {{ my_key }}`. Use `list_variables`\nto find the key, and never paste the credential itself — this tool\nrefuses it, and a pasted one would live on in the chat log.",
      +        "type": [
      +          "object",
      +          "null"
      +        ]
      +      },
      +      "method": {
      +        "description": "`get` (default), `head`, `post`, `put`, `patch`, `delete`, `options`.",
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      },
      +      "timeout_ms": {
      +        "description": "Defaults to 10000. A redirect counts as a pass only with\n`follow_redirects`.",
      +        "format": "uint64",
      +        "minimum": 0,
      +        "type": [
      +          "integer",
      +          "null"
      +        ]
      +      },
      +      "type": {
      +        "const": "http",
      +        "type": "string"
      +      },
      +      "url": {
      +        "type": "string"
      +      },
      +      "verify_tls": {
      +        "description": "Defaults to true. False accepts an invalid certificate, which a\n`tls_cert` monitor is the better way to watch.",
      +        "type": [
      +          "boolean",
      +          "null"
      +        ]
      +      }
      +    },
      +    "required": [
      +      "type",
      +      "url"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "description": "A TCP port accepting connections.",
      +    "properties": {
      +      "host": {
      +        "type": "string"
      +      },
      +      "port": {
      +        "format": "uint16",
      +        "maximum": 65535,
      +        "minimum": 0,
      +        "type": "integer"
      +      },
      +      "timeout_ms": {
      +        "format": "uint64",
      +        "minimum": 0,
      +        "type": [
      +          "integer",
      +          "null"
      +        ]
      +      },
      +      "type": {
      +        "const": "tcp",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "type",
      +      "host",
      +      "port"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "description": "ICMP reachability.",
      +    "properties": {
      +      "host": {
      +        "type": "string"
      +      },
      +      "timeout_ms": {
      +        "format": "uint64",
      +        "minimum": 0,
      +        "type": [
      +          "integer",
      +          "null"
      +        ]
      +      },
      +      "type": {
      +        "const": "ping",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "type",
      +      "host"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "description": "A DNS record resolving, optionally to an expected value.",
      +    "properties": {
      +      "domain": {
      +        "description": "Name to resolve. A `ptr` lookup also takes an IP address.",
      +        "type": "string"
      +      },
      +      "expected_contains": {
      +        "description": "Text the answer must contain.",
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      },
      +      "expected_records": {
      +        "description": "Every record the answer must hold and nothing else, written as a\nresult's `answers` shows them (`10 mail.example.com.` for MX, or a\nbare `mail.example.com` to allow any preference). Any record\nadded, removed or changed fails the check. Not combined with\n`expected_contains`.",
      +        "items": {
      +          "type": "string"
      +        },
      +        "type": [
      +          "array",
      +          "null"
      +        ]
      +      },
      +      "record_type": {
      +        "description": "`a` (default), `aaaa`, `cname`, `mx`, `ns`, `txt`, `soa`, `ptr`,\n`caa`, `srv`.",
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      },
      +      "resolver": {
      +        "description": "Resolver to ask. Defaults to the agent's own.",
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      },
      +      "timeout_ms": {
      +        "format": "uint64",
      +        "minimum": 0,
      +        "type": [
      +          "integer",
      +          "null"
      +        ]
      +      },
      +      "type": {
      +        "const": "dns",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "type",
      +      "domain"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "description": "A TLS certificate's remaining validity.",
      +    "properties": {
      +      "critical_days": {
      +        "description": "Days of remaining validity that fail it. Default 7.",
      +        "format": "uint32",
      +        "minimum": 0,
      +        "type": [
      +          "integer",
      +          "null"
      +        ]
      +      },
      +      "host": {
      +        "type": "string"
      +      },
      +      "port": {
      +        "description": "Defaults to 443.",
      +        "format": "uint16",
      +        "maximum": 65535,
      +        "minimum": 0,
      +        "type": [
      +          "integer",
      +          "null"
      +        ]
      +      },
      +      "timeout_ms": {
      +        "format": "uint64",
      +        "minimum": 0,
      +        "type": [
      +          "integer",
      +          "null"
      +        ]
      +      },
      +      "type": {
      +        "const": "tls_cert",
      +        "type": "string"
      +      },
      +      "warn_days": {
      +        "description": "Days of remaining validity that degrade the check. Default 30.",
      +        "format": "uint32",
      +        "minimum": 0,
      +        "type": [
      +          "integer",
      +          "null"
      +        ]
      +      }
      +    },
      +    "required": [
      +      "type",
      +      "host"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "description": "A domain registration's remaining validity.",
      +    "properties": {
      +      "critical_days": {
      +        "description": "Default 7.",
      +        "format": "uint32",
      +        "minimum": 0,
      +        "type": [
      +          "integer",
      +          "null"
      +        ]
      +      },
      +      "domain": {
      +        "type": "string"
      +      },
      +      "timeout_ms": {
      +        "format": "uint64",
      +        "minimum": 0,
      +        "type": [
      +          "integer",
      +          "null"
      +        ]
      +      },
      +      "type": {
      +        "const": "domain_expiry",
      +        "type": "string"
      +      },
      +      "warn_days": {
      +        "description": "Default 30.",
      +        "format": "uint32",
      +        "minimum": 0,
      +        "type": [
      +          "integer",
      +          "null"
      +        ]
      +      }
      +    },
      +    "required": [
      +      "type",
      +      "domain"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "description": "An inbound ping from a job that is expected to report in. Nothing is\nprobed; the monitor fails when the ping does not arrive. The ping URL\nand its token are shown in the app, never here.",
      +    "properties": {
      +      "grace_secs": {
      +        "description": "Lateness tolerated before the monitor fails.",
      +        "format": "uint64",
      +        "minimum": 0,
      +        "type": "integer"
      +      },
      +      "max_runtime_secs": {
      +        "description": "Fail a run that starts and does not finish within this.",
      +        "format": "uint64",
      +        "minimum": 0,
      +        "type": [
      +          "integer",
      +          "null"
      +        ]
      +      },
      +      "period_secs": {
      +        "description": "How often the job is expected to report.",
      +        "format": "uint64",
      +        "minimum": 0,
      +        "type": "integer"
      +      },
      +      "type": {
      +        "const": "heartbeat",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "type",
      +      "period_secs",
      +      "grace_secs"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "description": "A service no probe can judge, such as a SIP trunk or a partner's back\noffice. Nothing is checked: it starts up, and `set_monitor_state` moves\nit, opening and closing incidents like any other monitor.",
      +    "properties": {
      +      "type": {
      +        "const": "manual",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "type"
      +    ],
      +    "type": "object"
      +  }
      +]
  3. Changed1 schema field changed
    • changedInput schema / $defs / NewCheck / oneOf
      Previous value: -[
      -  {
      -    "additionalProperties": false,
      -    "description": "An HTTP(S) endpoint.",
      -    "properties": {
      -      "body": {
      -        "description": "Request body, sent as given. `{{ key }}` references are resolved at\nprobe time, so a body may carry a secret by reference.",
      -        "type": [
      -          "string",
      -          "null"
      -        ]
      -      },
      -      "expected_body_contains": {
      -        "description": "Text the response body must contain for the check to pass.",
      -        "type": [
      -          "string",
      -          "null"
      -        ]
      -      },
      -      "expected_status": {
      -        "description": "A single code like `200`, a range like `200-299`, or a list like\n`200,201,204`. Defaults to `200-299`.",
      -        "type": [
      -          "string",
      -          "null"
      -        ]
      -      },
      -      "follow_redirects": {
      -        "description": "Defaults to true, following at most 5 hops.",
      -        "type": [
      -          "boolean",
      -          "null"
      -        ]
      -      },
      -      "headers": {
      -        "additionalProperties": {
      -          "type": "string"
      -        },
      -        "description": "Request headers. A header that carries a credential\n(`authorization`, `x-api-key`, `api-key`, `cookie`,\n`proxy-authorization`) must reference an org variable rather than\nspell the secret out: `Bearer {{ my_key }}`. Use `list_variables`\nto find the key, and never paste the credential itself — this tool\nrefuses it, and a pasted one would live on in the chat log.",
      -        "type": [
      -          "object",
      -          "null"
      -        ]
      -      },
      -      "method": {
      -        "description": "`get` (default), `head`, `post`, `put`, `patch`, `delete`, `options`.",
      -        "type": [
      -          "string",
      -          "null"
      -        ]
      -      },
      -      "timeout_ms": {
      -        "description": "Defaults to 10000. A redirect counts as a pass only with\n`follow_redirects`.",
      -        "format": "uint64",
      -        "minimum": 0,
      -        "type": [
      -          "integer",
      -          "null"
      -        ]
      -      },
      -      "type": {
      -        "const": "http",
      -        "type": "string"
      -      },
      -      "url": {
      -        "type": "string"
      -      },
      -      "verify_tls": {
      -        "description": "Defaults to true. False accepts an invalid certificate, which a\n`tls_cert` monitor is the better way to watch.",
      -        "type": [
      -          "boolean",
      -          "null"
      -        ]
      -      }
      -    },
      -    "required": [
      -      "type",
      -      "url"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "description": "A TCP port accepting connections.",
      -    "properties": {
      -      "host": {
      -        "type": "string"
      -      },
      -      "port": {
      -        "format": "uint16",
      -        "maximum": 65535,
      -        "minimum": 0,
      -        "type": "integer"
      -      },
      -      "timeout_ms": {
      -        "format": "uint64",
      -        "minimum": 0,
      -        "type": [
      -          "integer",
      -          "null"
      -        ]
      -      },
      -      "type": {
      -        "const": "tcp",
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "type",
      -      "host",
      -      "port"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "description": "ICMP reachability.",
      -    "properties": {
      -      "host": {
      -        "type": "string"
      -      },
      -      "timeout_ms": {
      -        "format": "uint64",
      -        "minimum": 0,
      -        "type": [
      -          "integer",
      -          "null"
      -        ]
      -      },
      -      "type": {
      -        "const": "ping",
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "type",
      -      "host"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "description": "A DNS record resolving, optionally to an expected value.",
      -    "properties": {
      -      "domain": {
      -        "type": "string"
      -      },
      -      "expected_contains": {
      -        "description": "Text the answer must contain.",
      -        "type": [
      -          "string",
      -          "null"
      -        ]
      -      },
      -      "record_type": {
      -        "description": "`a` (default), `aaaa`, `cname`, `mx`, `ns`, `txt`, `soa`, `ptr`,\n`caa`, `srv`.",
      -        "type": [
      -          "string",
      -          "null"
      -        ]
      -      },
      -      "resolver": {
      -        "description": "Resolver to ask. Defaults to the agent's own.",
      -        "type": [
      -          "string",
      -          "null"
      -        ]
      -      },
      -      "timeout_ms": {
      -        "format": "uint64",
      -        "minimum": 0,
      -        "type": [
      -          "integer",
      -          "null"
      -        ]
      -      },
      -      "type": {
      -        "const": "dns",
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "type",
      -      "domain"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "description": "A TLS certificate's remaining validity.",
      -    "properties": {
      -      "critical_days": {
      -        "description": "Days of remaining validity that fail it. Default 7.",
      -        "format": "uint32",
      -        "minimum": 0,
      -        "type": [
      -          "integer",
      -          "null"
      -        ]
      -      },
      -      "host": {
      -        "type": "string"
      -      },
      -      "port": {
      -        "description": "Defaults to 443.",
      -        "format": "uint16",
      -        "maximum": 65535,
      -        "minimum": 0,
      -        "type": [
      -          "integer",
      -          "null"
      -        ]
      -      },
      -      "timeout_ms": {
      -        "format": "uint64",
      -        "minimum": 0,
      -        "type": [
      -          "integer",
      -          "null"
      -        ]
      -      },
      -      "type": {
      -        "const": "tls_cert",
      -        "type": "string"
      -      },
      -      "warn_days": {
      -        "description": "Days of remaining validity that degrade the check. Default 30.",
      -        "format": "uint32",
      -        "minimum": 0,
      -        "type": [
      -          "integer",
      -          "null"
      -        ]
      -      }
      -    },
      -    "required": [
      -      "type",
      -      "host"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "description": "A domain registration's remaining validity.",
      -    "properties": {
      -      "critical_days": {
      -        "description": "Default 7.",
      -        "format": "uint32",
      -        "minimum": 0,
      -        "type": [
      -          "integer",
      -          "null"
      -        ]
      -      },
      -      "domain": {
      -        "type": "string"
      -      },
      -      "timeout_ms": {
      -        "format": "uint64",
      -        "minimum": 0,
      -        "type": [
      -          "integer",
      -          "null"
      -        ]
      -      },
      -      "type": {
      -        "const": "domain_expiry",
      -        "type": "string"
      -      },
      -      "warn_days": {
      -        "description": "Default 30.",
      -        "format": "uint32",
      -        "minimum": 0,
      -        "type": [
      -          "integer",
      -          "null"
      -        ]
      -      }
      -    },
      -    "required": [
      -      "type",
      -      "domain"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "description": "An inbound ping from a job that is expected to report in. Nothing is\nprobed; the monitor fails when the ping does not arrive. The ping URL\nand its token are shown in the app, never here.",
      -    "properties": {
      -      "grace_secs": {
      -        "description": "Lateness tolerated before the monitor fails.",
      -        "format": "uint64",
      -        "minimum": 0,
      -        "type": "integer"
      -      },
      -      "max_runtime_secs": {
      -        "description": "Fail a run that starts and does not finish within this.",
      -        "format": "uint64",
      -        "minimum": 0,
      -        "type": [
      -          "integer",
      -          "null"
      -        ]
      -      },
      -      "period_secs": {
      -        "description": "How often the job is expected to report.",
      -        "format": "uint64",
      -        "minimum": 0,
      -        "type": "integer"
      -      },
      -      "type": {
      -        "const": "heartbeat",
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "type",
      -      "period_secs",
      -      "grace_secs"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "description": "A service no probe can judge, such as a SIP trunk or a partner's back\noffice. Nothing is checked: it starts up, and `set_monitor_state` moves\nit, opening and closing incidents like any other monitor.",
      -    "properties": {
      -      "type": {
      -        "const": "manual",
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "type"
      -    ],
      -    "type": "object"
      -  }
      -]New value: +[
      +  {
      +    "additionalProperties": false,
      +    "description": "An HTTP(S) endpoint.",
      +    "properties": {
      +      "body": {
      +        "description": "Request body, sent as given. `{{ key }}` references are resolved at\nprobe time, so a body may carry a secret by reference.",
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      },
      +      "expected_body_contains": {
      +        "description": "Text the response body must contain for the check to pass.",
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      },
      +      "expected_status": {
      +        "description": "A single code like `200`, a range like `200-299`, or a list like\n`200,201,204`. Defaults to `200-299`.",
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      },
      +      "follow_redirects": {
      +        "description": "Defaults to true, following at most 5 hops.",
      +        "type": [
      +          "boolean",
      +          "null"
      +        ]
      +      },
      +      "headers": {
      +        "additionalProperties": {
      +          "type": "string"
      +        },
      +        "description": "Request headers. A header that carries a credential\n(`authorization`, `x-api-key`, `api-key`, `cookie`,\n`proxy-authorization`) must reference an org variable rather than\nspell the secret out: `Bearer {{ my_key }}`. Use `list_variables`\nto find the key, and never paste the credential itself — this tool\nrefuses it, and a pasted one would live on in the chat log.",
      +        "type": [
      +          "object",
      +          "null"
      +        ]
      +      },
      +      "method": {
      +        "description": "`get` (default), `head`, `post`, `put`, `patch`, `delete`, `options`.",
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      },
      +      "timeout_ms": {
      +        "description": "Defaults to 10000. A redirect counts as a pass only with\n`follow_redirects`.",
      +        "format": "uint64",
      +        "minimum": 0,
      +        "type": [
      +          "integer",
      +          "null"
      +        ]
      +      },
      +      "type": {
      +        "const": "http",
      +        "type": "string"
      +      },
      +      "url": {
      +        "type": "string"
      +      },
      +      "verify_tls": {
      +        "description": "Defaults to true. False accepts an invalid certificate, which a\n`tls_cert` monitor is the better way to watch.",
      +        "type": [
      +          "boolean",
      +          "null"
      +        ]
      +      }
      +    },
      +    "required": [
      +      "type",
      +      "url"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "description": "A TCP port accepting connections.",
      +    "properties": {
      +      "host": {
      +        "type": "string"
      +      },
      +      "port": {
      +        "format": "uint16",
      +        "maximum": 65535,
      +        "minimum": 0,
      +        "type": "integer"
      +      },
      +      "timeout_ms": {
      +        "format": "uint64",
      +        "minimum": 0,
      +        "type": [
      +          "integer",
      +          "null"
      +        ]
      +      },
      +      "type": {
      +        "const": "tcp",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "type",
      +      "host",
      +      "port"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "description": "ICMP reachability.",
      +    "properties": {
      +      "host": {
      +        "type": "string"
      +      },
      +      "timeout_ms": {
      +        "format": "uint64",
      +        "minimum": 0,
      +        "type": [
      +          "integer",
      +          "null"
      +        ]
      +      },
      +      "type": {
      +        "const": "ping",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "type",
      +      "host"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "description": "A DNS record resolving, optionally to an expected value.",
      +    "properties": {
      +      "domain": {
      +        "description": "Name to resolve. A `ptr` lookup also takes an IP address.",
      +        "type": "string"
      +      },
      +      "expected_contains": {
      +        "description": "Text the answer must contain.",
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      },
      +      "expected_records": {
      +        "description": "Every record the answer must hold and nothing else, written as a\nresult's `answers` shows them (`10 mail.example.com.` for MX). Any\nrecord added, removed or changed fails the check. Not combined\nwith `expected_contains`.",
      +        "items": {
      +          "type": "string"
      +        },
      +        "type": [
      +          "array",
      +          "null"
      +        ]
      +      },
      +      "record_type": {
      +        "description": "`a` (default), `aaaa`, `cname`, `mx`, `ns`, `txt`, `soa`, `ptr`,\n`caa`, `srv`.",
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      },
      +      "resolver": {
      +        "description": "Resolver to ask. Defaults to the agent's own.",
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      },
      +      "timeout_ms": {
      +        "format": "uint64",
      +        "minimum": 0,
      +        "type": [
      +          "integer",
      +          "null"
      +        ]
      +      },
      +      "type": {
      +        "const": "dns",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "type",
      +      "domain"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "description": "A TLS certificate's remaining validity.",
      +    "properties": {
      +      "critical_days": {
      +        "description": "Days of remaining validity that fail it. Default 7.",
      +        "format": "uint32",
      +        "minimum": 0,
      +        "type": [
      +          "integer",
      +          "null"
      +        ]
      +      },
      +      "host": {
      +        "type": "string"
      +      },
      +      "port": {
      +        "description": "Defaults to 443.",
      +        "format": "uint16",
      +        "maximum": 65535,
      +        "minimum": 0,
      +        "type": [
      +          "integer",
      +          "null"
      +        ]
      +      },
      +      "timeout_ms": {
      +        "format": "uint64",
      +        "minimum": 0,
      +        "type": [
      +          "integer",
      +          "null"
      +        ]
      +      },
      +      "type": {
      +        "const": "tls_cert",
      +        "type": "string"
      +      },
      +      "warn_days": {
      +        "description": "Days of remaining validity that degrade the check. Default 30.",
      +        "format": "uint32",
      +        "minimum": 0,
      +        "type": [
      +          "integer",
      +          "null"
      +        ]
      +      }
      +    },
      +    "required": [
      +      "type",
      +      "host"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "description": "A domain registration's remaining validity.",
      +    "properties": {
      +      "critical_days": {
      +        "description": "Default 7.",
      +        "format": "uint32",
      +        "minimum": 0,
      +        "type": [
      +          "integer",
      +          "null"
      +        ]
      +      },
      +      "domain": {
      +        "type": "string"
      +      },
      +      "timeout_ms": {
      +        "format": "uint64",
      +        "minimum": 0,
      +        "type": [
      +          "integer",
      +          "null"
      +        ]
      +      },
      +      "type": {
      +        "const": "domain_expiry",
      +        "type": "string"
      +      },
      +      "warn_days": {
      +        "description": "Default 30.",
      +        "format": "uint32",
      +        "minimum": 0,
      +        "type": [
      +          "integer",
      +          "null"
      +        ]
      +      }
      +    },
      +    "required": [
      +      "type",
      +      "domain"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "description": "An inbound ping from a job that is expected to report in. Nothing is\nprobed; the monitor fails when the ping does not arrive. The ping URL\nand its token are shown in the app, never here.",
      +    "properties": {
      +      "grace_secs": {
      +        "description": "Lateness tolerated before the monitor fails.",
      +        "format": "uint64",
      +        "minimum": 0,
      +        "type": "integer"
      +      },
      +      "max_runtime_secs": {
      +        "description": "Fail a run that starts and does not finish within this.",
      +        "format": "uint64",
      +        "minimum": 0,
      +        "type": [
      +          "integer",
      +          "null"
      +        ]
      +      },
      +      "period_secs": {
      +        "description": "How often the job is expected to report.",
      +        "format": "uint64",
      +        "minimum": 0,
      +        "type": "integer"
      +      },
      +      "type": {
      +        "const": "heartbeat",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "type",
      +      "period_secs",
      +      "grace_secs"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "description": "A service no probe can judge, such as a SIP trunk or a partner's back\noffice. Nothing is checked: it starts up, and `set_monitor_state` moves\nit, opening and closing incidents like any other monitor.",
      +    "properties": {
      +      "type": {
      +        "const": "manual",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "type"
      +    ],
      +    "type": "object"
      +  }
      +]
  4. Changed1 schema field changed
    • addedInput schema / $defs / CreateMonitorArgs / properties / recovery_period_secs
      Added value: +{
      +  "description": "Seconds a recovered monitor must stay healthy before its incident\ncloses; a failure confirmed inside the window keeps the incident open,\nso a flapping service reads as one outage. 0 to 1800; 0 closes on the\nconfirming checks alone. Defaults to 180 on an HTTP, TCP, ping, DNS or\nflow monitor and 0 on the rest. Not for a manual monitor.",
      +  "format": "uint32",
      +  "minimum": 0,
      +  "type": [
      +    "integer",
      +    "null"
      +  ]
      +}
  5. Changed1 schema field changed
    • changedInput schema / $defs / NewCheck / oneOf
      Previous value: -[
      -  {
      -    "additionalProperties": false,
      -    "description": "An HTTP(S) endpoint.",
      -    "properties": {
      -      "body": {
      -        "description": "Request body, sent as given. `{{ key }}` references are resolved at\nprobe time, so a body may carry a secret by reference.",
      -        "type": [
      -          "string",
      -          "null"
      -        ]
      -      },
      -      "expected_body_contains": {
      -        "description": "Text the response body must contain for the check to pass.",
      -        "type": [
      -          "string",
      -          "null"
      -        ]
      -      },
      -      "expected_status": {
      -        "description": "A single code like `200`, a range like `200-299`, or a list like\n`200,201,204`. Defaults to `200-299`.",
      -        "type": [
      -          "string",
      -          "null"
      -        ]
      -      },
      -      "follow_redirects": {
      -        "description": "Defaults to true, following at most 5 hops.",
      -        "type": [
      -          "boolean",
      -          "null"
      -        ]
      -      },
      -      "headers": {
      -        "additionalProperties": {
      -          "type": "string"
      -        },
      -        "description": "Request headers. A header that carries a credential\n(`authorization`, `x-api-key`, `api-key`, `cookie`,\n`proxy-authorization`) must reference an org variable rather than\nspell the secret out: `Bearer {{ my_key }}`. Use `list_variables`\nto find the key, and never paste the credential itself — this tool\nrefuses it, and a pasted one would live on in the chat log.",
      -        "type": [
      -          "object",
      -          "null"
      -        ]
      -      },
      -      "method": {
      -        "description": "`get` (default), `head`, `post`, `put`, `patch`, `delete`, `options`.",
      -        "type": [
      -          "string",
      -          "null"
      -        ]
      -      },
      -      "timeout_ms": {
      -        "description": "Defaults to 10000. A redirect counts as a pass only with\n`follow_redirects`.",
      -        "format": "uint64",
      -        "minimum": 0,
      -        "type": [
      -          "integer",
      -          "null"
      -        ]
      -      },
      -      "type": {
      -        "const": "http",
      -        "type": "string"
      -      },
      -      "url": {
      -        "type": "string"
      -      },
      -      "verify_tls": {
      -        "description": "Defaults to true. False accepts an invalid certificate, which a\n`tls_cert` monitor is the better way to watch.",
      -        "type": [
      -          "boolean",
      -          "null"
      -        ]
      -      }
      -    },
      -    "required": [
      -      "type",
      -      "url"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "description": "A TCP port accepting connections.",
      -    "properties": {
      -      "host": {
      -        "type": "string"
      -      },
      -      "port": {
      -        "format": "uint16",
      -        "maximum": 65535,
      -        "minimum": 0,
      -        "type": "integer"
      -      },
      -      "timeout_ms": {
      -        "format": "uint64",
      -        "minimum": 0,
      -        "type": [
      -          "integer",
      -          "null"
      -        ]
      -      },
      -      "type": {
      -        "const": "tcp",
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "type",
      -      "host",
      -      "port"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "description": "ICMP reachability.",
      -    "properties": {
      -      "host": {
      -        "type": "string"
      -      },
      -      "timeout_ms": {
      -        "format": "uint64",
      -        "minimum": 0,
      -        "type": [
      -          "integer",
      -          "null"
      -        ]
      -      },
      -      "type": {
      -        "const": "ping",
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "type",
      -      "host"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "description": "A DNS record resolving, optionally to an expected value.",
      -    "properties": {
      -      "domain": {
      -        "type": "string"
      -      },
      -      "expected_contains": {
      -        "description": "Text the answer must contain.",
      -        "type": [
      -          "string",
      -          "null"
      -        ]
      -      },
      -      "record_type": {
      -        "description": "`a` (default), `aaaa`, `cname`, `mx`, `ns`, `txt`, `soa`, `ptr`,\n`caa`, `srv`.",
      -        "type": [
      -          "string",
      -          "null"
      -        ]
      -      },
      -      "resolver": {
      -        "description": "Resolver to ask. Defaults to the agent's own.",
      -        "type": [
      -          "string",
      -          "null"
      -        ]
      -      },
      -      "timeout_ms": {
      -        "format": "uint64",
      -        "minimum": 0,
      -        "type": [
      -          "integer",
      -          "null"
      -        ]
      -      },
      -      "type": {
      -        "const": "dns",
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "type",
      -      "domain"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "description": "A TLS certificate's remaining validity.",
      -    "properties": {
      -      "critical_days": {
      -        "description": "Days of remaining validity that fail it. Default 7.",
      -        "format": "uint32",
      -        "minimum": 0,
      -        "type": [
      -          "integer",
      -          "null"
      -        ]
      -      },
      -      "host": {
      -        "type": "string"
      -      },
      -      "port": {
      -        "description": "Defaults to 443.",
      -        "format": "uint16",
      -        "maximum": 65535,
      -        "minimum": 0,
      -        "type": [
      -          "integer",
      -          "null"
      -        ]
      -      },
      -      "timeout_ms": {
      -        "format": "uint64",
      -        "minimum": 0,
      -        "type": [
      -          "integer",
      -          "null"
      -        ]
      -      },
      -      "type": {
      -        "const": "tls_cert",
      -        "type": "string"
      -      },
      -      "warn_days": {
      -        "description": "Days of remaining validity that degrade the check. Default 30.",
      -        "format": "uint32",
      -        "minimum": 0,
      -        "type": [
      -          "integer",
      -          "null"
      -        ]
      -      }
      -    },
      -    "required": [
      -      "type",
      -      "host"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "description": "A domain registration's remaining validity.",
      -    "properties": {
      -      "critical_days": {
      -        "description": "Default 7.",
      -        "format": "uint32",
      -        "minimum": 0,
      -        "type": [
      -          "integer",
      -          "null"
      -        ]
      -      },
      -      "domain": {
      -        "type": "string"
      -      },
      -      "timeout_ms": {
      -        "format": "uint64",
      -        "minimum": 0,
      -        "type": [
      -          "integer",
      -          "null"
      -        ]
      -      },
      -      "type": {
      -        "const": "domain_expiry",
      -        "type": "string"
      -      },
      -      "warn_days": {
      -        "description": "Default 30.",
      -        "format": "uint32",
      -        "minimum": 0,
      -        "type": [
      -          "integer",
      -          "null"
      -        ]
      -      }
      -    },
      -    "required": [
      -      "type",
      -      "domain"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "description": "An inbound ping from a job that is expected to report in. Nothing is\nprobed; the monitor fails when the ping does not arrive. The ping URL\nand its token are shown in the app, never here.",
      -    "properties": {
      -      "grace_secs": {
      -        "description": "Lateness tolerated before the monitor fails.",
      -        "format": "uint64",
      -        "minimum": 0,
      -        "type": "integer"
      -      },
      -      "max_runtime_secs": {
      -        "description": "Fail a run that starts and does not finish within this.",
      -        "format": "uint64",
      -        "minimum": 0,
      -        "type": [
      -          "integer",
      -          "null"
      -        ]
      -      },
      -      "period_secs": {
      -        "description": "How often the job is expected to report.",
      -        "format": "uint64",
      -        "minimum": 0,
      -        "type": "integer"
      -      },
      -      "type": {
      -        "const": "heartbeat",
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "type",
      -      "period_secs",
      -      "grace_secs"
      -    ],
      -    "type": "object"
      -  }
      -]New value: +[
      +  {
      +    "additionalProperties": false,
      +    "description": "An HTTP(S) endpoint.",
      +    "properties": {
      +      "body": {
      +        "description": "Request body, sent as given. `{{ key }}` references are resolved at\nprobe time, so a body may carry a secret by reference.",
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      },
      +      "expected_body_contains": {
      +        "description": "Text the response body must contain for the check to pass.",
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      },
      +      "expected_status": {
      +        "description": "A single code like `200`, a range like `200-299`, or a list like\n`200,201,204`. Defaults to `200-299`.",
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      },
      +      "follow_redirects": {
      +        "description": "Defaults to true, following at most 5 hops.",
      +        "type": [
      +          "boolean",
      +          "null"
      +        ]
      +      },
      +      "headers": {
      +        "additionalProperties": {
      +          "type": "string"
      +        },
      +        "description": "Request headers. A header that carries a credential\n(`authorization`, `x-api-key`, `api-key`, `cookie`,\n`proxy-authorization`) must reference an org variable rather than\nspell the secret out: `Bearer {{ my_key }}`. Use `list_variables`\nto find the key, and never paste the credential itself — this tool\nrefuses it, and a pasted one would live on in the chat log.",
      +        "type": [
      +          "object",
      +          "null"
      +        ]
      +      },
      +      "method": {
      +        "description": "`get` (default), `head`, `post`, `put`, `patch`, `delete`, `options`.",
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      },
      +      "timeout_ms": {
      +        "description": "Defaults to 10000. A redirect counts as a pass only with\n`follow_redirects`.",
      +        "format": "uint64",
      +        "minimum": 0,
      +        "type": [
      +          "integer",
      +          "null"
      +        ]
      +      },
      +      "type": {
      +        "const": "http",
      +        "type": "string"
      +      },
      +      "url": {
      +        "type": "string"
      +      },
      +      "verify_tls": {
      +        "description": "Defaults to true. False accepts an invalid certificate, which a\n`tls_cert` monitor is the better way to watch.",
      +        "type": [
      +          "boolean",
      +          "null"
      +        ]
      +      }
      +    },
      +    "required": [
      +      "type",
      +      "url"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "description": "A TCP port accepting connections.",
      +    "properties": {
      +      "host": {
      +        "type": "string"
      +      },
      +      "port": {
      +        "format": "uint16",
      +        "maximum": 65535,
      +        "minimum": 0,
      +        "type": "integer"
      +      },
      +      "timeout_ms": {
      +        "format": "uint64",
      +        "minimum": 0,
      +        "type": [
      +          "integer",
      +          "null"
      +        ]
      +      },
      +      "type": {
      +        "const": "tcp",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "type",
      +      "host",
      +      "port"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "description": "ICMP reachability.",
      +    "properties": {
      +      "host": {
      +        "type": "string"
      +      },
      +      "timeout_ms": {
      +        "format": "uint64",
      +        "minimum": 0,
      +        "type": [
      +          "integer",
      +          "null"
      +        ]
      +      },
      +      "type": {
      +        "const": "ping",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "type",
      +      "host"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "description": "A DNS record resolving, optionally to an expected value.",
      +    "properties": {
      +      "domain": {
      +        "type": "string"
      +      },
      +      "expected_contains": {
      +        "description": "Text the answer must contain.",
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      },
      +      "record_type": {
      +        "description": "`a` (default), `aaaa`, `cname`, `mx`, `ns`, `txt`, `soa`, `ptr`,\n`caa`, `srv`.",
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      },
      +      "resolver": {
      +        "description": "Resolver to ask. Defaults to the agent's own.",
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      },
      +      "timeout_ms": {
      +        "format": "uint64",
      +        "minimum": 0,
      +        "type": [
      +          "integer",
      +          "null"
      +        ]
      +      },
      +      "type": {
      +        "const": "dns",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "type",
      +      "domain"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "description": "A TLS certificate's remaining validity.",
      +    "properties": {
      +      "critical_days": {
      +        "description": "Days of remaining validity that fail it. Default 7.",
      +        "format": "uint32",
      +        "minimum": 0,
      +        "type": [
      +          "integer",
      +          "null"
      +        ]
      +      },
      +      "host": {
      +        "type": "string"
      +      },
      +      "port": {
      +        "description": "Defaults to 443.",
      +        "format": "uint16",
      +        "maximum": 65535,
      +        "minimum": 0,
      +        "type": [
      +          "integer",
      +          "null"
      +        ]
      +      },
      +      "timeout_ms": {
      +        "format": "uint64",
      +        "minimum": 0,
      +        "type": [
      +          "integer",
      +          "null"
      +        ]
      +      },
      +      "type": {
      +        "const": "tls_cert",
      +        "type": "string"
      +      },
      +      "warn_days": {
      +        "description": "Days of remaining validity that degrade the check. Default 30.",
      +        "format": "uint32",
      +        "minimum": 0,
      +        "type": [
      +          "integer",
      +          "null"
      +        ]
      +      }
      +    },
      +    "required": [
      +      "type",
      +      "host"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "description": "A domain registration's remaining validity.",
      +    "properties": {
      +      "critical_days": {
      +        "description": "Default 7.",
      +        "format": "uint32",
      +        "minimum": 0,
      +        "type": [
      +          "integer",
      +          "null"
      +        ]
      +      },
      +      "domain": {
      +        "type": "string"
      +      },
      +      "timeout_ms": {
      +        "format": "uint64",
      +        "minimum": 0,
      +        "type": [
      +          "integer",
      +          "null"
      +        ]
      +      },
      +      "type": {
      +        "const": "domain_expiry",
      +        "type": "string"
      +      },
      +      "warn_days": {
      +        "description": "Default 30.",
      +        "format": "uint32",
      +        "minimum": 0,
      +        "type": [
      +          "integer",
      +          "null"
      +        ]
      +      }
      +    },
      +    "required": [
      +      "type",
      +      "domain"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "description": "An inbound ping from a job that is expected to report in. Nothing is\nprobed; the monitor fails when the ping does not arrive. The ping URL\nand its token are shown in the app, never here.",
      +    "properties": {
      +      "grace_secs": {
      +        "description": "Lateness tolerated before the monitor fails.",
      +        "format": "uint64",
      +        "minimum": 0,
      +        "type": "integer"
      +      },
      +      "max_runtime_secs": {
      +        "description": "Fail a run that starts and does not finish within this.",
      +        "format": "uint64",
      +        "minimum": 0,
      +        "type": [
      +          "integer",
      +          "null"
      +        ]
      +      },
      +      "period_secs": {
      +        "description": "How often the job is expected to report.",
      +        "format": "uint64",
      +        "minimum": 0,
      +        "type": "integer"
      +      },
      +      "type": {
      +        "const": "heartbeat",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "type",
      +      "period_secs",
      +      "grace_secs"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "description": "A service no probe can judge, such as a SIP trunk or a partner's back\noffice. Nothing is checked: it starts up, and `set_monitor_state` moves\nit, opening and closing incidents like any other monitor.",
      +    "properties": {
      +      "type": {
      +        "const": "manual",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "type"
      +    ],
      +    "type": "object"
      +  }
      +]
  6. Added

TDQS

A4.8/5.0
Behavior5/5

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

Annotations only declare readOnlyHint=false, idempotentHint=false, destructiveHint=false. The description adds behavior an agent cannot get from those: the batch is pre-flight probed before saving, all results are surfaced together, and partial failure is non-fatal (a failing item is reported while 'the rest are still created'). That partial-success contract is the single most important thing to know before calling a batch-creation tool.

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?

The purpose and the when-to-use rule are front-loaded in the first and fourth sentences, which is the right ordering. Six sentences is slightly more than needed, and the trailing 'Not read-only' merely restates readOnlyHint=false rather than earning its place.

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 need not be described. Combined with the schema, the description covers what an agent needs: batch semantics, the pre-save probe, the confirmation prompt, and the partial-failure outcome. Nothing material is left unstated.

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% and the nested $defs already document every per-monitor field in depth, so the baseline is 3. The description adds a useful pointer beyond the schema: 'Same per-monitor fields and same limits as create_monitor' tells the agent to mirror a sibling tool's accepted fields and limits rather than infer them.

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 opening sentence states a specific verb and resource with scope: 'Create several monitors at once.' It goes further and names the sibling it replaces, explicitly contrasting with 'repeated create_monitor calls', so an agent can distinguish it without opening either 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 an explicit selection rule: 'Prefer this over repeated create_monitor calls whenever the user names more than one thing to watch.' The alternative (create_monitor) is named and the condition that selects it is stated, leaving nothing to inference.

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.